提交 9bfd7319 编写于 作者: O Olof Johansson

Merge tag 'fixes-5.4-merge-window' of...

Merge tag 'fixes-5.4-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into arm/fixes

Fixes for omap variants

Few fixes for ti-sysc interconnect target module driver for no-idle
quirks that caused nfsroot to fail on some dra7 boards.

And let's fixes to get LCD working again for logicpd board that got
broken a while back with removal of panel-dpi driver. We need to now
use generic CONFIG_DRM_PANEL_SIMPLE instead.

* tag 'fixes-5.4-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  bus: ti-sysc: Remove unpaired sysc_clkdm_deny_idle()
  ARM: dts: logicpd-som-lv: Fix i2c2 and i2c3 Pin mux
  ARM: dts: am3517-evm: Fix missing video
  ARM: dts: logicpd-torpedo-baseboard: Fix missing video
  ARM: omap2plus_defconfig: Fix missing video
  bus: ti-sysc: Fix handling of invalid clocks
  bus: ti-sysc: Fix clock handling for no-idle quirks

Link: https://lore.kernel.org/r/pull-1568819401-72461@atomide.comSigned-off-by: NOlof Johansson <olof@lixom.net>
...@@ -124,10 +124,11 @@ ...@@ -124,10 +124,11 @@
}; };
lcd0: display@0 { lcd0: display@0 {
compatible = "panel-dpi"; /* This isn't the exact LCD, but the timings meet spec */
/* To make it work, set CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4 */
compatible = "newhaven,nhd-4.3-480272ef-atxl";
label = "15"; label = "15";
status = "okay"; backlight = <&bl>;
pinctrl-names = "default";
enable-gpios = <&gpio6 16 GPIO_ACTIVE_HIGH>; /* gpio176, lcd INI */ enable-gpios = <&gpio6 16 GPIO_ACTIVE_HIGH>; /* gpio176, lcd INI */
vcc-supply = <&vdd_io_reg>; vcc-supply = <&vdd_io_reg>;
...@@ -136,22 +137,6 @@ ...@@ -136,22 +137,6 @@
remote-endpoint = <&dpi_out>; remote-endpoint = <&dpi_out>;
}; };
}; };
panel-timing {
clock-frequency = <9000000>;
hactive = <480>;
vactive = <272>;
hfront-porch = <3>;
hback-porch = <2>;
hsync-len = <42>;
vback-porch = <3>;
vfront-porch = <4>;
vsync-len = <11>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};
}; };
bl: backlight { bl: backlight {
......
...@@ -228,6 +228,20 @@ ...@@ -228,6 +228,20 @@
>; >;
}; };
i2c2_pins: pinmux_i2c2_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0) /* i2c2_scl */
OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0) /* i2c2_sda */
>;
};
i2c3_pins: pinmux_i2c3_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0) /* i2c3_scl */
OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0) /* i2c3_sda */
>;
};
tsc2004_pins: pinmux_tsc2004_pins { tsc2004_pins: pinmux_tsc2004_pins {
pinctrl-single,pins = < pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE4) /* mcbsp4_dr.gpio_153 */ OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE4) /* mcbsp4_dr.gpio_153 */
...@@ -249,18 +263,6 @@ ...@@ -249,18 +263,6 @@
OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */
>; >;
}; };
i2c2_pins: pinmux_i2c2_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0) /* i2c2_scl */
OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0) /* i2c2_sda */
>;
};
i2c3_pins: pinmux_i2c3_pins {
pinctrl-single,pins = <
OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0) /* i2c3_scl */
OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0) /* i2c3_sda */
>;
};
}; };
&omap3_pmx_core2 { &omap3_pmx_core2 {
......
...@@ -108,7 +108,6 @@ ...@@ -108,7 +108,6 @@
&dss { &dss {
status = "ok"; status = "ok";
vdds_dsi-supply = <&vpll2>; vdds_dsi-supply = <&vpll2>;
vdda_video-supply = <&video_reg>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&dss_dpi_pins1>; pinctrl-0 = <&dss_dpi_pins1>;
port { port {
...@@ -124,44 +123,20 @@ ...@@ -124,44 +123,20 @@
display0 = &lcd0; display0 = &lcd0;
}; };
video_reg: video_reg {
pinctrl-names = "default";
pinctrl-0 = <&panel_pwr_pins>;
compatible = "regulator-fixed";
regulator-name = "fixed-supply";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd INI */
};
lcd0: display { lcd0: display {
compatible = "panel-dpi"; /* This isn't the exact LCD, but the timings meet spec */
/* To make it work, set CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4 */
compatible = "newhaven,nhd-4.3-480272ef-atxl";
label = "15"; label = "15";
status = "okay";
/* default-on; */
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&panel_pwr_pins>;
backlight = <&bl>;
enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>;
port { port {
lcd_in: endpoint { lcd_in: endpoint {
remote-endpoint = <&dpi_out>; remote-endpoint = <&dpi_out>;
}; };
}; };
panel-timing {
clock-frequency = <9000000>;
hactive = <480>;
vactive = <272>;
hfront-porch = <3>;
hback-porch = <2>;
hsync-len = <42>;
vback-porch = <3>;
vfront-porch = <4>;
vsync-len = <11>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <1>;
pixelclk-active = <1>;
};
}; };
bl: backlight { bl: backlight {
......
...@@ -363,6 +363,7 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m ...@@ -363,6 +363,7 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m
CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m
CONFIG_DRM_TILCDC=m CONFIG_DRM_TILCDC=m
CONFIG_DRM_PANEL_SIMPLE=m
CONFIG_FB=y CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y CONFIG_FIRMWARE_EDID=y
CONFIG_FB_MODE_HELPERS=y CONFIG_FB_MODE_HELPERS=y
......
...@@ -491,11 +491,11 @@ static int ti_sysc_clkdm_init(struct device *dev, ...@@ -491,11 +491,11 @@ static int ti_sysc_clkdm_init(struct device *dev,
struct clk *fck, struct clk *ick, struct clk *fck, struct clk *ick,
struct ti_sysc_cookie *cookie) struct ti_sysc_cookie *cookie)
{ {
if (fck) if (!IS_ERR(fck))
cookie->clkdm = ti_sysc_find_one_clockdomain(fck); cookie->clkdm = ti_sysc_find_one_clockdomain(fck);
if (cookie->clkdm) if (cookie->clkdm)
return 0; return 0;
if (ick) if (!IS_ERR(ick))
cookie->clkdm = ti_sysc_find_one_clockdomain(ick); cookie->clkdm = ti_sysc_find_one_clockdomain(ick);
if (cookie->clkdm) if (cookie->clkdm)
return 0; return 0;
......
...@@ -280,9 +280,6 @@ static int sysc_get_one_clock(struct sysc *ddata, const char *name) ...@@ -280,9 +280,6 @@ static int sysc_get_one_clock(struct sysc *ddata, const char *name)
ddata->clocks[index] = devm_clk_get(ddata->dev, name); ddata->clocks[index] = devm_clk_get(ddata->dev, name);
if (IS_ERR(ddata->clocks[index])) { if (IS_ERR(ddata->clocks[index])) {
if (PTR_ERR(ddata->clocks[index]) == -ENOENT)
return 0;
dev_err(ddata->dev, "clock get error for %s: %li\n", dev_err(ddata->dev, "clock get error for %s: %li\n",
name, PTR_ERR(ddata->clocks[index])); name, PTR_ERR(ddata->clocks[index]));
...@@ -357,7 +354,7 @@ static int sysc_get_clocks(struct sysc *ddata) ...@@ -357,7 +354,7 @@ static int sysc_get_clocks(struct sysc *ddata)
continue; continue;
error = sysc_get_one_clock(ddata, name); error = sysc_get_one_clock(ddata, name);
if (error && error != -ENOENT) if (error)
return error; return error;
} }
...@@ -1630,17 +1627,19 @@ static int sysc_init_module(struct sysc *ddata) ...@@ -1630,17 +1627,19 @@ static int sysc_init_module(struct sysc *ddata)
if (error) if (error)
return error; return error;
if (manage_clocks) { sysc_clkdm_deny_idle(ddata);
sysc_clkdm_deny_idle(ddata);
error = sysc_enable_opt_clocks(ddata); /*
if (error) * Always enable clocks. The bootloader may or may not have enabled
return error; * the related clocks.
*/
error = sysc_enable_opt_clocks(ddata);
if (error)
return error;
error = sysc_enable_main_clocks(ddata); error = sysc_enable_main_clocks(ddata);
if (error) if (error)
goto err_opt_clocks; goto err_opt_clocks;
}
if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) { if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) {
error = sysc_rstctrl_reset_deassert(ddata, true); error = sysc_rstctrl_reset_deassert(ddata, true);
...@@ -1658,7 +1657,7 @@ static int sysc_init_module(struct sysc *ddata) ...@@ -1658,7 +1657,7 @@ static int sysc_init_module(struct sysc *ddata)
goto err_main_clocks; goto err_main_clocks;
} }
if (!ddata->legacy_mode && manage_clocks) { if (!ddata->legacy_mode) {
error = sysc_enable_module(ddata->dev); error = sysc_enable_module(ddata->dev);
if (error) if (error)
goto err_main_clocks; goto err_main_clocks;
...@@ -1675,6 +1674,7 @@ static int sysc_init_module(struct sysc *ddata) ...@@ -1675,6 +1674,7 @@ static int sysc_init_module(struct sysc *ddata)
if (manage_clocks) if (manage_clocks)
sysc_disable_main_clocks(ddata); sysc_disable_main_clocks(ddata);
err_opt_clocks: err_opt_clocks:
/* No re-enable of clockdomain autoidle to prevent module autoidle */
if (manage_clocks) { if (manage_clocks) {
sysc_disable_opt_clocks(ddata); sysc_disable_opt_clocks(ddata);
sysc_clkdm_allow_idle(ddata); sysc_clkdm_allow_idle(ddata);
...@@ -2355,6 +2355,27 @@ static void ti_sysc_idle(struct work_struct *work) ...@@ -2355,6 +2355,27 @@ static void ti_sysc_idle(struct work_struct *work)
ddata = container_of(work, struct sysc, idle_work.work); ddata = container_of(work, struct sysc, idle_work.work);
/*
* One time decrement of clock usage counts if left on from init.
* Note that we disable opt clocks unconditionally in this case
* as they are enabled unconditionally during init without
* considering sysc_opt_clks_needed() at that point.
*/
if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE |
SYSC_QUIRK_NO_IDLE_ON_INIT)) {
sysc_disable_main_clocks(ddata);
sysc_disable_opt_clocks(ddata);
sysc_clkdm_allow_idle(ddata);
}
/* Keep permanent PM runtime usage count for SYSC_QUIRK_NO_IDLE */
if (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE)
return;
/*
* Decrement PM runtime usage count for SYSC_QUIRK_NO_IDLE_ON_INIT
* and SYSC_QUIRK_NO_RESET_ON_INIT
*/
if (pm_runtime_active(ddata->dev)) if (pm_runtime_active(ddata->dev))
pm_runtime_put_sync(ddata->dev); pm_runtime_put_sync(ddata->dev);
} }
...@@ -2439,7 +2460,8 @@ static int sysc_probe(struct platform_device *pdev) ...@@ -2439,7 +2460,8 @@ static int sysc_probe(struct platform_device *pdev)
INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle); INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle);
/* At least earlycon won't survive without deferred idle */ /* At least earlycon won't survive without deferred idle */
if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE_ON_INIT | if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE |
SYSC_QUIRK_NO_IDLE_ON_INIT |
SYSC_QUIRK_NO_RESET_ON_INIT)) { SYSC_QUIRK_NO_RESET_ON_INIT)) {
schedule_delayed_work(&ddata->idle_work, 3000); schedule_delayed_work(&ddata->idle_work, 3000);
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册