@@ -15,8 +15,6 @@
#include <linux/platform_device.h>
#include <linux/slab.h>
-#define CPLD_MUX_MAX_NCHANS 8
-
/* mlxcpld_mux - mux control structure:
* @last_chan - last register value
* @client - I2C device client
@@ -24,7 +22,7 @@
* @sel_reg_addr: mux select/deselect register address
*/
struct mlxcpld_mux {
- u8 last_chan;
+ int last_chan;
struct i2c_client *client;
struct mlxcpld_mux_plat_data pdata;
__be16 sel_reg_addr;
@@ -122,10 +120,9 @@ static int mlxcpld_mux_probe(struct platform_device *pdev)
struct mlxcpld_mux_plat_data *pdata = dev_get_platdata(&pdev->dev);
struct i2c_client *client = to_i2c_client(pdev->dev.parent);
struct i2c_mux_core *muxc;
- int num, force;
struct mlxcpld_mux *data;
+ int num, err;
u32 func;
- int err;
if (!pdata)
return -EINVAL;
@@ -144,7 +141,7 @@ static int mlxcpld_mux_probe(struct platform_device *pdev)
if (!i2c_check_functionality(client->adapter, func))
return -ENODEV;
- muxc = i2c_mux_alloc(client->adapter, &pdev->dev, CPLD_MUX_MAX_NCHANS,
+ muxc = i2c_mux_alloc(client->adapter, &pdev->dev, pdata->num_adaps,
sizeof(*data), 0, mlxcpld_mux_select_chan,
mlxcpld_mux_deselect);
if (!muxc)
@@ -159,14 +156,8 @@ static int mlxcpld_mux_probe(struct platform_device *pdev)
data->last_chan = 0; /* force the first selection */
/* Create an adapter for each channel. */
- for (num = 0; num < CPLD_MUX_MAX_NCHANS; num++) {
- if (num >= pdata->num_adaps)
- /* discard unconfigured channels */
- break;
-
- force = pdata->adap_ids[num];
-
- err = i2c_mux_add_adapter(muxc, force, num, 0);
+ for (num = 0; num < pdata->num_adaps; num++) {
+ err = i2c_mux_add_adapter(muxc, 0, pdata->chan_ids[num], 0);
if (err)
goto virt_reg_failed;
}
@@ -11,13 +11,13 @@
/* Platform data for the CPLD I2C multiplexers */
/* mlxcpld_mux_plat_data - per mux data, used with i2c_register_board_info
- * @adap_ids - adapter array
+ * @chan_ids - channels array
* @num_adaps - number of adapters
* @sel_reg_addr - mux select register offset in CPLD space
* @reg_size: register size in bytes
*/
struct mlxcpld_mux_plat_data {
- int *adap_ids;
+ int *chan_ids;
int num_adaps;
int sel_reg_addr;
u8 reg_size;