On Tue, Nov 13, 2012 at 08:48:22AM +0100, Thierry Reding wrote:
On Tue, Nov 13, 2012 at 03:15:47PM +0800, Mark Zhang wrote:
On 11/13/2012 05:55 AM, Thierry Reding wrote:
[...]
+int tegra_output_init(struct drm_device *drm, struct tegra_output *output) +{
int connector, encoder, err;
enum of_gpio_flags flags;
struct device_node *ddc;
size_t size;
if (!output->of_node)
output->of_node = output->dev->of_node;
output->edid = of_get_property(output->of_node, "nvidia,edid", &size);
ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0);
if (ddc) {
output->ddc = of_find_i2c_adapter_by_node(ddc);
The i2c adapter may not be ready at this time. For Tegra 2, the I2C bus for HDMI is not dedicated and we need the i2cmux driver loaded before this i2c can be used. It proved that sometimes i2cmux driver loads after drm driver.
So we need to add some logics to support driver probe deferral here. Anyway, I'm just want you know about this and we can improve this later.
Good point. Unfortunately tegra_output_init() isn't always used from within .probe(), so it isn't quite easy to handle deferred probe here. I'll have to take a look at how to solve this properly.
After a closer look at this I think what should be done here is split up tegra_output_init() into a tegra_output_parse() that does the DT parsing and tegra_output_init() that actually initializes the output.
I'll try to implement something like that for the next version.
Thierry