diff options
Diffstat (limited to 'drivers/misc/atmel-ssc.c')
| -rw-r--r-- | drivers/misc/atmel-ssc.c | 18 | 
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c index 158da5a81a66..c09c28f92055 100644 --- a/drivers/misc/atmel-ssc.c +++ b/drivers/misc/atmel-ssc.c @@ -19,6 +19,7 @@  #include <linux/module.h>  #include <linux/of.h> +#include <linux/pinctrl/consumer.h>  /* Serialize access to ssc_list and user count */  static DEFINE_SPINLOCK(user_lock); @@ -131,6 +132,13 @@ static int ssc_probe(struct platform_device *pdev)  	struct resource *regs;  	struct ssc_device *ssc;  	const struct atmel_ssc_platform_data *plat_dat; +	struct pinctrl *pinctrl; + +	pinctrl = devm_pinctrl_get_select_default(&pdev->dev); +	if (IS_ERR(pinctrl)) { +		dev_err(&pdev->dev, "Failed to request pinctrl\n"); +		return PTR_ERR(pinctrl); +	}  	ssc = devm_kzalloc(&pdev->dev, sizeof(struct ssc_device), GFP_KERNEL);  	if (!ssc) { @@ -151,11 +159,9 @@ static int ssc_probe(struct platform_device *pdev)  		return -ENXIO;  	} -	ssc->regs = devm_request_and_ioremap(&pdev->dev, regs); -	if (!ssc->regs) { -		dev_dbg(&pdev->dev, "ioremap failed\n"); -		return -EINVAL; -	} +	ssc->regs = devm_ioremap_resource(&pdev->dev, regs); +	if (IS_ERR(ssc->regs)) +		return PTR_ERR(ssc->regs);  	ssc->phybase = regs->start; @@ -167,7 +173,7 @@ static int ssc_probe(struct platform_device *pdev)  	/* disable all interrupts */  	clk_enable(ssc->clk); -	ssc_writel(ssc->regs, IDR, ~0UL); +	ssc_writel(ssc->regs, IDR, -1);  	ssc_readl(ssc->regs, SR);  	clk_disable(ssc->clk);  |