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

Commit 0c151062 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Simon Horman
Browse files

sh-pfc: Add support for SoC-specific initialization



Add two optional init and exit SoC operations and call them from the
core at probe and remove time.

Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent 0ccaf5bb
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -372,6 +372,12 @@ static int sh_pfc_probe(struct platform_device *pdev)

	spin_lock_init(&pfc->lock);

	if (info->ops && info->ops->init) {
		ret = info->ops->init(pfc);
		if (ret < 0)
			return ret;
	}

	pinctrl_provide_dummies();

	/*
@@ -379,7 +385,7 @@ static int sh_pfc_probe(struct platform_device *pdev)
	 */
	ret = sh_pfc_register_pinctrl(pfc);
	if (unlikely(ret != 0))
		return ret;
		goto error;

#ifdef CONFIG_GPIO_SH_PFC
	/*
@@ -401,6 +407,11 @@ static int sh_pfc_probe(struct platform_device *pdev)
	dev_info(pfc->dev, "%s support registered\n", info->name);

	return 0;

error:
	if (info->ops && info->ops->exit)
		info->ops->exit(pfc);
	return ret;
}

static int sh_pfc_remove(struct platform_device *pdev)
@@ -412,6 +423,9 @@ static int sh_pfc_remove(struct platform_device *pdev)
#endif
	sh_pfc_unregister_pinctrl(pfc);

	if (pfc->info->ops && pfc->info->ops->exit)
		pfc->info->ops->exit(pfc);

	platform_set_drvdata(pdev, NULL);

	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ struct sh_pfc_pinctrl;
struct sh_pfc {
	struct device *dev;
	const struct sh_pfc_soc_info *info;
	void *soc_data;
	spinlock_t lock;

	unsigned int num_windows;
+2 −0
Original line number Diff line number Diff line
@@ -129,6 +129,8 @@ struct pinmux_range {
struct sh_pfc;

struct sh_pfc_soc_operations {
	int (*init)(struct sh_pfc *pfc);
	void (*exit)(struct sh_pfc *pfc);
	unsigned int (*get_bias)(struct sh_pfc *pfc, unsigned int pin);
	void (*set_bias)(struct sh_pfc *pfc, unsigned int pin,
			 unsigned int bias);