[PATCH] of: match the compatible in the order set by the dts file

Stephen Warren swarren at wwwdotorg.org
Tue Jul 9 10:40:26 EDT 2013

On 07/09/2013 06:03 AM, Rob Herring wrote:
> On Tue, Jul 9, 2013 at 3:10 AM, Huang Shijie <b32955 at freescale.com> wrote:
>> 于 2013年07月09日 15:51, Sascha Hauer 写道:
>>> On Tue, Jul 09, 2013 at 03:46:34PM +0800, Huang Shijie wrote:
>>>> 于 2013年07月09日 15:05, Sascha Hauer 写道:
>>>>> Why don't you set the matching order in the driver the way you want it
>>>>> to be, i.e.:
>>>>>         { .compatible = "fsl,imx6q-uart", ... },
>>>>>         { .compatible = "fsl,imx21-uart", ... },
>>>>>         { .compatible = "fsl,imx1-uart", ... },
>>>> yes. i can set it like this.
>>>> but this method looks like a ugly workaround.
>>> If a driver has different ways of supporting a single device, then
>>> putting the preferred or most feature rich on top doesn't look very ugly
>>> to me.
>> this method makes it much _coupled_ between the driver and the dts file.
>> IMHO, it's an unnecessary _burden_ to the driver programmer:
>>    he should puts the most feature compatible on the top.
>> it's much graceful if we let the driver programmer be transparent about
>> this.
> The dts requires compatible strings to be most specific to least
> specific. There is no reason that driver match tables should not be
> the same and that is the assumption. Matching is not just based on
> compatible properties and your patch does not handle the other cases.

Well, that may be true, but the only way to guarantee that the DT
compatible property is matched correctly is to match it in the order
it's written. Forcing driver writers to write the of_match table in a
particular order is quite a hack, and doesn't guarantee the correct
match order in all cases, only typical cases.

More information about the linux-arm-kernel mailing list