[PATCH 4/6] ARM: tegra: harmony: register sdhci devices
Olof Johansson
olof at lixom.net
Tue Feb 22 10:44:58 EST 2011
On Mon, Feb 21, 2011 at 10:59 PM, Mike Rapoport <mike at compulab.co.il> wrote:
> Hi Olof,
> Sorry for jumping late, haven't thought about the proposal below yesterday.
> I'm not objecting to applying the patch as is, we can refactor the code
> afterwards as well.
Thanks for the input. And yeah, I'd say we can refactor later when we
see how things will fit well with flat devicetrees. More below.
>> static void __init tegra_harmony_init(void)
>> {
>> tegra_common_init();
>> @@ -85,6 +111,10 @@ static void __init tegra_harmony_init(void)
>>
>> harmony_pinmux_init();
>>
>> + tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1;
>> + tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2;
>> + tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;
>> +
>
> I think that instead of copying explicit initialization of the platform_data
> member from board to board we can do something similar to what PXA does. The
> board file would have to call something like
> tegra_set_device_X_info(struct tegra_device_X_platform_data *data);
> and then static registration of platform devices in the board files can be dropped.
>
> For instance, the devices.c would have
>
> void __init tegra_register_device(struct platform_device *dev, void *data)
> {
> int ret;
>
> dev->dev.platform_data = data;
>
> ret = platform_device_register(dev);
> if (ret)
> dev_err(&dev->dev, "unable to register device: %d\n", ret);
> }
>
> void __init tegra_set_sdhci1_info(struct tegra_sdhci_platform_data *info)
> {
> tegra_register_device(&tegra_sdhci_device1, info);
> }
>
> and the board files would just call tegra_set_sdhci1_info to pass the platform
> data for the tegra_sdhci_device1 and register the device.
>
> This way we could reduce amount of copy/paste between the board files. Besides,
> if/when tegra will be using device trees, handling of the device registration in
> common place would make the transition easier.
I don't see how that reduces the amount of copy and paste
(significantly), since you still need the platform_data defined per
board so you'll need to add the calls there. Maybe a generic
"set_platform_data" hook instead of doing the pointer assignment
open-coded would be an improvement though.
I'm personally not a fan of the style where data is described as code,
i.e. where there would be a tegra_set_<dev>_info function for every
possible device out there. If anything that adds to the amount of
copy-and-paste (per device), when it could just be handled with one
common function being passed the appropriate data (i.e. like
tegra_register_device).
Anyway, I'm not looking to argue over it. :) I think we'll see when
the FDT pieces start to take shape what kind of model will work well,
and there's no reason to do premature refactoring.
-Olof
More information about the linux-arm-kernel
mailing list