aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Reid <preid@electromag.com.au>2017-05-01 04:49:58 -0400
committerSebastian Reichel <sre@kernel.org>2017-05-01 08:28:19 -0400
commitcda3b01368391b48728b7edbbac0ca873b514367 (patch)
tree61030f202f70adace342d72283ddc073016d8e3f
parentcad87f097ca2d56093145c4becd487f5c186a612 (diff)
power: supply: sbs-battery: Add alert callback
To simplify the sbs-manager code and notification of battery removal use the i2c alert callback to notify the sbs-battery driver that an event has occurred. Signed-off-by: Phil Reid <preid@electromag.com.au> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
-rw-r--r--drivers/power/supply/sbs-battery.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index 171c701a2d49..e3a114e60f1a 100644
--- a/drivers/power/supply/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -701,21 +701,30 @@ done:
701 return 0; 701 return 0;
702} 702}
703 703
704static irqreturn_t sbs_irq(int irq, void *devid) 704static void sbs_supply_changed(struct sbs_info *chip)
705{ 705{
706 struct sbs_info *chip = devid;
707 struct power_supply *battery = chip->power_supply; 706 struct power_supply *battery = chip->power_supply;
708 int ret; 707 int ret;
709 708
710 ret = gpiod_get_value_cansleep(chip->gpio_detect); 709 ret = gpiod_get_value_cansleep(chip->gpio_detect);
711 if (ret < 0) 710 if (ret < 0)
712 return ret; 711 return;
713 chip->is_present = ret; 712 chip->is_present = ret;
714 power_supply_changed(battery); 713 power_supply_changed(battery);
714}
715 715
716static irqreturn_t sbs_irq(int irq, void *devid)
717{
718 sbs_supply_changed(devid);
716 return IRQ_HANDLED; 719 return IRQ_HANDLED;
717} 720}
718 721
722static void sbs_alert(struct i2c_client *client, enum i2c_alert_protocol prot,
723 unsigned int data)
724{
725 sbs_supply_changed(i2c_get_clientdata(client));
726}
727
719static void sbs_external_power_changed(struct power_supply *psy) 728static void sbs_external_power_changed(struct power_supply *psy)
720{ 729{
721 struct sbs_info *chip = power_supply_get_drvdata(psy); 730 struct sbs_info *chip = power_supply_get_drvdata(psy);
@@ -936,6 +945,7 @@ MODULE_DEVICE_TABLE(of, sbs_dt_ids);
936static struct i2c_driver sbs_battery_driver = { 945static struct i2c_driver sbs_battery_driver = {
937 .probe = sbs_probe, 946 .probe = sbs_probe,
938 .remove = sbs_remove, 947 .remove = sbs_remove,
948 .alert = sbs_alert,
939 .id_table = sbs_id, 949 .id_table = sbs_id,
940 .driver = { 950 .driver = {
941 .name = "sbs-battery", 951 .name = "sbs-battery",