drm/vc4: crtc: Lookup the encoder from the register at boot
[linux-2.6-microblaze.git] / drivers / hid / hid-input.c
index 236bccd..18f5e28 100644 (file)
@@ -435,7 +435,8 @@ static int hidinput_get_battery_property(struct power_supply *psy,
        return ret;
 }
 
-static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type, struct hid_field *field)
+static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
+                                 struct hid_field *field, bool is_percentage)
 {
        struct power_supply_desc *psy_desc;
        struct power_supply_config psy_cfg = { .drv_data = dev, };
@@ -475,7 +476,7 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
        min = field->logical_minimum;
        max = field->logical_maximum;
 
-       if (quirks & HID_BATTERY_QUIRK_PERCENT) {
+       if (is_percentage || (quirks & HID_BATTERY_QUIRK_PERCENT)) {
                min = 0;
                max = 100;
        }
@@ -552,7 +553,7 @@ static void hidinput_update_battery(struct hid_device *dev, int value)
 }
 #else  /* !CONFIG_HID_BATTERY_STRENGTH */
 static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
-                                 struct hid_field *field)
+                                 struct hid_field *field, bool is_percentage)
 {
        return 0;
 }
@@ -806,7 +807,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
                        break;
 
                case 0x3b: /* Battery Strength */
-                       hidinput_setup_battery(device, HID_INPUT_REPORT, field);
+                       hidinput_setup_battery(device, HID_INPUT_REPORT, field, false);
                        usage->type = EV_PWR;
                        return;
 
@@ -1068,7 +1069,16 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
        case HID_UP_GENDEVCTRLS:
                switch (usage->hid) {
                case HID_DC_BATTERYSTRENGTH:
-                       hidinput_setup_battery(device, HID_INPUT_REPORT, field);
+                       hidinput_setup_battery(device, HID_INPUT_REPORT, field, false);
+                       usage->type = EV_PWR;
+                       return;
+               }
+               goto unknown;
+
+       case HID_UP_BATTERY:
+               switch (usage->hid) {
+               case HID_BAT_ABSOLUTESTATEOFCHARGE:
+                       hidinput_setup_battery(device, HID_INPUT_REPORT, field, true);
                        usage->type = EV_PWR;
                        return;
                }
@@ -1672,7 +1682,7 @@ static void report_features(struct hid_device *hid)
                                /* Verify if Battery Strength feature is available */
                                if (usage->hid == HID_DC_BATTERYSTRENGTH)
                                        hidinput_setup_battery(hid, HID_FEATURE_REPORT,
-                                                              rep->field[i]);
+                                                              rep->field[i], false);
 
                                if (drv->feature_mapping)
                                        drv->feature_mapping(hid, rep->field[i], usage);