|
@@ -572,10 +572,12 @@ static void hp_wmi_notify(u32 value, void *context)
|
|
|
|
|
|
switch (event_id) {
|
|
|
case HPWMI_DOCK_EVENT:
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_DOCK,
|
|
|
- hp_wmi_dock_state());
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE,
|
|
|
- hp_wmi_tablet_state());
|
|
|
+ if (test_bit(SW_DOCK, hp_wmi_input_dev->swbit))
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_DOCK,
|
|
|
+ hp_wmi_dock_state());
|
|
|
+ if (test_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit))
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE,
|
|
|
+ hp_wmi_tablet_state());
|
|
|
input_sync(hp_wmi_input_dev);
|
|
|
break;
|
|
|
case HPWMI_PARK_HDD:
|
|
@@ -644,6 +646,7 @@ static int __init hp_wmi_input_setup(void)
|
|
|
{
|
|
|
acpi_status status;
|
|
|
int err;
|
|
|
+ int val;
|
|
|
|
|
|
hp_wmi_input_dev = input_allocate_device();
|
|
|
if (!hp_wmi_input_dev)
|
|
@@ -654,17 +657,26 @@ static int __init hp_wmi_input_setup(void)
|
|
|
hp_wmi_input_dev->id.bustype = BUS_HOST;
|
|
|
|
|
|
__set_bit(EV_SW, hp_wmi_input_dev->evbit);
|
|
|
- __set_bit(SW_DOCK, hp_wmi_input_dev->swbit);
|
|
|
- __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
|
|
|
+
|
|
|
+ /* Dock */
|
|
|
+ val = hp_wmi_dock_state();
|
|
|
+ if (!(val < 0)) {
|
|
|
+ __set_bit(SW_DOCK, hp_wmi_input_dev->swbit);
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_DOCK, val);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Tablet mode */
|
|
|
+ val = hp_wmi_tablet_state();
|
|
|
+ if (!(val < 0)) {
|
|
|
+ __set_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit);
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE, val);
|
|
|
+ }
|
|
|
|
|
|
err = sparse_keymap_setup(hp_wmi_input_dev, hp_wmi_keymap, NULL);
|
|
|
if (err)
|
|
|
goto err_free_dev;
|
|
|
|
|
|
/* Set initial hardware state */
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_DOCK, hp_wmi_dock_state());
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE,
|
|
|
- hp_wmi_tablet_state());
|
|
|
input_sync(hp_wmi_input_dev);
|
|
|
|
|
|
if (!hp_wmi_bios_2009_later() && hp_wmi_bios_2008_later())
|
|
@@ -947,10 +959,12 @@ static int hp_wmi_resume_handler(struct device *device)
|
|
|
* changed.
|
|
|
*/
|
|
|
if (hp_wmi_input_dev) {
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_DOCK,
|
|
|
- hp_wmi_dock_state());
|
|
|
- input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE,
|
|
|
- hp_wmi_tablet_state());
|
|
|
+ if (test_bit(SW_DOCK, hp_wmi_input_dev->swbit))
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_DOCK,
|
|
|
+ hp_wmi_dock_state());
|
|
|
+ if (test_bit(SW_TABLET_MODE, hp_wmi_input_dev->swbit))
|
|
|
+ input_report_switch(hp_wmi_input_dev, SW_TABLET_MODE,
|
|
|
+ hp_wmi_tablet_state());
|
|
|
input_sync(hp_wmi_input_dev);
|
|
|
}
|
|
|
|