Lines Matching refs:s
286 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_baud() local
288 struct sccnxp_chip *chip = s->chip; in sccnxp_set_baud()
325 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_enable_irq() local
327 s->imr |= mask << (port->line * 4); in sccnxp_enable_irq()
328 sccnxp_write(port, SCCNXP_IMR_REG, s->imr); in sccnxp_enable_irq()
333 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_disable_irq() local
335 s->imr &= ~(mask << (port->line * 4)); in sccnxp_disable_irq()
336 sccnxp_write(port, SCCNXP_IMR_REG, s->imr); in sccnxp_disable_irq()
342 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_bit() local
344 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(sig)) { in sccnxp_set_bit()
345 bitmask = 1 << MCTRL_OBIT(s->pdata.mctrl_cfg[port->line], sig); in sccnxp_set_bit()
413 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_handle_tx() local
428 if (s->chip->flags & SCCNXP_HAVE_IO) in sccnxp_handle_tx()
448 static void sccnxp_handle_events(struct sccnxp_port *s) in sccnxp_handle_events() argument
454 isr = sccnxp_read(&s->port[0], SCCNXP_ISR_REG); in sccnxp_handle_events()
455 isr &= s->imr; in sccnxp_handle_events()
459 for (i = 0; i < s->uart.nr; i++) { in sccnxp_handle_events()
460 if (s->opened[i] && (isr & ISR_RXRDY(i))) in sccnxp_handle_events()
461 sccnxp_handle_rx(&s->port[i]); in sccnxp_handle_events()
462 if (s->opened[i] && (isr & ISR_TXRDY(i))) in sccnxp_handle_events()
463 sccnxp_handle_tx(&s->port[i]); in sccnxp_handle_events()
470 struct sccnxp_port *s = (struct sccnxp_port *)data; in sccnxp_timer() local
473 spin_lock_irqsave(&s->lock, flags); in sccnxp_timer()
474 sccnxp_handle_events(s); in sccnxp_timer()
475 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_timer()
477 mod_timer(&s->timer, jiffies + usecs_to_jiffies(s->pdata.poll_time_us)); in sccnxp_timer()
482 struct sccnxp_port *s = (struct sccnxp_port *)dev_id; in sccnxp_ist() local
485 spin_lock_irqsave(&s->lock, flags); in sccnxp_ist()
486 sccnxp_handle_events(s); in sccnxp_ist()
487 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_ist()
494 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_start_tx() local
497 spin_lock_irqsave(&s->lock, flags); in sccnxp_start_tx()
500 if (s->chip->flags & SCCNXP_HAVE_IO) in sccnxp_start_tx()
505 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_start_tx()
515 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_stop_rx() local
518 spin_lock_irqsave(&s->lock, flags); in sccnxp_stop_rx()
520 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_stop_rx()
527 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_tx_empty() local
529 spin_lock_irqsave(&s->lock, flags); in sccnxp_tx_empty()
531 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_tx_empty()
538 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_mctrl() local
541 if (!(s->chip->flags & SCCNXP_HAVE_IO)) in sccnxp_set_mctrl()
544 spin_lock_irqsave(&s->lock, flags); in sccnxp_set_mctrl()
549 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_set_mctrl()
556 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_get_mctrl() local
559 if (!(s->chip->flags & SCCNXP_HAVE_IO)) in sccnxp_get_mctrl()
562 spin_lock_irqsave(&s->lock, flags); in sccnxp_get_mctrl()
566 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DSR_IP)) { in sccnxp_get_mctrl()
567 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
572 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(CTS_IP)) { in sccnxp_get_mctrl()
573 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
578 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DCD_IP)) { in sccnxp_get_mctrl()
579 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
584 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(RNG_IP)) { in sccnxp_get_mctrl()
585 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
591 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_get_mctrl()
598 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_break_ctl() local
601 spin_lock_irqsave(&s->lock, flags); in sccnxp_break_ctl()
604 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_break_ctl()
610 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_termios() local
615 spin_lock_irqsave(&s->lock, flags); in sccnxp_set_termios()
677 (s->chip->flags & SCCNXP_HAVE_MR0) ? in sccnxp_set_termios()
691 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_set_termios()
696 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_startup() local
699 spin_lock_irqsave(&s->lock, flags); in sccnxp_startup()
701 if (s->chip->flags & SCCNXP_HAVE_IO) { in sccnxp_startup()
718 s->opened[port->line] = 1; in sccnxp_startup()
720 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_startup()
727 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_shutdown() local
730 spin_lock_irqsave(&s->lock, flags); in sccnxp_shutdown()
732 s->opened[port->line] = 0; in sccnxp_shutdown()
741 if (s->chip->flags & SCCNXP_HAVE_IO) in sccnxp_shutdown()
744 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_shutdown()
749 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_type() local
751 return (port->type == PORT_SC26XX) ? s->chip->name : NULL; in sccnxp_type()
771 static int sccnxp_verify_port(struct uart_port *port, struct serial_struct *s) in sccnxp_verify_port() argument
773 if ((s->type == PORT_UNKNOWN) || (s->type == PORT_SC26XX)) in sccnxp_verify_port()
775 if (s->irq == port->irq) in sccnxp_verify_port()
815 struct sccnxp_port *s = (struct sccnxp_port *)co->data; in sccnxp_console_write() local
816 struct uart_port *port = &s->port[co->index]; in sccnxp_console_write()
819 spin_lock_irqsave(&s->lock, flags); in sccnxp_console_write()
821 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_console_write()
826 struct sccnxp_port *s = (struct sccnxp_port *)co->data; in sccnxp_console_setup() local
827 struct uart_port *port = &s->port[(co->index > 0) ? co->index : 0]; in sccnxp_console_setup()
855 struct sccnxp_port *s; in sccnxp_probe() local
863 s = devm_kzalloc(&pdev->dev, sizeof(struct sccnxp_port), GFP_KERNEL); in sccnxp_probe()
864 if (!s) { in sccnxp_probe()
868 platform_set_drvdata(pdev, s); in sccnxp_probe()
870 spin_lock_init(&s->lock); in sccnxp_probe()
872 s->chip = (struct sccnxp_chip *)pdev->id_entry->driver_data; in sccnxp_probe()
874 s->regulator = devm_regulator_get(&pdev->dev, "vcc"); in sccnxp_probe()
875 if (!IS_ERR(s->regulator)) { in sccnxp_probe()
876 ret = regulator_enable(s->regulator); in sccnxp_probe()
882 } else if (PTR_ERR(s->regulator) == -EPROBE_DEFER) in sccnxp_probe()
892 uartclk = s->chip->freq_std; in sccnxp_probe()
897 if ((uartclk < s->chip->freq_min) || (uartclk > s->chip->freq_max)) { in sccnxp_probe()
904 memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata)); in sccnxp_probe()
906 if (s->pdata.poll_time_us) { in sccnxp_probe()
908 s->pdata.poll_time_us); in sccnxp_probe()
909 s->poll = 1; in sccnxp_probe()
912 if (!s->poll) { in sccnxp_probe()
913 s->irq = platform_get_irq(pdev, 0); in sccnxp_probe()
914 if (s->irq < 0) { in sccnxp_probe()
921 s->uart.owner = THIS_MODULE; in sccnxp_probe()
922 s->uart.dev_name = "ttySC"; in sccnxp_probe()
923 s->uart.major = SCCNXP_MAJOR; in sccnxp_probe()
924 s->uart.minor = SCCNXP_MINOR; in sccnxp_probe()
925 s->uart.nr = s->chip->nr; in sccnxp_probe()
927 s->uart.cons = &s->console; in sccnxp_probe()
928 s->uart.cons->device = uart_console_device; in sccnxp_probe()
929 s->uart.cons->write = sccnxp_console_write; in sccnxp_probe()
930 s->uart.cons->setup = sccnxp_console_setup; in sccnxp_probe()
931 s->uart.cons->flags = CON_PRINTBUFFER; in sccnxp_probe()
932 s->uart.cons->index = -1; in sccnxp_probe()
933 s->uart.cons->data = s; in sccnxp_probe()
934 strcpy(s->uart.cons->name, "ttySC"); in sccnxp_probe()
936 ret = uart_register_driver(&s->uart); in sccnxp_probe()
942 for (i = 0; i < s->uart.nr; i++) { in sccnxp_probe()
943 s->port[i].line = i; in sccnxp_probe()
944 s->port[i].dev = &pdev->dev; in sccnxp_probe()
945 s->port[i].irq = s->irq; in sccnxp_probe()
946 s->port[i].type = PORT_SC26XX; in sccnxp_probe()
947 s->port[i].fifosize = s->chip->fifosize; in sccnxp_probe()
948 s->port[i].flags = UPF_SKIP_TEST | UPF_FIXED_TYPE; in sccnxp_probe()
949 s->port[i].iotype = UPIO_MEM; in sccnxp_probe()
950 s->port[i].mapbase = res->start; in sccnxp_probe()
951 s->port[i].membase = membase; in sccnxp_probe()
952 s->port[i].regshift = s->pdata.reg_shift; in sccnxp_probe()
953 s->port[i].uartclk = uartclk; in sccnxp_probe()
954 s->port[i].ops = &sccnxp_ops; in sccnxp_probe()
955 uart_add_one_port(&s->uart, &s->port[i]); in sccnxp_probe()
957 if (s->chip->flags & SCCNXP_HAVE_IO) in sccnxp_probe()
958 sccnxp_set_bit(&s->port[i], DIR_OP, 0); in sccnxp_probe()
962 s->imr = 0; in sccnxp_probe()
963 sccnxp_write(&s->port[0], SCCNXP_IMR_REG, 0); in sccnxp_probe()
965 if (!s->poll) { in sccnxp_probe()
966 ret = devm_request_threaded_irq(&pdev->dev, s->irq, NULL, in sccnxp_probe()
970 dev_name(&pdev->dev), s); in sccnxp_probe()
974 dev_err(&pdev->dev, "Unable to reguest IRQ %i\n", s->irq); in sccnxp_probe()
976 init_timer(&s->timer); in sccnxp_probe()
977 setup_timer(&s->timer, sccnxp_timer, (unsigned long)s); in sccnxp_probe()
978 mod_timer(&s->timer, jiffies + in sccnxp_probe()
979 usecs_to_jiffies(s->pdata.poll_time_us)); in sccnxp_probe()
983 uart_unregister_driver(&s->uart); in sccnxp_probe()
985 if (!IS_ERR(s->regulator)) in sccnxp_probe()
986 return regulator_disable(s->regulator); in sccnxp_probe()
994 struct sccnxp_port *s = platform_get_drvdata(pdev); in sccnxp_remove() local
996 if (!s->poll) in sccnxp_remove()
997 devm_free_irq(&pdev->dev, s->irq, s); in sccnxp_remove()
999 del_timer_sync(&s->timer); in sccnxp_remove()
1001 for (i = 0; i < s->uart.nr; i++) in sccnxp_remove()
1002 uart_remove_one_port(&s->uart, &s->port[i]); in sccnxp_remove()
1004 uart_unregister_driver(&s->uart); in sccnxp_remove()
1006 if (!IS_ERR(s->regulator)) in sccnxp_remove()
1007 return regulator_disable(s->regulator); in sccnxp_remove()