Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 14529
b: refs/heads/master
c: 22a397e
h: refs/heads/master
i:
  14527: a85bd3a
v: v3
  • Loading branch information
Dmitry Torokhov committed Nov 20, 2005
1 parent 3e7bb6c commit 1a8a1b5
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 84b256a66360cedc25eb6e2ac6f167ca9778307b
refs/heads/master: 22a397e2c189dedf857836f2a49542b8aedfeb65
53 changes: 37 additions & 16 deletions trunk/drivers/input/misc/wistron_btns.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ static int __init map_bios(void)
return -ENOMEM;
}

static void __exit unmap_bios(void)
static inline void unmap_bios(void)
{
iounmap(bios_code_map_base);
iounmap(bios_data_map_base);
Expand Down Expand Up @@ -180,7 +180,7 @@ static void __init bios_attach(void)
call_bios(&regs);
}

static void __exit bios_detach(void)
static void bios_detach(void)
{
struct regs regs;

Expand Down Expand Up @@ -342,31 +342,43 @@ static int __init select_keymap(void)

/* Input layer interface */

static struct input_dev input_dev = {
.name = "Wistron laptop buttons",
};
static struct input_dev *input_dev;

static void __init setup_input_dev(void)
static int __init setup_input_dev(void)
{
const struct key_entry *key;
int error;

input_dev = input_allocate_device();
if (!input_dev)
return -ENOMEM;

input_dev->name = "Wistron laptop buttons";
input_dev->phys = "wistron/input0";
input_dev->id.bustype = BUS_HOST;

for (key = keymap; key->type != KE_END; key++) {
if (key->type == KE_KEY) {
input_dev.evbit[LONG(EV_KEY)] = BIT(EV_KEY);
input_dev.keybit[LONG(key->keycode)]
|= BIT(key->keycode);
input_dev->evbit[LONG(EV_KEY)] = BIT(EV_KEY);
set_bit(key->keycode, input_dev->keybit);
}
}

input_register_device(&input_dev);
error = input_register_device(input_dev);
if (error) {
input_free_device(input_dev);
return error;
}

return 0;
}

static void report_key(unsigned keycode)
{
input_report_key(&input_dev, keycode, 1);
input_sync(&input_dev);
input_report_key(&input_dev, keycode, 0);
input_sync(&input_dev);
input_report_key(input_dev, keycode, 1);
input_sync(input_dev);
input_report_key(input_dev, keycode, 0);
input_sync(input_dev);
}

/* Driver core */
Expand Down Expand Up @@ -437,11 +449,14 @@ static int __init wb_module_init(void)
err = select_keymap();
if (err)
return err;

err = map_bios();
if (err)
return err;

bios_attach();
cmos_address = bios_get_cmos_address();

if (have_wifi) {
u16 wifi = bios_get_default_setting(WIFI);
if (wifi & 1)
Expand All @@ -452,6 +467,7 @@ static int __init wb_module_init(void)
if (have_wifi)
bios_set_state(WIFI, wifi_enabled);
}

if (have_bluetooth) {
u16 bt = bios_get_default_setting(BLUETOOTH);
if (bt & 1)
Expand All @@ -463,7 +479,12 @@ static int __init wb_module_init(void)
bios_set_state(BLUETOOTH, bluetooth_enabled);
}

setup_input_dev();
err = setup_input_dev();
if (err) {
bios_detach();
unmap_bios();
return err;
}

poll_bios(1); /* Flush stale event queue and arm timer */

Expand All @@ -473,7 +494,7 @@ static int __init wb_module_init(void)
static void __exit wb_module_exit(void)
{
del_timer_sync(&poll_timer);
input_unregister_device(&input_dev);
input_unregister_device(input_dev);
bios_detach();
unmap_bios();
}
Expand Down

0 comments on commit 1a8a1b5

Please sign in to comment.