• Home
  • Raw
  • Download

Lines Matching refs:s

151 	struct sccnxp_port *s = dev_get_drvdata(port->dev);  in sccnxp_read()  local
153 return sccnxp_raw_read(port->membase, reg & s->addr_mask, in sccnxp_read()
159 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_write() local
161 sccnxp_raw_write(port->membase, reg & s->addr_mask, port->regshift, v); in sccnxp_write()
225 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_baud() local
231 if (baud_std[i].mr0 && !(s->flags & SCCNXP_HAVE_MR0)) in sccnxp_set_baud()
233 div_std = DIV_ROUND_CLOSEST(s->freq_std, baud_std[i].baud); in sccnxp_set_baud()
243 if (s->flags & SCCNXP_HAVE_MR0) { in sccnxp_set_baud()
263 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_enable_irq() local
265 s->imr |= mask << (port->line * 4); in sccnxp_enable_irq()
266 sccnxp_write(port, SCCNXP_IMR_REG, s->imr); in sccnxp_enable_irq()
271 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_disable_irq() local
273 s->imr &= ~(mask << (port->line * 4)); in sccnxp_disable_irq()
274 sccnxp_write(port, SCCNXP_IMR_REG, s->imr); in sccnxp_disable_irq()
280 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_bit() local
282 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(sig)) { in sccnxp_set_bit()
283 bitmask = 1 << MCTRL_OBIT(s->pdata.mctrl_cfg[port->line], sig); in sccnxp_set_bit()
351 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_handle_tx() local
366 if (s->flags & SCCNXP_HAVE_IO) in sccnxp_handle_tx()
386 static void sccnxp_handle_events(struct sccnxp_port *s) in sccnxp_handle_events() argument
392 isr = sccnxp_read(&s->port[0], SCCNXP_ISR_REG); in sccnxp_handle_events()
393 isr &= s->imr; in sccnxp_handle_events()
397 for (i = 0; i < s->uart.nr; i++) { in sccnxp_handle_events()
398 if (s->opened[i] && (isr & ISR_RXRDY(i))) in sccnxp_handle_events()
399 sccnxp_handle_rx(&s->port[i]); in sccnxp_handle_events()
400 if (s->opened[i] && (isr & ISR_TXRDY(i))) in sccnxp_handle_events()
401 sccnxp_handle_tx(&s->port[i]); in sccnxp_handle_events()
408 struct sccnxp_port *s = (struct sccnxp_port *)data; in sccnxp_timer() local
411 spin_lock_irqsave(&s->lock, flags); in sccnxp_timer()
412 sccnxp_handle_events(s); in sccnxp_timer()
413 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_timer()
415 if (!timer_pending(&s->timer)) in sccnxp_timer()
416 mod_timer(&s->timer, jiffies + in sccnxp_timer()
417 usecs_to_jiffies(s->pdata.poll_time_us)); in sccnxp_timer()
422 struct sccnxp_port *s = (struct sccnxp_port *)dev_id; in sccnxp_ist() local
425 spin_lock_irqsave(&s->lock, flags); in sccnxp_ist()
426 sccnxp_handle_events(s); in sccnxp_ist()
427 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_ist()
434 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_start_tx() local
437 spin_lock_irqsave(&s->lock, flags); in sccnxp_start_tx()
440 if (s->flags & SCCNXP_HAVE_IO) in sccnxp_start_tx()
445 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_start_tx()
455 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_stop_rx() local
458 spin_lock_irqsave(&s->lock, flags); in sccnxp_stop_rx()
460 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_stop_rx()
467 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_tx_empty() local
469 spin_lock_irqsave(&s->lock, flags); in sccnxp_tx_empty()
471 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_tx_empty()
483 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_mctrl() local
486 if (!(s->flags & SCCNXP_HAVE_IO)) in sccnxp_set_mctrl()
489 spin_lock_irqsave(&s->lock, flags); in sccnxp_set_mctrl()
494 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_set_mctrl()
501 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_get_mctrl() local
504 if (!(s->flags & SCCNXP_HAVE_IO)) in sccnxp_get_mctrl()
507 spin_lock_irqsave(&s->lock, flags); in sccnxp_get_mctrl()
511 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DSR_IP)) { in sccnxp_get_mctrl()
512 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
517 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(CTS_IP)) { in sccnxp_get_mctrl()
518 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
523 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(DCD_IP)) { in sccnxp_get_mctrl()
524 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
529 if (s->pdata.mctrl_cfg[port->line] & MCTRL_MASK(RNG_IP)) { in sccnxp_get_mctrl()
530 bitmask = 1 << MCTRL_IBIT(s->pdata.mctrl_cfg[port->line], in sccnxp_get_mctrl()
536 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_get_mctrl()
543 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_break_ctl() local
546 spin_lock_irqsave(&s->lock, flags); in sccnxp_break_ctl()
549 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_break_ctl()
555 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_set_termios() local
560 spin_lock_irqsave(&s->lock, flags); in sccnxp_set_termios()
620 (s->flags & SCCNXP_HAVE_MR0) ? in sccnxp_set_termios()
634 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_set_termios()
639 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_startup() local
642 spin_lock_irqsave(&s->lock, flags); in sccnxp_startup()
644 if (s->flags & SCCNXP_HAVE_IO) { in sccnxp_startup()
661 s->opened[port->line] = 1; in sccnxp_startup()
663 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_startup()
670 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_shutdown() local
673 spin_lock_irqsave(&s->lock, flags); in sccnxp_shutdown()
675 s->opened[port->line] = 0; in sccnxp_shutdown()
684 if (s->flags & SCCNXP_HAVE_IO) in sccnxp_shutdown()
687 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_shutdown()
692 struct sccnxp_port *s = dev_get_drvdata(port->dev); in sccnxp_type() local
694 return (port->type == PORT_SC26XX) ? s->name : NULL; in sccnxp_type()
714 static int sccnxp_verify_port(struct uart_port *port, struct serial_struct *s) in sccnxp_verify_port() argument
716 if ((s->type == PORT_UNKNOWN) || (s->type == PORT_SC26XX)) in sccnxp_verify_port()
718 if (s->irq == port->irq) in sccnxp_verify_port()
759 struct sccnxp_port *s = (struct sccnxp_port *)co->data; in sccnxp_console_write() local
760 struct uart_port *port = &s->port[co->index]; in sccnxp_console_write()
763 spin_lock_irqsave(&s->lock, flags); in sccnxp_console_write()
765 spin_unlock_irqrestore(&s->lock, flags); in sccnxp_console_write()
770 struct sccnxp_port *s = (struct sccnxp_port *)co->data; in sccnxp_console_setup() local
771 struct uart_port *port = &s->port[(co->index > 0) ? co->index : 0]; in sccnxp_console_setup()
787 struct sccnxp_port *s; in sccnxp_probe() local
795 s = devm_kzalloc(&pdev->dev, sizeof(struct sccnxp_port), GFP_KERNEL); in sccnxp_probe()
796 if (!s) { in sccnxp_probe()
800 platform_set_drvdata(pdev, s); in sccnxp_probe()
802 spin_lock_init(&s->lock); in sccnxp_probe()
807 s->name = "SC2681"; in sccnxp_probe()
808 s->uart.nr = 2; in sccnxp_probe()
809 s->freq_std = 3686400; in sccnxp_probe()
810 s->addr_mask = 0x0f; in sccnxp_probe()
811 s->flags = SCCNXP_HAVE_IO; in sccnxp_probe()
817 s->name = "SC2691"; in sccnxp_probe()
818 s->uart.nr = 1; in sccnxp_probe()
819 s->freq_std = 3686400; in sccnxp_probe()
820 s->addr_mask = 0x07; in sccnxp_probe()
821 s->flags = 0; in sccnxp_probe()
827 s->name = "SC2692"; in sccnxp_probe()
828 s->uart.nr = 2; in sccnxp_probe()
829 s->freq_std = 3686400; in sccnxp_probe()
830 s->addr_mask = 0x0f; in sccnxp_probe()
831 s->flags = SCCNXP_HAVE_IO; in sccnxp_probe()
837 s->name = "SC2891"; in sccnxp_probe()
838 s->uart.nr = 1; in sccnxp_probe()
839 s->freq_std = 3686400; in sccnxp_probe()
840 s->addr_mask = 0x0f; in sccnxp_probe()
841 s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0; in sccnxp_probe()
847 s->name = "SC2892"; in sccnxp_probe()
848 s->uart.nr = 2; in sccnxp_probe()
849 s->freq_std = 3686400; in sccnxp_probe()
850 s->addr_mask = 0x0f; in sccnxp_probe()
851 s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0; in sccnxp_probe()
857 s->name = "SC28202"; in sccnxp_probe()
858 s->uart.nr = 2; in sccnxp_probe()
859 s->freq_std = 14745600; in sccnxp_probe()
860 s->addr_mask = 0x7f; in sccnxp_probe()
861 s->flags = SCCNXP_HAVE_IO | SCCNXP_HAVE_MR0; in sccnxp_probe()
867 s->name = "SC68681"; in sccnxp_probe()
868 s->uart.nr = 2; in sccnxp_probe()
869 s->freq_std = 3686400; in sccnxp_probe()
870 s->addr_mask = 0x0f; in sccnxp_probe()
871 s->flags = SCCNXP_HAVE_IO; in sccnxp_probe()
877 s->name = "SC68692"; in sccnxp_probe()
878 s->uart.nr = 2; in sccnxp_probe()
879 s->freq_std = 3686400; in sccnxp_probe()
880 s->addr_mask = 0x0f; in sccnxp_probe()
881 s->flags = SCCNXP_HAVE_IO; in sccnxp_probe()
895 s->pdata.frequency = s->freq_std; in sccnxp_probe()
897 memcpy(&s->pdata, pdata, sizeof(struct sccnxp_pdata)); in sccnxp_probe()
899 if (s->pdata.poll_time_us) { in sccnxp_probe()
901 s->pdata.poll_time_us); in sccnxp_probe()
902 s->poll = 1; in sccnxp_probe()
905 if (!s->poll) { in sccnxp_probe()
906 s->irq = platform_get_irq(pdev, 0); in sccnxp_probe()
907 if (s->irq < 0) { in sccnxp_probe()
915 if ((s->pdata.frequency < freq_min) || in sccnxp_probe()
916 (s->pdata.frequency > freq_max)) { in sccnxp_probe()
922 s->regulator = devm_regulator_get(&pdev->dev, "VCC"); in sccnxp_probe()
923 if (!IS_ERR(s->regulator)) { in sccnxp_probe()
924 ret = regulator_enable(s->regulator); in sccnxp_probe()
938 s->uart.owner = THIS_MODULE; in sccnxp_probe()
939 s->uart.dev_name = "ttySC"; in sccnxp_probe()
940 s->uart.major = SCCNXP_MAJOR; in sccnxp_probe()
941 s->uart.minor = SCCNXP_MINOR; in sccnxp_probe()
943 s->uart.cons = &s->console; in sccnxp_probe()
944 s->uart.cons->device = uart_console_device; in sccnxp_probe()
945 s->uart.cons->write = sccnxp_console_write; in sccnxp_probe()
946 s->uart.cons->setup = sccnxp_console_setup; in sccnxp_probe()
947 s->uart.cons->flags = CON_PRINTBUFFER; in sccnxp_probe()
948 s->uart.cons->index = -1; in sccnxp_probe()
949 s->uart.cons->data = s; in sccnxp_probe()
950 strcpy(s->uart.cons->name, "ttySC"); in sccnxp_probe()
952 ret = uart_register_driver(&s->uart); in sccnxp_probe()
958 for (i = 0; i < s->uart.nr; i++) { in sccnxp_probe()
959 s->port[i].line = i; in sccnxp_probe()
960 s->port[i].dev = &pdev->dev; in sccnxp_probe()
961 s->port[i].irq = s->irq; in sccnxp_probe()
962 s->port[i].type = PORT_SC26XX; in sccnxp_probe()
963 s->port[i].fifosize = fifosize; in sccnxp_probe()
964 s->port[i].flags = UPF_SKIP_TEST | UPF_FIXED_TYPE; in sccnxp_probe()
965 s->port[i].iotype = UPIO_MEM; in sccnxp_probe()
966 s->port[i].mapbase = res->start; in sccnxp_probe()
967 s->port[i].membase = membase; in sccnxp_probe()
968 s->port[i].regshift = s->pdata.reg_shift; in sccnxp_probe()
969 s->port[i].uartclk = s->pdata.frequency; in sccnxp_probe()
970 s->port[i].ops = &sccnxp_ops; in sccnxp_probe()
971 uart_add_one_port(&s->uart, &s->port[i]); in sccnxp_probe()
973 if (s->flags & SCCNXP_HAVE_IO) in sccnxp_probe()
974 sccnxp_set_bit(&s->port[i], DIR_OP, 0); in sccnxp_probe()
978 s->imr = 0; in sccnxp_probe()
979 sccnxp_write(&s->port[0], SCCNXP_IMR_REG, 0); in sccnxp_probe()
981 if (!s->poll) { in sccnxp_probe()
982 ret = devm_request_threaded_irq(&pdev->dev, s->irq, NULL, in sccnxp_probe()
986 dev_name(&pdev->dev), s); in sccnxp_probe()
990 dev_err(&pdev->dev, "Unable to reguest IRQ %i\n", s->irq); in sccnxp_probe()
992 init_timer(&s->timer); in sccnxp_probe()
993 setup_timer(&s->timer, sccnxp_timer, (unsigned long)s); in sccnxp_probe()
994 mod_timer(&s->timer, jiffies + in sccnxp_probe()
995 usecs_to_jiffies(s->pdata.poll_time_us)); in sccnxp_probe()
1008 struct sccnxp_port *s = platform_get_drvdata(pdev); in sccnxp_remove() local
1010 if (!s->poll) in sccnxp_remove()
1011 devm_free_irq(&pdev->dev, s->irq, s); in sccnxp_remove()
1013 del_timer_sync(&s->timer); in sccnxp_remove()
1015 for (i = 0; i < s->uart.nr; i++) in sccnxp_remove()
1016 uart_remove_one_port(&s->uart, &s->port[i]); in sccnxp_remove()
1018 uart_unregister_driver(&s->uart); in sccnxp_remove()
1021 if (!IS_ERR(s->regulator)) in sccnxp_remove()
1022 return regulator_disable(s->regulator); in sccnxp_remove()