summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-tegra/board-enterprise-power.c8
-rw-r--r--drivers/mfd/tps80031.c3
-rw-r--r--drivers/power/tps80031_battery_gauge.c15
-rw-r--r--include/linux/mfd/tps80031.h10
4 files changed, 24 insertions, 12 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-power.c b/arch/arm/mach-tegra/board-enterprise-power.c
index 4bf7f03e8d6d..b908edbbca30 100644
--- a/arch/arm/mach-tegra/board-enterprise-power.c
+++ b/arch/arm/mach-tegra/board-enterprise-power.c
@@ -338,11 +338,6 @@ static struct tps80031_bg_platform_data battery_gauge_data = {
.name = "tps80031-charger", \
.platform_data = &bcharger_pdata, \
}
-#define TPS_BATTERY_GAUGE() \
- { \
- .name = "tps80031-battery-gauge", \
- .platform_data = &battery_gauge_data, \
- }
#define TPS_GPADC() \
{ \
.name = "tps80031-gpadc", \
@@ -350,13 +345,11 @@ static struct tps80031_bg_platform_data battery_gauge_data = {
#define TPS80031_DEVS_COMMON \
TPS_BATTERY(), \
- TPS_BATTERY_GAUGE(), \
TPS_GPADC()
static struct tps80031_subdev_info tps80031_devs[] = {
TPS_BATTERY(),
- TPS_BATTERY_GAUGE(),
TPS_GPADC()
};
@@ -443,6 +436,7 @@ static struct tps80031_platform_data tps_platform = {
.clk32k_init_data_size = ARRAY_SIZE(clk32k_idata),
.use_power_off = true,
.rtc_pdata = &rtc_data,
+ .bg_pdata = &battery_gauge_data,
};
static struct i2c_board_info __initdata enterprise_regulators[] = {
diff --git a/drivers/mfd/tps80031.c b/drivers/mfd/tps80031.c
index a1b6237bfd02..f9f3f092d837 100644
--- a/drivers/mfd/tps80031.c
+++ b/drivers/mfd/tps80031.c
@@ -305,6 +305,9 @@ static struct mfd_cell tps80031_cell[] = {
{
.name = "tps80031-rtc",
},
+ {
+ .name = "tps80031-battery-gauge",
+ },
};
diff --git a/drivers/power/tps80031_battery_gauge.c b/drivers/power/tps80031_battery_gauge.c
index 9ccfaad41441..69bad9caa99d 100644
--- a/drivers/power/tps80031_battery_gauge.c
+++ b/drivers/power/tps80031_battery_gauge.c
@@ -453,7 +453,20 @@ static int tps80031_battery_probe(struct platform_device *pdev)
uint8_t retval;
struct device *dev = &pdev->dev;
struct tps80031_device_info *di;
- struct tps80031_bg_platform_data *pdata = pdev->dev.platform_data;
+ struct tps80031_platform_data *tps80031_pdata;
+ struct tps80031_bg_platform_data *pdata;
+
+ tps80031_pdata = dev_get_platdata(pdev->dev.parent);
+ if (!tps80031_pdata) {
+ dev_err(&pdev->dev, "no tps80031 platform_data specified\n");
+ return -EINVAL;
+ }
+
+ pdata = tps80031_pdata->bg_pdata;
+ if (!pdata) {
+ dev_err(&pdev->dev, "no battery_gauge platform data\n");
+ return -EINVAL;
+ }
di = devm_kzalloc(&pdev->dev, sizeof *di, GFP_KERNEL);
if (!di) {
diff --git a/include/linux/mfd/tps80031.h b/include/linux/mfd/tps80031.h
index d0cef7395172..d3371a750b64 100644
--- a/include/linux/mfd/tps80031.h
+++ b/include/linux/mfd/tps80031.h
@@ -184,6 +184,11 @@ struct tps80031_pupd_init_data {
int setting;
};
+struct tps80031_bg_platform_data {
+ int irq_base;
+ int battery_present;
+};
+
struct tps80031_platform_data {
int num_subdevs;
struct tps80031_subdev_info *subdevs;
@@ -200,12 +205,9 @@ struct tps80031_platform_data {
struct tps80031_regulator_platform_data **regulator_pdata;
int num_regulator_pdata;
struct tps80031_rtc_platform_data *rtc_pdata;
+ struct tps80031_bg_platform_data *bg_pdata;
};
-struct tps80031_bg_platform_data {
- int irq_base;
- int battery_present;
-};
/*
* NOTE: the functions below are not intended for use outside