From: Jag Raman Date: Tue, 15 Aug 2017 21:03:03 +0000 (-0400) Subject: sparc64: vcc: Enable LDC event processing engine X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=103b9b0bc9e068d5e9432ee1da526d8feabc0216;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git sparc64: vcc: Enable LDC event processing engine Enable event processing engine to handle LDC events Signed-off-by: Jagannathan Raman Reviewed-by: Liam Merwick Reviewed-by: Shannon Nelson Signed-off-by: David S. Miller --- diff --git a/drivers/tty/vcc.c b/drivers/tty/vcc.c index 27566d5f7df0..91f663d207b6 100644 --- a/drivers/tty/vcc.c +++ b/drivers/tty/vcc.c @@ -437,8 +437,42 @@ done: vcc_put(port, false); } +/** + * vcc_event() - LDC event processing engine + * @arg: VCC private data + * @event: LDC event + * + * Handles LDC events for VCC + */ static void vcc_event(void *arg, int event) { + struct vio_driver_state *vio; + struct vcc_port *port; + unsigned long flags; + int rv; + + port = arg; + vio = &port->vio; + + spin_lock_irqsave(&port->lock, flags); + + switch (event) { + case LDC_EVENT_RESET: + case LDC_EVENT_UP: + vio_link_state_change(vio, event); + break; + + case LDC_EVENT_DATA_READY: + rv = vcc_ldc_read(port); + if (rv == -ECONNRESET) + vio_conn_reset(vio); + break; + + default: + pr_err("VCC: unexpected LDC event(%d)\n", event); + } + + spin_unlock_irqrestore(&port->lock, flags); } static struct ldc_channel_config vcc_ldc_cfg = {