static int clps711x_probe(struct device_d *dev) { struct clps711x_uart *s; char syscon_dev[18]; BUG_ON(dev->num_resources != 2); BUG_ON((dev->id != 0) && (dev->id != 1)); s = xzalloc(sizeof(struct clps711x_uart)); s->uart_clk = clk_get(dev, NULL); BUG_ON(IS_ERR(s->uart_clk)); s->UBRLCR = dev_get_mem_region(dev, 0); s->UARTDR = dev_get_mem_region(dev, 1); sprintf(syscon_dev, "clps711x-syscon%i", dev->id + 1); s->syscon = syscon_base_lookup_by_pdevname(syscon_dev); BUG_ON(IS_ERR(s->syscon)); dev->priv = s; s->cdev.dev = dev; s->cdev.f_caps = CONSOLE_STDIN | CONSOLE_STDOUT | CONSOLE_STDERR; s->cdev.tstc = clps711x_tstc; s->cdev.putc = clps711x_putc; s->cdev.getc = clps711x_getc; s->cdev.flush = clps711x_flush; s->cdev.setbrg = clps711x_setbaudrate; clps711x_init_port(&s->cdev); return console_register(&s->cdev); }
static int clps711x_probe(struct device_d *dev) { struct clps711x_uart *s; int err, id = dev->id; char syscon_dev[8]; if (dev->device_node) id = of_alias_get_id(dev->device_node, "serial"); if (id != 0 && id != 1) return -EINVAL; s = xzalloc(sizeof(struct clps711x_uart)); s->uart_clk = clk_get(dev, NULL); if (IS_ERR(s->uart_clk)) { err = PTR_ERR(s->uart_clk); goto out_err; } s->base = dev_get_mem_region(dev, 0); if (!dev->device_node) { sprintf(syscon_dev, "syscon%i", id + 1); s->syscon = syscon_base_lookup_by_pdevname(syscon_dev); } else { s->syscon = syscon_base_lookup_by_phandle(dev->device_node, "syscon"); } if (IS_ERR(s->syscon)) { err = PTR_ERR(s->syscon); goto out_err; } dev->priv = s; s->cdev.dev = dev; s->cdev.tstc = clps711x_tstc; s->cdev.putc = clps711x_putc; s->cdev.getc = clps711x_getc; s->cdev.flush = clps711x_flush; s->cdev.setbrg = clps711x_setbaudrate; clps711x_init_port(&s->cdev); err = console_register(&s->cdev); out_err: if (err) free(s); return err; }