#include <linux/err.h>
#include <linux/slab.h>
#include <linux/i2c.h>
-#include <linux/gpio.h>
#include <linux/mfd/core.h>
#include <linux/regmap.h>
#include <linux/mfd/tps65910.h>
#include <linux/of_device.h>
static struct mfd_cell tps65910s[] = {
+ {
+ .name = "tps65910-gpio",
+ },
{
.name = "tps65910-pmic",
},
struct tps65910_board *board_info;
unsigned int prop;
const struct of_device_id *match;
- unsigned int prop_array[TPS6591X_MAX_NUM_GPIO];
int ret = 0;
- int idx;
match = of_match_device(tps65910_of_match, &client->dev);
if (!match) {
else if (*chip_id == TPS65911)
dev_warn(&client->dev, "VMBCH2-Threshold not specified");
- ret = of_property_read_u32_array(np, "ti,en-gpio-sleep",
- prop_array, TPS6591X_MAX_NUM_GPIO);
- if (!ret)
- for (idx = 0; idx < ARRAY_SIZE(prop_array); idx++)
- board_info->en_gpio_sleep[idx] = (prop_array[idx] != 0);
- else if (ret != -EINVAL) {
- dev_err(&client->dev,
- "error reading property ti,en-gpio-sleep: %d\n.", ret);
- return NULL;
- }
-
-
board_info->irq = client->irq;
board_info->irq_base = -1;
- board_info->gpio_base = -1;
return board_info;
}
#else
-static inline struct tps65910_board *tps65910_parse_dt(
- struct i2c_client *client)
+static inline
+struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
+ int *chip_id)
{
return NULL;
}
{
struct tps65910 *tps65910;
struct tps65910_board *pmic_plat_data;
+ struct tps65910_board *of_pmic_plat_data = NULL;
struct tps65910_platform_data *init_data;
int ret = 0;
int chip_id = id->driver_data;
pmic_plat_data = dev_get_platdata(&i2c->dev);
- if (!pmic_plat_data && i2c->dev.of_node)
+ if (!pmic_plat_data && i2c->dev.of_node) {
pmic_plat_data = tps65910_parse_dt(i2c, &chip_id);
+ of_pmic_plat_data = pmic_plat_data;
+ }
if (!pmic_plat_data)
return -EINVAL;
if (tps65910 == NULL)
return -ENOMEM;
+ tps65910->of_plat_data = of_pmic_plat_data;
i2c_set_clientdata(i2c, tps65910);
tps65910->dev = &i2c->dev;
tps65910->i2c_client = i2c;
init_data->irq = pmic_plat_data->irq;
init_data->irq_base = pmic_plat_data->irq_base;
- tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base);
-
tps65910_irq_init(tps65910, init_data->irq, init_data);
tps65910_sleepinit(tps65910, pmic_plat_data);