Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: "A bunch of fixes for minor defects reported by Coverity, a few driver fixups and revert of i8042.nomux change so that we are once again enable active MUX mode if box claims to support it" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Revert "Input: i8042 - disable active multiplexing by default" Input: altera_ps2 - use correct type for irq return value Input: altera_ps2 - write to correct register when disabling interrupts Input: max77693-haptic - fix potential overflow Input: psmouse - remove unneeded check in psmouse_reconnect() Input: vsxxxaa - fix code dropping bytes from queue Input: ims-pcu - fix dead code in ims_pcu_ofn_reg_addr_store() Input: opencores-kbd - fix error handling Input: wm97xx - adapt parameters to tosa touchscreen. Input: i8042 - quirks for Fujitsu Lifebook A544 and Lifebook AH544 Input: stmpe-keypad - fix valid key line bitmask Input: soc_button_array - update calls to gpiod_get*()
This commit is contained in:
commit
9f935675d4
12 changed files with 302 additions and 29 deletions
|
@ -1264,7 +1264,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||
i8042.noloop [HW] Disable the AUX Loopback command while probing
|
||||
for the AUX port
|
||||
i8042.nomux [HW] Don't check presence of an active multiplexing
|
||||
controller. Default: true.
|
||||
controller
|
||||
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
|
||||
controllers
|
||||
i8042.notimeout [HW] Ignore timeout condition signalled by controller
|
||||
|
|
|
@ -70,7 +70,7 @@ static int opencores_kbd_probe(struct platform_device *pdev)
|
|||
|
||||
opencores_kbd->addr = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(opencores_kbd->addr))
|
||||
error = PTR_ERR(opencores_kbd->addr);
|
||||
return PTR_ERR(opencores_kbd->addr);
|
||||
|
||||
input->name = pdev->name;
|
||||
input->phys = "opencores-kbd/input0";
|
||||
|
|
|
@ -86,7 +86,7 @@ static const struct stmpe_keypad_variant stmpe_keypad_variants[] = {
|
|||
.max_cols = 8,
|
||||
.max_rows = 12,
|
||||
.col_gpios = 0x0000ff, /* GPIO 0 - 7*/
|
||||
.row_gpios = 0x1fef00, /* GPIO 8-14, 16-20 */
|
||||
.row_gpios = 0x1f7f00, /* GPIO 8-14, 16-20 */
|
||||
},
|
||||
[STMPE2403] = {
|
||||
.auto_increment = true,
|
||||
|
|
|
@ -1381,7 +1381,7 @@ static ssize_t ims_pcu_ofn_reg_addr_store(struct device *dev,
|
|||
pcu->ofn_reg_addr = value;
|
||||
mutex_unlock(&pcu->cmd_mutex);
|
||||
|
||||
return error ?: count;
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(reg_addr, S_IRUGO | S_IWUSR,
|
||||
|
|
|
@ -194,7 +194,7 @@ static int max77693_haptic_play_effect(struct input_dev *dev, void *data,
|
|||
struct ff_effect *effect)
|
||||
{
|
||||
struct max77693_haptic *haptic = input_get_drvdata(dev);
|
||||
uint64_t period_mag_multi;
|
||||
u64 period_mag_multi;
|
||||
|
||||
haptic->magnitude = effect->u.rumble.strong_magnitude;
|
||||
if (!haptic->magnitude)
|
||||
|
@ -205,8 +205,7 @@ static int max77693_haptic_play_effect(struct input_dev *dev, void *data,
|
|||
* The formula to convert magnitude to pwm_duty as follows:
|
||||
* - pwm_duty = (magnitude * pwm_period) / MAX_MAGNITUDE(0xFFFF)
|
||||
*/
|
||||
period_mag_multi = (int64_t)(haptic->pwm_dev->period *
|
||||
haptic->magnitude);
|
||||
period_mag_multi = (u64)haptic->pwm_dev->period * haptic->magnitude;
|
||||
haptic->pwm_duty = (unsigned int)(period_mag_multi >>
|
||||
MAX_MAGNITUDE_SHIFT);
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ static int soc_button_lookup_gpio(struct device *dev, int acpi_index)
|
|||
struct gpio_desc *desc;
|
||||
int gpio;
|
||||
|
||||
desc = gpiod_get_index(dev, KBUILD_MODNAME, acpi_index);
|
||||
desc = gpiod_get_index(dev, KBUILD_MODNAME, acpi_index, GPIOD_ASIS);
|
||||
if (IS_ERR(desc))
|
||||
return PTR_ERR(desc);
|
||||
|
||||
|
|
|
@ -1536,16 +1536,9 @@ static int psmouse_reconnect(struct serio *serio)
|
|||
{
|
||||
struct psmouse *psmouse = serio_get_drvdata(serio);
|
||||
struct psmouse *parent = NULL;
|
||||
struct serio_driver *drv = serio->drv;
|
||||
unsigned char type;
|
||||
int rc = -1;
|
||||
|
||||
if (!drv || !psmouse) {
|
||||
psmouse_dbg(psmouse,
|
||||
"reconnect request, but serio is disconnected, ignoring...\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
mutex_lock(&psmouse_mutex);
|
||||
|
||||
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
|
||||
|
|
|
@ -128,7 +128,7 @@ static void vsxxxaa_drop_bytes(struct vsxxxaa *mouse, int num)
|
|||
if (num >= mouse->count) {
|
||||
mouse->count = 0;
|
||||
} else {
|
||||
memmove(mouse->buf, mouse->buf + num - 1, BUFLEN - num);
|
||||
memmove(mouse->buf, mouse->buf + num, BUFLEN - num);
|
||||
mouse->count -= num;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ static irqreturn_t altera_ps2_rxint(int irq, void *dev_id)
|
|||
{
|
||||
struct ps2if *ps2if = dev_id;
|
||||
unsigned int status;
|
||||
int handled = IRQ_NONE;
|
||||
irqreturn_t handled = IRQ_NONE;
|
||||
|
||||
while ((status = readl(ps2if->base)) & 0xffff0000) {
|
||||
serio_interrupt(ps2if->io, status & 0xff, 0);
|
||||
|
@ -74,7 +74,7 @@ static void altera_ps2_close(struct serio *io)
|
|||
{
|
||||
struct ps2if *ps2if = io->port_data;
|
||||
|
||||
writel(0, ps2if->base); /* disable rx irq */
|
||||
writel(0, ps2if->base + 4); /* disable rx irq */
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -207,17 +207,282 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
|
|||
};
|
||||
|
||||
/*
|
||||
* Some laptops do implement active multiplexing mode correctly;
|
||||
* unfortunately they are in minority.
|
||||
* Some Fujitsu notebooks are having trouble with touchpads if
|
||||
* active multiplexing mode is activated. Luckily they don't have
|
||||
* external PS/2 ports so we can safely disable it.
|
||||
* ... apparently some Toshibas don't like MUX mode either and
|
||||
* die horrible death on reboot.
|
||||
*/
|
||||
static const struct dmi_system_id __initconst i8042_dmi_mux_table[] = {
|
||||
static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
|
||||
{
|
||||
/* Fujitsu Lifebook P7010/P7010D */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook P7010 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook P5020D */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook S2000 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu Lifebook S6230 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu T70H */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu-Siemens Lifebook T3010 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu-Siemens Lifebook E4010 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu-Siemens Amilo Pro 2010 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu-Siemens Amilo Pro 2030 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Panasonic CF-18 needs to be in MUX mode since the
|
||||
* touchscreen is on serio3 and it also has touchpad.
|
||||
* No data is coming from the touchscreen unless KBC
|
||||
* is in legacy mode.
|
||||
*/
|
||||
/* Panasonic CF-29 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* HP Pavilion DV4017EA -
|
||||
* errors on MUX ports are reported without raising AUXDATA
|
||||
* causing "spurious NAK" messages.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "CF-18"),
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* HP Pavilion ZT1000 -
|
||||
* like DV4017EA does not raise AUXERR for errors on MUX ports.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook ZT1000"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* HP Pavilion DV4270ca -
|
||||
* like DV4017EA does not raise AUXERR for errors on MUX ports.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Sharp Actius MM20 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Sony Vaio FS-115b */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Sony Vaio FZ-240E -
|
||||
* reset and GET ID commands issued via KBD port are
|
||||
* sometimes being delivered to AUX3.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Most (all?) VAIOs do not have external PS/2 ports nor
|
||||
* they implement active multiplexing properly, and
|
||||
* MUX discovery usually messes up keyboard/touchpad.
|
||||
*/
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Amoi M636/A737 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Lenovo 3000 n100 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Acer Aspire 5710 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Gericom Bellagio */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* IBM 2656 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Dell XPS M1530 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Compal HEL80I */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Dell Vostro 1510 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Acer Aspire 5536 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Dell Vostro V13 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Vostro V13"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Newer HP Pavilion dv4 models */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Asus X450LCP */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Avatar AVIU-145A6 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
|
@ -363,6 +628,22 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu A544 laptop */
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1111138 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK A544"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu AH544 laptop */
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK AH544"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Fujitsu U574 laptop */
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
|
||||
|
@ -740,8 +1021,8 @@ static int __init i8042_platform_init(void)
|
|||
if (dmi_check_system(i8042_dmi_noloop_table))
|
||||
i8042_noloop = true;
|
||||
|
||||
if (dmi_check_system(i8042_dmi_mux_table))
|
||||
i8042_nomux = false;
|
||||
if (dmi_check_system(i8042_dmi_nomux_table))
|
||||
i8042_nomux = true;
|
||||
|
||||
if (dmi_check_system(i8042_dmi_notimeout_table))
|
||||
i8042_notimeout = true;
|
||||
|
|
|
@ -39,7 +39,7 @@ static bool i8042_noaux;
|
|||
module_param_named(noaux, i8042_noaux, bool, 0);
|
||||
MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");
|
||||
|
||||
static bool i8042_nomux = true;
|
||||
static bool i8042_nomux;
|
||||
module_param_named(nomux, i8042_nomux, bool, 0);
|
||||
MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present.");
|
||||
|
||||
|
|
|
@ -70,11 +70,11 @@
|
|||
* Documentation/input/input-programming.txt for more details.
|
||||
*/
|
||||
|
||||
static int abs_x[3] = {350, 3900, 5};
|
||||
static int abs_x[3] = {150, 4000, 5};
|
||||
module_param_array(abs_x, int, NULL, 0);
|
||||
MODULE_PARM_DESC(abs_x, "Touchscreen absolute X min, max, fuzz");
|
||||
|
||||
static int abs_y[3] = {320, 3750, 40};
|
||||
static int abs_y[3] = {200, 4000, 40};
|
||||
module_param_array(abs_y, int, NULL, 0);
|
||||
MODULE_PARM_DESC(abs_y, "Touchscreen absolute Y min, max, fuzz");
|
||||
|
||||
|
|
Loading…
Reference in a new issue