diff options
author | Erik Gilling <konkers@android.com> | 2011-04-07 14:33:20 -0700 |
---|---|---|
committer | Erik Gilling <konkers@android.com> | 2011-04-07 14:34:06 -0700 |
commit | 8426dbfc3a189907ce3a309065ebd6126ac0d555 (patch) | |
tree | 2130ce01723e31386cb135f72de9efc5f6f5c1ff /drivers | |
parent | 17a2400a982bbf7aaabe89d7bacf32f600d4e751 (diff) | |
parent | 237d326d61bbda05e90dd531d2057efe365db498 (diff) |
Merge branch linux-tegra-2.6.36 into android-tegra-2.6.36
Change-Id: If54be4c2e106e24beb0ae3063156a0659fcbb943
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/tegra/dc/hdmi.c | 3 | ||||
-rw-r--r-- | drivers/video/tegra/dc/nvhdcp.c | 35 |
2 files changed, 24 insertions, 14 deletions
diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c index 46c599d14b75..e390f233d43e 100644 --- a/drivers/video/tegra/dc/hdmi.c +++ b/drivers/video/tegra/dc/hdmi.c @@ -1137,8 +1137,7 @@ static void tegra_dc_hdmi_enable(struct tegra_dc *dc) tegra_dc_writel(dc, GENERAL_ACT_REQ << 8, DC_CMD_STATE_CONTROL); tegra_dc_writel(dc, GENERAL_ACT_REQ, DC_CMD_STATE_CONTROL); - if (!hdmi->dvi) - tegra_nvhdcp_set_plug(hdmi->nvhdcp, 1); + tegra_nvhdcp_set_plug(hdmi->nvhdcp, 1); } static void tegra_dc_hdmi_disable(struct tegra_dc *dc) diff --git a/drivers/video/tegra/dc/nvhdcp.c b/drivers/video/tegra/dc/nvhdcp.c index fe8beb97c38a..2229c6b93ad3 100644 --- a/drivers/video/tegra/dc/nvhdcp.c +++ b/drivers/video/tegra/dc/nvhdcp.c @@ -116,6 +116,7 @@ static int nvhdcp_i2c_read(struct tegra_nvhdcp *nvhdcp, u8 reg, size_t len, void *data) { int status; + int retries = 15; struct i2c_msg msg[] = { { .addr = 0x74 >> 1, /* primary link */ @@ -131,7 +132,16 @@ static int nvhdcp_i2c_read(struct tegra_nvhdcp *nvhdcp, u8 reg, }, }; - status = i2c_transfer(nvhdcp->client->adapter, msg, ARRAY_SIZE(msg)); + do { + if (!nvhdcp_is_plugged(nvhdcp)) { + nvhdcp_err("disconnect during i2c xfer\n"); + return -EIO; + } + status = i2c_transfer(nvhdcp->client->adapter, + msg, ARRAY_SIZE(msg)); + if (retries > 1) + msleep(250); + } while ((status < 0) && retries--); if (status < 0) { nvhdcp_err("i2c xfer error %d\n", status); @@ -154,11 +164,21 @@ static int nvhdcp_i2c_write(struct tegra_nvhdcp *nvhdcp, u8 reg, .buf = buf, }, }; + int retries = 15; buf[0] = reg; memcpy(buf + 1, data, len); - status = i2c_transfer(nvhdcp->client->adapter, msg, ARRAY_SIZE(msg)); + do { + if (!nvhdcp_is_plugged(nvhdcp)) { + nvhdcp_err("disconnect during i2c xfer\n"); + return -EIO; + } + status = i2c_transfer(nvhdcp->client->adapter, + msg, ARRAY_SIZE(msg)); + if (retries > 1) + msleep(250); + } while ((status < 0) && retries--); if (status < 0) { nvhdcp_err("i2c xfer error %d\n", status); @@ -320,16 +340,7 @@ static inline int get_receiver_ri(struct tegra_nvhdcp *nvhdcp, u16 *r) static int get_bcaps(struct tegra_nvhdcp *nvhdcp, u8 *b_caps) { - int e, retries = 4; - do { - e = nvhdcp_i2c_read8(nvhdcp, 0x40, b_caps); - if (!e) - return 0; - if (retries > 1) - msleep(100); - } while (--retries); - - return -EIO; + return nvhdcp_i2c_read8(nvhdcp, 0x40, b_caps); } static int get_ksvfifo(struct tegra_nvhdcp *nvhdcp, |