Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gt510wifi: Add display support #33

Merged
merged 4 commits into from Nov 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
124 changes: 124 additions & 0 deletions arch/arm64/boot/dts/qcom/apq8016-samsung-gt510wifi.dts
Expand Up @@ -11,6 +11,32 @@
model = "Samsung Galaxy Tab A 9.7 WiFi (2015) (SM-T550)";
compatible = "samsung,gt510wifi", "qcom,apq8016";

reg_lcd_vmipi: regulator-lcd-vmipi {
compatible = "regulator-fixed";
regulator-name = "lcd_vmipi";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;

gpio = <&msmgpio 8 0>;
enable-active-high;

pinctrl-names = "default";
pinctrl-0 = <&lcd_en_default>;
};

reg_vlcd_5p4v: regulator-vlcd-5p4v {
compatible = "regulator-fixed";
regulator-name = "vlcd_5p4v";
regulator-min-microvolt = <5400000>;
regulator-max-microvolt = <5400000>;

gpio = <&msmgpio 51 0>;
enable-active-high;

pinctrl-names = "default";
pinctrl-0 = <&buckbooster_en_default>;
};

aliases {
serial0 = &blsp1_uart2;
};
Expand Down Expand Up @@ -77,6 +103,24 @@
};
};

mdss@1a00000 {
dsi@1a98000 {
#address-cells = <1>;
#size-cells = <0>;

vdda-supply = <&pm8916_l2>;
vddio-supply = <&pm8916_l6>;

pinctrl-names = "default", "sleep";
pinctrl-0 = <&pmx_mdss_default>;
pinctrl-1 = <&pmx_mdss_sleep>;
};

dsi-phy@1a98300 {
vddio-supply = <&pm8916_l6>;
};
};

/*
* Attempting to enable these devices causes a "synchronous
* external abort". Suspected cause is that the debug power
Expand Down Expand Up @@ -110,7 +154,87 @@
};
};

&dsi0 {
panel@0 {
compatible = "samsung,s6d7aa0-ltl101at01";
reg = <0>;

vmipi-supply = <&reg_lcd_vmipi>;
5p4v-supply = <&reg_vlcd_5p4v>;
reset-gpios = <&msmgpio 97 GPIO_ACTIVE_HIGH>;

ports {
#address-cells = <1>;
#size-cells = <0>;

port@0 {
reg = <0>;
panel_in: endpoint {
remote-endpoint = <&dsi0_out>;
};
};
};
};

ports {
port@1 {
endpoint {
remote-endpoint = <&panel_in>;
data-lanes = <0 1 2 3>;
};
};
};
};

&msmgpio {
buckbooster_en_default: buckbooster_en_default {
pinmux {
function = "gpio";
pins = "gpio51";
};
pinconf {
pins = "gpio51";
drive-strength = <2>;
bias-disable;
};
};

lcd_en_default: lcd_en_default {
stephan-gh marked this conversation as resolved.
Show resolved Hide resolved
pinmux {
function = "gpio";
pins = "gpio8";
};
pinconf {
pins = "gpio8";
drive-strength = <2>;
bias-disable;
};
};

pmx_mdss_default: pmx_mdss_default {
pinmux {
function = "gpio";
pins = "gpio97";
};
pinconf {
pins = "gpio97";
drive-strength = <8>;
stephan-gh marked this conversation as resolved.
Show resolved Hide resolved
bias-disable;
};
};

pmx_mdss_sleep: pmx_mdss_sleep {
pinmux {
function = "gpio";
pins = "gpio97";
};
pinconf {
pins = "gpio97";
drive-strength = <2>;
bias-pull-down;
};
};

usb_vbus_default: usb-vbus-default {
pinmux {
function = "gpio";
Expand Down
1 change: 1 addition & 0 deletions arch/arm64/configs/msm8916_defconfig
Expand Up @@ -202,6 +202,7 @@ CONFIG_DRM_MSM=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_DRM_PANEL_BOOYI_OTM1287=m
CONFIG_DRM_PANEL_SAMSUNG_EA8061V_AMS497EE01=m
CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0_LTL101AT01=m
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
CONFIG_DRM_LEGACY=y
CONFIG_FB=y
Expand Down
62 changes: 41 additions & 21 deletions drivers/gpu/drm/msm/dsi/dsi_manager.c
Expand Up @@ -432,20 +432,8 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge)
}
}

if (panel) {
ret = drm_panel_enable(panel);
if (ret) {
pr_err("%s: enable panel %d failed, %d\n", __func__, id,
ret);
goto panel_en_fail;
}
}

return;

panel_en_fail:
if (is_dual_dsi && msm_dsi1)
msm_dsi_host_disable(msm_dsi1->host);
host1_en_fail:
msm_dsi_host_disable(host);
host_en_fail:
Expand All @@ -464,12 +452,51 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge)

static void dsi_mgr_bridge_enable(struct drm_bridge *bridge)
{
DBG("");
int id = dsi_mgr_bridge_get_id(bridge);
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
struct drm_panel *panel = msm_dsi->panel;
bool is_dual_dsi = IS_DUAL_DSI();
int ret;

DBG("id=%d", id);
if (!msm_dsi_device_connected(msm_dsi))
return;

/* Do nothing with the host if it is slave-DSI in case of dual DSI */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id))
return;

