@@ -21,6 +21,9 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
21
21
22
22
#define DT_DRV_COMPAT xlnx_ps_gpio_bank
23
23
24
+ #define DEV_CFG (_dev ) ((const struct gpio_xlnx_ps_bank_dev_cfg *)(_dev)->config)
25
+ #define DEV_DATA (_dev ) ((struct gpio_xlnx_ps_bank_dev_data *const)(_dev)->data)
26
+
24
27
/**
25
28
* @brief GPIO bank pin configuration function
26
29
*
@@ -47,7 +50,8 @@ static int gpio_xlnx_ps_pin_configure(const struct device *dev,
47
50
gpio_pin_t pin ,
48
51
gpio_flags_t flags )
49
52
{
50
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
53
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
54
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
51
55
uint32_t pin_mask = BIT (pin );
52
56
uint32_t bank_data ;
53
57
uint32_t dirm_data ;
@@ -127,7 +131,8 @@ static int gpio_xlnx_ps_pin_configure(const struct device *dev,
127
131
static int gpio_xlnx_ps_bank_get (const struct device * dev ,
128
132
gpio_port_value_t * value )
129
133
{
130
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
134
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
135
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
131
136
132
137
* value = sys_read32 (GPIO_XLNX_PS_BANK_DATA_REG );
133
138
return 0 ;
@@ -159,7 +164,8 @@ static int gpio_xlnx_ps_bank_set_masked(const struct device *dev,
159
164
gpio_port_pins_t mask ,
160
165
gpio_port_value_t value )
161
166
{
162
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
167
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
168
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
163
169
uint32_t bank_data ;
164
170
165
171
bank_data = sys_read32 (GPIO_XLNX_PS_BANK_DATA_REG );
@@ -187,7 +193,8 @@ static int gpio_xlnx_ps_bank_set_masked(const struct device *dev,
187
193
static int gpio_xlnx_ps_bank_set_bits (const struct device * dev ,
188
194
gpio_port_pins_t pins )
189
195
{
190
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
196
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
197
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
191
198
uint32_t bank_data ;
192
199
193
200
bank_data = sys_read32 (GPIO_XLNX_PS_BANK_DATA_REG );
@@ -215,7 +222,8 @@ static int gpio_xlnx_ps_bank_set_bits(const struct device *dev,
215
222
static int gpio_xlnx_ps_bank_clear_bits (const struct device * dev ,
216
223
gpio_port_pins_t pins )
217
224
{
218
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
225
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
226
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
219
227
uint32_t bank_data ;
220
228
221
229
bank_data = sys_read32 (GPIO_XLNX_PS_BANK_DATA_REG );
@@ -243,7 +251,8 @@ static int gpio_xlnx_ps_bank_clear_bits(const struct device *dev,
243
251
static int gpio_xlnx_ps_bank_toggle_bits (const struct device * dev ,
244
252
gpio_port_pins_t pins )
245
253
{
246
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
254
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
255
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
247
256
uint32_t bank_data ;
248
257
249
258
bank_data = sys_read32 (GPIO_XLNX_PS_BANK_DATA_REG );
@@ -282,7 +291,8 @@ static int gpio_xlnx_ps_bank_pin_irq_configure(const struct device *dev,
282
291
enum gpio_int_mode mode ,
283
292
enum gpio_int_trig trig )
284
293
{
285
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
294
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
295
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
286
296
uint32_t pin_mask = BIT (pin );
287
297
uint32_t int_type_data ;
288
298
uint32_t int_polarity_data ;
@@ -358,7 +368,8 @@ static int gpio_xlnx_ps_bank_pin_irq_configure(const struct device *dev,
358
368
*/
359
369
static uint32_t gpio_xlnx_ps_bank_get_int_status (const struct device * dev )
360
370
{
361
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
371
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
372
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
362
373
uint32_t int_status ;
363
374
364
375
int_status = sys_read32 (GPIO_XLNX_PS_BANK_INT_STAT_REG );
@@ -387,7 +398,7 @@ static int gpio_xlnx_ps_bank_manage_callback(const struct device *dev,
387
398
struct gpio_callback * callback ,
388
399
bool set )
389
400
{
390
- struct gpio_xlnx_ps_bank_dev_data * dev_data = dev -> data ;
401
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA ( dev ) ;
391
402
392
403
return gpio_manage_callback (& dev_data -> callbacks , callback , set );
393
404
}
@@ -419,7 +430,14 @@ static DEVICE_API(gpio, gpio_xlnx_ps_bank_apis) = {
419
430
*/
420
431
static int gpio_xlnx_ps_bank_init (const struct device * dev )
421
432
{
422
- const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = dev -> config ;
433
+ const struct gpio_xlnx_ps_bank_dev_cfg * dev_conf = DEV_CFG (dev );
434
+ struct gpio_xlnx_ps_bank_dev_data * dev_data = DEV_DATA (dev );
435
+
436
+ __ASSERT (dev_data -> base != 0 , "%s mapped base address missing" , dev -> name );
437
+ if (dev_data -> base == 0 ) {
438
+ LOG_ERR ("%s mapped base address missing" , dev -> name );
439
+ return - EIO ;
440
+ }
423
441
424
442
sys_write32 (~0x0 , GPIO_XLNX_PS_BANK_INT_DIS_REG ); /* Disable all interrupts */
425
443
sys_write32 (~0x0 , GPIO_XLNX_PS_BANK_INT_STAT_REG ); /* Clear all interrupts */
@@ -436,10 +454,11 @@ static const struct gpio_xlnx_ps_bank_dev_cfg gpio_xlnx_ps_bank##idx##_cfg = {\
436
454
.common = {\
437
455
.port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(idx),\
438
456
},\
439
- .base_addr = DT_REG_ADDR(DT_PARENT(DT_INST(idx, DT_DRV_COMPAT))),\
440
457
.bank_index = idx,\
441
458
};\
442
- static struct gpio_xlnx_ps_bank_dev_data gpio_xlnx_ps_bank##idx##_data;\
459
+ static struct gpio_xlnx_ps_bank_dev_data gpio_xlnx_ps_bank##idx##_data = {\
460
+ .base = 0,\
461
+ };\
443
462
DEVICE_DT_INST_DEFINE(idx, gpio_xlnx_ps_bank_init, NULL,\
444
463
&gpio_xlnx_ps_bank##idx##_data, &gpio_xlnx_ps_bank##idx##_cfg,\
445
464
PRE_KERNEL_1, CONFIG_GPIO_INIT_PRIORITY, &gpio_xlnx_ps_bank_apis);
0 commit comments