Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bca1481e authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

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: default avatarJiri Slaby <jslaby@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1fba6a59
Loading
Loading
Loading
Loading
+79 −84
Original line number Diff line number Diff line
@@ -1891,44 +1891,39 @@ static void mpsc_shared_unmap_regs(void)
static int mpsc_shared_drv_probe(struct platform_device *dev)
{
	struct mpsc_shared_pdata	*pdata;
	int				 rc = -ENODEV;
	int rc;

	if (dev->id != 0)
		return -ENODEV;

	if (dev->id == 0) {
	rc = mpsc_shared_map_regs(dev);
		if (!rc) {
			pdata = (struct mpsc_shared_pdata *)
				dev_get_platdata(&dev->dev);
	if (rc)
		return rc;

	pdata = dev_get_platdata(&dev->dev);

	mpsc_shared_regs.MPSC_MRR_m = pdata->mrr_val;
	mpsc_shared_regs.MPSC_RCRR_m= pdata->rcrr_val;
	mpsc_shared_regs.MPSC_TCRR_m= pdata->tcrr_val;
			mpsc_shared_regs.SDMA_INTR_CAUSE_m =
				pdata->intr_cause_val;
			mpsc_shared_regs.SDMA_INTR_MASK_m =
				pdata->intr_mask_val;

			rc = 0;
		}
	}
	mpsc_shared_regs.SDMA_INTR_CAUSE_m = pdata->intr_cause_val;
	mpsc_shared_regs.SDMA_INTR_MASK_m = pdata->intr_mask_val;

	return rc;
	return 0;
}

static int mpsc_shared_drv_remove(struct platform_device *dev)
{
	int	rc = -ENODEV;
	if (dev->id != 0)
		return -ENODEV;

	if (dev->id == 0) {
	mpsc_shared_unmap_regs();
	mpsc_shared_regs.MPSC_MRR_m = 0;
	mpsc_shared_regs.MPSC_RCRR_m = 0;
	mpsc_shared_regs.MPSC_TCRR_m = 0;
	mpsc_shared_regs.SDMA_INTR_CAUSE_m = 0;
	mpsc_shared_regs.SDMA_INTR_MASK_m = 0;
		rc = 0;
	}

	return rc;
	return 0;
}

static struct platform_driver mpsc_shared_driver = {
@@ -1979,10 +1974,6 @@ static int mpsc_drv_map_regs(struct mpsc_port_info *pi,
		pi->sdma_base_p = r->start;
	} else {
		mpsc_resource_err("SDMA base");
		if (pi->mpsc_base) {
			iounmap(pi->mpsc_base);
			pi->mpsc_base = NULL;
		}
		goto err;
	}

@@ -1993,19 +1984,19 @@ static int mpsc_drv_map_regs(struct mpsc_port_info *pi,
		pi->brg_base_p = r->start;
	} else {
		mpsc_resource_err("BRG base");
		if (pi->mpsc_base) {
			iounmap(pi->mpsc_base);
			pi->mpsc_base = NULL;
		goto err;
	}
	return 0;

err:
	if (pi->sdma_base) {
		iounmap(pi->sdma_base);
		pi->sdma_base = NULL;
	}
		goto err;
	if (pi->mpsc_base) {
		iounmap(pi->mpsc_base);
		pi->mpsc_base = NULL;
	}
	return 0;

err:
	return -ENOMEM;
}

@@ -2074,35 +2065,36 @@ static void mpsc_drv_get_platform_data(struct mpsc_port_info *pi,
static int mpsc_drv_probe(struct platform_device *dev)
{
	struct mpsc_port_info *pi;
	int			rc = -ENODEV;
	int rc;

	dev_dbg(&dev->dev, "mpsc_drv_probe: Adding MPSC %d\n", dev->id);

	pr_debug("mpsc_drv_probe: Adding MPSC %d\n", dev->id);
	if (dev->id >= MPSC_NUM_CTLRS)
		return -ENODEV;

	if (dev->id < MPSC_NUM_CTLRS) {
	pi = &mpsc_ports[dev->id];

	rc = mpsc_drv_map_regs(pi, dev);
		if (!rc) {
	if (rc)
		return rc;

	mpsc_drv_get_platform_data(pi, dev, dev->id);
	pi->port.dev = &dev->dev;

	rc = mpsc_make_ready(pi);
			if (!rc) {
	if (rc)
		goto err_unmap;

	spin_lock_init(&pi->tx_lock);
	rc = uart_add_one_port(&mpsc_reg, &pi->port);
				if (!rc) {
					rc = 0;
				} else {
					mpsc_release_port((struct uart_port *)
							pi);
					mpsc_drv_unmap_regs(pi);
				}
			} else {
				mpsc_drv_unmap_regs(pi);
			}
		}
	}
	if (rc)
		goto err_relport;

	return 0;
err_relport:
	mpsc_release_port(&pi->port);
err_unmap:
	mpsc_drv_unmap_regs(pi);
	return rc;
}

@@ -2124,19 +2116,22 @@ static int __init mpsc_drv_init(void)
	memset(&mpsc_shared_regs, 0, sizeof(mpsc_shared_regs));

	rc = uart_register_driver(&mpsc_reg);
	if (!rc) {
	if (rc)
		return rc;

	rc = platform_driver_register(&mpsc_shared_driver);
		if (!rc) {
	if (rc)
		goto err_unreg_uart;

	rc = platform_driver_register(&mpsc_driver);
			if (rc) {
	if (rc)
		goto err_unreg_plat;

	return 0;
err_unreg_plat:
	platform_driver_unregister(&mpsc_shared_driver);
err_unreg_uart:
	uart_unregister_driver(&mpsc_reg);
			}
		} else {
			uart_unregister_driver(&mpsc_reg);
		}
	}

	return rc;
}
device_initcall(mpsc_drv_init);