11
11
#include <linux/bitops.h>
12
12
#include <linux/io.h>
13
13
#include <linux/of_device.h>
14
- #include <linux/of_gpio.h>
15
14
#include <linux/slab.h>
16
15
#include <linux/gpio/driver.h>
17
16
53
52
#define ZEVIO_GPIO_BIT (gpio ) (gpio&7)
54
53
55
54
struct zevio_gpio {
55
+ struct gpio_chip chip ;
56
56
spinlock_t lock ;
57
- struct of_mm_gpio_chip chip ;
57
+ void __iomem * regs ;
58
58
};
59
59
60
60
static inline u32 zevio_gpio_port_get (struct zevio_gpio * c , unsigned pin ,
61
61
unsigned port_offset )
62
62
{
63
63
unsigned section_offset = ((pin >> 3 ) & 3 )* ZEVIO_GPIO_SECTION_SIZE ;
64
- return readl (IOMEM (c -> chip . regs + section_offset + port_offset ));
64
+ return readl (IOMEM (c -> regs + section_offset + port_offset ));
65
65
}
66
66
67
67
static inline void zevio_gpio_port_set (struct zevio_gpio * c , unsigned pin ,
68
68
unsigned port_offset , u32 val )
69
69
{
70
70
unsigned section_offset = ((pin >> 3 ) & 3 )* ZEVIO_GPIO_SECTION_SIZE ;
71
- writel (val , IOMEM (c -> chip . regs + section_offset + port_offset ));
71
+ writel (val , IOMEM (c -> regs + section_offset + port_offset ));
72
72
}
73
73
74
74
/* Functions for struct gpio_chip */
@@ -178,12 +178,15 @@ static int zevio_gpio_probe(struct platform_device *pdev)
178
178
platform_set_drvdata (pdev , controller );
179
179
180
180
/* Copy our reference */
181
- controller -> chip . gc = zevio_gpio_chip ;
182
- controller -> chip .gc . parent = & pdev -> dev ;
181
+ controller -> chip = zevio_gpio_chip ;
182
+ controller -> chip .parent = & pdev -> dev ;
183
183
184
- status = of_mm_gpiochip_add_data (pdev -> dev .of_node ,
185
- & (controller -> chip ),
186
- controller );
184
+ controller -> regs = devm_platform_ioremap_resource (pdev , 0 );
185
+ if (IS_ERR (controller -> regs ))
186
+ return dev_err_probe (& pdev -> dev , PTR_ERR (controller -> regs ),
187
+ "failed to ioremap memory resource\n" );
188
+
189
+ status = devm_gpiochip_add_data (& pdev -> dev , & controller -> chip , controller );
187
190
if (status ) {
188
191
dev_err (& pdev -> dev , "failed to add gpiochip: %d\n" , status );
189
192
return status ;
@@ -192,10 +195,10 @@ static int zevio_gpio_probe(struct platform_device *pdev)
192
195
spin_lock_init (& controller -> lock );
193
196
194
197
/* Disable interrupts, they only cause errors */
195
- for (i = 0 ; i < controller -> chip .gc . ngpio ; i += 8 )
198
+ for (i = 0 ; i < controller -> chip .ngpio ; i += 8 )
196
199
zevio_gpio_port_set (controller , i , ZEVIO_GPIO_INT_MASK , 0xFF );
197
200
198
- dev_dbg (controller -> chip .gc . parent , "ZEVIO GPIO controller set up!\n" );
201
+ dev_dbg (controller -> chip .parent , "ZEVIO GPIO controller set up!\n" );
199
202
200
203
return 0 ;
201
204
}
0 commit comments