if (panel) {
ret = drm_panel_enable(panel);
if (ret) {
pr_err("%s: enable panel %d failed, %d\n", __func__, id,
ret);
}
}
}

static void dsi_mgr_bridge_disable(struct drm_bridge *bridge)
{
DBG("");
int id = dsi_mgr_bridge_get_id(bridge);
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
struct drm_panel *panel = msm_dsi->panel;
bool is_dual_dsi = IS_DUAL_DSI();
int ret;

DBG("id=%d", id);
if (!msm_dsi_device_connected(msm_dsi))
return;

/* Do nothing with the host if it is slave-DSI in case of dual DSI */
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id))
return;

if (panel) {
ret = drm_panel_disable(panel);
if (ret)
pr_err("%s: Panel %d OFF failed, %d\n", __func__, id,
ret);
}
}

static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
Expand All @@ -495,13 +522,6 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge)
if (is_dual_dsi && !IS_MASTER_DSI_LINK(id))
goto disable_phy;

if (panel) {
ret = drm_panel_disable(panel);
if (ret)
pr_err("%s: Panel %d OFF failed, %d\n", __func__, id,
ret);
}

ret = msm_dsi_host_disable(host);
if (ret)
pr_err("%s: host %d disable failed, %d\n", __func__, id, ret);
Expand Down
7 changes: 7 additions & 0 deletions drivers/gpu/drm/panel/Kconfig
Expand Up @@ -243,6 +243,13 @@ config DRM_PANEL_SAMSUNG_S6D16D0
depends on DRM_MIPI_DSI
select VIDEOMODE_HELPERS

config DRM_PANEL_SAMSUNG_S6D7AA0_LTL101AT01
tristate "Samsung S6D7AA0 LTL101AT01 DSI video mode panel"
depends on OF
depends on DRM_MIPI_DSI
depends on BACKLIGHT_CLASS_DEVICE
select VIDEOMODE_HELPERS

config DRM_PANEL_SAMSUNG_S6E3HA2
tristate "Samsung S6E3HA2 DSI video mode panel"
depends on OF
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/panel/Makefile
Expand Up @@ -25,6 +25,7 @@ obj-$(CONFIG_DRM_PANEL_RONBO_RB070D30) += panel-ronbo-rb070d30.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_EA8061V_AMS497EE01) += panel-samsung-ea8061v-ams497ee01.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_LD9040) += panel-samsung-ld9040.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6D16D0) += panel-samsung-s6d16d0.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0_LTL101AT01) += panel-samsung-s6d7aa0-ltl101at01.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2) += panel-samsung-s6e3ha2.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03) += panel-samsung-s6e63j0x03.o
obj-$(CONFIG_DRM_PANEL_SAMSUNG_S6E63M0) += panel-samsung-s6e63m0.o
Expand Down