On Fri, Nov 22, 2013 at 12:12:43PM -0600, Brandon Anderson wrote:
+#ifdef CONFIG_ACPI +static struct pl022_ssp_controller * +acpi_pl022_get_platform_data(struct device *dev) +{
- struct pl022_ssp_controller *pd, *ret;
- struct acpi_amba_dsm_entry entry;
- pd = devm_kzalloc(dev, sizeof(struct pl022_ssp_controller), GFP_KERNEL);
- if (!pd) {
dev_err(dev, "cannot allocate platform data memory\n");
return NULL;
- }
- ret = pd;
- pd->bus_id = -1;
- pd->enable_dma = 1;
- if (acpi_amba_dsm_lookup(ACPI_HANDLE(dev), "num-cs", 0, &entry) == 0) {
if (kstrtou8(entry.value, 0, &pd->num_chipselect) != 0) {
dev_err(dev, "invalid 'num-cs' in ACPI definition\n");
ret = NULL;
}
kfree(entry.key);
kfree(entry.value);
- }
- if (acpi_amba_dsm_lookup(ACPI_HANDLE(dev),
"autosuspend-delay", 0, &entry) == 0) {
if (kstrtoint(entry.value, 0, &pd->autosuspend_delay) != 0) {
dev_err(dev, "invalid 'autosuspend-delay' in ACPI definition\n");
ret = NULL;
}
kfree(entry.key);
kfree(entry.value);
- }
- if (acpi_amba_dsm_lookup(ACPI_HANDLE(dev), "rt", 0, &entry) == 0) {
pd->rt = (entry.value && strcmp(entry.value, "1") == 0);
kfree(entry.key);
kfree(entry.value);
- }
- return ret;
+}
I thought I'd already commented about this, and said if the properties are the same as the DT stuff, this should be done in a common way rather than modifing every driver.
For stuff like the above, it's really quite simple.
Rename the of_property_read_*() function to firmware_read_*() function and make it take a struct device.
Then you can hide the of_property_read_*() if there's an OF node present inside the firmware_read_*() function. If not, and it has an ACPI handle, then you can read it from ACPI.
That means the only modification that drivers see is a function rename and a _slight_ change of argument, which is a lot saner for driver authors to review rather than having to review an entire set of new parsing code.