diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-09-12 07:53:05 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-09-12 07:53:05 +0200 |
commit | 9b1102c02bfd39352e0d2995c733edb7be3b0601 (patch) | |
tree | 3f089c640bab75c020b69f5dcf44d744a0a7f2e4 /drivers | |
parent | f48a1596f4e911d4516b986e4778f18321b39b48 (diff) | |
parent | a10dbfc4175867c0d15f02b7f244837c5d41478e (diff) | |
download | barebox-9b1102c02bfd39352e0d2995c733edb7be3b0601.tar.gz barebox-9b1102c02bfd39352e0d2995c733edb7be3b0601.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/i2c/muxes/i2c-mux-pca954x.c | 13 | ||||
-rw-r--r-- | drivers/input/Kconfig | 6 | ||||
-rw-r--r-- | drivers/input/Makefile | 1 | ||||
-rw-r--r-- | drivers/input/specialkeys.c | 36 | ||||
-rw-r--r-- | drivers/mfd/rave-sp.c | 18 | ||||
-rw-r--r-- | drivers/net/phy/mv88e6xxx/chip.c | 1 | ||||
-rw-r--r-- | drivers/net/smc911x.c | 2 | ||||
-rw-r--r-- | drivers/nvme/host/core.c | 4 | ||||
-rw-r--r-- | drivers/serial/efi-stdio.c | 5 | ||||
-rw-r--r-- | drivers/serial/serial_efi.c | 5 | ||||
-rw-r--r-- | drivers/usb/gadget/fsl_udc.c | 9 | ||||
-rw-r--r-- | drivers/video/stm.c | 4 |
12 files changed, 78 insertions, 26 deletions
diff --git a/drivers/i2c/muxes/i2c-mux-pca954x.c b/drivers/i2c/muxes/i2c-mux-pca954x.c index d397e803b1..42bde5ed1c 100644 --- a/drivers/i2c/muxes/i2c-mux-pca954x.c +++ b/drivers/i2c/muxes/i2c-mux-pca954x.c @@ -177,7 +177,7 @@ static int pca954x_probe(struct device_d *dev) { struct i2c_client *client = to_i2c_client(dev); struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); - int num, force; + int num; struct pca954x *data; uintptr_t tmp; int ret = -ENODEV; @@ -195,10 +195,11 @@ static int pca954x_probe(struct device_d *dev) if (gpio_is_valid(gpio)) gpio_direction_output(gpio, 1); - /* Read the mux register at addr to verify - * that the mux is in fact present. + /* Write the mux register at addr to verify + * that the mux is in fact present. This also + * initializes the mux to disconnected state. */ - if (i2c_smbus_read_byte(client) < 0) { + if (i2c_smbus_write_byte(client, 0) < 0) { dev_warn(&client->dev, "probe failed\n"); goto exit_free; } @@ -220,8 +221,8 @@ static int pca954x_probe(struct device_d *dev) if (data->virt_adaps[num] == NULL) { ret = -ENODEV; dev_err(&client->dev, - "failed to register multiplexed adapter" - " %d as bus %d\n", num, force); + "failed to register multiplexed adapter%d\n", + num); goto virt_reg_failed; } } diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index 1f89ae3892..be061683fb 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -64,4 +64,10 @@ config KEYBOARD_USB help This driver implements support for usb keyboard. +config INPUT_SPECIALKEYS + bool "Special keys handler" + select INPUT + help + Say Y here to handle key events like KEY_RESTART and KEY_POWER. + endmenu diff --git a/drivers/input/Makefile b/drivers/input/Makefile index e694a98d10..36a4204d53 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -5,3 +5,4 @@ obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o obj-$(CONFIG_KEYBOARD_TWL6030) += twl6030_pwrbtn.o obj-$(CONFIG_KEYBOARD_IMX_KEYPAD) += imx_keypad.o obj-$(CONFIG_KEYBOARD_QT1070) += qt1070.o +obj-$(CONFIG_INPUT_SPECIALKEYS) += specialkeys.o diff --git a/drivers/input/specialkeys.c b/drivers/input/specialkeys.c new file mode 100644 index 0000000000..ff29b8455d --- /dev/null +++ b/drivers/input/specialkeys.c @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2019 Ahmad Fatoum, Pengutronix + +#include <common.h> +#include <restart.h> +#include <poweroff.h> +#include <init.h> +#include <input/input.h> +#include <dt-bindings/input/linux-event-codes.h> + +static void input_specialkeys_notify(struct input_notifier *in, + struct input_event *ev) +{ + switch (ev->code) { + case KEY_RESTART: + pr_info("Triggering reset due to special key.\n", ev->code); + restart_machine(); + break; + + case KEY_POWER: + pr_info("Triggering poweroff due to special key.\n", ev->code); + poweroff_machine(); + break; + } + + pr_debug("ignoring code: %d\n", ev->code); +} + +static struct input_notifier notifier; + +static int input_specialkeys_init(void) +{ + notifier.notify = input_specialkeys_notify; + return input_register_notfier(¬ifier); +} +late_initcall(input_specialkeys_init); diff --git a/drivers/mfd/rave-sp.c b/drivers/mfd/rave-sp.c index 1448c4143f..67f7d4c654 100644 --- a/drivers/mfd/rave-sp.c +++ b/drivers/mfd/rave-sp.c @@ -640,6 +640,7 @@ static int rave_sp_emulated_get_status(struct rave_sp *sp, [0] = RAVE_SP_CMD_GET_FIRMWARE_VERSION, [1] = 0, }; + u8 firmware_mode; int ret; ret = rave_sp_exec(sp, cmd, sizeof(cmd), &status->firmware_version, @@ -648,8 +649,21 @@ static int rave_sp_emulated_get_status(struct rave_sp *sp, return ret; cmd[0] = RAVE_SP_CMD_GET_BOOTLOADER_VERSION; - return rave_sp_exec(sp, cmd, sizeof(cmd), &status->bootloader_version, - sizeof(status->bootloader_version)); + ret = rave_sp_exec(sp, cmd, sizeof(cmd), &status->bootloader_version, + sizeof(status->bootloader_version)); + if (ret) + return ret; + + cmd[0] = RAVE_SP_CMD_GET_OPERATIONAL_MODE; + ret = rave_sp_exec(sp, cmd, sizeof(cmd), &firmware_mode, + sizeof(firmware_mode)); + if (ret) + return ret; + + status->general_status = + firmware_mode ? RAVE_SP_STATUS_GS_FIRMWARE_MODE : 0; + + return 0; } static int rave_sp_get_status(struct rave_sp *sp) diff --git a/drivers/net/phy/mv88e6xxx/chip.c b/drivers/net/phy/mv88e6xxx/chip.c index ac08b5ef54..9688dbd1be 100644 --- a/drivers/net/phy/mv88e6xxx/chip.c +++ b/drivers/net/phy/mv88e6xxx/chip.c @@ -572,7 +572,6 @@ static const struct mv88e6xxx_info mv88e6xxx_table[] = { .name = "Marvell 88E6352", .num_ports = 7, .port_base_addr = 0x10, - .ops = &mv88e6352_ops, .global2_addr = 0x1c, .ops = &mv88e6352_ops, }, diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c index 0d5dcb31ee..ea7cea5f1b 100644 --- a/drivers/net/smc911x.c +++ b/drivers/net/smc911x.c @@ -540,7 +540,7 @@ static int smc911x_probe(struct device_d *dev) * poll the READY bit in PMT_CTRL. Any other access to the device is * forbidden while this bit isn't set. Try for 100ms */ - ret = wait_on_timeout(100 * MSECOND, !smc911x_reg_read(priv, PMT_CTRL) & PMT_CTRL_READY); + ret = wait_on_timeout(100 * MSECOND, smc911x_reg_read(priv, PMT_CTRL) & PMT_CTRL_READY); if (!ret) { dev_err(dev, "Device not READY in 100ms aborting\n"); return -ENODEV; diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index e0984708b4..d2c2b6f306 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -94,7 +94,7 @@ EXPORT_SYMBOL_GPL(nvme_set_queue_count); static int nvme_wait_ready(struct nvme_ctrl *ctrl, u64 cap, bool enabled) { uint64_t start = get_time_ns(); - unsigned long timeout = + uint64_t timeout = ((NVME_CAP_TIMEOUT(cap) + 1) * HZ / 2); u32 csts, bit = enabled ? NVME_CSTS_RDY : 0; int ret; @@ -496,7 +496,7 @@ EXPORT_SYMBOL_GPL(nvme_enable_ctrl); int nvme_shutdown_ctrl(struct nvme_ctrl *ctrl) { uint64_t start = get_time_ns(); - unsigned long timeout = SHUTDOWN_TIMEOUT; + uint64_t timeout = SHUTDOWN_TIMEOUT; u32 csts; int ret; diff --git a/drivers/serial/efi-stdio.c b/drivers/serial/efi-stdio.c index 0703f727e7..2ca89fa4f8 100644 --- a/drivers/serial/efi-stdio.c +++ b/drivers/serial/efi-stdio.c @@ -243,12 +243,13 @@ static int efi_process_key(struct efi_console_priv *priv, const char *inp) return 1; } -static int efi_console_puts(struct console_device *cdev, const char *s) +static int efi_console_puts(struct console_device *cdev, const char *s, + size_t nbytes) { struct efi_console_priv *priv = to_efi(cdev); int n = 0; - while (*s) { + while (nbytes--) { if (*s == 27) { priv->efi_console_buffer[n] = 0; priv->out->output_string(priv->out, diff --git a/drivers/serial/serial_efi.c b/drivers/serial/serial_efi.c index f0a2b22c2b..667d51f622 100644 --- a/drivers/serial/serial_efi.c +++ b/drivers/serial/serial_efi.c @@ -130,13 +130,14 @@ static void efi_serial_putc(struct console_device *cdev, char c) serial->write(serial, &buffersize, &c); } -static int efi_serial_puts(struct console_device *cdev, const char *s) +static int efi_serial_puts(struct console_device *cdev, const char *s, + size_t nbytes) { struct efi_serial_port *uart = to_efi_serial_port(cdev); struct efi_serial_io_protocol *serial = uart->serial; uint32_t control; efi_status_t efiret; - unsigned long buffersize = strlen(s) * sizeof(char); + unsigned long buffersize = nbytes; do { efiret = serial->getcontrol(serial, &control); diff --git a/drivers/usb/gadget/fsl_udc.c b/drivers/usb/gadget/fsl_udc.c index a47ba20f46..a44c7abc01 100644 --- a/drivers/usb/gadget/fsl_udc.c +++ b/drivers/usb/gadget/fsl_udc.c @@ -1422,8 +1422,7 @@ static void udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe) { struct fsl_ep *ep = get_ep_by_pipe(udc, pipe); - if (ep->name) - nuke(ep, -ESHUTDOWN); + nuke(ep, -ESHUTDOWN); } /* Clear up all ep queues */ @@ -1914,12 +1913,6 @@ static void dtd_complete_irq(struct fsl_udc *udc) curr_ep = get_ep_by_pipe(udc, i); - /* If the ep is configured */ - if (curr_ep->name == NULL) { - WARNING("Invalid EP?"); - continue; - } - /* process the req queue until an uncomplete request */ list_for_each_entry_safe(curr_req, temp_req, &curr_ep->queue, queue) { diff --git a/drivers/video/stm.c b/drivers/video/stm.c index 0c190d36ae..d4a618fe50 100644 --- a/drivers/video/stm.c +++ b/drivers/video/stm.c @@ -551,9 +551,9 @@ static int stmfb_probe(struct device_d *hw_dev) } modes = of_get_display_timings(display); - if (IS_ERR(modes)) { + if (!modes) { dev_err(hw_dev, "unable to parse display timings\n"); - return PTR_ERR(modes); + return -EINVAL; } fbi.info.modes.modes = modes->modes; |