Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Oct 2009 20:32:24 +0000 (13:32 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Oct 2009 20:32:24 +0000 (13:32 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: i8042 - print debug data when testing AUX IRQ delivery
  Input: libps2 - fix dependancy on i8042
  Input: fix rx51 board keymap
  Input: ad7879 - pass up error codes from probe functions
  Input: xpad - add BigBen Interactive XBOX 360 Controller
  Input: rotary_encoder - fix relative axis support
  Input: sparkspkr - move remove() functions to .devexit.text
  Input: wistron_btns - add DMI entry for Medion WIM2030 laptop

1  2 
arch/arm/mach-omap2/board-rx51-peripherals.c
drivers/input/touchscreen/ad7879.c
include/linux/i2c/twl4030.h

@@@ -1,5 -1,5 +1,5 @@@
  /*
 - * linux/arch/arm/mach-omap2/board-rx51-flash.c
 + * linux/arch/arm/mach-omap2/board-rx51-peripherals.c
   *
   * Copyright (C) 2008-2009 Nokia
   *
@@@ -19,7 -19,6 +19,7 @@@
  #include <linux/delay.h>
  #include <linux/regulator/machine.h>
  #include <linux/gpio.h>
 +#include <linux/mmc/host.h>
  
  #include <mach/mcspi.h>
  #include <mach/mux.h>
  #define SYSTEM_REV_B_USES_VAUX3       0x1699
  #define SYSTEM_REV_S_USES_VAUX3 0x8
  
 -static int rx51_keymap[] = {
 +static int board_keymap[] = {
        KEY(0, 0, KEY_Q),
-       KEY(0, 1, KEY_W),
-       KEY(0, 2, KEY_E),
-       KEY(0, 3, KEY_R),
-       KEY(0, 4, KEY_T),
-       KEY(0, 5, KEY_Y),
-       KEY(0, 6, KEY_U),
-       KEY(0, 7, KEY_I),
-       KEY(1, 0, KEY_O),
+       KEY(0, 1, KEY_O),
+       KEY(0, 2, KEY_P),
+       KEY(0, 3, KEY_COMMA),
+       KEY(0, 4, KEY_BACKSPACE),
+       KEY(0, 6, KEY_A),
+       KEY(0, 7, KEY_S),
+       KEY(1, 0, KEY_W),
        KEY(1, 1, KEY_D),
-       KEY(1, 2, KEY_DOT),
-       KEY(1, 3, KEY_V),
-       KEY(1, 4, KEY_DOWN),
-       KEY(2, 0, KEY_P),
-       KEY(2, 1, KEY_F),
+       KEY(1, 2, KEY_F),
+       KEY(1, 3, KEY_G),
+       KEY(1, 4, KEY_H),
+       KEY(1, 5, KEY_J),
+       KEY(1, 6, KEY_K),
+       KEY(1, 7, KEY_L),
+       KEY(2, 0, KEY_E),
+       KEY(2, 1, KEY_DOT),
        KEY(2, 2, KEY_UP),
-       KEY(2, 3, KEY_B),
-       KEY(2, 4, KEY_RIGHT),
-       KEY(3, 0, KEY_COMMA),
-       KEY(3, 1, KEY_G),
-       KEY(3, 2, KEY_ENTER),
+       KEY(2, 3, KEY_ENTER),
+       KEY(2, 5, KEY_Z),
+       KEY(2, 6, KEY_X),
+       KEY(2, 7, KEY_C),
+       KEY(3, 0, KEY_R),
+       KEY(3, 1, KEY_V),
+       KEY(3, 2, KEY_B),
        KEY(3, 3, KEY_N),
-       KEY(4, 0, KEY_BACKSPACE),
-       KEY(4, 1, KEY_H),
-       KEY(4, 3, KEY_M),
+       KEY(3, 4, KEY_M),
+       KEY(3, 5, KEY_SPACE),
+       KEY(3, 6, KEY_SPACE),
+       KEY(3, 7, KEY_LEFT),
+       KEY(4, 0, KEY_T),
+       KEY(4, 1, KEY_DOWN),
+       KEY(4, 2, KEY_RIGHT),
        KEY(4, 4, KEY_LEFTCTRL),
-       KEY(5, 1, KEY_J),
-       KEY(5, 2, KEY_Z),
-       KEY(5, 3, KEY_SPACE),
-       KEY(5, 4, KEY_LEFTSHIFT),
-       KEY(6, 0, KEY_A),
-       KEY(6, 1, KEY_K),
-       KEY(6, 2, KEY_X),
-       KEY(6, 3, KEY_SPACE),
-       KEY(6, 4, KEY_FN),
-       KEY(7, 0, KEY_S),
-       KEY(7, 1, KEY_L),
-       KEY(7, 2, KEY_C),
-       KEY(7, 3, KEY_LEFT),
-       KEY(0xff, 0, KEY_F6),
-       KEY(0xff, 1, KEY_F7),
-       KEY(0xff, 2, KEY_F8),
-       KEY(0xff, 4, KEY_F9),
-       KEY(0xff, 5, KEY_F10),
+       KEY(4, 5, KEY_RIGHTALT),
+       KEY(4, 6, KEY_LEFTSHIFT),
+       KEY(5, 0, KEY_Y),
+       KEY(6, 0, KEY_U),
+       KEY(7, 0, KEY_I),
+       KEY(7, 1, KEY_F7),
+       KEY(7, 2, KEY_F8),
+       KEY(0xff, 2, KEY_F9),
+       KEY(0xff, 4, KEY_F10),
+       KEY(0xff, 5, KEY_F11),
  };
  
 +static struct matrix_keymap_data board_map_data = {
 +      .keymap                 = board_keymap,
 +      .keymap_size            = ARRAY_SIZE(board_keymap),
 +};
 +
  static struct twl4030_keypad_data rx51_kp_data = {
 +      .keymap_data    = &board_map_data,
        .rows           = 8,
        .cols           = 8,
 -      .keymap         = rx51_keymap,
 -      .keymapsize     = ARRAY_SIZE(rx51_keymap),
        .rep            = 1,
  };
  
@@@ -107,7 -102,6 +107,7 @@@ static struct twl4030_hsmmc_info mmc[] 
                .cover_only     = true,
                .gpio_cd        = 160,
                .gpio_wp        = -EINVAL,
 +              .power_saving   = true,
        },
        {
                .name           = "internal",
                .wires          = 8,
                .gpio_cd        = -EINVAL,
                .gpio_wp        = -EINVAL,
 +              .nonremovable   = true,
 +              .power_saving   = true,
        },
        {}      /* Terminator */
  };
@@@ -290,124 -282,7 +290,124 @@@ static struct twl4030_usb_data rx51_usb
        .usb_mode               = T2_USB_MODE_ULPI,
  };
  
 -static struct twl4030_platform_data rx51_twldata = {
 +static struct twl4030_ins sleep_on_seq[] __initdata = {
 +/*
 + * Turn off VDD1 and VDD2.
 + */
 +      {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_OFF), 4},
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_OFF), 2},
 +/*
 + * And also turn off the OMAP3 PLLs and the sysclk output.
 + */
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_OFF), 3},
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x17, RES_STATE_OFF), 3},
 +};
 +
 +static struct twl4030_script sleep_on_script __initdata = {
 +      .script = sleep_on_seq,
 +      .size   = ARRAY_SIZE(sleep_on_seq),
 +      .flags  = TWL4030_SLEEP_SCRIPT,
 +};
 +
 +static struct twl4030_ins wakeup_seq[] __initdata = {
 +/*
 + * Reenable the OMAP3 PLLs.
 + * Wakeup VDD1 and VDD2.
 + * Reenable sysclk output.
 + */
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_ACTIVE), 0x30},
 +      {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_ACTIVE), 0x30},
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_ACTIVE), 0x37},
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 3},
 +};
 +
 +static struct twl4030_script wakeup_script __initdata = {
 +      .script = wakeup_seq,
 +      .size   = ARRAY_SIZE(wakeup_seq),
 +      .flags  = TWL4030_WAKEUP12_SCRIPT,
 +};
 +
 +static struct twl4030_ins wakeup_p3_seq[] __initdata = {
 +/*
 + * Wakeup VDD1 (dummy to be able to insert a delay)
 + * Enable CLKEN
 + */
 +      {MSG_SINGULAR(DEV_GRP_P1, 0x17, RES_STATE_ACTIVE), 3},
 +};
 +
 +static struct twl4030_script wakeup_p3_script __initdata = {
 +      .script = wakeup_p3_seq,
 +      .size   = ARRAY_SIZE(wakeup_p3_seq),
 +      .flags  = TWL4030_WAKEUP3_SCRIPT,
 +};
 +
 +static struct twl4030_ins wrst_seq[] __initdata = {
 +/*
 + * Reset twl4030.
 + * Reset VDD1 regulator.
 + * Reset VDD2 regulator.
 + * Reset VPLL1 regulator.
 + * Enable sysclk output.
 + * Reenable twl4030.
 + */
 +      {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2},
 +      {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 0, 1, RES_STATE_ACTIVE),
 +              0x13},
 +      {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 2, RES_STATE_WRST), 0x13},
 +      {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 3, RES_STATE_OFF), 0x13},
 +      {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD1, RES_STATE_WRST), 0x13},
 +      {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD2, RES_STATE_WRST), 0x13},
 +      {MSG_SINGULAR(DEV_GRP_NULL, RES_VPLL1, RES_STATE_WRST), 0x35},
 +      {MSG_SINGULAR(DEV_GRP_P1, RES_HFCLKOUT, RES_STATE_ACTIVE), 2},
 +      {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2},
 +};
 +
 +static struct twl4030_script wrst_script __initdata = {
 +      .script = wrst_seq,
 +      .size   = ARRAY_SIZE(wrst_seq),
 +      .flags  = TWL4030_WRST_SCRIPT,
 +};
 +
 +static struct twl4030_script *twl4030_scripts[] __initdata = {
 +      /* wakeup12 script should be loaded before sleep script, otherwise a
 +         board might hit retention before loading of wakeup script is
 +         completed. This can cause boot failures depending on timing issues.
 +      */
 +      &wakeup_script,
 +      &sleep_on_script,
 +      &wakeup_p3_script,
 +      &wrst_script,
 +};
 +
 +static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
 +      { .resource = RES_VINTANA1, .devgroup = -1, .type = -1, .type2 = 1 },
 +      { .resource = RES_VINTANA2, .devgroup = -1, .type = -1, .type2 = 1 },
 +      { .resource = RES_VINTDIG, .devgroup = -1, .type = -1, .type2 = 1 },
 +      { .resource = RES_VMMC1, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VMMC2, .devgroup = DEV_GRP_NULL, .type = -1,
 +        .type2 = 3},
 +      { .resource = RES_VAUX1, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VAUX2, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VAUX3, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VAUX4, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VPLL2, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VDAC, .devgroup = -1, .type = -1, .type2 = 3},
 +      { .resource = RES_VSIM, .devgroup = DEV_GRP_NULL, .type = -1,
 +        .type2 = 3},
 +      { .resource = RES_CLKEN, .devgroup = DEV_GRP_P3, .type = -1,
 +              .type2 = 1 },
 +      { 0, 0},
 +};
 +
 +static struct twl4030_power_data rx51_t2scripts_data __initdata = {
 +      .scripts        = twl4030_scripts,
 +      .num = ARRAY_SIZE(twl4030_scripts),
 +      .resource_config = twl4030_rconfig,
 +};
 +
 +
 +
 +static struct twl4030_platform_data rx51_twldata __initdata = {
        .irq_base               = TWL4030_IRQ_BASE,
        .irq_end                = TWL4030_IRQ_END,
  
        .keypad                 = &rx51_kp_data,
        .madc                   = &rx51_madc_data,
        .usb                    = &rx51_usb_data,
 +      .power                  = &rx51_t2scripts_data,
  
        .vaux1                  = &rx51_vaux1,
        .vaux2                  = &rx51_vaux2,
@@@ -645,7 -645,7 +645,7 @@@ static int __devinit ad7879_probe(struc
                kfree(ts);
        }
  
-       return 0;
+       return error;
  }
  
  static int __devexit ad7879_remove(struct spi_device *spi)
