static ssize_t imapx200_serial_show_clksrc(struct device *dev, struct device_attribute *attr, char *buf) { struct uart_port *port = imapx200_dev_to_port(dev); struct imapx200_uart_port *ourport = to_ourport(port); return snprintf(buf, PAGE_SIZE, "* %s\n", ourport->clksrc->name); }
static int imapx200_serial_suspend(struct platform_device *dev, pm_message_t state) { struct uart_port *port = imapx200_dev_to_port(&dev->dev); if (port) uart_suspend_port(&imapx200_uart_drv, port); return 0; }
static int imapx200_serial_remove(struct platform_device *dev) { struct uart_port *port = imapx200_dev_to_port(&dev->dev); if (port) { device_remove_file(&dev->dev, &dev_attr_clock_source); uart_remove_one_port(&imapx200_uart_drv, port); } return 0; }
static int imapx200_serial_resume(struct platform_device *dev) { struct uart_port *port = imapx200_dev_to_port(&dev->dev); struct imapx200_uart_port *ourport = to_ourport(port); if (port) { clk_enable(ourport->clk); imapx200_serial_resetport(port, imapx200_port_to_cfg(port)); clk_disable(ourport->clk); uart_resume_port(&imapx200_uart_drv, port); } return 0; }
static int imapx200_serial_resume(struct platform_device *dev) { struct uart_port *port = imapx200_dev_to_port(&dev->dev); struct imapx200_uart_port *ourport = to_ourport(port); if (port) { clk_enable(ourport->clk); imapx200_serial_resetport(port, imapx200_port_to_cfg(port)); clk_disable(ourport->clk); uart_resume_port(&imapx200_uart_drv, port); } if(port->irq == IRQ_UART3) { printk(KERN_ERR "resume port3: mdelay.\n"); mdelay(20); } return 0; }