]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/acpi/acpica/rsserial.c
ACPICA: ACPI 6.2: Add support for PinConfig() resource
[karo-tx-linux.git] / drivers / acpi / acpica / rsserial.c
index fd11d0c10c171af41c6fbc5705769e54120ca236..01bc851283d5b9a6aca6cc0d071b619d774db6c5 100644 (file)
@@ -534,3 +534,81 @@ struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
         AML_OFFSET(uart_serial_bus.default_baud_rate),
         1},
 };
+
+/*******************************************************************************
+ *
+ * acpi_rs_convert_pin_config
+ *
+ ******************************************************************************/
+
+struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
+       {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
+        ACPI_RS_SIZE(struct acpi_resource_pin_config),
+        ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
+
+       {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
+        sizeof(struct aml_resource_pin_config),
+        0},
+
+       {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
+        AML_OFFSET(pin_config.revision_id),
+        1},
+
+       {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.sharable),
+        AML_OFFSET(pin_config.flags),
+        0},
+
+       {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
+        AML_OFFSET(pin_config.flags),
+        1},
+
+       {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
+        AML_OFFSET(pin_config.pin_config_type),
+        1},
+
+       {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
+        AML_OFFSET(pin_config.pin_config_value),
+        1},
+
+       /* Pin Table */
+
+       /*
+        * It is OK to use GPIO operations here because none of them refer GPIO
+        * structures directly but instead use offsets given here.
+        */
+
+       {ACPI_RSC_COUNT_GPIO_PIN,
+        ACPI_RS_OFFSET(data.pin_config.pin_table_length),
+        AML_OFFSET(pin_config.pin_table_offset),
+        AML_OFFSET(pin_config.res_source_offset)},
+
+       {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
+        AML_OFFSET(pin_config.pin_table_offset),
+        0},
+
+       /* Resource Source */
+
+       {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
+        AML_OFFSET(pin_config.res_source_index),
+        1},
+
+       {ACPI_RSC_COUNT_GPIO_RES,
+        ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
+        AML_OFFSET(pin_config.res_source_offset),
+        AML_OFFSET(pin_config.vendor_offset)},
+
+       {ACPI_RSC_MOVE_GPIO_RES,
+        ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
+        AML_OFFSET(pin_config.res_source_offset),
+        0},
+
+       /* Vendor Data */
+
+       {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
+        AML_OFFSET(pin_config.vendor_length),
+        1},
+
+       {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
+        AML_OFFSET(pin_config.vendor_offset),
+        0},
+};