diff options
author | Venkat Reddy Talla <vreddytalla@nvidia.com> | 2018-06-14 05:51:44 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-07-08 06:46:36 -0400 |
commit | 77f170a2507f4d40f73c2b41c863fccb988da247 (patch) | |
tree | fab58e4b735ef4750a7416cf2bc75dc6f9f97adf | |
parent | 249afc36161c11d16402933215a8bbf0071b07d4 (diff) |
tegra: dc: use pinctrl fw to configure io pad dpd
Using pincontrol framework to configure io pad dpd mode
for display io pads.In k4.14 programming io pad dpd
mode(enable/disable) using padcontrol framework deprecated,
so moving display io pad dpd mode programming to pin control
framework.
Bug 200414242
Bug 200416228
Change-Id: Iffe84f3c19f3b8bbdfe546c3a891a163035dee92
Signed-off-by: Venkat Reddy Talla <vreddytalla@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1749804
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/video/tegra/dc/dsi.c | 51 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dsi.h | 3 | ||||
-rw-r--r-- | drivers/video/tegra/dc/sor.c | 96 | ||||
-rw-r--r-- | drivers/video/tegra/dc/sor.h | 4 |
4 files changed, 96 insertions, 58 deletions
diff --git a/drivers/video/tegra/dc/dsi.c b/drivers/video/tegra/dc/dsi.c index 7019d0cf7..7d2a68279 100644 --- a/drivers/video/tegra/dc/dsi.c +++ b/drivers/video/tegra/dc/dsi.c | |||
@@ -39,7 +39,6 @@ | |||
39 | #include <linux/nvhost.h> | 39 | #include <linux/nvhost.h> |
40 | #include <linux/of_address.h> | 40 | #include <linux/of_address.h> |
41 | #include <linux/io.h> | 41 | #include <linux/io.h> |
42 | #include <linux/padctrl/padctrl.h> | ||
43 | #include <linux/tegra_prod.h> | 42 | #include <linux/tegra_prod.h> |
44 | 43 | ||
45 | #include "dc.h" | 44 | #include "dc.h" |
@@ -4472,14 +4471,13 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4472 | struct clk *dsi_fixed_clk = NULL; | 4471 | struct clk *dsi_fixed_clk = NULL; |
4473 | struct clk *dsi_lp_clk = NULL; | 4472 | struct clk *dsi_lp_clk = NULL; |
4474 | struct reset_control *dsi_reset = NULL; | 4473 | struct reset_control *dsi_reset = NULL; |
4475 | struct padctrl *dsi_io_padctrl = NULL; | ||
4476 | |||
4477 | struct tegra_dsi_out *dsi_pdata = NULL; | 4474 | struct tegra_dsi_out *dsi_pdata = NULL; |
4478 | int err = 0, i; | 4475 | int err = 0, i; |
4479 | int dsi_instance; | 4476 | int dsi_instance; |
4480 | int index = 0; | 4477 | int index = 0; |
4481 | 4478 | ||
4482 | char *dsi_io_padctrl_name[4] = {"dsia", "dsib", "dsic", "dsid"}; | 4479 | char *dsi_pad_dpd_on[4] = {"dsi-dpd-enable", "dsib-dpd-enable", |
4480 | "dsic-dpd-enable", "dsid-dpd-enable"}; | ||
4483 | char *dsi_clk_name[4] = {"dsi", "dsib", "dsic", "dsid"}; | 4481 | char *dsi_clk_name[4] = {"dsi", "dsib", "dsic", "dsid"}; |
4484 | char *dsi_lp_clk_name[4] = {"dsia_lp", "dsib_lp", "dsic_lp", "dsid_lp"}; | 4482 | char *dsi_lp_clk_name[4] = {"dsia_lp", "dsib_lp", "dsic_lp", "dsid_lp"}; |
4485 | char *dsi_reset_name[4] = {"dsia", "dsib", "dsic", "dsid"}; | 4483 | char *dsi_reset_name[4] = {"dsia", "dsib", "dsic", "dsid"}; |
@@ -4538,14 +4536,6 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4538 | goto err_free_dsi_lp_clk; | 4536 | goto err_free_dsi_lp_clk; |
4539 | } | 4537 | } |
4540 | 4538 | ||
4541 | dsi->dsi_io_padctrl = kzalloc(tegra_dc_get_max_dsi_instance() * | ||
4542 | sizeof(struct tegra_dsi_padctrl *), | ||
4543 | GFP_KERNEL); | ||
4544 | if (!dsi->dsi_io_padctrl) { | ||
4545 | err = -ENOMEM; | ||
4546 | goto err_free_dsi_reset; | ||
4547 | } | ||
4548 | |||
4549 | /* Detect when user provides wrong dsi_instance or | 4539 | /* Detect when user provides wrong dsi_instance or |
4550 | * max dsi instances. | 4540 | * max dsi instances. |
4551 | */ | 4541 | */ |
@@ -4556,6 +4546,13 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4556 | goto err_free_dsi_reset; | 4546 | goto err_free_dsi_reset; |
4557 | } | 4547 | } |
4558 | 4548 | ||
4549 | dsi->dsi_io_pad_pinctrl = devm_pinctrl_get(&dc->ndev->dev); | ||
4550 | if (IS_ERR_OR_NULL(dsi->dsi_io_pad_pinctrl)) { | ||
4551 | dev_err(&dc->ndev->dev, "dsi: missing io pinctrl info:%ld\n", | ||
4552 | PTR_ERR(dsi->dsi_io_pad_pinctrl)); | ||
4553 | dsi->dsi_io_pad_pinctrl = NULL; | ||
4554 | } | ||
4555 | |||
4559 | for (i = 0; i < dsi->max_instances; i++) { | 4556 | for (i = 0; i < dsi->max_instances; i++) { |
4560 | 4557 | ||
4561 | index = i + dsi_instance; /*index for dsi instance*/ | 4558 | index = i + dsi_instance; /*index for dsi instance*/ |
@@ -4564,13 +4561,13 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4564 | if (!base) { | 4561 | if (!base) { |
4565 | dev_err(&dc->ndev->dev, "dsi: ioremap failed\n"); | 4562 | dev_err(&dc->ndev->dev, "dsi: ioremap failed\n"); |
4566 | err = -ENOENT; | 4563 | err = -ENOENT; |
4567 | goto err_free_dsi_io_padctrl; | 4564 | goto err_free_dsi_reset; |
4568 | } | 4565 | } |
4569 | 4566 | ||
4570 | dsi_pdata = dc->pdata->default_out->dsi; | 4567 | dsi_pdata = dc->pdata->default_out->dsi; |
4571 | if (!dsi_pdata) { | 4568 | if (!dsi_pdata) { |
4572 | dev_err(&dc->ndev->dev, "dsi: dsi data not available\n"); | 4569 | dev_err(&dc->ndev->dev, "dsi: dsi data not available\n"); |
4573 | goto err_free_dsi_io_padctrl; | 4570 | goto err_free_dsi_reset; |
4574 | } | 4571 | } |
4575 | 4572 | ||
4576 | dsi_clk = tegra_disp_of_clk_get_by_name(np_dsi, | 4573 | dsi_clk = tegra_disp_of_clk_get_by_name(np_dsi, |
@@ -4596,19 +4593,20 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4596 | reset_control_reset(dsi_reset); | 4593 | reset_control_reset(dsi_reset); |
4597 | } | 4594 | } |
4598 | 4595 | ||
4599 | dsi_io_padctrl = devm_padctrl_get_from_node(&dc->ndev->dev, | 4596 | if (dsi->dsi_io_pad_pinctrl) { |
4600 | np_dsi, dsi_io_padctrl_name[index]); | 4597 | dsi->dpd_enable[i] = pinctrl_lookup_state(dsi->dsi_io_pad_pinctrl, |
4601 | if (IS_ERR_OR_NULL(dsi_io_padctrl)) { | 4598 | dsi_pad_dpd_on[i]); |
4602 | dev_err(&dc->ndev->dev, "dsi: %s IO padctrl unavailable\n", | 4599 | if (IS_ERR_OR_NULL(dsi->dpd_enable[i])) { |
4603 | dsi_io_padctrl_name[index]); | 4600 | dev_err(&dc->ndev->dev, "dsi: dpd lookup fail:%ld\n", |
4604 | dsi_io_padctrl = NULL; | 4601 | PTR_ERR(dsi->dpd_enable[i])); |
4602 | dsi->dpd_enable[i] = NULL; | ||
4603 | } | ||
4605 | } | 4604 | } |
4606 | 4605 | ||
4607 | dsi->base[i] = base; | 4606 | dsi->base[i] = base; |
4608 | dsi->dsi_clk[i] = dsi_clk; | 4607 | dsi->dsi_clk[i] = dsi_clk; |
4609 | dsi->dsi_lp_clk[i] = dsi_lp_clk; | 4608 | dsi->dsi_lp_clk[i] = dsi_lp_clk; |
4610 | dsi->dsi_reset[i] = dsi_reset; | 4609 | dsi->dsi_reset[i] = dsi_reset; |
4611 | dsi->dsi_io_padctrl[i] = dsi_io_padctrl; | ||
4612 | } | 4610 | } |
4613 | 4611 | ||
4614 | if (tegra_dc_is_t21x()) { | 4612 | if (tegra_dc_is_t21x()) { |
@@ -4687,8 +4685,13 @@ static int _tegra_dc_dsi_init(struct tegra_dc *dc) | |||
4687 | int i; | 4685 | int i; |
4688 | for (i = 0; i < tegra_dc_get_max_dsi_instance(); i++) { | 4686 | for (i = 0; i < tegra_dc_get_max_dsi_instance(); i++) { |
4689 | if ((dsi->info.dpd_dsi_pads & DSI_DPD_EN(i)) && | 4687 | if ((dsi->info.dpd_dsi_pads & DSI_DPD_EN(i)) && |
4690 | dsi->dsi_io_padctrl[i]) | 4688 | dsi->dpd_enable[i]) { |
4691 | padctrl_power_disable(dsi->dsi_io_padctrl[i]); | 4689 | err = pinctrl_select_state(dsi->dsi_io_pad_pinctrl, |
4690 | dsi->dpd_enable[i]); | ||
4691 | if (err < 0) | ||
4692 | dev_err(&dc->ndev->dev, | ||
4693 | "io pad power-down fail:%d\n", err); | ||
4694 | } | ||
4692 | } | 4695 | } |
4693 | } | 4696 | } |
4694 | 4697 | ||
@@ -4718,8 +4721,6 @@ err_dsi_clk_put: | |||
4718 | if (dsi->dsi_reset[i]) | 4721 | if (dsi->dsi_reset[i]) |
4719 | reset_control_put(dsi->dsi_reset[i]); | 4722 | reset_control_put(dsi->dsi_reset[i]); |
4720 | } | 4723 | } |
4721 | err_free_dsi_io_padctrl: | ||
4722 | kfree(dsi->dsi_io_padctrl); | ||
4723 | err_free_dsi_reset: | 4724 | err_free_dsi_reset: |
4724 | kfree(dsi->dsi_reset); | 4725 | kfree(dsi->dsi_reset); |
4725 | err_free_dsi_lp_clk: | 4726 | err_free_dsi_lp_clk: |
diff --git a/drivers/video/tegra/dc/dsi.h b/drivers/video/tegra/dc/dsi.h index 330926444..cde06b9b8 100644 --- a/drivers/video/tegra/dc/dsi.h +++ b/drivers/video/tegra/dc/dsi.h | |||
@@ -146,7 +146,8 @@ struct tegra_dc_dsi_data { | |||
146 | u32 device_shutdown; | 146 | u32 device_shutdown; |
147 | 147 | ||
148 | struct sysedp_consumer *sysedpc; | 148 | struct sysedp_consumer *sysedpc; |
149 | struct padctrl **dsi_io_padctrl; | 149 | struct pinctrl *dsi_io_pad_pinctrl; |
150 | struct pinctrl_state *dpd_enable[4]; | ||
150 | 151 | ||
151 | struct tegra_dsi_padctrl *pad_ctrl; | 152 | struct tegra_dsi_padctrl *pad_ctrl; |
152 | struct tegra_prod *prod_list; | 153 | struct tegra_prod *prod_list; |
diff --git a/drivers/video/tegra/dc/sor.c b/drivers/video/tegra/dc/sor.c index 4506ac7de..8c61f0722 100644 --- a/drivers/video/tegra/dc/sor.c +++ b/drivers/video/tegra/dc/sor.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/tegra_prod.h> | 27 | #include <linux/tegra_prod.h> |
28 | #include <linux/uaccess.h> | 28 | #include <linux/uaccess.h> |
29 | #include <linux/version.h> | 29 | #include <linux/version.h> |
30 | #include <linux/padctrl/padctrl.h> | ||
31 | #include <linux/tegra_pm_domains.h> | 30 | #include <linux/tegra_pm_domains.h> |
32 | #include <video/tegra_dc_ext.h> | 31 | #include <video/tegra_dc_ext.h> |
33 | 32 | ||
@@ -740,7 +739,8 @@ struct tegra_dc_sor_data *tegra_dc_sor_init(struct tegra_dc *dc, | |||
740 | u32 temp; | 739 | u32 temp; |
741 | int err, i; | 740 | int err, i; |
742 | char res_name[CHAR_BUF_SIZE_MAX] = {0}; | 741 | char res_name[CHAR_BUF_SIZE_MAX] = {0}; |
743 | char io_padctrl_name[CHAR_BUF_SIZE_MAX] = {0}; | 742 | char io_pinctrl_en_name[CHAR_BUF_SIZE_MAX] = {0}; |
743 | char io_pinctrl_dis_name[CHAR_BUF_SIZE_MAX] = {0}; | ||
744 | struct clk *sor_clk = NULL; | 744 | struct clk *sor_clk = NULL; |
745 | struct clk *safe_clk = NULL; | 745 | struct clk *safe_clk = NULL; |
746 | struct clk *pad_clk = NULL; | 746 | struct clk *pad_clk = NULL; |
@@ -844,20 +844,45 @@ struct tegra_dc_sor_data *tegra_dc_sor_init(struct tegra_dc *dc, | |||
844 | sor->xbar_ctrl[i] = i; | 844 | sor->xbar_ctrl[i] = i; |
845 | 845 | ||
846 | if (tegra_dc_is_t21x() && (sor->ctrl_num == 1)) { /* todo: fix this */ | 846 | if (tegra_dc_is_t21x() && (sor->ctrl_num == 1)) { /* todo: fix this */ |
847 | snprintf(io_padctrl_name, CHAR_BUF_SIZE_MAX, "hdmi"); | 847 | snprintf(io_pinctrl_en_name, CHAR_BUF_SIZE_MAX, |
848 | "hdmi-dpd-enable"); | ||
849 | snprintf(io_pinctrl_dis_name, CHAR_BUF_SIZE_MAX, | ||
850 | "hdmi-dpd-disable"); | ||
848 | } else { | 851 | } else { |
849 | snprintf(io_padctrl_name, CHAR_BUF_SIZE_MAX, "hdmi-dp%d", | 852 | snprintf(io_pinctrl_en_name, CHAR_BUF_SIZE_MAX, |
850 | sor->ctrl_num); | 853 | "hdmi-dp%d-dpd-enable", sor->ctrl_num); |
854 | snprintf(io_pinctrl_dis_name, CHAR_BUF_SIZE_MAX, | ||
855 | "hdmi-dp%d-dpd-disable", sor->ctrl_num); | ||
856 | } | ||
857 | |||
858 | sor->pinctrl_sor = devm_pinctrl_get(&dc->ndev->dev); | ||
859 | if (IS_ERR_OR_NULL(sor->pinctrl_sor)) { | ||
860 | dev_err(&dc->ndev->dev, "pinctrl get fail: %ld\n", | ||
861 | PTR_ERR(sor->pinctrl_sor)); | ||
862 | sor->pinctrl_sor = NULL; | ||
863 | goto bypass_pads; | ||
851 | } | 864 | } |
852 | 865 | ||
853 | sor->io_padctrl = devm_padctrl_get_from_node(&dc->ndev->dev, | 866 | if (sor->pinctrl_sor) { |
854 | sor_np, io_padctrl_name); | 867 | sor->dpd_enable = pinctrl_lookup_state(sor->pinctrl_sor, |
855 | if (IS_ERR(sor->io_padctrl)) { | 868 | io_pinctrl_en_name); |
856 | dev_err(&dc->ndev->dev, "sor: %s IO padctrl unavailable\n", | 869 | if (IS_ERR_OR_NULL(sor->dpd_enable)) { |
857 | io_padctrl_name); | 870 | dev_err(&dc->ndev->dev, "dpd enable lookup fail:%ld\n", |
858 | sor->io_padctrl = NULL; | 871 | PTR_ERR(sor->dpd_enable)); |
872 | sor->dpd_enable = NULL; | ||
873 | goto bypass_pads; | ||
874 | } | ||
875 | |||
876 | sor->dpd_disable = pinctrl_lookup_state(sor->pinctrl_sor, | ||
877 | io_pinctrl_dis_name); | ||
878 | if (IS_ERR_OR_NULL(sor->dpd_disable)) { | ||
879 | dev_err(&dc->ndev->dev, "dpd disable lookup fail:%ld\n", | ||
880 | PTR_ERR(sor->dpd_disable)); | ||
881 | sor->dpd_disable = NULL; | ||
882 | } | ||
859 | } | 883 | } |
860 | 884 | ||
885 | bypass_pads: | ||
861 | if (of_property_read_u32_array(sor_np, "nvidia,xbar-ctrl", | 886 | if (of_property_read_u32_array(sor_np, "nvidia,xbar-ctrl", |
862 | sor->xbar_ctrl, sizeof(sor->xbar_ctrl)/sizeof(u32))) | 887 | sor->xbar_ctrl, sizeof(sor->xbar_ctrl)/sizeof(u32))) |
863 | dev_err(&dc->ndev->dev, "%s: error reading nvidia,xbar-ctrl\n", | 888 | dev_err(&dc->ndev->dev, "%s: error reading nvidia,xbar-ctrl\n", |
@@ -961,6 +986,10 @@ void tegra_dc_sor_destroy(struct tegra_dc_sor_data *sor) | |||
961 | 986 | ||
962 | iounmap(sor->base); | 987 | iounmap(sor->base); |
963 | 988 | ||
989 | devm_pinctrl_put(sor->pinctrl_sor); | ||
990 | sor->dpd_enable = NULL; | ||
991 | sor->dpd_disable = NULL; | ||
992 | |||
964 | if (tegra_dc_is_nvdisplay()) | 993 | if (tegra_dc_is_nvdisplay()) |
965 | devm_kfree(dev, sor->win_state_arr); | 994 | devm_kfree(dev, sor->win_state_arr); |
966 | devm_kfree(dev, sor); | 995 | devm_kfree(dev, sor); |
@@ -1153,21 +1182,26 @@ static inline void tegra_dc_sor_update(struct tegra_dc_sor_data *sor) | |||
1153 | 1182 | ||
1154 | static void tegra_dc_sor_io_set_dpd(struct tegra_dc_sor_data *sor, bool up) | 1183 | static void tegra_dc_sor_io_set_dpd(struct tegra_dc_sor_data *sor, bool up) |
1155 | { | 1184 | { |
1185 | int ret = 0; | ||
1186 | |||
1156 | if (tegra_platform_is_vdk()) | 1187 | if (tegra_platform_is_vdk()) |
1157 | return; | 1188 | return; |
1158 | 1189 | ||
1159 | if (sor->io_padctrl) { | 1190 | if (!sor->pinctrl_sor) |
1160 | int ret; | 1191 | return; |
1161 | 1192 | ||
1162 | if (up) | 1193 | if (up) { |
1163 | ret = padctrl_power_enable(sor->io_padctrl); | 1194 | if (sor->dpd_disable) |
1164 | else | 1195 | ret = pinctrl_select_state(sor->pinctrl_sor, |
1165 | ret = padctrl_power_disable(sor->io_padctrl); | 1196 | sor->dpd_disable); |
1166 | if (ret < 0) | 1197 | } else { |
1167 | dev_err(&sor->dc->ndev->dev, | 1198 | if (sor->dpd_enable) |
1168 | "padctrl power %s fail %d\n", | 1199 | ret = pinctrl_select_state(sor->pinctrl_sor, |
1169 | up ? "up" : "down", ret); | 1200 | sor->dpd_enable); |
1170 | } | 1201 | } |
1202 | if (ret < 0) | ||
1203 | dev_err(&sor->dc->ndev->dev, "io pad power %s fail:%d\n", | ||
1204 | up ? "disable" : "enable", ret); | ||
1171 | } | 1205 | } |
1172 | 1206 | ||
1173 | /* hdmi uses sor sequencer for pad power up */ | 1207 | /* hdmi uses sor sequencer for pad power up */ |
@@ -1176,6 +1210,7 @@ void tegra_sor_hdmi_pad_power_up(struct tegra_dc_sor_data *sor) | |||
1176 | u32 nv_sor_pll0_reg = nv_sor_pll0(); | 1210 | u32 nv_sor_pll0_reg = nv_sor_pll0(); |
1177 | u32 nv_sor_pll1_reg = nv_sor_pll1(); | 1211 | u32 nv_sor_pll1_reg = nv_sor_pll1(); |
1178 | u32 nv_sor_pll2_reg = nv_sor_pll2(); | 1212 | u32 nv_sor_pll2_reg = nv_sor_pll2(); |
1213 | int ret = 0; | ||
1179 | 1214 | ||
1180 | /* seamless */ | 1215 | /* seamless */ |
1181 | if (sor->dc->initialized) | 1216 | if (sor->dc->initialized) |
@@ -1212,12 +1247,11 @@ void tegra_sor_hdmi_pad_power_up(struct tegra_dc_sor_data *sor) | |||
1212 | tegra_sor_pad_cal_power(sor, false); | 1247 | tegra_sor_pad_cal_power(sor, false); |
1213 | usleep_range(20, 70); | 1248 | usleep_range(20, 70); |
1214 | 1249 | ||
1215 | if (sor->io_padctrl) { | 1250 | if (sor->dpd_disable) { |
1216 | int ret = padctrl_power_enable(sor->io_padctrl); | 1251 | ret = pinctrl_select_state(sor->pinctrl_sor, sor->dpd_disable); |
1217 | |||
1218 | if (ret < 0) | 1252 | if (ret < 0) |
1219 | dev_err(&sor->dc->ndev->dev, "padctrl power up fail %d\n", | 1253 | dev_err(&sor->dc->ndev->dev, |
1220 | ret); | 1254 | "io pad power-up fail:%d\n", ret); |
1221 | } | 1255 | } |
1222 | usleep_range(20, 70); | 1256 | usleep_range(20, 70); |
1223 | 1257 | ||
@@ -1253,6 +1287,7 @@ void tegra_sor_hdmi_pad_power_down(struct tegra_dc_sor_data *sor) | |||
1253 | { | 1287 | { |
1254 | u32 nv_sor_pll0_reg = nv_sor_pll0(); | 1288 | u32 nv_sor_pll0_reg = nv_sor_pll0(); |
1255 | u32 nv_sor_pll2_reg = nv_sor_pll2(); | 1289 | u32 nv_sor_pll2_reg = nv_sor_pll2(); |
1290 | int ret = 0; | ||
1256 | 1291 | ||
1257 | tegra_sor_write_field(sor, nv_sor_pll2_reg, | 1292 | tegra_sor_write_field(sor, nv_sor_pll2_reg, |
1258 | NV_SOR_PLL2_AUX7_PORT_POWERDOWN_MASK, | 1293 | NV_SOR_PLL2_AUX7_PORT_POWERDOWN_MASK, |
@@ -1273,12 +1308,11 @@ void tegra_sor_hdmi_pad_power_down(struct tegra_dc_sor_data *sor) | |||
1273 | NV_SOR_PLL2_AUX6_BANDGAP_POWERDOWN_ENABLE); | 1308 | NV_SOR_PLL2_AUX6_BANDGAP_POWERDOWN_ENABLE); |
1274 | tegra_sor_pad_cal_power(sor, false); | 1309 | tegra_sor_pad_cal_power(sor, false); |
1275 | 1310 | ||
1276 | if (sor->io_padctrl) { | 1311 | if (sor->dpd_enable) { |
1277 | int ret = padctrl_power_disable(sor->io_padctrl); | 1312 | ret = pinctrl_select_state(sor->pinctrl_sor, sor->dpd_enable); |
1278 | |||
1279 | if (ret < 0) | 1313 | if (ret < 0) |
1280 | dev_err(&sor->dc->ndev->dev, "padctrl power down fail %d\n", | 1314 | dev_err(&sor->dc->ndev->dev, |
1281 | ret); | 1315 | "io pad power-down fail:%d\n", ret); |
1282 | } | 1316 | } |
1283 | usleep_range(20, 70); | 1317 | usleep_range(20, 70); |
1284 | } | 1318 | } |
diff --git a/drivers/video/tegra/dc/sor.h b/drivers/video/tegra/dc/sor.h index 9a9363ebd..3b84307b9 100644 --- a/drivers/video/tegra/dc/sor.h +++ b/drivers/video/tegra/dc/sor.h | |||
@@ -202,7 +202,9 @@ struct tegra_dc_sor_data { | |||
202 | u8 clk_type; | 202 | u8 clk_type; |
203 | u32 xbar_ctrl[5]; | 203 | u32 xbar_ctrl[5]; |
204 | bool audio_support; | 204 | bool audio_support; |
205 | struct padctrl *io_padctrl; | 205 | struct pinctrl *pinctrl_sor; |
206 | struct pinctrl_state *dpd_enable; | ||
207 | struct pinctrl_state *dpd_disable; | ||
206 | int powergate_id; | 208 | int powergate_id; |
207 | struct rw_semaphore reset_lock; | 209 | struct rw_semaphore reset_lock; |
208 | struct dentry *debugdir; | 210 | struct dentry *debugdir; |