|
From: <far...@us...> - 2006-11-03 21:24:17
|
Revision: 661
http://svn.sourceforge.net/hackndev/?rev=661&view=rev
Author: farcaller
Date: 2006-11-03 13:23:57 -0800 (Fri, 03 Nov 2006)
Log Message:
-----------
l4p: made battchargemon usable
Modified Paths:
--------------
linux4palm/linux/trunk/drivers/misc/battchargemon.c
linux4palm/linux/trunk/include/linux/battchargemon.h
Modified: linux4palm/linux/trunk/drivers/misc/battchargemon.c
===================================================================
--- linux4palm/linux/trunk/drivers/misc/battchargemon.c 2006-11-03 20:09:33 UTC (rev 660)
+++ linux4palm/linux/trunk/drivers/misc/battchargemon.c 2006-11-03 21:23:57 UTC (rev 661)
@@ -19,9 +19,35 @@
#include <linux/device.h>
#include <linux/battchargemon.h>
+#define DEB(s) printk(KERN_ERR s "\n");
+/**** handlers ****/
+static ssize_t battery_show_id(struct class_device *cdev, char *buf) {
+ struct battery *bat = container_of(cdev, struct battery, class_dev);
+ return sprintf(buf, "%s\n", bat->id);
+}
+static ssize_t charger_show_id(struct class_device *cdev, char *buf) {
+ struct charger *bat = container_of(cdev, struct charger, class_dev);
+ return sprintf(buf, "%s\n", bat->id);
+}
+#define show_int_val(_class, _name) \
+static ssize_t _class##_show_##_name(struct class_device *cdev, char *buf) { \
+ struct _class *cl = container_of(cdev, struct _class, class_dev); \
+ if (cl->get_##_name) \
+ return sprintf(buf, "%d\n", cl->get_##_name(cl)); \
+ return 0; \
+}
+
+show_int_val(battery, min_voltage);
+show_int_val(battery, max_voltage);
+show_int_val(battery, voltage);
+show_int_val(battery, current);
+show_int_val(battery, temp);
+show_int_val(battery, charge);
+show_int_val(charger, status);
+
static struct class battery_class = {
.name = "battery",
// .hotplug = battery_class_hotplug,
@@ -32,9 +58,95 @@
.name = "charger",
};
+#define CLS_DEV_ATTR(_class, _name, _mode, _show, _store) \
+ struct class_device_attribute _class##_class_device_attr_##_name = { \
+ .attr = { .name = #_name, .mode = _mode, .owner = THIS_MODULE }, \
+ .show = _show, \
+ .store = _store, \
+ }
+
+/**** device attributes ****/
+static CLS_DEV_ATTR (battery, id, 0444, battery_show_id, NULL);
+static CLS_DEV_ATTR (battery, min_voltage, 0444, battery_show_min_voltage, NULL);
+static CLS_DEV_ATTR (battery, max_voltage, 0444, battery_show_max_voltage, NULL);
+static CLS_DEV_ATTR (battery, voltage, 0444, battery_show_voltage, NULL);
+static CLS_DEV_ATTR (battery, current, 0444, battery_show_current, NULL);
+static CLS_DEV_ATTR (battery, temp, 0444, battery_show_temp, NULL);
+static CLS_DEV_ATTR (battery, charge, 0444, battery_show_charge, NULL);
+
+static CLS_DEV_ATTR (charger, id, 0444, charger_show_id, NULL);
+static CLS_DEV_ATTR (charger, status, 0444, charger_show_status, NULL);
+
+/**** class registration ****/
+
+#define create_entry_conditional(_name) \
+if(bat->get_##_name) \
+ class_device_create_file(&bat->class_dev, &battery_class_device_attr_##_name);
+
+int battery_class_register(struct battery *bat)
+{
+ int rc = 0;
+
+ WARN_ON(!bat->name);
+ bat->class_dev.class = &battery_class;
+ strcpy(bat->class_dev.class_id, bat->name);
+ rc = class_device_register(&bat->class_dev);
+ if(rc)
+ goto out;
+
+ if(bat->id)
+ class_device_create_file(&bat->class_dev, &battery_class_device_attr_id);
+ create_entry_conditional(min_voltage);
+ create_entry_conditional(max_voltage);
+ create_entry_conditional(voltage);
+ create_entry_conditional(current);
+ create_entry_conditional(temp);
+ create_entry_conditional(charge);
+
+out:
+ return rc;
+}
+EXPORT_SYMBOL (battery_class_register);
+
+void battery_class_unregister (struct battery *bat)
+{
+ class_device_unregister(&bat->class_dev);
+}
+EXPORT_SYMBOL (battery_class_unregister);
+
+int charger_class_register(struct charger *cha)
+{
+ int rc = 0;
+
+ WARN_ON(!cha->name);
+ cha->class_dev.class = &charger_class;
+ strcpy(cha->class_dev.class_id, cha->name);
+ rc = class_device_register(&cha->class_dev);
+ if(rc)
+ goto out;
+
+ if(cha->id)
+ class_device_create_file(&cha->class_dev, &charger_class_device_attr_id);
+ if(cha->get_status)
+ class_device_create_file(&cha->class_dev, &charger_class_device_attr_status);
+
+out:
+ return rc;
+}
+EXPORT_SYMBOL (charger_class_register);
+
+void charger_class_unregister (struct charger *cha)
+{
+ class_device_unregister(&cha->class_dev);
+}
+EXPORT_SYMBOL (charger_class_unregister);
+
+/**** module init/exit ****/
+
static int __init battcharge_class_init(void)
{
int ret = class_register(&battery_class);
+ DEB("initializing battcharge");
if(likely(ret)) {
if(likely((ret = class_register(&charger_class)) == 0)) {
return 0;
@@ -47,6 +159,7 @@
static void __exit battcharge_class_exit(void)
{
+ DEB("modexit");
class_unregister(&charger_class);
class_unregister(&battery_class);
}
Modified: linux4palm/linux/trunk/include/linux/battchargemon.h
===================================================================
--- linux4palm/linux/trunk/include/linux/battchargemon.h 2006-11-03 20:09:33 UTC (rev 660)
+++ linux4palm/linux/trunk/include/linux/battchargemon.h 2006-11-03 21:23:57 UTC (rev 661)
@@ -32,17 +32,13 @@
struct charger {
struct class_device class_dev;
const char *name;
+ char *id;
#define CHARGER_DISCONNECTED 0
#define CHARGER_CONNECTED 1
int (*get_status)(struct charger *);
};
-#define BATTERY_STATUS_UNKNOWN 0
-#define BATTERY_STATUS_CHARGING 1
-#define BATTERY_STATUS_DISCHARGING 2
-#define BATTERY_STATUS_NOT_CHARGING 3
-
extern int battery_class_register(struct battery *);
extern void battery_class_unregister(struct battery *);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|