aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/wacom_sys.c
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 /drivers/hid/wacom_sys.c
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>
Diffstat (limited to 'drivers/hid/wacom_sys.c')
-rw-r--r--drivers/hid/wacom_sys.c58
1 files changed, 53 insertions, 5 deletions
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