aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2014-07-25 20:32:41 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-07-25 21:55:54 -0400
commit7dbd229e10603b3759f366007df2068dc2acfe46 (patch)
tree55c0ab8bee329ef85439c1678c3a264171d2fa21
parentd70420b914c98a3758674c6e9858810e0ab4ea30 (diff)
Input: wacom - register an ac power supply for wireless devices
This is used by HID Bluetooth devices but also add some more information to the USB Wireless Receiver. We are just porting the bits from hid-wacom.c to the common driver here. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Acked-by: Przemo Firszt <przemo@firszt.eu> Acked-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/hid/wacom.h1
-rw-r--r--drivers/hid/wacom_sys.c58
-rw-r--r--drivers/hid/wacom_wac.h1
3 files changed, 55 insertions, 5 deletions
diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h
index 98cb93f16ba4..0b89ee77d7d1 100644
--- a/drivers/hid/wacom.h
+++ b/drivers/hid/wacom.h
@@ -120,6 +120,7 @@ struct wacom {
120 } led; 120 } led;
121 bool led_initialized; 121 bool led_initialized;
122 struct power_supply battery; 122 struct power_supply battery;
123 struct power_supply ac;
123}; 124};
124 125
125static inline void wacom_schedule_work(struct wacom_wac *wacom_wac) 126static inline void wacom_schedule_work(struct wacom_wac *wacom_wac)
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index a27404d6e98d..37888c3f39ba 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -774,6 +774,12 @@ static enum power_supply_property wacom_battery_props[] = {
774 POWER_SUPPLY_PROP_CAPACITY 774 POWER_SUPPLY_PROP_CAPACITY
775}; 775};
776 776
777static enum power_supply_property wacom_ac_props[] = {
778 POWER_SUPPLY_PROP_PRESENT,
779 POWER_SUPPLY_PROP_ONLINE,
780 POWER_SUPPLY_PROP_SCOPE,
781};
782
777static int wacom_battery_get_property(struct power_supply *psy, 783static int wacom_battery_get_property(struct power_supply *psy,
778 enum power_supply_property psp, 784 enum power_supply_property psp,
779 union power_supply_propval *val) 785 union power_supply_propval *val)
@@ -806,14 +812,38 @@ static int wacom_battery_get_property(struct power_supply *psy,
806 return ret; 812 return ret;
807} 813}
808 814
815static int wacom_ac_get_property(struct power_supply *psy,
816 enum power_supply_property psp,
817 union power_supply_propval *val)
818{
819 struct wacom *wacom = container_of(psy, struct wacom, ac);
820 int ret = 0;
821
822 switch (psp) {
823 case POWER_SUPPLY_PROP_PRESENT:
824 /* fall through */
825 case POWER_SUPPLY_PROP_ONLINE:
826 val->intval = wacom->wacom_wac.ps_connected;
827 break;
828 case POWER_SUPPLY_PROP_SCOPE:
829 val->intval = POWER_SUPPLY_SCOPE_DEVICE;
830 break;
831 default:
832 ret = -EINVAL;
833 break;
834 }
835 return ret;
836}
837
809static int wacom_initialize_battery(struct wacom *wacom) 838static int wacom_initialize_battery(struct wacom *wacom)
810{ 839{
811 int error = 0;
812 static atomic_t battery_no = ATOMIC_INIT(0); 840 static atomic_t battery_no = ATOMIC_INIT(0);
841 int error;
813 unsigned long n; 842 unsigned long n;
814 843
815 if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { 844 if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) {
816 n = atomic_inc_return(&battery_no) - 1; 845 n = atomic_inc_return(&battery_no) - 1;
846
817 wacom->battery.properties = wacom_battery_props; 847 wacom->battery.properties = wacom_battery_props;
818 wacom->battery.num_properties = ARRAY_SIZE(wacom_battery_props); 848 wacom->battery.num_properties = ARRAY_SIZE(wacom_battery_props);
819 wacom->battery.get_property = wacom_battery_get_property; 849 wacom->battery.get_property = wacom_battery_get_property;
@@ -822,15 +852,31 @@ static int wacom_initialize_battery(struct wacom *wacom)
822 wacom->battery.type = POWER_SUPPLY_TYPE_BATTERY; 852 wacom->battery.type = POWER_SUPPLY_TYPE_BATTERY;
823 wacom->battery.use_for_apm = 0; 853 wacom->battery.use_for_apm = 0;
824 854
855 wacom->ac.properties = wacom_ac_props;
856 wacom->ac.num_properties = ARRAY_SIZE(wacom_ac_props);
857 wacom->ac.get_property = wacom_ac_get_property;
858 sprintf(wacom->wacom_wac.ac_name, "wacom_ac_%ld", n);
859 wacom->ac.name = wacom->wacom_wac.ac_name;
860 wacom->ac.type = POWER_SUPPLY_TYPE_MAINS;
861 wacom->ac.use_for_apm = 0;
862
825 error = power_supply_register(&wacom->hdev->dev, 863 error = power_supply_register(&wacom->hdev->dev,
826 &wacom->battery); 864 &wacom->battery);
865 if (error)
866 return error;
867
868 power_supply_powers(&wacom->battery, &wacom->hdev->dev);
869
870 error = power_supply_register(&wacom->hdev->dev, &wacom->ac);
871 if (error) {
872 power_supply_unregister(&wacom->battery);
873 return error;
874 }
827 875
828 if (!error) 876 power_supply_powers(&wacom->ac, &wacom->hdev->dev);
829 power_supply_powers(&wacom->battery,
830 &wacom->hdev->dev);
831 } 877 }
832 878
833 return error; 879 return 0;
834} 880}
835 881
836static void wacom_destroy_battery(struct wacom *wacom) 882static void wacom_destroy_battery(struct wacom *wacom)
@@ -839,6 +885,8 @@ static void wacom_destroy_battery(struct wacom *wacom)
839 wacom->battery.dev) { 885 wacom->battery.dev) {
840 power_supply_unregister(&wacom->battery); 886 power_supply_unregister(&wacom->battery);
841 wacom->battery.dev = NULL; 887 wacom->battery.dev = NULL;
888 power_supply_unregister(&wacom->ac);
889 wacom->ac.dev = NULL;
842 } 890 }
843} 891}
844 892
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index 6cdf707821cd..3433a0e28bb4 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -155,6 +155,7 @@ struct wacom_wac {
155 char name[WACOM_NAME_MAX]; 155 char name[WACOM_NAME_MAX];
156 char pad_name[WACOM_NAME_MAX]; 156 char pad_name[WACOM_NAME_MAX];
157 char bat_name[WACOM_NAME_MAX]; 157 char bat_name[WACOM_NAME_MAX];
158 char ac_name[WACOM_NAME_MAX];
158 unsigned char data[WACOM_PKGLEN_MAX]; 159 unsigned char data[WACOM_PKGLEN_MAX];
159 int tool[2]; 160 int tool[2];
160 int id[2]; 161 int id[2];