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

Commit 31815c08 authored by Alexander Shiyan's avatar Alexander Shiyan Committed by Greg Kroah-Hartman
Browse files

serial: sccnxp: Replace pdata.init/exit with regulator API



Typical usage of pdata.init/exit is enable/disable power and/or toggle
reset for the target chip.
This patch replaces these callbacks with regulator API.

Signed-off-by: default avatarAlexander Shiyan <shc_work@mail.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 289b8dd6
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <linux/spinlock.h>
#include <linux/platform_device.h>
#include <linux/platform_data/serial-sccnxp.h>
#include <linux/regulator/consumer.h>

#define SCCNXP_NAME			"uart-sccnxp"
#define SCCNXP_MAJOR			204
@@ -131,6 +132,8 @@ struct sccnxp_port {
	struct timer_list	timer;

	struct sccnxp_pdata	pdata;

	struct regulator	*regulator;
};

static inline u8 sccnxp_raw_read(void __iomem *base, u8 reg, u8 shift)
@@ -916,6 +919,16 @@ static int sccnxp_probe(struct platform_device *pdev)
		goto err_out;
	}

	s->regulator = devm_regulator_get(&pdev->dev, "VCC");
	if (!IS_ERR(s->regulator)) {
		ret = regulator_enable(s->regulator);
		if (ret) {
			dev_err(&pdev->dev,
				"Failed to enable regulator: %i\n", ret);
			return ret;
		}
	}

	membase = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(membase)) {
		ret = PTR_ERR(membase);
@@ -965,10 +978,6 @@ static int sccnxp_probe(struct platform_device *pdev)
	s->imr = 0;
	sccnxp_write(&s->port[0], SCCNXP_IMR_REG, 0);

	/* Board specific configure */
	if (s->pdata.init)
		s->pdata.init();

	if (!s->poll) {
		ret = devm_request_threaded_irq(&pdev->dev, s->irq, NULL,
						sccnxp_ist,
@@ -1009,8 +1018,8 @@ static int sccnxp_remove(struct platform_device *pdev)
	uart_unregister_driver(&s->uart);
	platform_set_drvdata(pdev, NULL);

	if (s->pdata.exit)
		s->pdata.exit();
	if (!IS_ERR(s->regulator))
		return regulator_disable(s->regulator);

	return 0;
}
+0 −4
Original line number Diff line number Diff line
@@ -86,10 +86,6 @@ struct sccnxp_pdata {
	const u32		mctrl_cfg[SCCNXP_MAX_UARTS];
	/* Timer value for polling mode (usecs) */
	const unsigned int	poll_time_us;
	/* Called during startup */
	void (*init)(void);
	/* Called before finish */
	void (*exit)(void);
};

#endif