Skip to content

Commit bb5e615

Browse files
committed
drivers: gpio: gpio_dw: move base_addr to config struct
This variable should be const and inside the driver config struct. Signed-off-by: Corey Wharton <[email protected]>
1 parent 6fffdb9 commit bb5e615

File tree

2 files changed

+30
-34
lines changed

2 files changed

+30
-34
lines changed

drivers/gpio/gpio_dw.c

+29-33
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,9 @@ static int gpio_dw_pin_interrupt_configure(const struct device *port,
171171
enum gpio_int_mode mode,
172172
enum gpio_int_trig trig)
173173
{
174-
struct gpio_dw_runtime *context = port->data;
175174
const struct gpio_dw_config *config = port->config;
176-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
177-
uint32_t port_base_addr = context->base_addr;
175+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
176+
uint32_t port_base_addr = config->base_addr;
178177
uint32_t dir_port = dw_get_dir_port(port_base_addr);
179178
uint32_t data_port = dw_get_data_port(port_base_addr);
180179
uint32_t dir_reg;
@@ -235,10 +234,9 @@ static int gpio_dw_pin_interrupt_configure(const struct device *port,
235234
static inline void dw_pin_config(const struct device *port,
236235
uint32_t pin, int flags)
237236
{
238-
struct gpio_dw_runtime *context = port->data;
239237
const struct gpio_dw_config *config = port->config;
240-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
241-
uint32_t port_base_addr = context->base_addr;
238+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
239+
uint32_t port_base_addr = config->base_addr;
242240
uint32_t dir_port = dw_get_dir_port(port_base_addr);
243241
bool pin_is_output, need_debounce;
244242

@@ -303,9 +301,9 @@ static inline int gpio_dw_config(const struct device *port,
303301

304302
static int gpio_dw_port_get_raw(const struct device *port, uint32_t *value)
305303
{
306-
struct gpio_dw_runtime *context = port->data;
307-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
308-
uint32_t port_base_addr = context->base_addr;
304+
const struct gpio_dw_config *config = port->config;
305+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
306+
uint32_t port_base_addr = config->base_addr;
309307
uint32_t ext_port = dw_get_ext_port(port_base_addr);
310308

311309
*value = dw_read(base_addr, ext_port);
@@ -316,9 +314,9 @@ static int gpio_dw_port_get_raw(const struct device *port, uint32_t *value)
316314
static int gpio_dw_port_set_masked_raw(const struct device *port,
317315
uint32_t mask, uint32_t value)
318316
{
319-
struct gpio_dw_runtime *context = port->data;
320-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
321-
uint32_t port_base_addr = context->base_addr;
317+
const struct gpio_dw_config *config = port->config;
318+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
319+
uint32_t port_base_addr = config->base_addr;
322320
uint32_t data_port = dw_get_data_port(port_base_addr);
323321
uint32_t pins;
324322

@@ -331,9 +329,9 @@ static int gpio_dw_port_set_masked_raw(const struct device *port,
331329

332330
static int gpio_dw_port_set_bits_raw(const struct device *port, uint32_t mask)
333331
{
334-
struct gpio_dw_runtime *context = port->data;
335-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
336-
uint32_t port_base_addr = context->base_addr;
332+
const struct gpio_dw_config *config = port->config;
333+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
334+
uint32_t port_base_addr = config->base_addr;
337335
uint32_t data_port = dw_get_data_port(port_base_addr);
338336
uint32_t pins;
339337

@@ -347,9 +345,9 @@ static int gpio_dw_port_set_bits_raw(const struct device *port, uint32_t mask)
347345
static int gpio_dw_port_clear_bits_raw(const struct device *port,
348346
uint32_t mask)
349347
{
350-
struct gpio_dw_runtime *context = port->data;
351-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
352-
uint32_t port_base_addr = context->base_addr;
348+
const struct gpio_dw_config *config = port->config;
349+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
350+
uint32_t port_base_addr = config->base_addr;
353351
uint32_t data_port = dw_get_data_port(port_base_addr);
354352
uint32_t pins;
355353

@@ -362,9 +360,9 @@ static int gpio_dw_port_clear_bits_raw(const struct device *port,
362360

363361
static int gpio_dw_port_toggle_bits(const struct device *port, uint32_t mask)
364362
{
365-
struct gpio_dw_runtime *context = port->data;
366-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
367-
uint32_t port_base_addr = context->base_addr;
363+
const struct gpio_dw_config *config = port->config;
364+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
365+
uint32_t port_base_addr = config->base_addr;
368366
uint32_t data_port = dw_get_data_port(port_base_addr);
369367
uint32_t pins;
370368

@@ -388,7 +386,8 @@ static inline int gpio_dw_manage_callback(const struct device *port,
388386
static void gpio_dw_isr(const struct device *port)
389387
{
390388
struct gpio_dw_runtime *context = port->data;
391-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
389+
const struct gpio_dw_config *config = port->config;
390+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
392391
uint32_t int_status;
393392

394393
int_status = dw_read(base_addr, INTSTATUS);
@@ -401,14 +400,13 @@ static void gpio_dw_isr(const struct device *port)
401400

402401
int gpio_dw_set_hw_mode(const struct device *port, gpio_pin_t pin, bool hw_mode)
403402
{
404-
struct gpio_dw_runtime *context = port->data;
405-
__unused const struct gpio_driver_config *const cfg =
406-
(const struct gpio_driver_config *)port->config;
407-
uint32_t base_addr = dw_base_to_block_base(context->base_addr);
408-
uint32_t port_id = dw_derive_port_from_base(context->base_addr);
403+
const struct gpio_dw_config *config = port->config;
404+
uint32_t base_addr = dw_base_to_block_base(config->base_addr);
405+
uint32_t port_id = dw_derive_port_from_base(config->base_addr);
409406
uint32_t ctl_port;
410407

411-
__ASSERT((cfg->port_pin_mask & (gpio_port_pins_t)BIT(pin)) != 0U, "Unsupported pin");
408+
__ASSERT((config->common.port_pin_mask & (gpio_port_pins_t)BIT(pin)) != 0U,
409+
"Unsupported pin");
412410

413411
/* 4-port GPIO implementation translates from base address to port */
414412
switch (port_id) {
@@ -445,13 +443,12 @@ static DEVICE_API(gpio, api_funcs) = {
445443

446444
static int gpio_dw_initialize(const struct device *port)
447445
{
448-
struct gpio_dw_runtime *context = port->data;
449446
const struct gpio_dw_config *config = port->config;
450447
uint32_t base_addr;
451448

452449
if (dw_interrupt_support(config)) {
453450

454-
base_addr = dw_base_to_block_base(context->base_addr);
451+
base_addr = dw_base_to_block_base(config->base_addr);
455452

456453
/* interrupts in sync with system clock */
457454
dw_set_bit(base_addr, INT_CLOCK_SYNC, LS_SYNC_POS, 1);
@@ -488,14 +485,13 @@ static int gpio_dw_initialize(const struct device *port)
488485
.common = { \
489486
.port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(n), \
490487
}, \
488+
.base_addr = DT_INST_REG_ADDR(n), \
491489
.irq_num = COND_CODE_1(DT_INST_IRQ_HAS_IDX(n, 0), (DT_INST_IRQN(n)), (0)), \
492490
.ngpios = DT_INST_PROP(n, ngpios), \
493491
.config_func = gpio_config_##n##_irq, \
494492
}; \
495493
\
496-
static struct gpio_dw_runtime gpio_##n##_runtime = { \
497-
.base_addr = DT_INST_REG_ADDR(n), \
498-
}; \
494+
static struct gpio_dw_runtime gpio_##n##_runtime; \
499495
\
500496
DEVICE_DT_INST_DEFINE(n, gpio_dw_initialize, NULL, &gpio_##n##_runtime, \
501497
&gpio_dw_config_##n, PRE_KERNEL_1, \

drivers/gpio/gpio_dw.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ typedef void (*gpio_config_irq_t)(const struct device *port);
2020
struct gpio_dw_config {
2121
/* gpio_driver_config needs to be first */
2222
struct gpio_driver_config common;
23+
uint32_t base_addr;
2324
uint32_t ngpios;
2425
uint32_t irq_num; /* set to 0 if GPIO port cannot interrupt */
2526
gpio_config_irq_t config_func;
@@ -28,7 +29,6 @@ struct gpio_dw_config {
2829
struct gpio_dw_runtime {
2930
/* gpio_driver_data needs to be first */
3031
struct gpio_driver_data common;
31-
uint32_t base_addr;
3232
sys_slist_t callbacks;
3333
};
3434

0 commit comments

Comments
 (0)