On 2013-12-18 12:41, Tomi Valkeinen wrote: > 3. Have correct DT data, but at init time, in omap arch code, go through > the DT data and change the compat strings for the display nodes to > include "omapdss,". This way the drivers would only work for omap > platforms. Like a combination of 1. and 2. I'm not sure if the DT-code > allows this at the moment, though. This wasn't actually too hard. It says "hack" all over it, but the code was quite compact. I call the omapdss_early_init_of() as the first thing in omap_generic_init(), before the devices are created: +static const char* const dss_compat_conv_list[] = { + "hdmi-connector", + "dvi-connector", + "ti,tpd12s015", + "panel-dsi-cm", +}; + +static void omapdss_omapify_node(struct device_node *node, const char *compat) +{ + char *new_compat; + struct property *prop; + + new_compat = kasprintf(GFP_KERNEL, "omapdss,%s", compat); + + prop = kzalloc(sizeof(*prop), GFP_KERNEL); + prop->name = "compatible"; + prop->value = new_compat; + prop->length = strlen(new_compat) + 1; + + of_update_property(node, prop); +} + +void __init omapdss_early_init_of(void) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dss_compat_conv_list); ++i) { + const char *compat = dss_compat_conv_list[i]; + struct device_node *node = NULL; + + while ((node = of_find_compatible_node(node, NULL, compat))) { + if (!of_device_is_available(node)) + continue; + + omapdss_omapify_node(node, compat); + } + } +} The list has just part of the devices, and I've so far only tested on OMAP 4430sdp board, but it seemed to work fine. So with this, I can have "hdmi-connector" in the .dts file, and "omapdss,hdmi-connector" as a compat string in the omap specific driver. Does it make your eyes bleed, or is it maybe something that could be fine for the time being? Tomi
Attachment:
signature.asc
Description: OpenPGP digital signature