summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-09-12 07:53:05 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-09-12 07:53:05 +0200
commit9b1102c02bfd39352e0d2995c733edb7be3b0601 (patch)
tree3f089c640bab75c020b69f5dcf44d744a0a7f2e4 /drivers
parentf48a1596f4e911d4516b986e4778f18321b39b48 (diff)
parenta10dbfc4175867c0d15f02b7f244837c5d41478e (diff)
downloadbarebox-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.c13
-rw-r--r--drivers/input/Kconfig6
-rw-r--r--drivers/input/Makefile1
-rw-r--r--drivers/input/specialkeys.c36
-rw-r--r--drivers/mfd/rave-sp.c18
-rw-r--r--drivers/net/phy/mv88e6xxx/chip.c1
-rw-r--r--drivers/net/smc911x.c2
-rw-r--r--drivers/nvme/host/core.c4
-rw-r--r--drivers/serial/efi-stdio.c5
-rw-r--r--drivers/serial/serial_efi.c5
-rw-r--r--drivers/usb/gadget/fsl_udc.c9
-rw-r--r--drivers/video/stm.c4
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(&notifier);
+}
+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;