@@@ -732,7 -732,7 +732,7 @@@ static int __devinit ad7879_probe(struc
                kfree(ts);
        }
  
-       return 0;
+       return error;
  }
  
  static int __devexit ad7879_remove(struct i2c_client *client)
@@@ -781,4 -781,3 +781,4 @@@ module_exit(ad7879_exit)
  MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
  MODULE_DESCRIPTION("AD7879(-1) touchscreen Driver");
  MODULE_LICENSE("GPL");
 +MODULE_ALIAS("spi:ad7879");
@@@ -223,28 -223,19 +223,28 @@@ int twl4030_i2c_read(u8 mod_no, u8 *val
  
  /* Power bus message definitions */
  
 -#define DEV_GRP_NULL          0x0
 -#define DEV_GRP_P1            0x1
 -#define DEV_GRP_P2            0x2
 -#define DEV_GRP_P3            0x4
 +/* The TWL4030/5030 splits its power-management resources (the various
 + * regulators, clock and reset lines) into 3 processor groups - P1, P2 and
 + * P3. These groups can then be configured to transition between sleep, wait-on
 + * and active states by sending messages to the power bus.  See Section 5.4.2
 + * Power Resources of TWL4030 TRM
 + */
  
 -#define RES_GRP_RES           0x0
 -#define RES_GRP_PP            0x1
 -#define RES_GRP_RC            0x2
 +/* Processor groups */
 +#define DEV_GRP_NULL          0x0
 +#define DEV_GRP_P1            0x1     /* P1: all OMAP devices */
 +#define DEV_GRP_P2            0x2     /* P2: all Modem devices */
 +#define DEV_GRP_P3            0x4     /* P3: all peripheral devices */
 +
 +/* Resource groups */
 +#define RES_GRP_RES           0x0     /* Reserved */
 +#define RES_GRP_PP            0x1     /* Power providers */
 +#define RES_GRP_RC            0x2     /* Reset and control */
  #define RES_GRP_PP_RC         0x3
 -#define RES_GRP_PR            0x4
 +#define RES_GRP_PR            0x4     /* Power references */
  #define RES_GRP_PP_PR         0x5
  #define RES_GRP_RC_PR         0x6
 -#define RES_GRP_ALL           0x7
 +#define RES_GRP_ALL           0x7     /* All resource groups */
  
  #define RES_TYPE2_R0          0x0
  
  #define RES_STATE_SLEEP               0x8
  #define RES_STATE_OFF         0x0
  
 +/* Power resources */
 +
 +/* Power providers */
 +#define RES_VAUX1               1
 +#define RES_VAUX2               2
 +#define RES_VAUX3               3
 +#define RES_VAUX4               4
 +#define RES_VMMC1               5
 +#define RES_VMMC2               6
 +#define RES_VPLL1               7
 +#define RES_VPLL2               8
 +#define RES_VSIM                9
 +#define RES_VDAC                10
 +#define RES_VINTANA1            11
 +#define RES_VINTANA2            12
 +#define RES_VINTDIG             13
 +#define RES_VIO                 14
 +#define RES_VDD1                15
 +#define RES_VDD2                16
 +#define RES_VUSB_1V5            17
 +#define RES_VUSB_1V8            18
 +#define RES_VUSB_3V1            19
 +#define RES_VUSBCP              20
 +#define RES_REGEN               21
 +/* Reset and control */
 +#define RES_NRES_PWRON          22
 +#define RES_CLKEN               23
 +#define RES_SYSEN               24
 +#define RES_HFCLKOUT            25
 +#define RES_32KCLKOUT           26
 +#define RES_RESET               27
 +/* Power Reference */
 +#define RES_Main_Ref            28
 +
 +#define TOTAL_RESOURCES               28
  /*
   * Power Bus Message Format ... these can be sent individually by Linux,
   * but are usually part of downloaded scripts that are run when various
@@@ -349,11 -305,11 +349,11 @@@ struct twl4030_madc_platform_data 
        int             irq_line;
  };
  
- /* Boards have uniqe mappings of {col, row} --> keycode.
-  * Column and row are 4 bits, but range only from 0..7.
+ /* Boards have uniqe mappings of {row, col} --> keycode.
+  * Column and row are 8 bits each, but range only from 0..7.
   * a PERSISTENT_KEY is "always on" and never reported.
   */
- #define PERSISTENT_KEY(c, r)  KEY((c), (r), KEY_RESERVED)
+ #define PERSISTENT_KEY(r, c)  KEY((r), (c), KEY_RESERVED)
  
  struct twl4030_keypad_data {
        const struct matrix_keymap_data *keymap_data;
@@@ -371,36 -327,6 +371,36 @@@ struct twl4030_usb_data 
        enum twl4030_usb_mode   usb_mode;
  };
  
 +struct twl4030_ins {
 +      u16 pmb_message;
 +      u8 delay;
 +};
 +
 +struct twl4030_script {
 +      struct twl4030_ins *script;
 +      unsigned size;
 +      u8 flags;
 +#define TWL4030_WRST_SCRIPT   (1<<0)
 +#define TWL4030_WAKEUP12_SCRIPT       (1<<1)
 +#define TWL4030_WAKEUP3_SCRIPT        (1<<2)
 +#define TWL4030_SLEEP_SCRIPT  (1<<3)
 +};
 +
 +struct twl4030_resconfig {
 +      u8 resource;
 +      u8 devgroup;    /* Processor group that Power resource belongs to */
 +      u8 type;        /* Power resource addressed, 6 / broadcast message */
 +      u8 type2;       /* Power resource addressed, 3 / broadcast message */
 +};
 +
 +struct twl4030_power_data {
 +      struct twl4030_script **scripts;
 +      unsigned num;
 +      struct twl4030_resconfig *resource_config;
 +};
 +
 +extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
 +
  struct twl4030_platform_data {
        unsigned                                irq_base, irq_end;
        struct twl4030_bci_platform_data        *bci;
        struct twl4030_madc_platform_data       *madc;
        struct twl4030_keypad_data              *keypad;
        struct twl4030_usb_data                 *usb;
 +      struct twl4030_power_data               *power;
  
        /* LDO regulators */
        struct regulator_init_data              *vdac;
@@@ -439,6 -364,7 +439,6 @@@ int twl4030_sih_setup(int module)
  #define TWL4030_VAUX3_DEV_GRP         0x1F
  #define TWL4030_VAUX3_DEDICATED               0x22
  
 -
  #if defined(CONFIG_TWL4030_BCI_BATTERY) || \
        defined(CONFIG_TWL4030_BCI_BATTERY_MODULE)
        extern int twl4030charger_usb_en(int enable);