[PATCH 0/3] PMU and Battery interaction in regard to kobject uevent

Holger Freyther zecke at openmoko.org
Wed Jun 4 18:07:57 CEST 2008


On Wednesday 04 June 2008 16:01:19 Holger Freyther wrote:

> Well, I might look at this from another way. In userspace we
> have /sys/class/power/*/ to get information about the available batteries.
> For one battery we want to immediately know when its charging state is
> changing or might have changed (the other option would be to do even more
> polling). And according to my understanding this is what the uevent file in
> sysfs for the battery is for.
>
> I have decided to follow andy's comment and will make mach-gta02 and
> bq27000 talk to each other to do this update. A patch should be on the way
> soon(tm).

here we go... comments, criticism, gifts welcome

	z.

From 2591cef2beb0ce5eaeaddfea5247d02f47268c96 Mon Sep 17 00:00:00 2001
From: Holger Freyther <zecke at openmoko.org>
Date: Wed, 4 Jun 2008 18:00:41 +0200
Subject: [PATCH] [battery] Make the bq27000 send an uevent when the charging 
state possible changed
     Remove the todo entries from the pcf50633, make the mach-gta02
     call the bq27000 driver from the pmu callback.

---
 arch/arm/mach-s3c2440/mach-gta02.c |   37 +++++++++++++++++++----------------
 drivers/i2c/chips/pcf50633.c       |    4 ---
 drivers/power/bq27000_battery.c    |   11 ++++++++++
 include/linux/bq27000_battery.h    |    2 +
 4 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/arch/arm/mach-s3c2440/mach-gta02.c 
b/arch/arm/mach-s3c2440/mach-gta02.c
index 601f7bc..918488e 100644
--- a/arch/arm/mach-s3c2440/mach-gta02.c
+++ b/arch/arm/mach-s3c2440/mach-gta02.c
@@ -421,6 +421,24 @@ static struct s3c2410_uartcfg gta02_uartcfgs[] = {
 
 };
 
+/* BQ27000 Battery */
+
+struct bq27000_platform_data bq27000_pdata = {
+	.name = "bat",
+	.rsense_mohms = 20,
+	.hdq_read = gta02hdq_read,
+	.hdq_write = gta02hdq_write,
+	.hdq_initialized = gta02hdq_initialized,
+};
+
+struct platform_device bq27000_battery_device = {
+	.name 		= "bq27000-battery",
+	.dev = {
+		.platform_data = &bq27000_pdata,
+	},
+};
+
+
 /* PMU driver info */
 
 static int pmu_callback(struct device *dev, unsigned int feature,
@@ -432,10 +450,12 @@ static int pmu_callback(struct device *dev, unsigned int 
feature,
 		case PMU_EVT_INSERT:
 		case PMU_EVT_USB_INSERT:
 			pcf50633_charge_enable(pcf50633_global, 1);
+			bq27000_charging_state_change(&bq27000_battery_device);
 			break;
 		case PMU_EVT_REMOVE:
 		case PMU_EVT_USB_REMOVE:
 			pcf50633_charge_enable(pcf50633_global, 0);
+			bq27000_charging_state_change(&bq27000_battery_device);
 			break;
 		default:
 			break;
@@ -670,23 +690,6 @@ struct platform_device gta02_hdq_device = {
 };
 #endif
 
-/* BQ27000 Battery */
-
-struct bq27000_platform_data bq27000_pdata = {
-	.name = "bat",
-	.rsense_mohms = 20,
-	.hdq_read = gta02hdq_read,
-	.hdq_write = gta02hdq_write,
-	.hdq_initialized = gta02hdq_initialized,
-};
-
-struct platform_device bq27000_battery_device = {
-	.name 		= "bq27000-battery",
-	.dev = {
-		.platform_data = &bq27000_pdata,
-	},
-};
-
 
 /* NOR Flash */
 
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index 2878baa..39469c5 100644
--- a/drivers/i2c/chips/pcf50633.c
+++ b/drivers/i2c/chips/pcf50633.c
@@ -651,8 +651,6 @@ static void pcf50633_work(struct work_struct *work)
 		if (pcf->pdata->cb)
 			pcf->pdata->cb(&pcf->client.dev,
 				       PCF50633_FEAT_MBC, PMU_EVT_INSERT);
-		/* FIXME: signal this to userspace */
-		//kobject_uevent( ,KOBJ_ADD);
 	}
 	if (pcfirq[0] & PCF50633_INT1_ADPREM) {
 		/* Charger removed */
@@ -663,8 +661,6 @@ static void pcf50633_work(struct work_struct *work)
 		if (pcf->pdata->cb)
 			pcf->pdata->cb(&pcf->client.dev,
 				       PCF50633_FEAT_MBC, PMU_EVT_REMOVE);
-		/* FIXME: signal this to userspace */
-		//kobject_uevent( ,KOBJ_ADD);
 	}
 	if (pcfirq[0] & PCF50633_INT1_USBINS) {
 		DEBUGPC("USBINS ");
diff --git a/drivers/power/bq27000_battery.c b/drivers/power/bq27000_battery.c
index c87e26d..4855d5a 100644
--- a/drivers/power/bq27000_battery.c
+++ b/drivers/power/bq27000_battery.c
@@ -330,6 +330,17 @@ static int bq27000_battery_remove(struct platform_device 
*pdev)
 	return 0;
 }
 
+void bq27000_charging_state_change(struct platform_device *pdev)
+{
+	struct bq27000_device_info *di = platform_get_drvdata(pdev);
+
+	if (!di)
+	    return;
+
+	power_supply_changed(&di->bat);
+}
+EXPORT_SYMBOL_GPL(bq27000_charging_state_change);
+
 #ifdef CONFIG_PM
 
 static int bq27000_battery_suspend(struct platform_device *pdev,
diff --git a/include/linux/bq27000_battery.h b/include/linux/bq27000_battery.h
index 36b4f20..fed4287 100644
--- a/include/linux/bq27000_battery.h
+++ b/include/linux/bq27000_battery.h
@@ -1,6 +1,8 @@
 #ifndef __BQ27000_BATTERY_H__
 #define __BQ27000_BATTERY_H__
 
+void bq27000_charging_state_change(struct platform_device *pdev);
+
 struct bq27000_platform_data {
 	const char 	*name;
 	int		rsense_mohms;
-- 
1.5.4.3





More information about the openmoko-kernel mailing list