diff options
Diffstat (limited to 'drivers/gpio/gpio-ep93xx.c')
| -rw-r--r-- | drivers/gpio/gpio-ep93xx.c | 52 | 
1 files changed, 16 insertions, 36 deletions
diff --git a/drivers/gpio/gpio-ep93xx.c b/drivers/gpio/gpio-ep93xx.c index 56b98eebe1f..dcc2bb4074e 100644 --- a/drivers/gpio/gpio-ep93xx.c +++ b/drivers/gpio/gpio-ep93xx.c @@ -51,15 +51,15 @@ static void ep93xx_gpio_update_int_params(unsigned port)  {  	BUG_ON(port > 2); -	__raw_writeb(0, EP93XX_GPIO_REG(int_en_register_offset[port])); +	writeb_relaxed(0, EP93XX_GPIO_REG(int_en_register_offset[port])); -	__raw_writeb(gpio_int_type2[port], +	writeb_relaxed(gpio_int_type2[port],  		EP93XX_GPIO_REG(int_type2_register_offset[port])); -	__raw_writeb(gpio_int_type1[port], +	writeb_relaxed(gpio_int_type1[port],  		EP93XX_GPIO_REG(int_type1_register_offset[port])); -	__raw_writeb(gpio_int_unmasked[port] & gpio_int_enabled[port], +	writeb(gpio_int_unmasked[port] & gpio_int_enabled[port],  		EP93XX_GPIO_REG(int_en_register_offset[port]));  } @@ -74,7 +74,7 @@ static void ep93xx_gpio_int_debounce(unsigned int irq, bool enable)  	else  		gpio_int_debounce[port] &= ~port_mask; -	__raw_writeb(gpio_int_debounce[port], +	writeb(gpio_int_debounce[port],  		EP93XX_GPIO_REG(int_debounce_register_offset[port]));  } @@ -83,7 +83,7 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)  	unsigned char status;  	int i; -	status = __raw_readb(EP93XX_GPIO_A_INT_STATUS); +	status = readb(EP93XX_GPIO_A_INT_STATUS);  	for (i = 0; i < 8; i++) {  		if (status & (1 << i)) {  			int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_A(0)) + i; @@ -91,7 +91,7 @@ static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)  		}  	} -	status = __raw_readb(EP93XX_GPIO_B_INT_STATUS); +	status = readb(EP93XX_GPIO_B_INT_STATUS);  	for (i = 0; i < 8; i++) {  		if (status & (1 << i)) {  			int gpio_irq = gpio_to_irq(EP93XX_GPIO_LINE_B(0)) + i; @@ -124,7 +124,7 @@ static void ep93xx_gpio_irq_ack(struct irq_data *d)  		ep93xx_gpio_update_int_params(port);  	} -	__raw_writeb(port_mask, EP93XX_GPIO_REG(eoi_register_offset[port])); +	writeb(port_mask, EP93XX_GPIO_REG(eoi_register_offset[port]));  }  static void ep93xx_gpio_irq_mask_ack(struct irq_data *d) @@ -139,7 +139,7 @@ static void ep93xx_gpio_irq_mask_ack(struct irq_data *d)  	gpio_int_unmasked[port] &= ~port_mask;  	ep93xx_gpio_update_int_params(port); -	__raw_writeb(port_mask, EP93XX_GPIO_REG(eoi_register_offset[port])); +	writeb(port_mask, EP93XX_GPIO_REG(eoi_register_offset[port]));  }  static void ep93xx_gpio_irq_mask(struct irq_data *d) @@ -344,37 +344,24 @@ static int ep93xx_gpio_probe(struct platform_device *pdev)  {  	struct ep93xx_gpio *ep93xx_gpio;  	struct resource *res; -	void __iomem *mmio;  	int i; -	int ret; +	struct device *dev = &pdev->dev; -	ep93xx_gpio = kzalloc(sizeof(*ep93xx_gpio), GFP_KERNEL); +	ep93xx_gpio = devm_kzalloc(dev, sizeof(struct ep93xx_gpio), GFP_KERNEL);  	if (!ep93xx_gpio)  		return -ENOMEM;  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!res) { -		ret = -ENXIO; -		goto exit_free; -	} - -	if (!request_mem_region(res->start, resource_size(res), pdev->name)) { -		ret = -EBUSY; -		goto exit_free; -	} - -	mmio = ioremap(res->start, resource_size(res)); -	if (!mmio) { -		ret = -ENXIO; -		goto exit_release; -	} -	ep93xx_gpio->mmio_base = mmio; +	ep93xx_gpio->mmio_base = devm_ioremap_resource(dev, res); +	if (IS_ERR(ep93xx_gpio->mmio_base)) +		return PTR_ERR(ep93xx_gpio->mmio_base);  	for (i = 0; i < ARRAY_SIZE(ep93xx_gpio_banks); i++) {  		struct bgpio_chip *bgc = &ep93xx_gpio->bgc[i];  		struct ep93xx_gpio_bank *bank = &ep93xx_gpio_banks[i]; -		if (ep93xx_gpio_add_bank(bgc, &pdev->dev, mmio, bank)) +		if (ep93xx_gpio_add_bank(bgc, &pdev->dev, +					 ep93xx_gpio->mmio_base, bank))  			dev_warn(&pdev->dev, "Unable to add gpio bank %s\n",  				bank->label);  	} @@ -382,13 +369,6 @@ static int ep93xx_gpio_probe(struct platform_device *pdev)  	ep93xx_gpio_init_irq();  	return 0; - -exit_release: -	release_mem_region(res->start, resource_size(res)); -exit_free: -	kfree(ep93xx_gpio); -	dev_info(&pdev->dev, "%s failed with errno %d\n", __func__, ret); -	return ret;  }  static struct platform_driver ep93xx_gpio_driver = {  | 
