|
@@ -557,40 +557,41 @@ int cx231xx_i2c_unregister(struct cx231xx_i2c *bus)
|
|
|
* cx231xx_i2c_mux_select()
|
|
|
* switch i2c master number 1 between port1 and port3
|
|
|
*/
|
|
|
-static int cx231xx_i2c_mux_select(struct i2c_adapter *adap,
|
|
|
- void *mux_priv, u32 chan_id)
|
|
|
+static int cx231xx_i2c_mux_select(struct i2c_mux_core *muxc, u32 chan_id)
|
|
|
{
|
|
|
- struct cx231xx *dev = mux_priv;
|
|
|
+ struct cx231xx *dev = i2c_mux_priv(muxc);
|
|
|
|
|
|
return cx231xx_enable_i2c_port_3(dev, chan_id);
|
|
|
}
|
|
|
|
|
|
+int cx231xx_i2c_mux_create(struct cx231xx *dev)
|
|
|
+{
|
|
|
+ dev->muxc = i2c_mux_alloc(&dev->i2c_bus[1].i2c_adap, dev->dev, 2, 0, 0,
|
|
|
+ cx231xx_i2c_mux_select, NULL);
|
|
|
+ if (!dev->muxc)
|
|
|
+ return -ENOMEM;
|
|
|
+ dev->muxc->priv = dev;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int cx231xx_i2c_mux_register(struct cx231xx *dev, int mux_no)
|
|
|
{
|
|
|
- struct i2c_adapter *i2c_parent = &dev->i2c_bus[1].i2c_adap;
|
|
|
- /* what is the correct mux_dev? */
|
|
|
- struct device *mux_dev = dev->dev;
|
|
|
-
|
|
|
- dev->i2c_mux_adap[mux_no] = i2c_add_mux_adapter(i2c_parent,
|
|
|
- mux_dev,
|
|
|
- dev /* mux_priv */,
|
|
|
- 0,
|
|
|
- mux_no /* chan_id */,
|
|
|
- 0 /* class */,
|
|
|
- &cx231xx_i2c_mux_select,
|
|
|
- NULL);
|
|
|
-
|
|
|
- if (!dev->i2c_mux_adap[mux_no])
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ rc = i2c_mux_add_adapter(dev->muxc,
|
|
|
+ 0,
|
|
|
+ mux_no /* chan_id */,
|
|
|
+ 0 /* class */);
|
|
|
+ if (rc)
|
|
|
dev_warn(dev->dev,
|
|
|
"i2c mux %d register FAILED\n", mux_no);
|
|
|
|
|
|
- return 0;
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
-void cx231xx_i2c_mux_unregister(struct cx231xx *dev, int mux_no)
|
|
|
+void cx231xx_i2c_mux_unregister(struct cx231xx *dev)
|
|
|
{
|
|
|
- i2c_del_mux_adapter(dev->i2c_mux_adap[mux_no]);
|
|
|
- dev->i2c_mux_adap[mux_no] = NULL;
|
|
|
+ i2c_mux_del_adapters(dev->muxc);
|
|
|
}
|
|
|
|
|
|
struct i2c_adapter *cx231xx_get_i2c_adap(struct cx231xx *dev, int i2c_port)
|
|
@@ -603,9 +604,9 @@ struct i2c_adapter *cx231xx_get_i2c_adap(struct cx231xx *dev, int i2c_port)
|
|
|
case I2C_2:
|
|
|
return &dev->i2c_bus[2].i2c_adap;
|
|
|
case I2C_1_MUX_1:
|
|
|
- return dev->i2c_mux_adap[0];
|
|
|
+ return dev->muxc->adapter[0];
|
|
|
case I2C_1_MUX_3:
|
|
|
- return dev->i2c_mux_adap[1];
|
|
|
+ return dev->muxc->adapter[1];
|
|
|
default:
|
|
|
return NULL;
|
|
|
}
|