On 04/27/2012 12:48 AM, Hiroshi Doyu wrote: ... > Then, what about something like the following? > > static int tegra_ahb_match_by_smmu(struct device *dev, void *data) > { > struct tegra_ahb *ahb = dev_get_drvdata(dev); > struct device_node *dn = data; > > return (ahb->dev->of_node == dn) ? 1 : 0 > } I imagine that function and the driver_find_device() call that uses it will be pretty common. It may make sense as a drivers/of utility function, although perhaps we can wait until later to refactor it, once we actually have multiple pieces of code that do this same thing. > int tegra_ahb_enable_smmu(struct device_node *ahb) > { > struct device *dev; > u32 val; > > dev = driver_find_device(&tegra_ahb_driver.driver, NULL, ahb, > tegra_ahb_match_by_smmu); > if (!dev) > return -ENODEV; Yes, -EPROBE_DEFER here as you mentioned in your followup email. > > val = gizmo_readl(ahb, AHB_ARBITRATION_XBAR_CTRL); > val |= AHB_ARBITRATION_XBAR_CTRL_SMMU_INIT_DONE; > gizmo_writel(ahb, val, AHB_ARBITRATION_XBAR_CTRL); > return 0; > } > EXPORT_SYMBOL(tegra_ahb_enable_smmu); > > Modified arch/arm/boot/dts/tegra30.dtsi > diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi > index 655bc47..28f9138 100644 > --- a/arch/arm/boot/dts/tegra30.dtsi > +++ b/arch/arm/boot/dts/tegra30.dtsi > @@ -242,5 +242,6 @@ > smmu { > compatible = "nvidia,tegra30-smmu"; > mc = <&mc>; > + ahb = <&ahb>; > }; > }; Yes, that's probably the best (even only) way to connect the two drivers precisely. -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html