/* show_msm_console - provide per-port serial console state. */ static ssize_t show_msm_console(struct device *dev, struct device_attribute *attr, char *buf) { int enable; struct uart_port *port; struct platform_device *pdev = to_platform_device(dev); port = get_port_from_line(pdev->id); enable = get_console_state(port); D("%s () :port->line %d, ir\n", __func__, port->line); return snprintf(buf, sizeof(enable), "%d\n", enable); }
/* * set_msm_console - allow to enable/disable serial console on port. * * writing 1 enables serial console on UART port. * writing 0 disables serial console on UART port. */ static ssize_t set_msm_console(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int enable, cur_state; struct uart_port *port; struct platform_device *pdev = to_platform_device(dev); port = get_port_from_line(pdev->id); cur_state = get_console_state(port); enable = buf[0] - '0'; D("%s ():port->line %d,enable %d, cur_state %d ir\n", __func__, port->line, enable, cur_state); if (enable == cur_state) return count; switch (enable) { case 0: D("%s(): Calling stop_console\n", __func__); console_stop(port->cons); D("%s(): Calling unregister_console\n", __func__); unregister_console(port->cons); pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); /* * Disable UART Core clk * 3 - to disable the UART clock * Thid parameter is not used here, but used in serial core. */ msm_hsl_power_irda(port, 3, 1); break; case 1: D("%s(): Calling register_console\n", __func__); /* * Disable UART Core clk * 0 - to enable the UART clock * Thid parameter is not used here, but used in serial core. */ msm_hsl_power_irda(port, 0, 1); pm_runtime_enable(&pdev->dev); register_console(port->cons); break; default: return -EINVAL; } return count; }
static ssize_t set_msm_console(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int enable, cur_state; struct uart_port *port; struct platform_device *pdev = to_platform_device(dev); port = get_port_from_line(pdev->id); cur_state = get_console_state(port); enable = buf[0] - '0'; pr_info("%s ():port->line %d,enable %d, cur_state %d ir\n", __func__, port->line, enable, cur_state); if (enable == cur_state) return count; switch (enable) { case 0: pr_info("%s(): Calling stop_console\n", __func__); console_stop(port->cons); pr_debug("%s(): Calling unregister_console\n", __func__); unregister_console(port->cons); pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); msm_hsl_power_cir(port, 3, 1); break; case 1: pr_info("%s(): Calling register_console\n", __func__); msm_hsl_power_cir(port, 0, 1); pm_runtime_enable(&pdev->dev); register_console(port->cons); break; default: return -EINVAL; } return count; }