提交 f1858957 编写于 作者: S Simon Glass 提交者: Bin Meng

dm: core: Add a way of overriding the ACPI device path

Some devices such as GPIO need to override the normal path that would be
generated by driver model. Add a device-tree property for this.
Signed-off-by: NSimon Glass <sjg@chromium.org>
Reviewed-by: NBin Meng <bmeng.cn@gmail.com>
Reviewed-by: NWolfgang Wallner <wolfgang.wallner@br-automation.com>
上级 f02d0eb3
......@@ -17,6 +17,8 @@ the acpi,compatible property.
System) Device Name)
- acpi,hid : Contains the string to use as the HID (Hardware ID)
identifier _HID
- acpi,path : Specifies the full ACPI path for a device. This overrides the
normal path built from the driver-model hierarchy
- acpi,name : Provides the ACPI name for a device, which is a string consisting
of four alphanumeric character (upper case)
- acpi,uid : _UID value for device
......@@ -47,3 +49,24 @@ pcie-a0@14,0 {
interrupts-extended = <&acpi_gpe 0x3c 0>;
};
};
p2sb: p2sb@d,0 {
u-boot,dm-pre-reloc;
reg = <0x02006810 0 0 0 0>;
compatible = "intel,apl-p2sb";
early-regs = <IOMAP_P2SB_BAR 0x100000>;
pci,no-autoconfig;
n {
compatible = "intel,apl-pinctrl";
u-boot,dm-pre-reloc;
intel,p2sb-port-id = <PID_GPIO_N>;
acpi,path = "\\_SB.GPO0";
gpio_n: gpio-n {
compatible = "intel,gpio";
u-boot,dm-pre-reloc;
gpio-controller;
#gpio-cells = <2>;
linux-name = "INT3452:00";
};
};
......@@ -82,6 +82,25 @@ int acpi_get_name(const struct udevice *dev, char *out_name)
return 0;
}
int acpi_get_path(const struct udevice *dev, char *out_path, int maxlen)
{
const char *path;
int ret;
path = dev_read_string(dev, "acpi,path");
if (path) {
if (strlen(path) >= maxlen)
return -E2BIG;
strcpy(out_path, path);
return 0;
}
ret = acpi_device_path(dev, out_path, maxlen);
if (ret)
return log_msg_ret("dev", ret);
return 0;
}
/**
* acpi_add_item() - Add a new item to the list of data collected
*
......
......@@ -187,6 +187,19 @@ int acpi_inject_dsdt(struct acpi_ctx *ctx);
*/
void acpi_dump_items(enum acpi_dump_option option);
/**
* acpi_get_path() - Get the full ACPI path for a device
*
* This checks for any override in the device tree and calls acpi_device_path()
* if not
*
* @dev: Device to check
* @out_path: Buffer to place the path in (should be ACPI_PATH_MAX long)
* @maxlen: Size of buffer (typically ACPI_PATH_MAX)
* @return 0 if OK, -ve on error
*/
int acpi_get_path(const struct udevice *dev, char *out_path, int maxlen);
#endif /* __ACPI__ */
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册