summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/max77665.c30
-rw-r--r--include/linux/mfd/max77665.h17
2 files changed, 42 insertions, 5 deletions
diff --git a/drivers/mfd/max77665.c b/drivers/mfd/max77665.c
index 3c5755c82c1e..d6d0bfd1fb38 100644
--- a/drivers/mfd/max77665.c
+++ b/drivers/mfd/max77665.c
@@ -57,10 +57,10 @@ static const struct max77665_irq_data max77665_irqs[] = {
};
static struct mfd_cell max77665s[] = {
- {.name = "max77665-charger",},
- {.name = "max77665-flash",},
- {.name = "max77665-muic",},
- {.name = "max77665-haptic",},
+ [MAX77665_CELL_CHARGER] = {.name = "max77665-charger",},
+ [MAX77665_CELL_FLASH] = {.name = "max77665-flash",},
+ [MAX77665_CELL_MUIC] = {.name = "max77665-muic",},
+ [MAX77665_CELL_HAPTIC] = {.name = "max77665-haptic",},
};
static void max77665_irq_lock(struct irq_data *data)
@@ -271,7 +271,6 @@ static int max77665_i2c_probe(struct i2c_client *client,
max77665->dev = &client->dev;
for (i = 0; i < MAX77665_I2C_SLAVE_MAX; ++i) {
- slv_client = max77665->client[i];
if (i == 0)
slv_client = client;
else
@@ -282,6 +281,7 @@ static int max77665_i2c_probe(struct i2c_client *client,
ret = -ENOMEM;
goto err_exit;
}
+ max77665->client[i] = slv_client;
i2c_set_clientdata(slv_client, max77665);
max77665->regmap[i] = devm_regmap_init_i2c(slv_client,
@@ -297,6 +297,26 @@ static int max77665_i2c_probe(struct i2c_client *client,
if (client->irq > 0)
max77665_irq_init(max77665, client->irq, pdata->irq_base);
+ max77665s[MAX77665_CELL_CHARGER].platform_data =
+ pdata->charger_platform_data.pdata;
+ max77665s[MAX77665_CELL_CHARGER].pdata_size =
+ pdata->charger_platform_data.size;
+
+ max77665s[MAX77665_CELL_FLASH].platform_data =
+ pdata->flash_platform_data.pdata;
+ max77665s[MAX77665_CELL_FLASH].pdata_size =
+ pdata->flash_platform_data.size;
+
+ max77665s[MAX77665_CELL_MUIC].platform_data =
+ pdata->muic_platform_data.pdata;
+ max77665s[MAX77665_CELL_MUIC].pdata_size =
+ pdata->muic_platform_data.size;
+
+ max77665s[MAX77665_CELL_HAPTIC].platform_data =
+ pdata->haptic_platform_data.pdata;
+ max77665s[MAX77665_CELL_HAPTIC].pdata_size =
+ pdata->haptic_platform_data.size;
+
ret = mfd_add_devices(max77665->dev, -1, max77665s,
ARRAY_SIZE(max77665s), NULL, 0, NULL);
if (ret) {
diff --git a/include/linux/mfd/max77665.h b/include/linux/mfd/max77665.h
index 380a1a4aac0d..c592d25ef5f0 100644
--- a/include/linux/mfd/max77665.h
+++ b/include/linux/mfd/max77665.h
@@ -37,6 +37,14 @@ enum {
MAX77665_I2C_SLAVE_MAX,
};
+enum {
+ MAX77665_CELL_CHARGER,
+ MAX77665_CELL_FLASH,
+ MAX77665_CELL_MUIC,
+ MAX77665_CELL_HAPTIC,
+ MAX77665_CELL_MAX,
+};
+
struct max77665 {
struct device *dev;
struct i2c_client *client[MAX77665_I2C_SLAVE_MAX];
@@ -46,8 +54,17 @@ struct max77665 {
int irq_base;
};
+struct max77665_cell_data {
+ void *pdata;
+ size_t size;
+};
+
struct max77665_platform_data {
int irq_base;
+ struct max77665_cell_data charger_platform_data;
+ struct max77665_cell_data flash_platform_data;
+ struct max77665_cell_data muic_platform_data;
+ struct max77665_cell_data haptic_platform_data;
};
static inline int max77665_write(struct device *dev, int slv_id,