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

Commit e209c5a7 authored by Sangwook Lee's avatar Sangwook Lee Committed by John W. Linville
Browse files

net:rfkill: add a gpio setup function into GPIO rfkill



Add a gpio setup function which gives a chance to set up
platform specific configuration such as pin multiplexing,
input/output direction at the runtime or booting time.

Signed-off-by: default avatarSangwook Lee <sangwook.lee@linaro.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 893d73f4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@
 * @reset_gpio:		GPIO which is used for reseting rfkill switch
 * @shutdown_gpio:	GPIO which is used for shutdown of rfkill switch
 * @power_clk_name:	[optional] name of clk to turn off while blocked
 * @gpio_runtime_close:	clean up platform specific gpio configuration
 * @gpio_runtime_setup:	set up platform specific gpio configuration
 */

struct rfkill_gpio_platform_data {
@@ -38,6 +40,8 @@ struct rfkill_gpio_platform_data {
	int			shutdown_gpio;
	const char		*power_clk_name;
	enum rfkill_type	type;
	void	(*gpio_runtime_close)(struct platform_device *);
	int	(*gpio_runtime_setup)(struct platform_device *);
};

#endif /* __RFKILL_GPIO_H */
+11 −0
Original line number Diff line number Diff line
@@ -101,6 +101,14 @@ static int rfkill_gpio_probe(struct platform_device *pdev)
	if (!rfkill)
		return -ENOMEM;

	if (pdata->gpio_runtime_setup) {
		ret = pdata->gpio_runtime_setup(pdev);
		if (ret) {
			pr_warn("%s: can't set up gpio\n", __func__);
			return ret;
		}
	}

	rfkill->pdata = pdata;

	len = strlen(pdata->name);
@@ -182,7 +190,10 @@ fail_alloc:
static int rfkill_gpio_remove(struct platform_device *pdev)
{
	struct rfkill_gpio_data *rfkill = platform_get_drvdata(pdev);
	struct rfkill_gpio_platform_data *pdata = pdev->dev.platform_data;

	if (pdata->gpio_runtime_close)
		pdata->gpio_runtime_close(pdev);
	rfkill_unregister(rfkill->rfkill_dev);
	rfkill_destroy(rfkill->rfkill_dev);
	if (gpio_is_valid(rfkill->pdata->shutdown_gpio))