aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2016-01-12 04:49:33 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-02-07 01:16:21 -0500
commitbca1481ec4a0014271b7c220f41d7a790654dfbb (patch)
treeb2f8dd7915084024ad2a5fd5ba3ee636d301f28c
parent1fba6a594cfd1ea0f1fc8a97e22f43def1505d74 (diff)
TTY: serial/mpsc, clean up init/remove functions
There is a chain of up to 4 nested ifs in init and remove functions. Instead, make the code linear and use goto's to handle failures. Remove unneeded cast from mpsc_release_port by referencing pi->port directly. And finally, use dev_dbg instead of pr_debug given we have dev->dev node. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/mpsc.c163
1 files changed, 79 insertions, 84 deletions
diff --git a/drivers/tty/serial/mpsc.c b/drivers/tty/serial/mpsc.c
index 363772992acc..44a23113f469 100644
--- a/drivers/tty/serial/mpsc.c
+++ b/drivers/tty/serial/mpsc.c
@@ -1891,44 +1891,39 @@ static void mpsc_shared_unmap_regs(void)
1891static int mpsc_shared_drv_probe(struct platform_device *dev) 1891static int mpsc_shared_drv_probe(struct platform_device *dev)
1892{ 1892{
1893 struct mpsc_shared_pdata *pdata; 1893 struct mpsc_shared_pdata *pdata;
1894 int rc = -ENODEV; 1894 int rc;
1895
1896 if (dev->id == 0) {
1897 rc = mpsc_shared_map_regs(dev);
1898 if (!rc) {
1899 pdata = (struct mpsc_shared_pdata *)
1900 dev_get_platdata(&dev->dev);
1901
1902 mpsc_shared_regs.MPSC_MRR_m = pdata->mrr_val;
1903 mpsc_shared_regs.MPSC_RCRR_m= pdata->rcrr_val;
1904 mpsc_shared_regs.MPSC_TCRR_m= pdata->tcrr_val;
1905 mpsc_shared_regs.SDMA_INTR_CAUSE_m =
1906 pdata->intr_cause_val;
1907 mpsc_shared_regs.SDMA_INTR_MASK_m =
1908 pdata->intr_mask_val;
1909
1910 rc = 0;
1911 }
1912 }
1913 1895
1914 return rc; 1896 if (dev->id != 0)
1897 return -ENODEV;
1898
1899 rc = mpsc_shared_map_regs(dev);
1900 if (rc)
1901 return rc;
1902
1903 pdata = dev_get_platdata(&dev->dev);
1904
1905 mpsc_shared_regs.MPSC_MRR_m = pdata->mrr_val;
1906 mpsc_shared_regs.MPSC_RCRR_m= pdata->rcrr_val;
1907 mpsc_shared_regs.MPSC_TCRR_m= pdata->tcrr_val;
1908 mpsc_shared_regs.SDMA_INTR_CAUSE_m = pdata->intr_cause_val;
1909 mpsc_shared_regs.SDMA_INTR_MASK_m = pdata->intr_mask_val;
1910
1911 return 0;
1915} 1912}
1916 1913
1917static int mpsc_shared_drv_remove(struct platform_device *dev) 1914static int mpsc_shared_drv_remove(struct platform_device *dev)
1918{ 1915{
1919 int rc = -ENODEV; 1916 if (dev->id != 0)
1917 return -ENODEV;
1920 1918
1921 if (dev->id == 0) { 1919 mpsc_shared_unmap_regs();
1922 mpsc_shared_unmap_regs(); 1920 mpsc_shared_regs.MPSC_MRR_m = 0;
1923 mpsc_shared_regs.MPSC_MRR_m = 0; 1921 mpsc_shared_regs.MPSC_RCRR_m = 0;
1924 mpsc_shared_regs.MPSC_RCRR_m = 0; 1922 mpsc_shared_regs.MPSC_TCRR_m = 0;
1925 mpsc_shared_regs.MPSC_TCRR_m = 0; 1923 mpsc_shared_regs.SDMA_INTR_CAUSE_m = 0;
1926 mpsc_shared_regs.SDMA_INTR_CAUSE_m = 0; 1924 mpsc_shared_regs.SDMA_INTR_MASK_m = 0;
1927 mpsc_shared_regs.SDMA_INTR_MASK_m = 0;
1928 rc = 0;
1929 }
1930 1925
1931 return rc; 1926 return 0;
1932} 1927}
1933 1928
1934static struct platform_driver mpsc_shared_driver = { 1929static struct platform_driver mpsc_shared_driver = {
@@ -1979,10 +1974,6 @@ static int mpsc_drv_map_regs(struct mpsc_port_info *pi,
1979 pi->sdma_base_p = r->start; 1974 pi->sdma_base_p = r->start;
1980 } else { 1975 } else {
1981 mpsc_resource_err("SDMA base"); 1976 mpsc_resource_err("SDMA base");
1982 if (pi->mpsc_base) {
1983 iounmap(pi->mpsc_base);
1984 pi->mpsc_base = NULL;
1985 }
1986 goto err; 1977 goto err;
1987 } 1978 }
1988 1979
@@ -1993,19 +1984,19 @@ static int mpsc_drv_map_regs(struct mpsc_port_info *pi,
1993 pi->brg_base_p = r->start; 1984 pi->brg_base_p = r->start;
1994 } else { 1985 } else {
1995 mpsc_resource_err("BRG base"); 1986 mpsc_resource_err("BRG base");
1996 if (pi->mpsc_base) {
1997 iounmap(pi->mpsc_base);
1998 pi->mpsc_base = NULL;
1999 }
2000 if (pi->sdma_base) {
2001 iounmap(pi->sdma_base);
2002 pi->sdma_base = NULL;
2003 }
2004 goto err; 1987 goto err;
2005 } 1988 }
2006 return 0; 1989 return 0;
2007 1990
2008err: 1991err:
1992 if (pi->sdma_base) {
1993 iounmap(pi->sdma_base);
1994 pi->sdma_base = NULL;
1995 }
1996 if (pi->mpsc_base) {
1997 iounmap(pi->mpsc_base);
1998 pi->mpsc_base = NULL;
1999 }
2009 return -ENOMEM; 2000 return -ENOMEM;
2010} 2001}
2011 2002
@@ -2073,36 +2064,37 @@ static void mpsc_drv_get_platform_data(struct mpsc_port_info *pi,
2073 2064
2074static int mpsc_drv_probe(struct platform_device *dev) 2065static int mpsc_drv_probe(struct platform_device *dev)
2075{ 2066{
2076 struct mpsc_port_info *pi; 2067 struct mpsc_port_info *pi;
2077 int rc = -ENODEV; 2068 int rc;
2078 2069
2079 pr_debug("mpsc_drv_probe: Adding MPSC %d\n", dev->id); 2070 dev_dbg(&dev->dev, "mpsc_drv_probe: Adding MPSC %d\n", dev->id);
2080 2071
2081 if (dev->id < MPSC_NUM_CTLRS) { 2072 if (dev->id >= MPSC_NUM_CTLRS)
2082 pi = &mpsc_ports[dev->id]; 2073 return -ENODEV;
2083 2074
2084 rc = mpsc_drv_map_regs(pi, dev); 2075 pi = &mpsc_ports[dev->id];
2085 if (!rc) { 2076
2086 mpsc_drv_get_platform_data(pi, dev, dev->id); 2077 rc = mpsc_drv_map_regs(pi, dev);
2087 pi->port.dev = &dev->dev; 2078 if (rc)
2088 2079 return rc;
2089 rc = mpsc_make_ready(pi);
2090 if (!rc) {
2091 spin_lock_init(&pi->tx_lock);
2092 rc = uart_add_one_port(&mpsc_reg, &pi->port);
2093 if (!rc) {
2094 rc = 0;
2095 } else {
2096 mpsc_release_port((struct uart_port *)
2097 pi);
2098 mpsc_drv_unmap_regs(pi);
2099 }
2100 } else {
2101 mpsc_drv_unmap_regs(pi);
2102 }
2103 }
2104 }
2105 2080
2081 mpsc_drv_get_platform_data(pi, dev, dev->id);
2082 pi->port.dev = &dev->dev;
2083
2084 rc = mpsc_make_ready(pi);
2085 if (rc)
2086 goto err_unmap;
2087
2088 spin_lock_init(&pi->tx_lock);
2089 rc = uart_add_one_port(&mpsc_reg, &pi->port);
2090 if (rc)
2091 goto err_relport;
2092
2093 return 0;
2094err_relport:
2095 mpsc_release_port(&pi->port);
2096err_unmap:
2097 mpsc_drv_unmap_regs(pi);
2106 return rc; 2098 return rc;
2107} 2099}
2108 2100
@@ -2124,19 +2116,22 @@ static int __init mpsc_drv_init(void)
2124 memset(&mpsc_shared_regs, 0, sizeof(mpsc_shared_regs)); 2116 memset(&mpsc_shared_regs, 0, sizeof(mpsc_shared_regs));
2125 2117
2126 rc = uart_register_driver(&mpsc_reg); 2118 rc = uart_register_driver(&mpsc_reg);
2127 if (!rc) { 2119 if (rc)
2128 rc = platform_driver_register(&mpsc_shared_driver); 2120 return rc;
2129 if (!rc) { 2121
2130 rc = platform_driver_register(&mpsc_driver); 2122 rc = platform_driver_register(&mpsc_shared_driver);
2131 if (rc) { 2123 if (rc)
2132 platform_driver_unregister(&mpsc_shared_driver); 2124 goto err_unreg_uart;
2133 uart_unregister_driver(&mpsc_reg);
2134 }
2135 } else {
2136 uart_unregister_driver(&mpsc_reg);
2137 }
2138 }
2139 2125
2126 rc = platform_driver_register(&mpsc_driver);
2127 if (rc)
2128 goto err_unreg_plat;
2129
2130 return 0;
2131err_unreg_plat:
2132 platform_driver_unregister(&mpsc_shared_driver);
2133err_unreg_uart:
2134 uart_unregister_driver(&mpsc_reg);
2140 return rc; 2135 return rc;
2141} 2136}
2142device_initcall(mpsc_drv_init); 2137device_initcall(mpsc_drv_init);