Lines Matching refs:s
358 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_read() local
362 regmap_read(s->regmap, (reg << SC16IS7XX_REG_SHIFT) | line, &val); in sc16is7xx_port_read()
369 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_write() local
372 regmap_write(s->regmap, (reg << SC16IS7XX_REG_SHIFT) | line, val); in sc16is7xx_port_write()
377 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_fifo_read() local
381 regcache_cache_bypass(s->regmap, true); in sc16is7xx_fifo_read()
382 regmap_raw_read(s->regmap, addr, s->buf, rxlen); in sc16is7xx_fifo_read()
383 regcache_cache_bypass(s->regmap, false); in sc16is7xx_fifo_read()
388 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_fifo_write() local
392 regcache_cache_bypass(s->regmap, true); in sc16is7xx_fifo_write()
393 regmap_raw_write(s->regmap, addr, s->buf, to_send); in sc16is7xx_fifo_write()
394 regcache_cache_bypass(s->regmap, false); in sc16is7xx_fifo_write()
400 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_port_update() local
403 regmap_update_bits(s->regmap, (reg << SC16IS7XX_REG_SHIFT) | line, in sc16is7xx_port_update()
489 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_set_baud() local
506 regcache_cache_bypass(s->regmap, true); in sc16is7xx_set_baud()
509 regcache_cache_bypass(s->regmap, false); in sc16is7xx_set_baud()
523 regcache_cache_bypass(s->regmap, true); in sc16is7xx_set_baud()
526 regcache_cache_bypass(s->regmap, false); in sc16is7xx_set_baud()
537 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_handle_rx() local
541 if (unlikely(rxlen >= sizeof(s->buf))) { in sc16is7xx_handle_rx()
547 rxlen = sizeof(s->buf); in sc16is7xx_handle_rx()
560 s->buf[0] = sc16is7xx_port_read(port, SC16IS7XX_RHR_REG); in sc16is7xx_handle_rx()
596 ch = s->buf[i]; in sc16is7xx_handle_rx()
614 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_handle_tx() local
640 s->buf[i] = xmit->buf[xmit->tail]; in sc16is7xx_handle_tx()
651 static void sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) in sc16is7xx_port_irq() argument
653 struct uart_port *port = &s->p[portno].port; in sc16is7xx_port_irq()
693 struct sc16is7xx_port *s = to_sc16is7xx_port(ws, irq_work); in sc16is7xx_ist() local
696 for (i = 0; i < s->devtype->nr_uart; ++i) in sc16is7xx_ist()
697 sc16is7xx_port_irq(s, i); in sc16is7xx_ist()
702 struct sc16is7xx_port *s = (struct sc16is7xx_port *)dev_id; in sc16is7xx_irq() local
704 queue_kthread_work(&s->kworker, &s->irq_work); in sc16is7xx_irq()
767 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_ier_clear() local
772 queue_kthread_work(&s->kworker, &one->reg_work); in sc16is7xx_ier_clear()
787 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_start_tx() local
790 queue_kthread_work(&s->kworker, &one->tx_work); in sc16is7xx_start_tx()
812 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_set_mctrl() local
816 queue_kthread_work(&s->kworker, &one->reg_work); in sc16is7xx_set_mctrl()
830 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_set_termios() local
888 regcache_cache_bypass(s->regmap, true); in sc16is7xx_set_termios()
900 regcache_cache_bypass(s->regmap, false); in sc16is7xx_set_termios()
920 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_config_rs485() local
945 queue_kthread_work(&s->kworker, &one->reg_work); in sc16is7xx_config_rs485()
952 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_startup() local
968 regcache_cache_bypass(s->regmap, true); in sc16is7xx_startup()
985 regcache_cache_bypass(s->regmap, false); in sc16is7xx_startup()
1006 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_shutdown() local
1019 flush_kthread_worker(&s->kworker); in sc16is7xx_shutdown()
1024 struct sc16is7xx_port *s = dev_get_drvdata(port->dev); in sc16is7xx_type() local
1026 return (port->type == PORT_SC16IS7XX) ? s->devtype->name : NULL; in sc16is7xx_type()
1042 struct serial_struct *s) in sc16is7xx_verify_port() argument
1044 if ((s->type != PORT_UNKNOWN) && (s->type != PORT_SC16IS7XX)) in sc16is7xx_verify_port()
1046 if (s->irq != port->irq) in sc16is7xx_verify_port()
1086 struct sc16is7xx_port *s = container_of(chip, struct sc16is7xx_port, in sc16is7xx_gpio_get() local
1088 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_get()
1097 struct sc16is7xx_port *s = container_of(chip, struct sc16is7xx_port, in sc16is7xx_gpio_set() local
1099 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_set()
1108 struct sc16is7xx_port *s = container_of(chip, struct sc16is7xx_port, in sc16is7xx_gpio_direction_input() local
1110 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_direction_input()
1120 struct sc16is7xx_port *s = container_of(chip, struct sc16is7xx_port, in sc16is7xx_gpio_direction_output() local
1122 struct uart_port *port = &s->p[0].port; in sc16is7xx_gpio_direction_output()
1140 struct sc16is7xx_port *s; in sc16is7xx_probe() local
1146 s = devm_kzalloc(dev, sizeof(*s) + in sc16is7xx_probe()
1149 if (!s) { in sc16is7xx_probe()
1154 s->clk = devm_clk_get(dev, NULL); in sc16is7xx_probe()
1155 if (IS_ERR(s->clk)) { in sc16is7xx_probe()
1159 return PTR_ERR(s->clk); in sc16is7xx_probe()
1161 clk_prepare_enable(s->clk); in sc16is7xx_probe()
1162 freq = clk_get_rate(s->clk); in sc16is7xx_probe()
1165 s->regmap = regmap; in sc16is7xx_probe()
1166 s->devtype = devtype; in sc16is7xx_probe()
1167 dev_set_drvdata(dev, s); in sc16is7xx_probe()
1169 init_kthread_worker(&s->kworker); in sc16is7xx_probe()
1170 init_kthread_work(&s->irq_work, sc16is7xx_ist); in sc16is7xx_probe()
1171 s->kworker_task = kthread_run(kthread_worker_fn, &s->kworker, in sc16is7xx_probe()
1173 if (IS_ERR(s->kworker_task)) { in sc16is7xx_probe()
1174 ret = PTR_ERR(s->kworker_task); in sc16is7xx_probe()
1177 sched_setscheduler(s->kworker_task, SCHED_FIFO, &sched_param); in sc16is7xx_probe()
1182 s->gpio.owner = THIS_MODULE; in sc16is7xx_probe()
1183 s->gpio.dev = dev; in sc16is7xx_probe()
1184 s->gpio.label = dev_name(dev); in sc16is7xx_probe()
1185 s->gpio.direction_input = sc16is7xx_gpio_direction_input; in sc16is7xx_probe()
1186 s->gpio.get = sc16is7xx_gpio_get; in sc16is7xx_probe()
1187 s->gpio.direction_output = sc16is7xx_gpio_direction_output; in sc16is7xx_probe()
1188 s->gpio.set = sc16is7xx_gpio_set; in sc16is7xx_probe()
1189 s->gpio.base = -1; in sc16is7xx_probe()
1190 s->gpio.ngpio = devtype->nr_gpio; in sc16is7xx_probe()
1191 s->gpio.can_sleep = 1; in sc16is7xx_probe()
1192 ret = gpiochip_add(&s->gpio); in sc16is7xx_probe()
1199 s->p[i].line = i; in sc16is7xx_probe()
1201 s->p[i].port.dev = dev; in sc16is7xx_probe()
1202 s->p[i].port.irq = irq; in sc16is7xx_probe()
1203 s->p[i].port.type = PORT_SC16IS7XX; in sc16is7xx_probe()
1204 s->p[i].port.fifosize = SC16IS7XX_FIFO_SIZE; in sc16is7xx_probe()
1205 s->p[i].port.flags = UPF_FIXED_TYPE | UPF_LOW_LATENCY; in sc16is7xx_probe()
1206 s->p[i].port.iotype = UPIO_PORT; in sc16is7xx_probe()
1207 s->p[i].port.uartclk = freq; in sc16is7xx_probe()
1208 s->p[i].port.rs485_config = sc16is7xx_config_rs485; in sc16is7xx_probe()
1209 s->p[i].port.ops = &sc16is7xx_ops; in sc16is7xx_probe()
1210 s->p[i].port.line = sc16is7xx_alloc_line(); in sc16is7xx_probe()
1211 if (s->p[i].port.line >= SC16IS7XX_MAX_DEVS) { in sc16is7xx_probe()
1217 sc16is7xx_port_write(&s->p[i].port, SC16IS7XX_IER_REG, 0); in sc16is7xx_probe()
1219 sc16is7xx_port_write(&s->p[i].port, SC16IS7XX_EFCR_REG, in sc16is7xx_probe()
1223 init_kthread_work(&s->p[i].tx_work, sc16is7xx_tx_proc); in sc16is7xx_probe()
1224 init_kthread_work(&s->p[i].reg_work, sc16is7xx_reg_proc); in sc16is7xx_probe()
1226 uart_add_one_port(&sc16is7xx_uart, &s->p[i].port); in sc16is7xx_probe()
1228 sc16is7xx_power(&s->p[i].port, 0); in sc16is7xx_probe()
1233 IRQF_ONESHOT | flags, dev_name(dev), s); in sc16is7xx_probe()
1239 uart_remove_one_port(&sc16is7xx_uart, &s->p[i].port); in sc16is7xx_probe()
1240 clear_bit(s->p[i].port.line, &sc16is7xx_lines); in sc16is7xx_probe()
1245 gpiochip_remove(&s->gpio); in sc16is7xx_probe()
1249 kthread_stop(s->kworker_task); in sc16is7xx_probe()
1252 if (!IS_ERR(s->clk)) in sc16is7xx_probe()
1253 clk_disable_unprepare(s->clk); in sc16is7xx_probe()
1260 struct sc16is7xx_port *s = dev_get_drvdata(dev); in sc16is7xx_remove() local
1264 if (s->devtype->nr_gpio) in sc16is7xx_remove()
1265 gpiochip_remove(&s->gpio); in sc16is7xx_remove()
1268 for (i = 0; i < s->devtype->nr_uart; i++) { in sc16is7xx_remove()
1269 uart_remove_one_port(&sc16is7xx_uart, &s->p[i].port); in sc16is7xx_remove()
1270 clear_bit(s->p[i].port.line, &sc16is7xx_lines); in sc16is7xx_remove()
1271 sc16is7xx_power(&s->p[i].port, 0); in sc16is7xx_remove()
1274 flush_kthread_worker(&s->kworker); in sc16is7xx_remove()
1275 kthread_stop(s->kworker_task); in sc16is7xx_remove()
1277 if (!IS_ERR(s->clk)) in sc16is7xx_remove()
1278 clk_disable_unprepare(s->clk); in sc16is7xx_remove()