Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 283430
b: refs/heads/master
c: 6c75ea1
h: refs/heads/master
v: v3
  • Loading branch information
Rhyland Klein authored and Anton Vorontsov committed Nov 24, 2011
1 parent 4f046e7 commit 0ec4640
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 85b5fbf784810d80aa09646189848c9ebc8a4ba2
refs/heads/master: 6c75ea1e582d12120072cae742a0d63ea8ac8c65
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
TI bq20z75
~~~~~~~~~~

Required properties :
- compatible : "ti,bq20z75"

Optional properties :
- ti,i2c-retry-count : The number of times to retry i2c transactions on i2c
IO failure.
- ti,poll-retry-count : The number of times to try looking for new status
after an external change notification.
- ti,battery-detect-gpios : The gpio which signals battery detection and
a flag specifying its polarity.

Example:

bq20z75@b {
compatible = "ti,bq20z75";
reg = < 0xb >;
ti,i2c-retry-count = <2>;
ti,poll-retry-count = <10>;
ti,battery-detect-gpios = <&gpio-controller 122 1>;
}
77 changes: 77 additions & 0 deletions trunk/drivers/power/bq20z75.c
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,80 @@ static void bq20z75_delayed_work(struct work_struct *work)
}
}

#if defined(CONFIG_OF)

#include <linux/of_device.h>
#include <linux/of_gpio.h>

static const struct of_device_id bq20z75_dt_ids[] = {
{ .compatible = "ti,bq20z75" },
{ }
};
MODULE_DEVICE_TABLE(i2c, bq20z75_dt_ids);

static struct bq20z75_platform_data *bq20z75_of_populate_pdata(
struct i2c_client *client)
{
struct device_node *of_node = client->dev.of_node;
struct bq20z75_platform_data *pdata = client->dev.platform_data;
enum of_gpio_flags gpio_flags;
int rc;
u32 prop;

/* verify this driver matches this device */
if (!of_node)
return NULL;

/* if platform data is set, honor it */
if (pdata)
return pdata;

/* first make sure at least one property is set, otherwise
* it won't change behavior from running without pdata.
*/
if (!of_get_property(of_node, "ti,i2c-retry-count", NULL) &&
!of_get_property(of_node, "ti,poll-retry-count", NULL) &&
!of_get_property(of_node, "ti,battery-detect-gpios", NULL))
goto of_out;

pdata = devm_kzalloc(&client->dev, sizeof(struct bq20z75_platform_data),
GFP_KERNEL);
if (!pdata)
goto of_out;

rc = of_property_read_u32(of_node, "ti,i2c-retry-count", &prop);
if (!rc)
pdata->i2c_retry_count = prop;

rc = of_property_read_u32(of_node, "ti,poll-retry-count", &prop);
if (!rc)
pdata->poll_retry_count = prop;

if (!of_get_property(of_node, "ti,battery-detect-gpios", NULL)) {
pdata->battery_detect = -1;
goto of_out;
}

pdata->battery_detect = of_get_named_gpio_flags(of_node,
"ti,battery-detect-gpios", 0, &gpio_flags);

if (gpio_flags & OF_GPIO_ACTIVE_LOW)
pdata->battery_detect_present = 0;
else
pdata->battery_detect_present = 1;

of_out:
return pdata;
}
#else
#define bq20z75_dt_ids NULL
static struct bq20z75_platform_data *bq20z75_of_populate_pdata(
struct i2c_client *client)
{
return client->dev.platform_data;
}
#endif

static int __devinit bq20z75_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
Expand Down Expand Up @@ -642,6 +716,8 @@ static int __devinit bq20z75_probe(struct i2c_client *client,
bq20z75_device->power_supply.external_power_changed =
bq20z75_external_power_changed;

pdata = bq20z75_of_populate_pdata(client);

if (pdata) {
bq20z75_device->gpio_detect =
gpio_is_valid(pdata->battery_detect);
Expand Down Expand Up @@ -775,6 +851,7 @@ static struct i2c_driver bq20z75_battery_driver = {
.id_table = bq20z75_id,
.driver = {
.name = "bq20z75-battery",
.of_match_table = bq20z75_dt_ids,
},
};

Expand Down

0 comments on commit 0ec4640

Please sign in to comment.