mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-05-01 15:15:19 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: "First round of updates for the input subsystem. No new drivers here, just some driver fixes" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: rotary-encoder - fix bare use of 'unsigned' Input: cm109 - spin_lock in complete() cleanup Input: cm109 - fix handling of volume and mute buttons Input: byd - don't wipe dynamically allocated memory twice Input: twl4030 - fix unsafe macro definition Input: twl6040-vibra - remove mutex Input: bcm_iproc_tsc - DT spelling s/clock-name/clock-names/ Input: bcm_iproc_tsc - use syscon to access shared registers Input: ti_am335x_tsc - use SIMPLE_DEV_PM_OPS Input: omap-keypad - remove set_col_gpio_val() and get_row_gpio_val() Input: omap-keypad - drop empty PM stubs Input: omap-keypad - remove adjusting of scan delay Input: gpio-keys - clean up device tree binding example Input: kbtab - stop saving struct usb_device Input: gtco - stop saving struct usb_device Input: aiptek - stop saving struct usb_device Input: acecad - stop saving struct usb_device
This commit is contained in:
@@ -64,31 +64,6 @@ static DECLARE_TASKLET_DISABLED(kp_tasklet, omap_kp_tasklet, 0);
|
||||
static unsigned int *row_gpios;
|
||||
static unsigned int *col_gpios;
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
static void set_col_gpio_val(struct omap_kp *omap_kp, u8 value)
|
||||
{
|
||||
int col;
|
||||
|
||||
for (col = 0; col < omap_kp->cols; col++)
|
||||
gpio_set_value(col_gpios[col], value & (1 << col));
|
||||
}
|
||||
|
||||
static u8 get_row_gpio_val(struct omap_kp *omap_kp)
|
||||
{
|
||||
int row;
|
||||
u8 value = 0;
|
||||
|
||||
for (row = 0; row < omap_kp->rows; row++) {
|
||||
if (gpio_get_value(row_gpios[row]))
|
||||
value |= (1 << row);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
#else
|
||||
#define set_col_gpio_val(x, y) do {} while (0)
|
||||
#define get_row_gpio_val(x) 0
|
||||
#endif
|
||||
|
||||
static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
/* disable keyboard interrupt and schedule for handling */
|
||||
@@ -133,7 +108,6 @@ static void omap_kp_tasklet(unsigned long data)
|
||||
unsigned int row_shift = get_count_order(omap_kp_data->cols);
|
||||
unsigned char new_state[8], changed, key_down = 0;
|
||||
int col, row;
|
||||
int spurious = 0;
|
||||
|
||||
/* check for any changes */
|
||||
omap_kp_scan_keypad(omap_kp_data, new_state);
|
||||
@@ -170,12 +144,9 @@ static void omap_kp_tasklet(unsigned long data)
|
||||
memcpy(keypad_state, new_state, sizeof(keypad_state));
|
||||
|
||||
if (key_down) {
|
||||
int delay = HZ / 20;
|
||||
/* some key is pressed - keep irq disabled and use timer
|
||||
* to poll the keypad */
|
||||
if (spurious)
|
||||
delay = 2 * HZ;
|
||||
mod_timer(&omap_kp_data->timer, jiffies + delay);
|
||||
mod_timer(&omap_kp_data->timer, jiffies + HZ / 20);
|
||||
} else {
|
||||
/* enable interrupts */
|
||||
omap_writew(0, OMAP1_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT);
|
||||
@@ -216,25 +187,6 @@ static ssize_t omap_kp_enable_store(struct device *dev, struct device_attribute
|
||||
|
||||
static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, omap_kp_enable_show, omap_kp_enable_store);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int omap_kp_suspend(struct platform_device *dev, pm_message_t state)
|
||||
{
|
||||
/* Nothing yet */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int omap_kp_resume(struct platform_device *dev)
|
||||
{
|
||||
/* Nothing yet */
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define omap_kp_suspend NULL
|
||||
#define omap_kp_resume NULL
|
||||
#endif
|
||||
|
||||
static int omap_kp_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct omap_kp *omap_kp;
|
||||
@@ -371,8 +323,6 @@ static int omap_kp_remove(struct platform_device *pdev)
|
||||
static struct platform_driver omap_kp_driver = {
|
||||
.probe = omap_kp_probe,
|
||||
.remove = omap_kp_remove,
|
||||
.suspend = omap_kp_suspend,
|
||||
.resume = omap_kp_resume,
|
||||
.driver = {
|
||||
.name = "omap-keypad",
|
||||
},
|
||||
|
||||
@@ -61,9 +61,9 @@ struct twl4030_keypad {
|
||||
unsigned short keymap[TWL4030_KEYMAP_SIZE];
|
||||
u16 kp_state[TWL4030_MAX_ROWS];
|
||||
bool autorepeat;
|
||||
unsigned n_rows;
|
||||
unsigned n_cols;
|
||||
unsigned irq;
|
||||
unsigned int n_rows;
|
||||
unsigned int n_cols;
|
||||
unsigned int irq;
|
||||
|
||||
struct device *dbg_dev;
|
||||
struct input_dev *input;
|
||||
@@ -110,7 +110,7 @@ struct twl4030_keypad {
|
||||
#define KEYP_CTRL_KBD_ON BIT(6)
|
||||
|
||||
/* KEYP_DEB, KEYP_LONG_KEY, KEYP_TIMEOUT_x*/
|
||||
#define KEYP_PERIOD_US(t, prescale) ((t) / (31 << (prescale + 1)) - 1)
|
||||
#define KEYP_PERIOD_US(t, prescale) ((t) / (31 << ((prescale) + 1)) - 1)
|
||||
|
||||
/* KEYP_LK_PTV_REG Fields */
|
||||
#define KEYP_LK_PTV_PTV_SHIFT 5
|
||||
@@ -162,9 +162,10 @@ static int twl4030_kpwrite_u8(struct twl4030_keypad *kp, u8 data, u32 reg)
|
||||
|
||||
static inline u16 twl4030_col_xlate(struct twl4030_keypad *kp, u8 col)
|
||||
{
|
||||
/* If all bits in a row are active for all coloumns then
|
||||
/*
|
||||
* If all bits in a row are active for all columns then
|
||||
* we have that row line connected to gnd. Mark this
|
||||
* key on as if it was on matrix position n_cols (ie
|
||||
* key on as if it was on matrix position n_cols (i.e.
|
||||
* one higher than the size of the matrix).
|
||||
*/
|
||||
if (col == 0xFF)
|
||||
@@ -209,9 +210,9 @@ static void twl4030_kp_scan(struct twl4030_keypad *kp, bool release_all)
|
||||
u16 new_state[TWL4030_MAX_ROWS];
|
||||
int col, row;
|
||||
|
||||
if (release_all)
|
||||
if (release_all) {
|
||||
memset(new_state, 0, sizeof(new_state));
|
||||
else {
|
||||
} else {
|
||||
/* check for any changes */
|
||||
int ret = twl4030_read_kp_matrix_state(kp, new_state);
|
||||
|
||||
@@ -262,8 +263,10 @@ static irqreturn_t do_kp_irq(int irq, void *_kp)
|
||||
/* Read & Clear TWL4030 pending interrupt */
|
||||
ret = twl4030_kpread(kp, ®, KEYP_ISR1, 1);
|
||||
|
||||
/* Release all keys if I2C has gone bad or
|
||||
* the KEYP has gone to idle state */
|
||||
/*
|
||||
* Release all keys if I2C has gone bad or
|
||||
* the KEYP has gone to idle state.
|
||||
*/
|
||||
if (ret >= 0 && (reg & KEYP_IMR1_KP))
|
||||
twl4030_kp_scan(kp, false);
|
||||
else
|
||||
@@ -283,7 +286,8 @@ static int twl4030_kp_program(struct twl4030_keypad *kp)
|
||||
if (twl4030_kpwrite_u8(kp, reg, KEYP_CTRL) < 0)
|
||||
return -EIO;
|
||||
|
||||
/* NOTE: we could use sih_setup() here to package keypad
|
||||
/*
|
||||
* NOTE: we could use sih_setup() here to package keypad
|
||||
* event sources as four different IRQs ... but we don't.
|
||||
*/
|
||||
|
||||
@@ -312,7 +316,7 @@ static int twl4030_kp_program(struct twl4030_keypad *kp)
|
||||
|
||||
/*
|
||||
* Enable Clear-on-Read; disable remembering events that fire
|
||||
* after the IRQ but before our handler acks (reads) them,
|
||||
* after the IRQ but before our handler acks (reads) them.
|
||||
*/
|
||||
reg = TWL4030_SIH_CTRL_COR_MASK | TWL4030_SIH_CTRL_PENDDIS_MASK;
|
||||
if (twl4030_kpwrite_u8(kp, reg, KEYP_SIH_CTRL) < 0)
|
||||
|
||||
Reference in New Issue
Block a user