Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8bdc1d0 authored by Marek Vasut's avatar Marek Vasut Committed by Anton Vorontsov
Browse files

wm97xx_battery: Use platform_data



This patch converts the wm97xx-battery driver to use platform_data
supplied by ac97 bus.

Signed-off-by: default avatarMarek Vasut <marek.vasut@gmail.com>
Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
parent 32bb0e0c
Loading
Loading
Loading
Loading
+27 −5
Original line number Original line Diff line number Diff line
@@ -22,17 +22,19 @@
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <linux/gpio.h>
#include <linux/wm97xx_batt.h>


static DEFINE_MUTEX(bat_lock);
static DEFINE_MUTEX(bat_lock);
static struct work_struct bat_work;
static struct work_struct bat_work;
struct mutex work_lock;
struct mutex work_lock;
static int bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
static int bat_status = POWER_SUPPLY_STATUS_UNKNOWN;
static struct wm97xx_batt_info *pdata;
static struct wm97xx_batt_info *gpdata;
static enum power_supply_property *prop;
static enum power_supply_property *prop;


static unsigned long wm97xx_read_bat(struct power_supply *bat_ps)
static unsigned long wm97xx_read_bat(struct power_supply *bat_ps)
{
{
	struct wm97xx_pdata *wmdata = bat_ps->dev->parent->platform_data;
	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata;

	return wm97xx_read_aux_adc(bat_ps->dev->parent->driver_data,
	return wm97xx_read_aux_adc(bat_ps->dev->parent->driver_data,
					pdata->batt_aux) * pdata->batt_mult /
					pdata->batt_aux) * pdata->batt_mult /
					pdata->batt_div;
					pdata->batt_div;
@@ -40,6 +42,9 @@ static unsigned long wm97xx_read_bat(struct power_supply *bat_ps)


static unsigned long wm97xx_read_temp(struct power_supply *bat_ps)
static unsigned long wm97xx_read_temp(struct power_supply *bat_ps)
{
{
	struct wm97xx_pdata *wmdata = bat_ps->dev->parent->platform_data;
	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata;

	return wm97xx_read_aux_adc(bat_ps->dev->parent->driver_data,
	return wm97xx_read_aux_adc(bat_ps->dev->parent->driver_data,
					pdata->temp_aux) * pdata->temp_mult /
					pdata->temp_aux) * pdata->temp_mult /
					pdata->temp_div;
					pdata->temp_div;
@@ -49,6 +54,9 @@ static int wm97xx_bat_get_property(struct power_supply *bat_ps,
			    enum power_supply_property psp,
			    enum power_supply_property psp,
			    union power_supply_propval *val)
			    union power_supply_propval *val)
{
{
	struct wm97xx_pdata *wmdata = bat_ps->dev->parent->platform_data;
	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata;

	switch (psp) {
	switch (psp) {
	case POWER_SUPPLY_PROP_STATUS:
	case POWER_SUPPLY_PROP_STATUS:
		val->intval = bat_status;
		val->intval = bat_status;
@@ -97,6 +105,8 @@ static void wm97xx_bat_external_power_changed(struct power_supply *bat_ps)
static void wm97xx_bat_update(struct power_supply *bat_ps)
static void wm97xx_bat_update(struct power_supply *bat_ps)
{
{
	int old_status = bat_status;
	int old_status = bat_status;
	struct wm97xx_pdata *wmdata = bat_ps->dev->parent->platform_data;
	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata;


	mutex_lock(&work_lock);
	mutex_lock(&work_lock);


@@ -149,6 +159,15 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)
	int ret = 0;
	int ret = 0;
	int props = 1;	/* POWER_SUPPLY_PROP_PRESENT */
	int props = 1;	/* POWER_SUPPLY_PROP_PRESENT */
	int i = 0;
	int i = 0;
	struct wm97xx_pdata *wmdata = dev->dev.platform_data;
	struct wm97xx_batt_pdata *pdata;

	if (gpdata) {
		dev_err(&dev->dev, "Do not pass platform_data through "
			"wm97xx_bat_set_pdata!\n");
		return -EINVAL;
	} else
		pdata = wmdata->batt_pdata;


	if (dev->id != -1)
	if (dev->id != -1)
		return -EINVAL;
		return -EINVAL;
@@ -156,7 +175,7 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)
	mutex_init(&work_lock);
	mutex_init(&work_lock);


	if (!pdata) {
	if (!pdata) {
		dev_err(&dev->dev, "Please use wm97xx_bat_set_pdata\n");
		dev_err(&dev->dev, "No platform_data supplied\n");
		return -EINVAL;
		return -EINVAL;
	}
	}


@@ -229,6 +248,9 @@ static int __devinit wm97xx_bat_probe(struct platform_device *dev)


static int __devexit wm97xx_bat_remove(struct platform_device *dev)
static int __devexit wm97xx_bat_remove(struct platform_device *dev)
{
{
	struct wm97xx_pdata *wmdata = dev->dev.platform_data;
	struct wm97xx_batt_pdata *pdata = wmdata->batt_pdata;

	if (pdata && pdata->charge_gpio && pdata->charge_gpio >= 0)
	if (pdata && pdata->charge_gpio && pdata->charge_gpio >= 0)
		gpio_free(pdata->charge_gpio);
		gpio_free(pdata->charge_gpio);
	flush_scheduled_work();
	flush_scheduled_work();
@@ -258,9 +280,9 @@ static void __exit wm97xx_bat_exit(void)
	platform_driver_unregister(&wm97xx_bat_driver);
	platform_driver_unregister(&wm97xx_bat_driver);
}
}


void __init wm97xx_bat_set_pdata(struct wm97xx_batt_info *data)
void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data)
{
{
	pdata = data;
	gpdata = data;
}
}
EXPORT_SYMBOL_GPL(wm97xx_bat_set_pdata);
EXPORT_SYMBOL_GPL(wm97xx_bat_set_pdata);


+18 −0
Original line number Original line Diff line number Diff line
@@ -286,6 +286,24 @@ struct wm97xx {
	u16 suspend_mode;               /* PRP in suspend mode */
	u16 suspend_mode;               /* PRP in suspend mode */
};
};


struct wm97xx_batt_pdata {
	int	batt_aux;
	int	temp_aux;
	int	charge_gpio;
	int	min_voltage;
	int	max_voltage;
	int	batt_div;
	int	batt_mult;
	int	temp_div;
	int	temp_mult;
	int	batt_tech;
	char	*batt_name;
};

struct wm97xx_pdata {
	struct wm97xx_batt_pdata	*batt_pdata;	/* battery data */
};

/*
/*
 * Codec GPIO access (not supported on WM9705)
 * Codec GPIO access (not supported on WM9705)
 * This can be used to set/get codec GPIO and Virtual GPIO status.
 * This can be used to set/get codec GPIO and Virtual GPIO status.
+4 −14
Original line number Original line Diff line number Diff line
@@ -3,22 +3,12 @@


#include <linux/wm97xx.h>
#include <linux/wm97xx.h>


struct wm97xx_batt_info {
#warning This file will be removed soon, use wm97xx.h instead!
	int	batt_aux;

	int	temp_aux;
#define wm97xx_batt_info wm97xx_batt_pdata
	int	charge_gpio;
	int	min_voltage;
	int	max_voltage;
	int	batt_div;
	int	batt_mult;
	int	temp_div;
	int	temp_mult;
	int	batt_tech;
	char	*batt_name;
};


#ifdef CONFIG_BATTERY_WM97XX
#ifdef CONFIG_BATTERY_WM97XX
void __init wm97xx_bat_set_pdata(struct wm97xx_batt_info *data);
void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data);
#else
#else
static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {}
static inline void wm97xx_bat_set_pdata(struct wm97xx_batt_info *data) {}
#endif
#endif