@@ -125,23 +125,36 @@ struct gpio_intel_data {
125
125
};
126
126
127
127
#if DT_ANY_INST_HAS_PROP_STATUS_OKAY (acpi_hid )
128
+ #define GPIO_PAD_OWNERSHIP_SHIFT (0x04) /* Shift between Ownership regs */
129
+
130
+ #define GPIO_PAD_PINS_PER_REG (8) /*Pins for each Register */
131
+
128
132
#define GPIO_REG_BASE_GET (dev ) DEVICE_MMIO_NAMED_GET(dev, reg_base)
129
133
130
134
#define REG_GPI_INT_STS_BASE_GET (data ) (data)->intr_stat_reg
131
135
132
- #define REG_GPI_INT_EN_BASE_GET (data ) (data)->intr_stat_reg + 0x20
133
-
134
136
#define PIN_OFFSET_GET (dev ) (0)
135
137
136
- #define GPIO_PAD_OWNERSHIP_GET (data , pin , offset ) (data)->pad_owner_reg + (((pin) / 8) * 0x4)
137
-
138
138
#define REG_PAD_HOST_SW_OWNER_GET (data ) (data)->host_owner_reg
139
139
140
140
#define GPIO_BASE_GET (cdf ) (0)
141
141
142
142
#define GPIO_INTERRUPT_BASE_GET (cfg ) (0)
143
143
144
144
#define GPIO_GET_PIN_MAX (dev ) ((struct gpio_intel_data *)(dev)->data)->num_pins
145
+
146
+ #define REG_GPI_INT_EN_BASE_GET (data ) (data)->intr_stat_reg + CONFIG_GPIO_INTEL_INT_EN_OFFSET
147
+
148
+ #if DT_ANY_INST_HAS_BOOL_STATUS_OKAY (acpi_ginf )
149
+ #define GPIO_PAD_OWNERSHIP_GET (data , pin , offset )\
150
+ (data)->pad_owner_reg + (pin * GPIO_PAD_OWNERSHIP_SHIFT)
151
+
152
+ #else
153
+ #define GPIO_PAD_OWNERSHIP_GET (data , pin , offset ) (data)->pad_owner_reg +\
154
+ (((pin) / GPIO_PAD_PINS_PER_REG) * GPIO_PAD_OWNERSHIP_SHIFT)
155
+
156
+ #endif
157
+
145
158
#else /* Non-ACPI */
146
159
#define GPIO_REG_BASE_GET (dev ) GPIO_REG_BASE(DEVICE_MMIO_NAMED_GET(dev, reg_base))
147
160
@@ -564,13 +577,14 @@ static DEVICE_API(gpio, gpio_intel_api) = {
564
577
/* We need support either DTS or ACPI base resource enumeration at time.*/
565
578
#if DT_ANY_INST_HAS_PROP_STATUS_OKAY (acpi_hid )
566
579
567
- static int gpio_intel_acpi_enum (const struct device * dev , int bank_idx , char * hid , char * uid )
580
+ static int gpio_intel_acpi_enum (const struct device * dev , int bank_idx , char * hid , char * uid ,
581
+ bool ginf )
568
582
{
569
583
int ret ;
570
584
struct gpio_acpi_res res ;
571
585
struct gpio_intel_data * data = dev -> data ;
572
586
573
- ret = soc_acpi_gpio_resource_get (bank_idx , hid , uid , & res );
587
+ ret = soc_acpi_gpio_resource_get (bank_idx , hid , uid , & res , ginf );
574
588
if (ret ) {
575
589
return ret ;
576
590
}
@@ -605,8 +619,9 @@ static int gpio_intel_acpi_enum(const struct device *dev, int bank_idx, char *hi
605
619
#define GPIO_INIT_FN_DEFINE (n ) \
606
620
static int gpio_intel_init##n(const struct device *dev) \
607
621
{ \
608
- return gpio_intel_acpi_enum(dev, DT_INST_PROP(n, group_index), \
609
- ACPI_DT_HID(DT_DRV_INST(n)), ACPI_DT_UID(DT_DRV_INST(n))); \
622
+ return gpio_intel_acpi_enum(dev, DT_INST_PROP(n, group_index), \
623
+ ACPI_DT_HID(DT_DRV_INST(n)), ACPI_DT_UID(DT_DRV_INST(n)), \
624
+ DT_INST_PROP(n, acpi_ginf)); \
610
625
}
611
626
612
627
#define GPIO_MMIO_ROM_INIT (n )
0 commit comments