diff --git a/arch/arm/boot/dts/rk3288-evb-rk628-hdmi2csi-avb.dts b/arch/arm/boot/dts/rk3288-evb-rk628-hdmi2csi-avb.dts deleted file mode 100644 index 9bcd5dec4bff..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628-hdmi2csi-avb.dts +++ /dev/null @@ -1,121 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -/dts-v1/; -#include "rk3288-evb-rk628.dtsi" - -/ { - model = "Rockchip RK3288 EVB RK628 Board"; - compatible = "rockchip,rk3288-evb-rk628", "rockchip,rk3288"; - - chosen { - bootargs = "rootwait earlycon=uart8250,mmio32,0xff690000 vmalloc=496M console=ttyFIQ0 androidboot.baseband=N/A androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init kpti=0 androidboot.selinux=permissive"; - }; - - hdmiin-sound { - compatible = "rockchip,rockchip-rt5651-rk628-sound"; - rockchip,cpu = <&i2s>; - rockchip,codec = <&rt5651>; - status = "okay"; - }; -}; - -&video_phy { - status = "okay"; -}; - -&hdmi { - status = "okay"; -}; - -&hdmi_in_vopb { - status = "disabled"; -}; - -&hdmi_in_vopl { - status = "okay"; -}; - -&route_hdmi { - connect = <&vopl_out_hdmi>; - status = "disabled"; -}; - -&rk628 { - reg = <0x51>; - interrupt-parent = <&gpio7>; - interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; - enable-gpios = <&gpio5 RK_PC3 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio7 RK_PB4 GPIO_ACTIVE_LOW>; - status = "okay"; -}; - -&rk628_combrxphy { - status = "okay"; -}; - -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_csi { - status = "okay"; - plugin-det-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; - power-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>; - rockchip,camera-module-index = <0>; - rockchip,camera-module-facing = "back"; - rockchip,camera-module-name = "RK628-CSI"; - rockchip,camera-module-lens-name = "NC"; - - port { - hdmiin_out0: endpoint { - remote-endpoint = <&hdmi2mipi_in>; - data-lanes = <1 2 3 4>; - }; - }; -}; - -&mipi_phy_rx0 { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - #address-cells = <1>; - #size-cells = <0>; - - hdmi2mipi_in: endpoint@1 { - reg = <1>; - remote-endpoint = <&hdmiin_out0>; - data-lanes = <1 2 3 4>; - }; - }; - - port@1 { - reg = <1>; - #address-cells = <1>; - #size-cells = <0>; - - dphy_rx_out: endpoint@0 { - reg = <0>; - remote-endpoint = <&isp_mipi_in>; - }; - }; - }; -}; - -&rkisp1 { - status = "okay"; - port { - #address-cells = <1>; - #size-cells = <0>; - - isp_mipi_in: endpoint@0 { - reg = <0>; - remote-endpoint = <&dphy_rx_out>; - }; - }; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2dsi-avb.dts b/arch/arm/boot/dts/rk3288-evb-rk628-rgb2dsi-avb.dts deleted file mode 100644 index ca0a9d54befc..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2dsi-avb.dts +++ /dev/null @@ -1,333 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -/dts-v1/; -#include "rk3288-evb-rk628.dtsi" - -&rk628_dsi0 { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - dsi0_in_post_process: endpoint { - remote-endpoint = <&post_process_out_dsi0>; - }; - }; - }; - - panel@0 { - compatible = "simple-panel-dsi"; - reg = <0>; - backlight = <&backlight>; - enable-gpios = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>; - prepare-delay-ms = <120>; - enable-delay-ms = <120>; - disable-delay-ms = <120>; - unprepare-delay-ms = <120>; - init-delay-ms = <120>; - - dsi,flags = <(MIPI_DSI_MODE_VIDEO | - MIPI_DSI_MODE_VIDEO_BURST | - MIPI_DSI_MODE_LPM | - MIPI_DSI_MODE_EOT_PACKET)>; - dsi,format = ; - dsi,lanes = <4>; - - panel-init-sequence = [ - 39 00 04 ff 98 81 03 - 39 00 02 01 00 - 39 00 02 02 00 - 39 00 02 03 53 - 39 00 02 04 53 - 39 00 02 05 13 - 39 00 02 06 04 - 39 00 02 07 02 - 39 00 02 08 02 - 39 00 02 09 00 - 39 00 02 0a 00 - 39 00 02 0b 00 - 39 00 02 0c 00 - 39 00 02 0d 00 - 39 00 02 0e 00 - 39 00 02 0f 00 - 39 00 02 10 00 - 39 00 02 11 00 - 39 00 02 12 00 - 39 00 02 13 00 - 39 00 02 14 00 - 39 00 02 15 08 - 39 00 02 16 10 - 39 00 02 17 00 - 39 00 02 18 08 - 39 00 02 19 00 - 39 00 02 1a 00 - 39 00 02 1b 00 - 39 00 02 1c 00 - 39 00 02 1d 00 - 39 00 02 1e c0 - 39 00 02 1f 80 - 39 00 02 20 02 - 39 00 02 21 09 - 39 00 02 22 00 - 39 00 02 23 00 - 39 00 02 24 00 - 39 00 02 25 00 - 39 00 02 26 00 - 39 00 02 27 00 - 39 00 02 28 55 - 39 00 02 29 03 - 39 00 02 2a 00 - 39 00 02 2b 00 - 39 00 02 2c 00 - 39 00 02 2d 00 - 39 00 02 2e 00 - 39 00 02 2f 00 - 39 00 02 30 00 - 39 00 02 31 00 - 39 00 02 32 00 - 39 00 02 33 00 - 39 00 02 34 04 - 39 00 02 35 05 - 39 00 02 36 05 - 39 00 02 37 00 - 39 00 02 38 3c - 39 00 02 39 35 - 39 00 02 3a 00 - 39 00 02 3b 40 - 39 00 02 3c 00 - 39 00 02 3d 00 - 39 00 02 3e 00 - 39 00 02 3f 00 - 39 00 02 40 00 - 39 00 02 41 88 - 39 00 02 42 00 - 39 00 02 43 00 - 39 00 02 44 1f - 39 00 02 50 01 - 39 00 02 51 23 - 39 00 02 52 45 - 39 00 02 53 67 - 39 00 02 54 89 - 39 00 02 55 ab - 39 00 02 56 01 - 39 00 02 57 23 - 39 00 02 58 45 - 39 00 02 59 67 - 39 00 02 5a 89 - 39 00 02 5b ab - 39 00 02 5c cd - 39 00 02 5d ef - 39 00 02 5e 03 - 39 00 02 5f 14 - 39 00 02 60 15 - 39 00 02 61 0c - 39 00 02 62 0d - 39 00 02 63 0e - 39 00 02 64 0f - 39 00 02 65 10 - 39 00 02 66 11 - 39 00 02 67 08 - 39 00 02 68 02 - 39 00 02 69 0a - 39 00 02 6a 02 - 39 00 02 6b 02 - 39 00 02 6c 02 - 39 00 02 6d 02 - 39 00 02 6e 02 - 39 00 02 6f 02 - 39 00 02 70 02 - 39 00 02 71 02 - 39 00 02 72 06 - 39 00 02 73 02 - 39 00 02 74 02 - 39 00 02 75 14 - 39 00 02 76 15 - 39 00 02 77 0f - 39 00 02 78 0e - 39 00 02 79 0d - 39 00 02 7a 0c - 39 00 02 7b 11 - 39 00 02 7c 10 - 39 00 02 7d 06 - 39 00 02 7e 02 - 39 00 02 7f 0a - 39 00 02 80 02 - 39 00 02 81 02 - 39 00 02 82 02 - 39 00 02 83 02 - 39 00 02 84 02 - 39 00 02 85 02 - 39 00 02 86 02 - 39 00 02 87 02 - 39 00 02 88 08 - 39 00 02 89 02 - 39 00 02 8a 02 - 39 00 04 ff 98 81 04 - 39 00 02 00 80 - 39 00 02 70 00 - 39 00 02 71 00 - 39 00 02 66 fe - 39 00 02 82 15 - 39 00 02 84 15 - 39 00 02 85 15 - 39 00 02 3a 24 - 39 00 02 32 ac - 39 00 02 8c 80 - 39 00 02 3c f5 - 39 00 02 88 33 - 39 00 04 ff 98 81 01 - 39 00 02 22 0a - 39 00 02 31 00 - 39 00 02 53 78 - 39 00 02 55 7b - 39 00 02 60 20 - 39 00 02 61 00 - 39 00 02 62 0d - 39 00 02 63 00 - 39 00 02 a0 00 - 39 00 02 a1 10 - 39 00 02 a2 1c - 39 00 02 a3 13 - 39 00 02 a4 15 - 39 00 02 a5 26 - 39 00 02 a6 1a - 39 00 02 a7 1d - 39 00 02 a8 67 - 39 00 02 a9 1c - 39 00 02 aa 29 - 39 00 02 ab 58 - 39 00 02 ac 26 - 39 00 02 ad 28 - 39 00 02 ae 5c - 39 00 02 af 30 - 39 00 02 b0 31 - 39 00 02 b1 32 - 39 00 02 b2 00 - 39 00 02 c0 00 - 39 00 02 c1 10 - 39 00 02 c2 1c - 39 00 02 c3 13 - 39 00 02 c4 15 - 39 00 02 c5 26 - 39 00 02 c6 1a - 39 00 02 c7 1d - 39 00 02 c8 67 - 39 00 02 c9 1c - 39 00 02 ca 29 - 39 00 02 cb 5b - 39 00 02 cc 26 - 39 00 02 cd 28 - 39 00 02 ce 5c - 39 00 02 cf 30 - 39 00 02 d0 31 - 39 00 02 d1 2e - 39 00 02 d2 32 - 39 00 02 d3 00 - 39 00 04 ff 98 81 00 - 05 fa 01 11 - 05 14 01 29 - ]; - - panel-exit-sequence = [ - 05 00 01 28 - 05 00 01 10 - ]; - - display-timings { - native-mode = <&timing0>; - - timing0: timing0 { - clock-frequency = <64000000>; - hactive = <720>; - vactive = <1280>; - hfront-porch = <40>; - hsync-len = <10>; - hback-porch = <40>; - vfront-porch = <22>; - vsync-len = <4>; - vback-porch = <11>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <0>; - pixelclk-active = <0>; - }; - }; - }; -}; - -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_dsi0: endpoint { - remote-endpoint = <&dsi0_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&video_phy { - status = "okay"; -}; - -&rgb_in_vopb { - status = "disabled"; -}; - -&rgb_in_vopl { - status = "okay"; -}; - -&route_rgb { - connect = <&vopl_out_rgb>; - status = "disabled"; -}; - -&vopb { - assigned-clocks = <&cru DCLK_VOP0>; - assigned-clock-parents = <&cru PLL_GPLL>; -}; - -&vopl { - assigned-clocks = <&cru DCLK_VOP1>; - assigned-clock-parents = <&cru PLL_CPLL>; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2hdmi-avb.dts b/arch/arm/boot/dts/rk3288-evb-rk628-rgb2hdmi-avb.dts deleted file mode 100644 index 18ff5ed03d5f..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2hdmi-avb.dts +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -/dts-v1/; -#include "rk3288-evb-rk628.dtsi" - -&sound { - status = "okay"; -}; - -&rk628_hdmi { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - hdmi_in_post_process: endpoint { - remote-endpoint = <&post_process_out_hdmi>; - }; - }; - }; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_hdmi: endpoint { - remote-endpoint = <&hdmi_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - - -&video_phy { - status = "okay"; -}; - -&rgb_in_vopb { - status = "disabled"; -}; - -&rgb_in_vopl { - status = "okay"; -}; - -&route_rgb { - connect = <&vopl_out_rgb>; - status = "disabled"; -}; - -&vopb { - assigned-clocks = <&cru DCLK_VOP0>; - assigned-clock-parents = <&cru PLL_CPLL>; -}; - -&vopl { - assigned-clocks = <&cru DCLK_VOP1>; - assigned-clock-parents = <&cru PLL_GPLL>; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-avb.dts b/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-avb.dts deleted file mode 100644 index 81577652ae11..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-avb.dts +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -/dts-v1/; -#include "rk3288-evb-rk628.dtsi" - -/ { - model = "Rockchip RK3288 EVB RK628 Board"; - compatible = "rockchip,rk3288-evb-rk628", "rockchip,rk3288"; - - panel { - compatible = "simple-panel"; - backlight = <&backlight>; - enable-gpios = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>; - prepare-delay-ms = <20>; - enable-delay-ms = <20>; - disable-delay-ms = <20>; - unprepare-delay-ms = <20>; - bus-format = ; - - display-timings { - native-mode = <&timing0>; - - timing0: timing0 { - clock-frequency = <48000000>; - hactive = <1024>; - vactive = <600>; - hback-porch = <90>; - hfront-porch = <90>; - vback-porch = <10>; - vfront-porch = <10>; - hsync-len = <90>; - vsync-len = <10>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <0>; - pixelclk-active = <0>; - }; - }; - - port { - panel_in_lvds: endpoint { - remote-endpoint = <&lvds_out_panel>; - }; - }; - }; -}; - -&rk628_lvds { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - lvds_in_post_process: endpoint { - remote-endpoint = <&post_process_out_lvds>; - }; - }; - - port@1 { - reg = <1>; - - lvds_out_panel: endpoint { - remote-endpoint = <&panel_in_lvds>; - }; - }; - }; -}; - -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_lvds: endpoint { - remote-endpoint = <&lvds_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&video_phy { - status = "okay"; -}; - -&rgb_in_vopb { - status = "disabled"; -}; - -&rgb_in_vopl { - status = "okay"; -}; - -&route_rgb { - connect = <&vopl_out_rgb>; - status = "disabled"; -}; - -&vopb { - assigned-clocks = <&cru DCLK_VOP0>; - assigned-clock-parents = <&cru PLL_GPLL>; -}; - -&vopl { - assigned-clocks = <&cru DCLK_VOP1>; - assigned-clock-parents = <&cru PLL_CPLL>; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-dual-avb.dts b/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-dual-avb.dts deleted file mode 100644 index 5fa6de887356..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628-rgb2lvds-dual-avb.dts +++ /dev/null @@ -1,151 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -/dts-v1/; -#include "rk3288-evb-rk628.dtsi" - -/ { - vcc33_lcd: vcc33-lcd { - compatible = "regulator-fixed"; - regulator-name = "vcc33_lcd"; - regulator-boot-on; - gpio = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>; - enable-active-high; - }; - - panel { - compatible = "simple-panel"; - backlight = <&backlight>; - power-supply = <&vcc33_lcd>; - enable-gpios = <&gpio5 RK_PC1 GPIO_ACTIVE_HIGH>; - prepare-delay-ms = <20>; - enable-delay-ms = <20>; - disable-delay-ms = <20>; - unprepare-delay-ms = <20>; - bus-format = ; - - display-timings { - native-mode = <&timing0>; - - timing0: timing0 { - clock-frequency = <149000000>; - hactive = <1920>; - vactive = <1080>; - hback-porch = <96>; - hfront-porch = <120>; - vback-porch = <8>; - vfront-porch = <33>; - hsync-len = <64>; - vsync-len = <4>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <0>; - pixelclk-active = <0>; - }; - }; - - port { - panel_in_lvds: endpoint { - remote-endpoint = <&lvds_out_panel>; - }; - }; - }; -}; - -&rk628_lvds { - rockchip,link-type = "dual-link-even-odd-pixels"; - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - lvds_in_post_process: endpoint { - remote-endpoint = <&post_process_out_lvds>; - }; - }; - - port@1 { - reg = <1>; - - lvds_out_panel: endpoint { - remote-endpoint = <&panel_in_lvds>; - }; - }; - }; -}; - -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_lvds: endpoint { - remote-endpoint = <&lvds_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&video_phy { - status = "okay"; -}; - -&rgb_in_vopb { - status = "disabled"; -}; - -&rgb_in_vopl { - status = "okay"; -}; - -&route_rgb { - connect = <&vopl_out_rgb>; - status = "disabled"; -}; - -&vopb { - assigned-clocks = <&cru DCLK_VOP0>; - assigned-clock-parents = <&cru PLL_GPLL>; -}; - -&vopl { - assigned-clocks = <&cru DCLK_VOP1>; - assigned-clock-parents = <&cru PLL_CPLL>; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk628.dtsi b/arch/arm/boot/dts/rk3288-evb-rk628.dtsi deleted file mode 100644 index 0d23a231768d..000000000000 --- a/arch/arm/boot/dts/rk3288-evb-rk628.dtsi +++ /dev/null @@ -1,614 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -#include -#include -#include "rk3288.dtsi" -#include "rk3288-android.dtsi" - -/ { - model = "Rockchip RK3288 EVB RK628 Board"; - compatible = "rockchip,rk3288-evb-rk628", "rockchip,rk3288"; - - chosen: chosen { - bootargs = "rootwait earlycon=uart8250,mmio32,0xff690000 vmalloc=496M console=ttyFIQ0 androidboot.baseband=N/A androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init kpti=0"; - }; - - adc-keys { - compatible = "adc-keys"; - io-channels = <&saradc 1>; - io-channel-names = "buttons"; - keyup-threshold-microvolt = <1800000>; - poll-interval = <100>; - - vol-up-key { - label = "volume up"; - linux,code = ; - press-threshold-microvolt = <1000>; - }; - - vol-down-key { - label = "volume down"; - linux,code = ; - press-threshold-microvolt = <170000>; - }; - - menu { - label = "menu"; - linux,code = ; - press-threshold-microvolt = <640000>; - }; - - esc { - label = "esc"; - linux,code = ; - press-threshold-microvolt = <1000000>; - }; - - home { - label = "home"; - linux,code = ; - press-threshold-microvolt = <1300000>; - }; - }; - - backlight: backlight { - compatible = "pwm-backlight"; - pwms = <&pwm0 0 1000000 0>; - brightness-levels = < - 0 1 2 3 4 5 6 7 - 8 9 10 11 12 13 14 15 - 16 17 18 19 20 21 22 23 - 24 25 26 27 28 29 30 31 - 32 33 34 35 36 37 38 39 - 40 41 42 43 44 45 46 47 - 48 49 50 51 52 53 54 55 - 56 57 58 59 60 61 62 63 - 64 65 66 67 68 69 70 71 - 72 73 74 75 76 77 78 79 - 80 81 82 83 84 85 86 87 - 88 89 90 91 92 93 94 95 - 96 97 98 99 100 101 102 103 - 104 105 106 107 108 109 110 111 - 112 113 114 115 116 117 118 119 - 120 121 122 123 124 125 126 127 - 128 129 130 131 132 133 134 135 - 136 137 138 139 140 141 142 143 - 144 145 146 147 148 149 150 151 - 152 153 154 155 156 157 158 159 - 160 161 162 163 164 165 166 167 - 168 169 170 171 172 173 174 175 - 176 177 178 179 180 181 182 183 - 184 185 186 187 188 189 190 191 - 192 193 194 195 196 197 198 199 - 200 201 202 203 204 205 206 207 - 208 209 210 211 212 213 214 215 - 216 217 218 219 220 221 222 223 - 224 225 226 227 228 229 230 231 - 232 233 234 235 236 237 238 239 - 240 241 242 243 244 245 246 247 - 248 249 250 251 252 253 254 255>; - default-brightness-level = <128>; - }; - - i2s_mclkin: i2s-mclkin { - compatible = "fixed-factor-clock"; - #clock-cells = <0>; - clocks = <&cru SCLK_I2S0_OUT>; - clock-mult = <1>; - clock-div = <1>; - clock-output-names = "i2s_mclkin"; - }; - - sound: sound { - compatible = "simple-audio-card"; - simple-audio-card,format = "i2s"; - simple-audio-card,name = "realtek,rt5651-codec"; - simple-audio-card,mclk-fs = <256>; - simple-audio-card,widgets = - "Microphone", "Microphone Jack", - "Headphone", "Headphone Jack"; - simple-audio-card,routing = - "MIC1", "Microphone Jack", - "MIC2", "Microphone Jack", - "Microphone Jack", "micbias1", - "Headphone Jack", "HPOL", - "Headphone Jack", "HPOR"; - status = "disabled"; - - simple-audio-card,dai-link@0 { - format = "i2s"; - cpu { - sound-dai = <&i2s>; - }; - - codec { - sound-dai = <&rt5651>; - }; - }; - - simple-audio-card,dai-link@1 { - format = "i2s"; - cpu { - sound-dai = <&i2s>; - }; - - codec { - sound-dai = <&rk628_hdmi>; - }; - }; - }; - - vcc_host: vcc-host-regulator { - compatible = "regulator-fixed"; - enable-active-high; - gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>; - pinctrl-names = "default"; - pinctrl-0 = <&host_vbus_drv>; - regulator-name = "vcc_host"; - regulator-always-on; - regulator-boot-on; - }; - - vcc_sys: vsys-regulator { - compatible = "regulator-fixed"; - regulator-name = "vcc_sys"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - regulator-always-on; - regulator-boot-on; - }; - - vdd_log: vdd-logic { - compatible = "pwm-regulator"; - rockchip,pwm_id = <1>; - rockchip,pwm_voltage = <1100000>; - pwms = <&pwm1 0 25000 1>; - regulator-name = "vcc_log"; - regulator-min-microvolt = <860000>; - regulator-max-microvolt = <1360000>; - regulator-always-on; - regulator-boot-on; - }; - - xin32k: xin32k { - compatible = "fixed-clock"; - clock-frequency = <32768>; - clock-output-names = "xin32k"; - #clock-cells = <0>; - }; -}; - -&backlight { - /delete-property/ enable-gpios; -}; - -&cpu0 { - cpu-supply = <&vdd_cpu>; -}; - -&dfi { - status = "okay"; -}; - -&dmc { - center-supply = <&vdd_log>; - status = "okay"; -}; - -&gpu { - mali-supply = <&vdd_gpu>; - status = "okay"; -}; - -&i2c0 { - clock-frequency = <400000>; - status = "okay"; - - rk808: pmic@1b { - compatible = "rockchip,rk808"; - reg = <0x1b>; - interrupt-parent = <&gpio0>; - interrupts = <4 IRQ_TYPE_LEVEL_LOW>; - pinctrl-names = "default"; - pinctrl-0 = <&pmic_int &global_pwroff>; - rockchip,system-power-controller; - wakeup-source; - #clock-cells = <1>; - clock-output-names = "rk808-clkout1", "rk808-clkout2"; - vcc1-supply = <&vcc_sys>; - vcc2-supply = <&vcc_sys>; - vcc3-supply = <&vcc_sys>; - vcc4-supply = <&vcc_sys>; - vcc6-supply = <&vcc_sys>; - vcc8-supply = <&vcc_io>; - vcc9-supply = <&vcc_io>; - vcc12-supply = <&vcc_io>; - vddio-supply = <&vcc_io>; - - regulators { - vdd_cpu: DCDC_REG1 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <750000>; - regulator-max-microvolt = <1400000>; - regulator-name = "vdd_arm"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vdd_gpu: DCDC_REG2 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <850000>; - regulator-max-microvolt = <1250000>; - regulator-name = "vdd_gpu"; - regulator-ramp-delay = <6000>; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vcc_ddr: DCDC_REG3 { - regulator-always-on; - regulator-boot-on; - regulator-name = "vcc_ddr"; - - regulator-state-mem { - regulator-on-in-suspend; - }; - }; - - vcc_io: DCDC_REG4 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "vcc_io"; - - regulator-state-mem { - regulator-on-in-suspend; - regulator-suspend-microvolt = <3300000>; - }; - }; - - vcc_tp: LDO_REG1 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "vcc_tp"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vcca_codec: LDO_REG2 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-name = "vcca_codec"; - - regulator-state-mem { - regulator-on-in-suspend; - regulator-suspend-microvolt = <3300000>; - }; - }; - - vdd_10: LDO_REG3 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1000000>; - regulator-max-microvolt = <1000000>; - regulator-name = "vdd_10"; - - regulator-state-mem { - regulator-on-in-suspend; - regulator-suspend-microvolt = <1000000>; - }; - }; - - vccio_wl: LDO_REG4 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-name = "vccio_wl"; - - regulator-state-mem { - regulator-on-in-suspend; - }; - }; - - vccio_sd: LDO_REG5 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <3300000>; - regulator-name = "vccio_sd"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vdd10_lcd: LDO_REG6 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1000000>; - regulator-max-microvolt = <1000000>; - regulator-name = "vdd10_lcd"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vcc_18: LDO_REG7 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-name = "vcc_18"; - - regulator-state-mem { - regulator-on-in-suspend; - regulator-suspend-microvolt = <1800000>; - }; - }; - - vcc18_lcd: LDO_REG8 { - regulator-always-on; - regulator-boot-on; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-name = "vcc18_lcd"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vcc_sd: SWITCH_REG1 { - regulator-always-on; - regulator-boot-on; - regulator-name = "vcc_sd"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - - vcc_lcd: SWITCH_REG2 { - regulator-always-on; - regulator-boot-on; - regulator-name = "vcc_lcd"; - - regulator-state-mem { - regulator-off-in-suspend; - }; - }; - }; - }; -}; - -&i2c1 { - clock-frequency = <400000>; - status = "okay"; - - rk628: rk628@50 { - reg = <0x50>; - interrupt-parent = <&gpio7>; - interrupts = <15 IRQ_TYPE_LEVEL_HIGH>; - enable-gpios = <&gpio5 RK_PC2 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio7 RK_PB6 GPIO_ACTIVE_LOW>; - status = "okay"; - }; -}; - -&i2c2 { - status = "okay"; - - rt5651: rt5651@1a { - compatible = "rockchip,rt5651"; - reg = <0x1a>; - clocks = <&cru SCLK_I2S0_OUT>; - clock-names = "mclk"; - pinctrl-names = "default"; - pinctrl-0 = <&i2s0_mclk>; - spk-con-gpio = <&gpio0 11 GPIO_ACTIVE_HIGH>; - hp-det-gpio = <&gpio4 28 GPIO_ACTIVE_LOW>; - #sound-dai-cells = <0>; - }; -}; - -&i2s { - #sound-dai-cells = <0>; - status = "okay"; -}; - -#include "rk628.dtsi" - -&io_domains { - audio-supply = <&vcc_io>; - bb-supply = <&vcc_io>; - dvp-supply = <&vcc_io>; - flash0-supply = <&vcc_18>; - gpio30-supply = <&vcc_io>; - gpio1830 = <&vcc_io>; - lcdc-supply = <&vcc_lcd>; - sdcard-supply = <&vccio_sd>; - wifi-supply = <&vccio_wl>; - status = "okay"; -}; - -&rockchip_suspend { - rockchip,pwm-regulator-config = < - (0 - | PWM1_REGULATOR_EN - ) - >; - status = "okay"; -}; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - pinctrl-names = "active"; - pinctrl-0 = <&pwm1_pin_pull_down>; - status = "okay"; -}; - -&emmc { - bus-width = <8>; - cap-mmc-highspeed; - disable-wp; - non-removable; - num-slots = <1>; - pinctrl-names = "default"; - pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>; - max-frequency = <100000000>; - mmc-hs200-1_8v; - mmc-ddr-1_8v; - status = "okay"; -}; - -&saradc { - vref-supply = <&vcc_18>; - status = "okay"; -}; - -&sdmmc { - no-sdio; - no-mmc; - bus-width = <4>; - cap-mmc-highspeed; - sd-uhs-sdr12; - sd-uhs-sdr25; - sd-uhs-sdr50; - sd-uhs-sdr104; - cap-sd-highspeed; - card-detect-delay = <200>; - disable-wp; /* wp not hooked up */ - num-slots = <1>; - pinctrl-names = "default"; - pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; - vmmc-supply = <&vcc_sd>; - vqmmc-supply = <&vccio_sd>; - no-sdio; - no-mmc; - status = "okay"; -}; - -&wdt { - status = "okay"; -}; - -&pwm0 { - status = "okay"; -}; - -&backlight { - status = "okay"; -}; - -&rga { - status = "okay"; -}; - -&tsadc { - rockchip,hw-tshut-polarity = <0>; - status = "okay"; -}; - -&usbphy { - status = "okay"; -}; - -&usb_host0_ehci { - rockchip-relinquish-port; - status = "okay"; -}; - -&usb_host0_ohci { - status = "okay"; -}; - -&usb_host1 { - status = "okay"; -}; - -&usb_otg { - status = "okay"; -}; - -&vopb { - status = "okay"; -}; - -&vopb_mmu { - status = "okay"; -}; - -&vopl { - status = "okay"; -}; - -&vopl_mmu { - status = "okay"; -}; - -&pinctrl { - pcfg_pull_none_drv_8ma: pcfg-pull-none-drv-8ma { - drive-strength = <8>; - }; - - pcfg_pull_up_drv_8ma: pcfg-pull-up-drv-8ma { - bias-pull-up; - drive-strength = <8>; - }; - - pmic { - pmic_int: pmic-int { - rockchip,pins = <0 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>; - }; - }; - - sdmmc { - /* - * Default drive strength isn't enough to achieve even - * high-speed mode on EVB board so bump up to 8ma. - */ - sdmmc_bus4: sdmmc-bus4 { - rockchip,pins = <6 RK_PC0 1 &pcfg_pull_up_drv_8ma>, - <6 RK_PC1 1 &pcfg_pull_up_drv_8ma>, - <6 RK_PC2 1 &pcfg_pull_up_drv_8ma>, - <6 RK_PC3 1 &pcfg_pull_up_drv_8ma>; - }; - - sdmmc_clk: sdmmc-clk { - rockchip,pins = <6 RK_PC4 1 &pcfg_pull_none_drv_8ma>; - }; - - sdmmc_cmd: sdmmc-cmd { - rockchip,pins = <6 RK_PC5 1 &pcfg_pull_up_drv_8ma>; - }; - - sdmmc_pwr: sdmmc-pwr { - rockchip,pins = <7 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; - }; - }; - - usb { - host_vbus_drv: host-vbus-drv { - rockchip,pins = <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>; - }; - }; -}; diff --git a/arch/arm/boot/dts/rk628.dtsi b/arch/arm/boot/dts/rk628.dtsi deleted file mode 100644 index 3a2f45c7ecfa..000000000000 --- a/arch/arm/boot/dts/rk628.dtsi +++ /dev/null @@ -1,391 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -// Copyright (c) 2020 Fuzhou Rockchip Electronics Co., Ltd - -#include -#include - -/ { - rk628_xin_osc0_func: rk628-xin-osc0-func { - compatible = "fixed-clock"; - #clock-cells = <0>; - clock-frequency = <24000000>; - clock-output-names = "rk628_xin_osc0_func"; - }; - - rk628_xin_osc0_half: rk628-xin-osc0-half { - compatible = "fixed-factor-clock"; - #clock-cells = <0>; - clocks = <&rk628_xin_osc0_func>; - clock-mult = <1>; - clock-div = <2>; - clock-output-names = "rk628_xin_osc0_half"; - }; -}; - -&rk628 { - compatible = "rockchip,rk628"; - - rk628_cru: cru { - compatible = "rockchip,rk628-cru"; - #clock-cells = <1>; - #reset-cells = <1>; - status = "okay"; - }; - - rk628_efuse: efuse { - compatible = "rockchip,rk628-efuse"; - clocks = <&rk628_cru CGU_PCLK_EFUSE>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_EFUSE>; - #phy-cells = <0>; - status = "disabled"; - }; - - rk628_pinctrl: pinctrl { - compatible = "rockchip,rk628-pinctrl"; - status = "okay"; - - rk628_gpio0: rk628-gpio0 { - clocks = <&rk628_cru CGU_PCLK_GPIO0>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_GPIO0>; - gpio-controller; - #gpio-cells = <2>; - interrupt-controller; - #interrupt-cells = <2>; - }; - - rk628_gpio1: rk628-gpio1 { - clocks = <&rk628_cru CGU_PCLK_GPIO1>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_GPIO1>; - gpio-controller; - #gpio-cells = <2>; - interrupt-controller; - #interrupt-cells = <2>; - }; - - rk628_gpio2: rk628-gpio2 { - clocks = <&rk628_cru CGU_PCLK_GPIO2>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_GPIO2>; - gpio-controller; - #gpio-cells = <2>; - interrupt-controller; - #interrupt-cells = <2>; - }; - - rk628_gpio3: rk628-gpio3 { - clocks = <&rk628_cru CGU_PCLK_GPIO3>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_GPIO3>; - gpio-controller; - #gpio-cells = <2>; - interrupt-controller; - #interrupt-cells = <2>; - }; - - rk628_i2sm0_pins: i2sm0 { - pins = "gpio0a2", /* i2sm0_sck */ - "gpio0a3", /* i2sm0_lr */ - "gpio0a4", /* i2sm0_d0 */ - "gpio0a5", /* i2sm0_d1 */ - "gpio0a6", /* i2sm0_d2 */ - "gpio0a7"; /* i2sm0_d3 */ - function = "i2sm0"; - }; - - rk628_hpd_in_pins: hpd-in { - pins = "gpio0b0"; - function = "hpd_in"; - }; - - rk628_ddc_tx_pins: ddc-tx { - pins = "gpio0b1", /* ddc_tx_sda */ - "gpio0b2"; /* ddc_tx_scl */ - function = "ddc_tx"; - }; - - rk628_cec_tx_pins: cec-tx { - pins = "gpio0b3"; - function = "cec_tx"; - }; - - rk628_test_clkout_pins: test-clkout { - pins = "gpio1a0"; - function = "test_clkout"; - }; - - rk628_i2sm1_pins: i2sm1 { - pins = "gpio1a2", /* i2sm1_sck */ - "gpio1a3", /* i2sm1_lr */ - "gpio1a4", /* i2sm1_d0 */ - "gpio1a5", /* i2sm1_d1 */ - "gpio1a6", /* i2sm1_d2 */ - "gpio1a7"; /* i2sm1_d3 */ - function = "i2sm1"; - }; - - rk628_hpdm0_out_pins: hpdm0-out { - pins = "gpio1b0"; - function = "hpdm0_out"; - }; - - rk628_ddcm0_rx_pins: ddcm0-rx { - pins = "gpio1b1", /* ddcm0_rx_sda */ - "gpio1b2"; /* ddcm0_rx_scl */ - function = "ddcm0_rx"; - }; - - rk628_cecm0_rx_pins: cecm0_rx { - pins = "gpio1b3"; - function = "cecm0_rx"; - }; - - rk628_vop_pins: vop { - pins = "gpio2a0", /* vop_d0 */ - "gpio2a1", /* vop_d1 */ - "gpio2a2", /* vop_d2 */ - "gpio2a3", /* vop_d3 */ - "gpio2a4", /* vop_d4 */ - "gpio2a5", /* vop_d5 */ - "gpio2a6", /* vop_d6 */ - "gpio2a7", /* vop_d7 */ - "gpio2b0", /* vop_d8 */ - "gpio2b1", /* vop_d9 */ - "gpio2b2", /* vop_d10 */ - "gpio2b3", /* vop_d11 */ - "gpio2b4", /* vop_d12 */ - "gpio2b5", /* vop_d13 */ - "gpio2b6", /* vop_d14 */ - "gpio2b7", /* vop_d15 */ - "gpio2c0", /* vop_d16 */ - "gpio2c1", /* vop_d17 */ - "gpio2c2", /* vop_d18 */ - "gpio2c3", /* vop_d19 */ - "gpio2c4", /* vop_d20 */ - "gpio2c5", /* vop_d21 */ - "gpio2c6", /* vop_d22 */ - "gpio2c7", /* vop_d23 */ - "gpio3a0", /* vop_den */ - "gpio3a1", /* vop_hsync */ - "gpio3a3", /* vop_vsync */ - "gpio3b0"; /* vop_dclk */ - function = "vop"; - drive-strength = <1>; - }; - - rk628_hpdm1_out: hpdm1-out { - pins = "gpio3a4"; - function = "hpdm1_out"; - }; - - rk628_ddcm1_rx_pins: ddcm1-rx { - pins = "gpio3a5", /* ddcm1_rx_sda */ - "gpio3a6"; /* ddcm1_rx_scl */ - function = "ddcm1_rx"; - }; - - rk628_cecm1_rx_pins: cecm1-rx { - pins = "gpio3a7"; - function = "cecm1_rx"; - }; - - rk628_gvi_hpd_pins: gvi-hpd { - pins = "gpio3b1"; - function = "gvi_hpd"; - }; - - rk628_gvi_lock_pins: gvi-lock { - pins = "gpio3b2"; - function = "gvi_lock"; - }; - - rk628_hdmirx_cec0: hdmirx-cec0 { - pins = "hdmirx_cec"; - function = "hdmirx_cec0"; - }; - - rk628_hdmirx_cec1: hdmirx-cec1 { - pins = "hdmirx_cec"; - function = "hdmirx_cec1"; - }; - - rk628_rxddc_input0: rxddc-input0 { - pins = "rxddc_scl", - "rxddc_sda"; - function = "rxddc_input0"; - }; - - rk628_rxddc_input1: rxddc-input1 { - pins = "rxddc_scl", - "rxddc_sda"; - function = "rxddc_input1"; - }; - - rk628_i2sm0_input: i2sm0-input { - pins = "i2sm_sck", - "i2sm_d", - "i2sm_lr"; - function = "i2sm0_input"; - }; - - rk628_i2sm1_input: i2sm1-input { - pins = "i2sm_sck", - "i2sm_d", - "i2sm_lr"; - function = "i2sm1_input"; - }; - }; - - rk628_combtxphy: combtxphy { - compatible = "rockchip,rk628-combtxphy"; - clocks = <&rk628_cru CGU_PCLK_TXPHY_CON>, <&rk628_cru CGU_SCLK_VOP>; - clock-names = "pclk", "ref_clk"; - resets = <&rk628_cru RGU_TXPHY_CON>; - #phy-cells = <0>; - status = "disabled"; - }; - - rk628_combrxphy: combrxphy { - compatible = "rockchip,rk628-combrxphy"; - clocks = <&rk628_cru CGU_PCLK_RXPHY>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_RXPHY>; - #phy-cells = <0>; - status = "disabled"; - }; - - rk628_dsi0: dsi0 { - compatible = "rockchip,rk628-dsi0"; - clocks = <&rk628_cru CGU_PCLK_DSI0>, - <&rk628_cru CGU_CLK_CFG_DPHY0>; - clock-names = "pclk", "cfg"; - resets = <&rk628_cru RGU_DSI0>; - phys = <&rk628_combtxphy>; - #address-cells = <1>; - #size-cells = <0>; - status = "disabled"; - }; - - rk628_dsi1: dsi1 { - compatible = "rockchip,rk628-dsi1"; - clocks = <&rk628_cru CGU_PCLK_DSI1>, - <&rk628_cru CGU_CLK_CFG_DPHY1>; - clock-names = "pclk", "cfg"; - resets = <&rk628_cru RGU_DSI1>; - phys = <&rk628_combtxphy>; - #address-cells = <1>; - #size-cells = <0>; - status = "disabled"; - }; - - rk628_lvds: lvds { - compatible = "rockchip,rk628-lvds"; - phys = <&rk628_combtxphy>; - status = "disabled"; - }; - - rk628_gvi: gvi { - compatible = "rockchip,rk628-gvi"; - clocks = <&rk628_cru CGU_PCLK_GVIHOST>; - clock-names = "pclk"; - resets = <&rk628_cru RGU_GVIHOST>; - phys = <&rk628_combtxphy>; - status = "disabled"; - }; - - rk628_rgb_tx: rgb-tx { - compatible = "rockchip,rk628-rgb-tx"; - status = "disabled"; - }; - - rk628_yuv_rx: yuv-rx { - compatible = "rockchip,rk628-yuv-rx"; - status = "disabled"; - }; - - rk628_yuv_tx: yuv-tx { - compatible = "rockchip,rk628-yuv-tx"; - status = "disabled"; - }; - - rk628_bt1120_rx: bt1120-rx { - compatible = "rockchip,rk628-bt1120-rx"; - clocks = <&rk628_cru CGU_BT1120DEC>; - clock-names = "bt1120dec"; - resets = <&rk628_cru RGU_BT1120DEC>; - status = "disabled"; - }; - - rk628_bt1120_tx: bt1120-tx { - compatible = "rockchip,rk628-bt1120-tx"; - status = "disabled"; - }; - - rk628_post_process: post-process { - compatible = "rockchip,rk628-post-process"; - clocks = <&rk628_cru CGU_SCLK_VOP>, - <&rk628_cru CGU_CLK_RX_READ>; - clock-names = "sclk_vop", "rx_read"; - resets = <&rk628_cru RGU_DECODER>, - <&rk628_cru RGU_CLK_RX>, - <&rk628_cru RGU_VOP>; - reset-names = "decoder", "clk_rx", "vop"; - status = "disabled"; - }; - - rk628_hdmi: hdmi { - compatible = "rockchip,rk628-hdmi"; - clocks = <&rk628_cru CGU_PCLK_HDMITX>, - <&rk628_cru CGU_SCLK_VOP>; - clock-names = "pclk", "dclk"; - pinctrl-names = "default"; - pinctrl-0 = <&rk628_hpd_in_pins &rk628_ddc_tx_pins &rk628_i2sm0_pins>; - #sound-dai-cells = <0>; - status = "disabled"; - }; - - rk628_hdmirx: hdmirx { - compatible = "rockchip,rk628-hdmirx"; - clocks = <&rk628_cru CGU_PCLK_HDMIRX>, - <&rk628_cru CGU_CLK_HDMIRX_CEC>, - <&rk628_cru CGU_CLK_HDMIRX_AUD>, - <&rk628_cru CGU_CLK_IMODET>; - clock-names = "pclk", "cec", "audio", "imodet"; - resets = <&rk628_cru RGU_HDMIRX>, - <&rk628_cru RGU_HDMIRX_PON>; - reset-names = "hdmirx", "hdmirx_pon"; - phys = <&rk628_combrxphy>; - status = "disabled"; - }; - - rk628_csi: csi { - compatible = "rockchip,rk628-csi"; - clocks = <&rk628_cru CGU_PCLK_HDMIRX>, - <&rk628_cru CGU_CLK_IMODET>, - <&rk628_cru CGU_CLK_HDMIRX_AUD>, - <&rk628_cru CGU_CLK_HDMIRX_CEC>, - <&rk628_cru CGU_SCLK_VOP>, - <&rk628_cru CGU_CLK_RX_READ>, - <&rk628_cru CGU_PCLK_CSI>, - <&rk628_cru CGU_CLK_TESTOUT>; - clock-names = "hdmirx", "imodet", "hdmirx_aud", "hdmirx_cec", - "vop", "rx_read", "csi0", "i2s_mclk"; - assigned-clocks = <&rk628_cru CGU_CLK_TESTOUT>; - assigned-clock-parents = <&rk628_cru CGU_CLK_HDMIRX_AUD>; - resets = <&rk628_cru RGU_HDMIRX>, - <&rk628_cru RGU_HDMIRX_PON>, - <&rk628_cru RGU_DECODER>, - <&rk628_cru RGU_CLK_RX>, - <&rk628_cru RGU_VOP>, - <&rk628_cru RGU_CSI>; - reset-names = "hdmirx", "hdmirx_pon", "decoder", "clk_rx", - "vop", "csi0"; - phys = <&rk628_combrxphy>, <&rk628_combtxphy>; - phy-names = "combrxphy", "combtxphy"; - pinctrl-names = "default"; - pinctrl-0 = <&rk628_hpdm0_out_pins &rk628_ddcm0_rx_pins &rk628_i2sm0_pins &rk628_test_clkout_pins>; - status = "disabled"; - }; -}; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts b/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts index 138a4467bc02..ab6b493a0d0c 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts @@ -76,7 +76,7 @@ &pinctrl { buttons { pwr_key: pwr-key { - rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; + rockchip,pins = <0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>; }; }; }; diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile index 21a898fea122..c5c4ed22dfab 100644 --- a/arch/arm64/boot/dts/rockchip/Makefile +++ b/arch/arm64/boot/dts/rockchip/Makefile @@ -185,10 +185,6 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb4-lp3-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb5-ddr4-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-linux.dtb -dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dtb -dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-rk628-rgb2dsi.dtb -dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dtb -dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-rk628-rgb2lvds.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb6-ddr3-v10-rk630-bt656-to-cvbs.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb7-ddr4-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb8-lp4-v10.dtb diff --git a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi index 75f624ec9c44..c733ca4b32c8 100644 --- a/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi +++ b/arch/arm64/boot/dts/rockchip/px30-evb-ddr3-v10.dtsi @@ -345,13 +345,13 @@ vcc_3v0: DCDC_REG4 { regulator-always-on; regulator-boot-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; regulator-initial-mode = <0x2>; regulator-name = "vcc_3v0"; regulator-state-mem { regulator-on-in-suspend; - regulator-suspend-microvolt = <3300000>; + regulator-suspend-microvolt = <3000000>; }; }; @@ -396,13 +396,13 @@ vcc3v0_pmu: LDO_REG4 { regulator-always-on; regulator-boot-on; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; regulator-name = "vcc3v0_pmu"; regulator-state-mem { regulator-on-in-suspend; - regulator-suspend-microvolt = <3300000>; + regulator-suspend-microvolt = <3000000>; }; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts deleted file mode 100644 index 106e85c07eb4..000000000000 --- a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-bt1120-to-hdmi.dts +++ /dev/null @@ -1,127 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -/* - * Copyright (c) 2020 Rockchip Electronics Co., Ltd. - */ - -#include "rk3568-evb6-ddr3-v10.dtsi" -#include "rk3568-android.dtsi" - -&dsi0 { - status = "disabled"; -}; - -&i2c3 { - clock-frequency = <400000>; - status = "okay"; - - rk628: rk628@50 { - reg = <0x50>; - interrupt-parent = <&gpio0>; - interrupts = ; - enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; - status = "okay"; - }; -}; - -&video_phy0 { - status = "disabled"; -}; - -#include - -&rk628_hdmi { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - hdmi_in_post_process: endpoint { - remote-endpoint = <&post_process_out_hdmi>; - }; - }; - }; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - mode-sync-pol = <0>; - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_bt1120: endpoint { - remote-endpoint = <&bt1120_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_hdmi: endpoint { - remote-endpoint = <&hdmi_in_post_process>; - }; - }; - }; -}; - -&rk628_bt1120_rx { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - bt1120_in_rgb: endpoint { - remote-endpoint = <&rgb_out_bt1120>; - }; - }; - - port@1 { - reg = <1>; - - bt1120_out_post_process: endpoint { - remote-endpoint = <&post_process_in_bt1120>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - pinctrl-names = "default"; - pinctrl-0 = <&bt1120_pins>; - - ports { - port@1 { - reg = <1>; - - rgb_out_bt1120: endpoint { - remote-endpoint = <&bt1120_in_rgb>; - }; - }; - }; -}; - -&rgb_in_vp2 { - status = "okay"; -}; - -&vcc3v3_lcd1_n { - status = "disabled"; - gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - enable-active-high; -}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2dsi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2dsi.dts deleted file mode 100644 index 1cefbfa43d0f..000000000000 --- a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2dsi.dts +++ /dev/null @@ -1,419 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -/* - * Copyright (c) 2020 Rockchip Electronics Co., Ltd. - */ - -#include "rk3568-evb6-ddr3-v10.dtsi" -#include "rk3568-android.dtsi" - -&dsi0 { - status = "disabled"; -}; - -&video_phy0 { - status = "disabled"; -}; - -&i2c3 { - clock-frequency = <400000>; - status = "okay"; - - rk628: rk628@50 { - reg = <0x50>; - interrupt-parent = <&gpio0>; - interrupts = ; - enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; - status = "okay"; - }; -}; - -#include - -&backlight { - pwms = <&pwm14 0 25000 0>; -}; - -&pwm14 { - status = "okay"; -}; - -&rk628_dsi0 { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - dsi0_in_post_process: endpoint { - remote-endpoint = <&post_process_out_dsi0>; - }; - }; - }; - - panel@0 { - compatible = "simple-panel-dsi"; - reg = <0>; - backlight = <&backlight>; - enable-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; - prepare-delay-ms = <120>; - enable-delay-ms = <120>; - disable-delay-ms = <120>; - unprepare-delay-ms = <120>; - init-delay-ms = <120>; - - dsi,flags = <(MIPI_DSI_MODE_VIDEO | - MIPI_DSI_MODE_VIDEO_BURST | - MIPI_DSI_MODE_LPM | - MIPI_DSI_MODE_EOT_PACKET)>; - dsi,format = ; - dsi,lanes = <4>; - - panel-init-sequence = [ - 23 00 02 FE 21 - 23 00 02 04 00 - 23 00 02 00 64 - 23 00 02 2A 00 - 23 00 02 26 64 - 23 00 02 54 00 - 23 00 02 50 64 - 23 00 02 7B 00 - 23 00 02 77 64 - 23 00 02 A2 00 - 23 00 02 9D 64 - 23 00 02 C9 00 - 23 00 02 C5 64 - 23 00 02 01 71 - 23 00 02 27 71 - 23 00 02 51 71 - 23 00 02 78 71 - 23 00 02 9E 71 - 23 00 02 C6 71 - 23 00 02 02 89 - 23 00 02 28 89 - 23 00 02 52 89 - 23 00 02 79 89 - 23 00 02 9F 89 - 23 00 02 C7 89 - 23 00 02 03 9E - 23 00 02 29 9E - 23 00 02 53 9E - 23 00 02 7A 9E - 23 00 02 A0 9E - 23 00 02 C8 9E - 23 00 02 09 00 - 23 00 02 05 B0 - 23 00 02 31 00 - 23 00 02 2B B0 - 23 00 02 5A 00 - 23 00 02 55 B0 - 23 00 02 80 00 - 23 00 02 7C B0 - 23 00 02 A7 00 - 23 00 02 A3 B0 - 23 00 02 CE 00 - 23 00 02 CA B0 - 23 00 02 06 C0 - 23 00 02 2D C0 - 23 00 02 56 C0 - 23 00 02 7D C0 - 23 00 02 A4 C0 - 23 00 02 CB C0 - 23 00 02 07 CF - 23 00 02 2F CF - 23 00 02 58 CF - 23 00 02 7E CF - 23 00 02 A5 CF - 23 00 02 CC CF - 23 00 02 08 DD - 23 00 02 30 DD - 23 00 02 59 DD - 23 00 02 7F DD - 23 00 02 A6 DD - 23 00 02 CD DD - 23 00 02 0E 15 - 23 00 02 0A E9 - 23 00 02 36 15 - 23 00 02 32 E9 - 23 00 02 5F 15 - 23 00 02 5B E9 - 23 00 02 85 15 - 23 00 02 81 E9 - 23 00 02 AD 15 - 23 00 02 A9 E9 - 23 00 02 D3 15 - 23 00 02 CF E9 - 23 00 02 0B 14 - 23 00 02 33 14 - 23 00 02 5C 14 - 23 00 02 82 14 - 23 00 02 AA 14 - 23 00 02 D0 14 - 23 00 02 0C 36 - 23 00 02 34 36 - 23 00 02 5D 36 - 23 00 02 83 36 - 23 00 02 AB 36 - 23 00 02 D1 36 - 23 00 02 0D 6B - 23 00 02 35 6B - 23 00 02 5E 6B - 23 00 02 84 6B - 23 00 02 AC 6B - 23 00 02 D2 6B - 23 00 02 13 5A - 23 00 02 0F 94 - 23 00 02 3B 5A - 23 00 02 37 94 - 23 00 02 64 5A - 23 00 02 60 94 - 23 00 02 8A 5A - 23 00 02 86 94 - 23 00 02 B2 5A - 23 00 02 AE 94 - 23 00 02 D8 5A - 23 00 02 D4 94 - 23 00 02 10 D1 - 23 00 02 38 D1 - 23 00 02 61 D1 - 23 00 02 87 D1 - 23 00 02 AF D1 - 23 00 02 D5 D1 - 23 00 02 11 04 - 23 00 02 39 04 - 23 00 02 62 04 - 23 00 02 88 04 - 23 00 02 B0 04 - 23 00 02 D6 04 - 23 00 02 12 05 - 23 00 02 3A 05 - 23 00 02 63 05 - 23 00 02 89 05 - 23 00 02 B1 05 - 23 00 02 D7 05 - 23 00 02 18 AA - 23 00 02 14 36 - 23 00 02 42 AA - 23 00 02 3D 36 - 23 00 02 69 AA - 23 00 02 65 36 - 23 00 02 8F AA - 23 00 02 8B 36 - 23 00 02 B7 AA - 23 00 02 B3 36 - 23 00 02 DD AA - 23 00 02 D9 36 - 23 00 02 15 74 - 23 00 02 3F 74 - 23 00 02 66 74 - 23 00 02 8C 74 - 23 00 02 B4 74 - 23 00 02 DA 74 - 23 00 02 16 9F - 23 00 02 40 9F - 23 00 02 67 9F - 23 00 02 8D 9F - 23 00 02 B5 9F - 23 00 02 DB 9F - 23 00 02 17 DC - 23 00 02 41 DC - 23 00 02 68 DC - 23 00 02 8E DC - 23 00 02 B6 DC - 23 00 02 DC DC - 23 00 02 1D FF - 23 00 02 19 03 - 23 00 02 47 FF - 23 00 02 43 03 - 23 00 02 6E FF - 23 00 02 6A 03 - 23 00 02 94 FF - 23 00 02 90 03 - 23 00 02 BC FF - 23 00 02 B8 03 - 23 00 02 E2 FF - 23 00 02 DE 03 - 23 00 02 1A 35 - 23 00 02 44 35 - 23 00 02 6B 35 - 23 00 02 91 35 - 23 00 02 B9 35 - 23 00 02 DF 35 - 23 00 02 1B 45 - 23 00 02 45 45 - 23 00 02 6C 45 - 23 00 02 92 45 - 23 00 02 BA 45 - 23 00 02 E0 45 - 23 00 02 1C 55 - 23 00 02 46 55 - 23 00 02 6D 55 - 23 00 02 93 55 - 23 00 02 BB 55 - 23 00 02 E1 55 - 23 00 02 22 FF - 23 00 02 1E 68 - 23 00 02 4C FF - 23 00 02 48 68 - 23 00 02 73 FF - 23 00 02 6F 68 - 23 00 02 99 FF - 23 00 02 95 68 - 23 00 02 C1 FF - 23 00 02 BD 68 - 23 00 02 E7 FF - 23 00 02 E3 68 - 23 00 02 1F 7E - 23 00 02 49 7E - 23 00 02 70 7E - 23 00 02 96 7E - 23 00 02 BE 7E - 23 00 02 E4 7E - 23 00 02 20 97 - 23 00 02 4A 97 - 23 00 02 71 97 - 23 00 02 97 97 - 23 00 02 BF 97 - 23 00 02 E5 97 - 23 00 02 21 B5 - 23 00 02 4B B5 - 23 00 02 72 B5 - 23 00 02 98 B5 - 23 00 02 C0 B5 - 23 00 02 E6 B5 - 23 00 02 25 F0 - 23 00 02 23 E8 - 23 00 02 4F F0 - 23 00 02 4D E8 - 23 00 02 76 F0 - 23 00 02 74 E8 - 23 00 02 9C F0 - 23 00 02 9A E8 - 23 00 02 C4 F0 - 23 00 02 C2 E8 - 23 00 02 EA F0 - 23 00 02 E8 E8 - 23 00 02 24 FF - 23 00 02 4E FF - 23 00 02 75 FF - 23 00 02 9B FF - 23 00 02 C3 FF - 23 00 02 E9 FF - 23 00 02 FE 3D - 23 00 02 00 04 - 23 00 02 FE 23 - 23 00 02 08 82 - 23 00 02 0A 00 - 23 00 02 0B 00 - 23 00 02 0C 01 - 23 00 02 16 00 - 23 00 02 18 02 - 23 00 02 1B 04 - 23 00 02 19 04 - 23 00 02 1C 81 - 23 00 02 1F 00 - 23 00 02 20 03 - 23 00 02 23 04 - 23 00 02 21 01 - 23 00 02 54 63 - 23 00 02 55 54 - 23 00 02 6E 45 - 23 00 02 6D 36 - 23 00 02 FE 3D - 23 00 02 55 78 - 23 00 02 FE 20 - 23 00 02 26 30 - 23 00 02 FE 3D - 23 00 02 20 71 - 23 00 02 50 8F - 23 00 02 51 8F - 23 00 02 FE 00 - 23 00 02 35 00 - 05 78 01 11 - 05 1E 01 29 - ]; - - panel-exit-sequence = [ - 05 00 01 28 - 05 00 01 10 - ]; - - disp_timings3: display-timings { - native-mode = <&dsi0_timing3>; - dsi0_timing3: timing0 { - clock-frequency = <132000000>; - hactive = <1080>; - vactive = <1920>; - hfront-porch = <15>; - hsync-len = <2>; - hback-porch = <30>; - vfront-porch = <15>; - vsync-len = <2>; - vback-porch = <15>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <0>; - pixelclk-active = <1>; - }; - }; - }; -}; - -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - mode-sync-pol = <0>; - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_dsi0: endpoint { - remote-endpoint = <&dsi0_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&rgb_in_vp2 { - status = "okay"; -}; - -&vcc3v3_lcd1_n { - status = "disabled"; - gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - enable-active-high; -}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts deleted file mode 100644 index a4759f1ba85e..000000000000 --- a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -/* - * Copyright (c) 2020 Rockchip Electronics Co., Ltd. - */ - -#include "rk3568-evb6-ddr3-v10.dtsi" -#include "rk3568-android.dtsi" - -&dsi0 { - status = "disabled"; -}; - -&i2c3 { - clock-frequency = <400000>; - status = "okay"; - - rk628: rk628@50 { - reg = <0x50>; - interrupt-parent = <&gpio0>; - interrupts = ; - enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; - status = "okay"; - }; -}; - -#include - -&rk628_hdmi { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - hdmi_in_post_process: endpoint { - remote-endpoint = <&post_process_out_hdmi>; - }; - }; - }; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - mode-sync-pol = <0>; - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_hdmi: endpoint { - remote-endpoint = <&hdmi_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&rgb_in_vp2 { - status = "okay"; -}; - -&vcc3v3_lcd1_n { - status = "disabled"; - gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - enable-active-high; -}; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2lvds.dts b/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2lvds.dts deleted file mode 100644 index ec43b24ddab1..000000000000 --- a/arch/arm64/boot/dts/rockchip/rk3568-evb6-ddr3-v10-rk628-rgb2lvds.dts +++ /dev/null @@ -1,173 +0,0 @@ -// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -/* - * Copyright (c) 2020 Rockchip Electronics Co., Ltd. - */ - -#include -#include "rk3568-evb6-ddr3-v10.dtsi" -#include "rk3568-android.dtsi" - -/ { - vcc33_lcd: vcc33-lcd { - compatible = "regulator-fixed"; - regulator-name = "vcc33_lcd"; - regulator-boot-on; - regulator-always-on; - gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; - enable-active-high; - }; - - panel { - compatible = "simple-panel"; - power-supply = <&vcc33_lcd>; - backlight = <&backlight>; - enable-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>; - prepare-delay-ms = <20>; - enable-delay-ms = <20>; - disable-delay-ms = <20>; - unprepare-delay-ms = <20>; - bus-format = ; - - display-timings { - native-mode = <&timing0>; - - timing0: timing0 { - clock-frequency = <66600000>; - hactive = <800>; - vactive = <1280>; - hback-porch = <30>; - hfront-porch = <30>; - vback-porch = <3>; - vfront-porch = <3>; - hsync-len = <4>; - vsync-len = <2>; - hsync-active = <0>; - vsync-active = <0>; - de-active = <0>; - pixelclk-active = <0>; - }; - }; - - port { - panel_in_lvds: endpoint { - remote-endpoint = <&lvds_out_panel>; - }; - }; - }; -}; - -&dsi0 { - status = "disabled"; -}; - -&video_phy0 { - status = "disabled"; -}; - -&i2c3 { - clock-frequency = <400000>; - status = "okay"; - - rk628: rk628@50 { - reg = <0x50>; - interrupt-parent = <&gpio0>; - interrupts = ; - enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; - status = "okay"; - }; -}; - -#include - -&backlight { - pwms = <&pwm14 0 25000 0>; -}; - -&pwm14 { - status = "okay"; -}; - -&rk628_lvds { - status = "okay"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - lvds_in_post_process: endpoint { - remote-endpoint = <&post_process_out_lvds>; - }; - }; - - port@1 { - reg = <1>; - - lvds_out_panel: endpoint { - remote-endpoint = <&panel_in_lvds>; - }; - }; - }; -}; -&rk628_combtxphy { - status = "okay"; -}; - -&rk628_post_process { - pinctrl-names = "default"; - pinctrl-0 = <&rk628_vop_pins>; - status = "okay"; - - mode-sync-pol = <0>; - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - - post_process_in_rgb: endpoint { - remote-endpoint = <&rgb_out_post_process>; - }; - }; - - port@1 { - reg = <1>; - - post_process_out_lvds: endpoint { - remote-endpoint = <&lvds_in_post_process>; - }; - }; - }; -}; - -&rgb { - status = "okay"; - - ports { - port@1 { - reg = <1>; - - rgb_out_post_process: endpoint { - remote-endpoint = <&post_process_in_rgb>; - }; - }; - }; -}; - -&rgb_in_vp2 { - status = "okay"; -}; - -&vcc3v3_lcd1_n { - status = "disabled"; - gpio = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>; - enable-active-high; -}; - -&gmac1 { - status = "disabled"; -}; diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb7-imx415.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb7-imx415.dtsi index f5389891113d..9b56a477d78f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-evb7-imx415.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-evb7-imx415.dtsi @@ -5,14 +5,6 @@ */ / { - cam_ircut0: cam_ircut { - status = "okay"; - compatible = "rockchip,ircut"; - ircut-open-gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_HIGH>; - ircut-close-gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_HIGH>; - rockchip,camera-module-index = <0>; - rockchip,camera-module-facing = "back"; - }; vcc_mipidphy0: vcc-mipidcphy0-regulator { compatible = "regulator-fixed"; gpio = <&gpio1 RK_PB2 GPIO_ACTIVE_HIGH>; @@ -74,7 +66,6 @@ rockchip,camera-module-facing = "back"; rockchip,camera-module-name = "CMK-OT2022-PX1"; rockchip,camera-module-lens-name = "IR0147-50IRC-8M-F20"; - lens-focus = <&cam_ircut0>; port { imx415_out0: endpoint { remote-endpoint = <&mipidphy0_in_ucam0>; diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts index ccb527f84094..f1ec17c12157 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts @@ -349,6 +349,10 @@ vin-supply = <&dphy3_vcc12v_buck>; }; +&max96712_dphy3 { + lock-gpios = <&gpio4 RK_PA3 GPIO_ACTIVE_HIGH>; +}; + &max96756_dphy0_vcc1v2 { vin-supply = <&vcc5v0_buck>; }; diff --git a/drivers/clk/rockchip/regmap/Kconfig b/drivers/clk/rockchip/regmap/Kconfig index 65f691bc4141..df30e308e163 100644 --- a/drivers/clk/rockchip/regmap/Kconfig +++ b/drivers/clk/rockchip/regmap/Kconfig @@ -8,9 +8,3 @@ config CLK_RK618 depends on MFD_RK618 default MFD_RK618 select COMMON_CLK_ROCKCHIP_REGMAP - -config CLK_RK628 - tristate "Clock driver for Rockchip RK628" - depends on MFD_RK628 - default MFD_RK628 - select COMMON_CLK_ROCKCHIP_REGMAP diff --git a/drivers/clk/rockchip/regmap/Makefile b/drivers/clk/rockchip/regmap/Makefile index 18d075d093d9..8127b7727750 100644 --- a/drivers/clk/rockchip/regmap/Makefile +++ b/drivers/clk/rockchip/regmap/Makefile @@ -10,4 +10,3 @@ clk-rockchip-regmap-objs := clk-regmap-mux.o \ clk-regmap-pll.o obj-$(CONFIG_CLK_RK618) += clk-rk618.o -obj-$(CONFIG_CLK_RK628) += clk-rk628.o diff --git a/drivers/clk/rockchip/regmap/clk-regmap.h b/drivers/clk/rockchip/regmap/clk-regmap.h index 4626e1982beb..91a32d3d710b 100644 --- a/drivers/clk/rockchip/regmap/clk-regmap.h +++ b/drivers/clk/rockchip/regmap/clk-regmap.h @@ -154,23 +154,6 @@ struct clk_composite_data { .flags = _flags, \ } -#define COMPOSITE_NOMUX(_id, _name, _parent_name, \ - _div_reg, _div_shift, _div_width, \ - _gate_reg, _gate_shift, _flags) \ -{ \ - .id = _id, \ - .name = _name, \ - .parent_names = (const char *[]){ _parent_name }, \ - .num_parents = 1, \ - .div_reg = _div_reg, \ - .div_shift = _div_shift, \ - .div_width = _div_width, \ - .div_flags = CLK_DIVIDER_HIWORD_MASK, \ - .gate_reg = _gate_reg, \ - .gate_shift = _gate_shift, \ - .flags = _flags, \ -} - #define COMPOSITE_NODIV(_id, _name, _parent_names, \ _mux_reg, _mux_shift, _mux_width, \ _gate_reg, _gate_shift, _flags) \ @@ -197,20 +180,6 @@ struct clk_composite_data { .flags = _flags, \ } -#define COMPOSITE_FRAC_NOMUX(_id, _name, _parent_name, \ - _div_reg, \ - _gate_reg, _gate_shift, _flags) \ -{ \ - .id = _id, \ - .name = _name, \ - .parent_names = (const char *[]){ _parent_name }, \ - .num_parents = 1, \ - .div_reg = _div_reg, \ - .gate_reg = _gate_reg, \ - .gate_shift = _gate_shift, \ - .flags = _flags, \ -} - #define COMPOSITE_FRAC_NOGATE(_id, _name, _parent_names, \ _mux_reg, _mux_shift, _mux_width, \ _div_reg, \ diff --git a/drivers/clk/rockchip/regmap/clk-rk628.c b/drivers/clk/rockchip/regmap/clk-rk628.c deleted file mode 100644 index 7f501db660e0..000000000000 --- a/drivers/clk/rockchip/regmap/clk-rk628.c +++ /dev/null @@ -1,609 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (c) 2020 Rockchip Electronics Co. Ltd. - * - * Author: Wyon Bi - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "clk-regmap.h" - -#define RK628_PLL(_id, _name, _parent_name, _reg, _flags) \ - PLL(_id, _name, _parent_name, _reg, 13, 12, 10, _flags) - -#define REG(x) ((x) + 0xc0000) - -#define CRU_CPLL_CON0 REG(0x0000) -#define CRU_CPLL_CON1 REG(0x0004) -#define CRU_CPLL_CON2 REG(0x0008) -#define CRU_CPLL_CON3 REG(0x000c) -#define CRU_CPLL_CON4 REG(0x0010) -#define CRU_GPLL_CON0 REG(0x0020) -#define CRU_GPLL_CON1 REG(0x0024) -#define CRU_GPLL_CON2 REG(0x0028) -#define CRU_GPLL_CON3 REG(0x002c) -#define CRU_GPLL_CON4 REG(0x0030) -#define CRU_MODE_CON REG(0x0060) -#define CRU_CLKSEL_CON00 REG(0x0080) -#define CRU_CLKSEL_CON01 REG(0x0084) -#define CRU_CLKSEL_CON02 REG(0x0088) -#define CRU_CLKSEL_CON03 REG(0x008c) -#define CRU_CLKSEL_CON04 REG(0x0090) -#define CRU_CLKSEL_CON05 REG(0x0094) -#define CRU_CLKSEL_CON06 REG(0x0098) -#define CRU_CLKSEL_CON07 REG(0x009c) -#define CRU_CLKSEL_CON08 REG(0x00a0) -#define CRU_CLKSEL_CON09 REG(0x00a4) -#define CRU_CLKSEL_CON10 REG(0x00a8) -#define CRU_CLKSEL_CON11 REG(0x00ac) -#define CRU_CLKSEL_CON12 REG(0x00b0) -#define CRU_CLKSEL_CON13 REG(0x00b4) -#define CRU_CLKSEL_CON14 REG(0x00b8) -#define CRU_CLKSEL_CON15 REG(0x00bc) -#define CRU_CLKSEL_CON16 REG(0x00c0) -#define CRU_CLKSEL_CON17 REG(0x00c4) -#define CRU_CLKSEL_CON18 REG(0x00c8) -#define CRU_CLKSEL_CON20 REG(0x00d0) -#define CRU_CLKSEL_CON21 REG(0x00d4) -#define CRU_GATE_CON00 REG(0x0180) -#define CRU_GATE_CON01 REG(0x0184) -#define CRU_GATE_CON02 REG(0x0188) -#define CRU_GATE_CON03 REG(0x018c) -#define CRU_GATE_CON04 REG(0x0190) -#define CRU_GATE_CON05 REG(0x0194) -#define CRU_SOFTRST_CON00 REG(0x0200) -#define CRU_SOFTRST_CON01 REG(0x0204) -#define CRU_SOFTRST_CON02 REG(0x0208) -#define CRU_SOFTRST_CON04 REG(0x0210) -#define CRU_MAX_REGISTER CRU_SOFTRST_CON04 - -#define reset_to_cru(_rst) container_of(_rst, struct rk628_cru, rcdev) - -struct rk628_cru { - struct device *dev; - struct rk628 *parent; - struct regmap *regmap; - struct reset_controller_dev rcdev; - struct clk_onecell_data clk_data; -}; - -#define CNAME(x) "rk628_" x - -#define PNAME(x) static const char *const x[] - -PNAME(mux_cpll_osc_p) = { CNAME("xin_osc0_func"), CNAME("clk_cpll") }; -PNAME(mux_gpll_osc_p) = { CNAME("xin_osc0_func"), CNAME("clk_gpll") }; -PNAME(mux_cpll_gpll_mux_p) = { CNAME("clk_cpll_mux"), CNAME("clk_gpll_mux") }; -PNAME(mux_mclk_i2s_8ch_p) = { CNAME("clk_i2s_8ch_src"), - CNAME("clk_i2s_8ch_frac"), CNAME("i2s_mclkin"), - CNAME("xin_osc0_half") }; -PNAME(mux_i2s_mclkout_p) = { CNAME("mclk_i2s_8ch"), CNAME("xin_osc0_half") }; -PNAME(mux_clk_testout_p) = { CNAME("xin_osc0_func"), CNAME("xin_osc0_half"), - CNAME("clk_gpll"), CNAME("clk_gpll_mux"), - CNAME("clk_cpll"), CNAME("clk_gpll_mux"), - CNAME("pclk_logic"), CNAME("sclk_vop"), - CNAME("mclk_i2s_8ch"), CNAME("i2s_mclkout"), - CNAME("dummy"), CNAME("clk_hdmirx_aud"), - CNAME("clk_hdmirx_cec"), CNAME("clk_imodet"), - CNAME("clk_txesc"), CNAME("clk_gpio_db0") }; - -static const struct clk_pll_data rk628_clk_plls[] = { - RK628_PLL(CGU_CLK_CPLL, CNAME("clk_cpll"), CNAME("xin_osc0_func"), - CRU_CPLL_CON0, - 0), - RK628_PLL(CGU_CLK_GPLL, CNAME("clk_gpll"), CNAME("xin_osc0_func"), - CRU_GPLL_CON0, - 0), -}; - -static const struct clk_mux_data rk628_clk_muxes[] = { - MUX(CGU_CLK_CPLL_MUX, CNAME("clk_cpll_mux"), mux_cpll_osc_p, - CRU_MODE_CON, 0, 1, - 0), - MUX(CGU_CLK_GPLL_MUX, CNAME("clk_gpll_mux"), mux_gpll_osc_p, - CRU_MODE_CON, 2, 1, - CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT), -}; - -static const struct clk_gate_data rk628_clk_gates[] = { - GATE(CGU_PCLK_GPIO0, CNAME("pclk_gpio0"), CNAME("pclk_logic"), - CRU_GATE_CON01, 0, - 0), - GATE(CGU_PCLK_GPIO1, CNAME("pclk_gpio1"), CNAME("pclk_logic"), - CRU_GATE_CON01, 1, - 0), - GATE(CGU_PCLK_GPIO2, CNAME("pclk_gpio2"), CNAME("pclk_logic"), - CRU_GATE_CON01, 2, - 0), - GATE(CGU_PCLK_GPIO3, CNAME("pclk_gpio3"), CNAME("pclk_logic"), - CRU_GATE_CON01, 3, - 0), - - GATE(CGU_PCLK_TXPHY_CON, CNAME("pclk_txphy_con"), CNAME("pclk_logic"), - CRU_GATE_CON02, 3, - CLK_IGNORE_UNUSED), - GATE(CGU_PCLK_EFUSE, CNAME("pclk_efuse"), CNAME("pclk_logic"), - CRU_GATE_CON00, 5, - 0), - GATE(0, CNAME("pclk_i2c2apb"), CNAME("pclk_logic"), - CRU_GATE_CON00, 3, - CLK_IGNORE_UNUSED), - GATE(0, CNAME("pclk_cru"), CNAME("pclk_logic"), - CRU_GATE_CON00, 1, - CLK_IGNORE_UNUSED), - GATE(0, CNAME("pclk_adapter"), CNAME("pclk_logic"), - CRU_GATE_CON00, 7, - CLK_IGNORE_UNUSED), - GATE(0, CNAME("pclk_regfile"), CNAME("pclk_logic"), - CRU_GATE_CON00, 2, - CLK_IGNORE_UNUSED), - GATE(CGU_PCLK_DSI0, CNAME("pclk_dsi0"), CNAME("pclk_logic"), - CRU_GATE_CON02, 6, - 0), - GATE(CGU_PCLK_DSI1, CNAME("pclk_dsi1"), CNAME("pclk_logic"), - CRU_GATE_CON02, 7, - 0), - GATE(CGU_PCLK_CSI, CNAME("pclk_csi"), CNAME("pclk_logic"), - CRU_GATE_CON02, 8, - 0), - GATE(CGU_PCLK_HDMITX, CNAME("pclk_hdmitx"), CNAME("pclk_logic"), - CRU_GATE_CON02, 4, - 0), - GATE(CGU_PCLK_RXPHY, CNAME("pclk_rxphy"), CNAME("pclk_logic"), - CRU_GATE_CON02, 0, - 0), - GATE(CGU_PCLK_HDMIRX, CNAME("pclk_hdmirx"), CNAME("pclk_logic"), - CRU_GATE_CON02, 2, - 0), - GATE(CGU_PCLK_GVIHOST, CNAME("pclk_gvihost"), CNAME("pclk_logic"), - CRU_GATE_CON02, 5, - 0), - GATE(CGU_CLK_CFG_DPHY0, CNAME("clk_cfg_dphy0"), CNAME("xin_osc0_func"), - CRU_GATE_CON02, 13, - 0), - GATE(CGU_CLK_CFG_DPHY1, CNAME("clk_cfg_dphy1"), CNAME("xin_osc0_func"), - CRU_GATE_CON02, 14, - 0), - GATE(CGU_CLK_TXESC, CNAME("clk_txesc"), CNAME("xin_osc0_func"), - CRU_GATE_CON02, 12, - 0), -}; - -static const struct clk_composite_data rk628_clk_composites[] = { - COMPOSITE(CGU_CLK_IMODET, CNAME("clk_imodet"), mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON05, 5, 1, - CRU_CLKSEL_CON05, 0, 5, - CRU_GATE_CON02, 11, - 0), - COMPOSITE(CGU_CLK_HDMIRX_AUD, CNAME("clk_hdmirx_aud"), - mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON05, 15, 1, - CRU_CLKSEL_CON05, 6, 8, - CRU_GATE_CON02, 10, - CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT), - COMPOSITE_FRAC_NOMUX(CGU_CLK_HDMIRX_CEC, CNAME("clk_hdmirx_cec"), - CNAME("xin_osc0_func"), - CRU_CLKSEL_CON12, - CRU_GATE_CON01, 15, - 0), - COMPOSITE_FRAC(CGU_CLK_RX_READ, CNAME("clk_rx_read"), - mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON02, 8, 1, - CRU_CLKSEL_CON14, - CRU_GATE_CON00, 11, - 0), - COMPOSITE_FRAC(CGU_SCLK_VOP, CNAME("sclk_vop"), mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON02, 9, 1, - CRU_CLKSEL_CON13, - CRU_GATE_CON00, 13, - CLK_SET_RATE_NO_REPARENT), - COMPOSITE(CGU_PCLK_LOGIC, CNAME("pclk_logic"), mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON00, 7, 1, - CRU_CLKSEL_CON00, 0, 5, - CRU_GATE_CON00, 0, - 0), - COMPOSITE_NOMUX(CGU_CLK_GPIO_DB0, CNAME("clk_gpio_db0"), - CNAME("xin_osc0_func"), - CRU_CLKSEL_CON08, 0, 10, - CRU_GATE_CON01, 4, - 0), - COMPOSITE_NOMUX(CGU_CLK_GPIO_DB1, CNAME("clk_gpio_db1"), - CNAME("xin_osc0_func"), - CRU_CLKSEL_CON09, 0, 10, - CRU_GATE_CON01, 5, - 0), - COMPOSITE_NOMUX(CGU_CLK_GPIO_DB2, CNAME("clk_gpio_db2"), - CNAME("xin_osc0_func"), - CRU_CLKSEL_CON10, 0, 10, - CRU_GATE_CON01, 6, - 0), - COMPOSITE_NOMUX(CGU_CLK_GPIO_DB3, CNAME("clk_gpio_db3"), - CNAME("xin_osc0_func"), - CRU_CLKSEL_CON11, 0, 10, - CRU_GATE_CON01, 7, - 0), - COMPOSITE(CGU_CLK_I2S_8CH_SRC, CNAME("clk_i2s_8ch_src"), - mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON03, 13, 1, - CRU_CLKSEL_CON03, 8, 5, - CRU_GATE_CON03, 9, - 0), - COMPOSITE_FRAC_NOMUX(CGU_CLK_I2S_8CH_FRAC, CNAME("clk_i2s_8ch_frac"), - CNAME("clk_i2s_8ch_src"), - CRU_CLKSEL_CON04, - CRU_GATE_CON03, 10, - 0), - COMPOSITE_NODIV(CGU_MCLK_I2S_8CH, CNAME("mclk_i2s_8ch"), - mux_mclk_i2s_8ch_p, - CRU_CLKSEL_CON03, 14, 2, - CRU_GATE_CON03, 11, - CLK_SET_RATE_PARENT), - COMPOSITE_NODIV(CGU_I2S_MCLKOUT, CNAME("i2s_mclkout"), - mux_i2s_mclkout_p, - CRU_CLKSEL_CON03, 7, 1, - CRU_GATE_CON03, 12, - CLK_SET_RATE_PARENT), - COMPOSITE(CGU_BT1120DEC, CNAME("clk_bt1120dec"), mux_cpll_gpll_mux_p, - CRU_CLKSEL_CON02, 7, 1, - CRU_CLKSEL_CON02, 0, 5, - CRU_GATE_CON00, 12, - 0), - COMPOSITE(CGU_CLK_TESTOUT, CNAME("clk_testout"), mux_clk_testout_p, - CRU_CLKSEL_CON06, 0, 4, - CRU_CLKSEL_CON06, 8, 6, - CRU_GATE_CON04, 7, - 0), -}; - -static void rk628_clk_add_lookup(struct rk628_cru *cru, struct clk *clk, - unsigned int id) -{ - if (cru->clk_data.clks && id) - cru->clk_data.clks[id] = clk; -} - -static void rk628_clk_register_muxes(struct rk628_cru *cru) -{ - struct clk *clk; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(rk628_clk_muxes); i++) { - const struct clk_mux_data *data = &rk628_clk_muxes[i]; - - clk = devm_clk_regmap_register_mux(cru->dev, data->name, - data->parent_names, - data->num_parents, - cru->regmap, data->reg, - data->shift, data->width, - data->flags); - if (IS_ERR(clk)) { - dev_err(cru->dev, "failed to register clock %s\n", - data->name); - continue; - } - - rk628_clk_add_lookup(cru, clk, data->id); - } -} - -static void rk628_clk_register_gates(struct rk628_cru *cru) -{ - struct clk *clk; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(rk628_clk_gates); i++) { - const struct clk_gate_data *data = &rk628_clk_gates[i]; - - clk = devm_clk_regmap_register_gate(cru->dev, data->name, - data->parent_name, - cru->regmap, - data->reg, data->shift, - data->flags); - if (IS_ERR(clk)) { - dev_err(cru->dev, "failed to register clock %s\n", - data->name); - continue; - } - - rk628_clk_add_lookup(cru, clk, data->id); - } -} - -static void rk628_clk_register_composites(struct rk628_cru *cru) -{ - struct clk *clk; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(rk628_clk_composites); i++) { - const struct clk_composite_data *data = - &rk628_clk_composites[i]; - - clk = devm_clk_regmap_register_composite(cru->dev, data->name, - data->parent_names, - data->num_parents, - cru->regmap, - data->mux_reg, - data->mux_shift, - data->mux_width, - data->div_reg, - data->div_shift, - data->div_width, - data->div_flags, - data->gate_reg, - data->gate_shift, - data->flags); - if (IS_ERR(clk)) { - dev_err(cru->dev, "failed to register clock %s\n", - data->name); - continue; - } - - rk628_clk_add_lookup(cru, clk, data->id); - } -} - -static void rk628_clk_register_plls(struct rk628_cru *cru) -{ - struct clk *clk; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(rk628_clk_plls); i++) { - const struct clk_pll_data *data = &rk628_clk_plls[i]; - - clk = devm_clk_regmap_register_pll(cru->dev, data->name, - data->parent_name, - cru->regmap, - data->reg, - data->pd_shift, - data->dsmpd_shift, - data->lock_shift, - data->flags); - if (IS_ERR(clk)) { - dev_err(cru->dev, "failed to register clock %s\n", - data->name); - continue; - } - - rk628_clk_add_lookup(cru, clk, data->id); - } -} - -struct rk628_rgu_data { - unsigned int id; - unsigned int reg; - unsigned int bit; -}; - -#define RSTGEN(_id, _reg, _bit) \ - { \ - .id = (_id), \ - .reg = (_reg), \ - .bit = (_bit), \ - } - -static const struct rk628_rgu_data rk628_rgu_data[] = { - RSTGEN(RGU_LOGIC, CRU_SOFTRST_CON00, 0), - RSTGEN(RGU_CRU, CRU_SOFTRST_CON00, 1), - RSTGEN(RGU_REGFILE, CRU_SOFTRST_CON00, 2), - RSTGEN(RGU_I2C2APB, CRU_SOFTRST_CON00, 3), - RSTGEN(RGU_EFUSE, CRU_SOFTRST_CON00, 5), - RSTGEN(RGU_ADAPTER, CRU_SOFTRST_CON00, 7), - RSTGEN(RGU_CLK_RX, CRU_SOFTRST_CON00, 11), - RSTGEN(RGU_BT1120DEC, CRU_SOFTRST_CON00, 12), - RSTGEN(RGU_VOP, CRU_SOFTRST_CON00, 13), - - RSTGEN(RGU_GPIO0, CRU_SOFTRST_CON01, 0), - RSTGEN(RGU_GPIO1, CRU_SOFTRST_CON01, 1), - RSTGEN(RGU_GPIO2, CRU_SOFTRST_CON01, 2), - RSTGEN(RGU_GPIO3, CRU_SOFTRST_CON01, 3), - RSTGEN(RGU_GPIO_DB0, CRU_SOFTRST_CON01, 4), - RSTGEN(RGU_GPIO_DB1, CRU_SOFTRST_CON01, 5), - RSTGEN(RGU_GPIO_DB2, CRU_SOFTRST_CON01, 6), - RSTGEN(RGU_GPIO_DB3, CRU_SOFTRST_CON01, 7), - - RSTGEN(RGU_RXPHY, CRU_SOFTRST_CON02, 0), - RSTGEN(RGU_HDMIRX, CRU_SOFTRST_CON02, 2), - RSTGEN(RGU_TXPHY_CON, CRU_SOFTRST_CON02, 3), - RSTGEN(RGU_HDMITX, CRU_SOFTRST_CON02, 4), - RSTGEN(RGU_GVIHOST, CRU_SOFTRST_CON02, 5), - RSTGEN(RGU_DSI0, CRU_SOFTRST_CON02, 6), - RSTGEN(RGU_DSI1, CRU_SOFTRST_CON02, 7), - RSTGEN(RGU_CSI, CRU_SOFTRST_CON02, 8), - RSTGEN(RGU_TXDATA, CRU_SOFTRST_CON02, 9), - RSTGEN(RGU_DECODER, CRU_SOFTRST_CON02, 10), - RSTGEN(RGU_ENCODER, CRU_SOFTRST_CON02, 11), - RSTGEN(RGU_HDMIRX_PON, CRU_SOFTRST_CON02, 12), - RSTGEN(RGU_TXBYTEHS, CRU_SOFTRST_CON02, 13), - RSTGEN(RGU_TXESC, CRU_SOFTRST_CON02, 14), -}; - -static int rk628_rgu_update(struct rk628_cru *cru, unsigned long id, int assert) -{ - const struct rk628_rgu_data *data = &rk628_rgu_data[id]; - - return regmap_write(cru->regmap, data->reg, - BIT(data->bit + 16) | (assert << data->bit)); -} - -static int rk628_rgu_assert(struct reset_controller_dev *rcdev, - unsigned long id) -{ - struct rk628_cru *cru = reset_to_cru(rcdev); - - return rk628_rgu_update(cru, id, 1); -} - -static int rk628_rgu_deassert(struct reset_controller_dev *rcdev, - unsigned long id) -{ - struct rk628_cru *cru = reset_to_cru(rcdev); - - return rk628_rgu_update(cru, id, 0); -} - -static struct reset_control_ops rk628_rgu_ops = { - .assert = rk628_rgu_assert, - .deassert = rk628_rgu_deassert, -}; - -static int rk628_reset_controller_register(struct rk628_cru *cru) -{ - struct device *dev = cru->dev; - - cru->rcdev.owner = THIS_MODULE; - cru->rcdev.nr_resets = ARRAY_SIZE(rk628_rgu_data); - cru->rcdev.of_node = dev->of_node; - cru->rcdev.ops = &rk628_rgu_ops; - - return devm_reset_controller_register(dev, &cru->rcdev); -} - -static const struct regmap_range rk628_cru_readable_ranges[] = { - regmap_reg_range(CRU_CPLL_CON0, CRU_CPLL_CON4), - regmap_reg_range(CRU_GPLL_CON0, CRU_GPLL_CON4), - regmap_reg_range(CRU_MODE_CON, CRU_MODE_CON), - regmap_reg_range(CRU_CLKSEL_CON00, CRU_CLKSEL_CON21), - regmap_reg_range(CRU_GATE_CON00, CRU_GATE_CON05), - regmap_reg_range(CRU_SOFTRST_CON00, CRU_SOFTRST_CON04), -}; - -static const struct regmap_access_table rk628_cru_readable_table = { - .yes_ranges = rk628_cru_readable_ranges, - .n_yes_ranges = ARRAY_SIZE(rk628_cru_readable_ranges), -}; - -static const struct regmap_config rk628_cru_regmap_config = { - .name = "cru", - .reg_bits = 32, - .val_bits = 32, - .reg_stride = 4, - .max_register = CRU_MAX_REGISTER, - .reg_format_endian = REGMAP_ENDIAN_LITTLE, - .val_format_endian = REGMAP_ENDIAN_LITTLE, - .rd_table = &rk628_cru_readable_table, -}; - -static void rk628_cru_init(struct rk628_cru *cru) -{ - u32 val = 0; - u8 mcu_mode; - - regmap_read(cru->parent->grf, GRF_SYSTEM_STATUS0, &val); - mcu_mode = (val & I2C_ONLY_FLAG) ? 0 : 1; - if (mcu_mode) - return; - - /* clock switch and first set gpll almost 99MHz */ - regmap_write(cru->regmap, CRU_GPLL_CON0, 0xffff701d); - usleep_range(1000, 1100); - /* set clk_gpll_mux from gpll */ - regmap_write(cru->regmap, CRU_MODE_CON, 0xffff0004); - usleep_range(1000, 1100); - /* set pclk_logic from clk_gpll_mux and set pclk div 4 */ - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff0080); - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff0083); - /* set cpll almost 400MHz */ - regmap_write(cru->regmap, CRU_CPLL_CON0, 0xffff3063); - usleep_range(1000, 1100); - /* set clk_cpll_mux from clk_cpll */ - regmap_write(cru->regmap, CRU_MODE_CON, 0xffff0005); - /* set pclk use cpll, now div is 4 */ - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff0003); - /* set pclk use cpll, now div is 12 */ - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff000b); - /* gpll 983.04MHz */ - regmap_write(cru->regmap, CRU_GPLL_CON0, 0xffff1028); - usleep_range(1000, 1100); - /* set pclk use gpll, nuw div is 0xb */ - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff008b); - /* set cpll 1188MHz */ - regmap_write(cru->regmap, CRU_CPLL_CON0, 0xffff1063); - usleep_range(1000, 1100); - /* set pclk use cpll, and set pclk 99MHz */ - regmap_write(cru->regmap, CRU_CLKSEL_CON00, 0xff000b); -} - -static int rk628_cru_probe(struct platform_device *pdev) -{ - struct rk628 *rk628 = dev_get_drvdata(pdev->dev.parent); - struct device *dev = &pdev->dev; - struct rk628_cru *cru; - struct clk **clk_table; - unsigned int i; - int ret; - - cru = devm_kzalloc(dev, sizeof(*cru), GFP_KERNEL); - if (!cru) - return -ENOMEM; - - cru->dev = dev; - cru->parent = rk628; - platform_set_drvdata(pdev, cru); - - cru->regmap = devm_regmap_init_i2c(rk628->client, - &rk628_cru_regmap_config); - if (IS_ERR(cru->regmap)) { - ret = PTR_ERR(cru->regmap); - dev_err(dev, "failed to allocate register map: %d\n", ret); - return ret; - } - - rk628_cru_init(cru); - - clk_table = devm_kcalloc(dev, CGU_NR_CLKS, sizeof(struct clk *), - GFP_KERNEL); - if (!clk_table) - return -ENOMEM; - - for (i = 0; i < CGU_NR_CLKS; i++) - clk_table[i] = ERR_PTR(-ENOENT); - - cru->clk_data.clks = clk_table; - cru->clk_data.clk_num = CGU_NR_CLKS; - - rk628_clk_register_plls(cru); - rk628_clk_register_muxes(cru); - rk628_clk_register_gates(cru); - rk628_clk_register_composites(cru); - rk628_reset_controller_register(cru); - - clk_prepare_enable(clk_table[CGU_PCLK_LOGIC]); - - return of_clk_add_provider(dev->of_node, of_clk_src_onecell_get, - &cru->clk_data); -} - -static int rk628_cru_remove(struct platform_device *pdev) -{ - of_clk_del_provider(pdev->dev.of_node); - - return 0; -} - -static const struct of_device_id rk628_cru_of_match[] = { - { .compatible = "rockchip,rk628-cru", }, - {}, -}; -MODULE_DEVICE_TABLE(of, rk628_cru_of_match); - -static struct platform_driver rk628_cru_driver = { - .driver = { - .name = "rk628-cru", - .of_match_table = of_match_ptr(rk628_cru_of_match), - }, - .probe = rk628_cru_probe, - .remove = rk628_cru_remove, -}; -module_platform_driver(rk628_cru_driver); - -MODULE_AUTHOR("Wyon Bi "); -MODULE_DESCRIPTION("Rockchip RK628 CRU driver"); -MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/rockchip/dw-dp.c b/drivers/gpu/drm/rockchip/dw-dp.c index 67b2425b9b66..2a1cd92fd1b8 100644 --- a/drivers/gpu/drm/rockchip/dw-dp.c +++ b/drivers/gpu/drm/rockchip/dw-dp.c @@ -933,6 +933,8 @@ static const struct drm_prop_enum_list color_format_enum_list[] = { { RK_IF_FORMAT_YCBCR444, "ycbcr444" }, { RK_IF_FORMAT_YCBCR422, "ycbcr422" }, { RK_IF_FORMAT_YCBCR420, "ycbcr420" }, + { RK_IF_FORMAT_YCBCR_HQ, "ycbcr_high_subsampling" }, + { RK_IF_FORMAT_YCBCR_LQ, "ycbcr_low_subsampling" }, }; static const struct dw_dp_output_format *dw_dp_get_output_format(u32 bus_format) @@ -1360,7 +1362,7 @@ static int dw_dp_connector_atomic_check(struct drm_connector *conn, } if ((dp_new_state->color_format < RK_IF_FORMAT_RGB) || - (dp_new_state->color_format > RK_IF_FORMAT_YCBCR420)) { + (dp_new_state->color_format > RK_IF_FORMAT_YCBCR_LQ)) { dev_err(dp->dev, "set invalid color format:%d\n", dp_new_state->color_format); return -EINVAL; } @@ -3250,6 +3252,21 @@ static struct edid *dw_dp_bridge_get_edid(struct drm_bridge *bridge, return edid; } +static void dw_dp_swap_fmts(u32 *fmt, int count) +{ + int i; + u32 temp_fmt; + + if (!count) + return; + + for (i = 0; i < count / 2; i++) { + temp_fmt = fmt[i]; + fmt[i] = fmt[count - i - 1]; + fmt[count - i - 1] = temp_fmt; + } +} + static u32 *dw_dp_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, @@ -3314,7 +3331,11 @@ static u32 *dw_dp_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge, continue; if (dp_state->bpc != 0) { - if ((fmt->bpc != dp_state->bpc) || + if (fmt->bpc != dp_state->bpc) + continue; + + if (dp_state->color_format != RK_IF_FORMAT_YCBCR_HQ && + dp_state->color_format != RK_IF_FORMAT_YCBCR_LQ && (fmt->color_format != BIT(dp_state->color_format))) continue; } @@ -3325,6 +3346,9 @@ static u32 *dw_dp_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge, output_fmts[j++] = fmt->bus_format; } + if (dp_state->color_format == RK_IF_FORMAT_YCBCR_LQ) + dw_dp_swap_fmts(output_fmts, j); + *num_output_fmts = j; return output_fmts; diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c index a4ca0737fb1b..66308eca7108 100644 --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c @@ -1443,6 +1443,7 @@ static const struct vop_win_phy rk3366_lit_win0_data = { .enable = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 0), .format = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x7, 1), .interlace_read = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 8), + .csc_mode = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x3, 10), .rb_swap = VOP_REG(RK3366_LIT_WIN0_CTRL0, 0x1, 12), .act_info = VOP_REG(RK3366_LIT_WIN0_ACT_INFO, 0xffffffff, 0), .dsp_info = VOP_REG(RK3366_LIT_WIN0_DSP_INFO, 0xffffffff, 0), @@ -1626,6 +1627,7 @@ static const struct vop_win_phy px30_win23_data = { .nformats = ARRAY_SIZE(formats_win_lite), .gate = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 0), .enable = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 4), + .csc_mode = VOP_REG(RK3368_WIN2_CTRL0, 0x3, 2), .format = VOP_REG(RK3368_WIN2_CTRL0, 0x3, 5), .rb_swap = VOP_REG(RK3368_WIN2_CTRL0, 0x1, 20), .dsp_info = VOP_REG(RK3368_WIN2_DSP_INFO0, 0x0fff0fff, 0), diff --git a/drivers/input/sensors/accel/bma2xx.c b/drivers/input/sensors/accel/bma2xx.c index 9d43124e6f48..23afb475235f 100644 --- a/drivers/input/sensors/accel/bma2xx.c +++ b/drivers/input/sensors/accel/bma2xx.c @@ -2250,7 +2250,7 @@ static const struct i2c_device_id gsensor_bma2x2_id[] = { static struct i2c_driver gsensor_bma2x2_driver = { .probe = gsensor_bma2x2_probe, - .remove = gsensor_bma2x2_remove, + .remove = (void *)gsensor_bma2x2_remove, .shutdown = sensor_shutdown, .id_table = gsensor_bma2x2_id, .driver = { diff --git a/drivers/input/sensors/accel/da215s/da215s.c b/drivers/input/sensors/accel/da215s/da215s.c index bb4691ec05e4..8d35c4e64ae0 100644 --- a/drivers/input/sensors/accel/da215s/da215s.c +++ b/drivers/input/sensors/accel/da215s/da215s.c @@ -325,7 +325,7 @@ static const struct i2c_device_id gsensor_da215s_id[] = { static struct i2c_driver gsensor_da215s_driver = { .probe = gsensor_da215s_probe, - .remove = gsensor_da215s_remove, + .remove = (void *)gsensor_da215s_remove, .shutdown = sensor_shutdown, .id_table = gsensor_da215s_id, .driver = { diff --git a/drivers/input/sensors/accel/da223_cust.c b/drivers/input/sensors/accel/da223_cust.c index dc96560b91e8..4922eb75616f 100644 --- a/drivers/input/sensors/accel/da223_cust.c +++ b/drivers/input/sensors/accel/da223_cust.c @@ -881,7 +881,7 @@ static const struct i2c_device_id gsensor_mir3da_id[] = { static struct i2c_driver gsensor_mir3da_driver = { .probe = gsensor_mir3da_probe, - .remove = gsensor_mir3da_remove, + .remove = (void *)gsensor_mir3da_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mir3da_id, .driver = { diff --git a/drivers/input/sensors/accel/da228e/da228e.c b/drivers/input/sensors/accel/da228e/da228e.c index 5471ce6e5a96..56fd210a2925 100644 --- a/drivers/input/sensors/accel/da228e/da228e.c +++ b/drivers/input/sensors/accel/da228e/da228e.c @@ -326,7 +326,7 @@ static const struct i2c_device_id gsensor_da228e_id[] = { static struct i2c_driver gsensor_da228e_driver = { .probe = gsensor_da228e_probe, - .remove = gsensor_da228e_remove, + .remove = (void *)gsensor_da228e_remove, .shutdown = sensor_shutdown, .id_table = gsensor_da228e_id, .driver = { diff --git a/drivers/input/sensors/accel/dmard10.c b/drivers/input/sensors/accel/dmard10.c index 9323867f0f70..4afbb5c27388 100644 --- a/drivers/input/sensors/accel/dmard10.c +++ b/drivers/input/sensors/accel/dmard10.c @@ -435,7 +435,7 @@ static const struct i2c_device_id gsensor_dmard10_id[] = { static struct i2c_driver gsensor_dmard10_driver = { .probe = gsensor_dmard10_probe, - .remove = gsensor_dmard10_remove, + .remove = (void *)gsensor_dmard10_remove, .shutdown = sensor_shutdown, .id_table = gsensor_dmard10_id, .driver = { diff --git a/drivers/input/sensors/accel/iam20680_acc.c b/drivers/input/sensors/accel/iam20680_acc.c index 25e3a78f3c7b..2ffc74369e3f 100644 --- a/drivers/input/sensors/accel/iam20680_acc.c +++ b/drivers/input/sensors/accel/iam20680_acc.c @@ -221,7 +221,7 @@ static const struct i2c_device_id gsensor_iam20680_id[] = { static struct i2c_driver gsensor_iam20680_driver = { .probe = gsensor_iam20680_probe, - .remove = gsensor_iam20680_remove, + .remove = (void *)gsensor_iam20680_remove, .shutdown = sensor_shutdown, .id_table = gsensor_iam20680_id, .driver = { diff --git a/drivers/input/sensors/accel/icm2060x_acc.c b/drivers/input/sensors/accel/icm2060x_acc.c index 03cc4ddcbf4a..6ac78873f4b3 100644 --- a/drivers/input/sensors/accel/icm2060x_acc.c +++ b/drivers/input/sensors/accel/icm2060x_acc.c @@ -242,7 +242,7 @@ static const struct i2c_device_id gsensor_icm2060x_id[] = { static struct i2c_driver gsensor_icm2060x_driver = { .probe = gsensor_icm2060x_probe, - .remove = gsensor_icm2060x_remove, + .remove = (void *)gsensor_icm2060x_remove, .shutdown = sensor_shutdown, .id_table = gsensor_icm2060x_id, .driver = { diff --git a/drivers/input/sensors/accel/icm4260x_acc.c b/drivers/input/sensors/accel/icm4260x_acc.c index afc67123a844..95817c8e2ff6 100644 --- a/drivers/input/sensors/accel/icm4260x_acc.c +++ b/drivers/input/sensors/accel/icm4260x_acc.c @@ -451,7 +451,7 @@ static const struct i2c_device_id gsensor_icm4260x_id[] = { static struct i2c_driver gsensor_icm4260x_driver = { .probe = gsensor_icm4260x_probe, - .remove = gsensor_icm4260x_remove, + .remove = (void *)gsensor_icm4260x_remove, .shutdown = sensor_shutdown, .id_table = gsensor_icm4260x_id, .driver = { diff --git a/drivers/input/sensors/accel/kxtik.c b/drivers/input/sensors/accel/kxtik.c index bfc934f0bfc8..2bf1bc433c02 100644 --- a/drivers/input/sensors/accel/kxtik.c +++ b/drivers/input/sensors/accel/kxtik.c @@ -341,7 +341,7 @@ static const struct i2c_device_id gsensor_kxtik_id[] = { static struct i2c_driver gsensor_kxtik_driver = { .probe = gsensor_kxtik_probe, - .remove = gsensor_kxtik_remove, + .remove = (void *)gsensor_kxtik_remove, .shutdown = sensor_shutdown, .id_table = gsensor_kxtik_id, .driver = { diff --git a/drivers/input/sensors/accel/kxtj9.c b/drivers/input/sensors/accel/kxtj9.c index 351570387eec..0314686a32a9 100644 --- a/drivers/input/sensors/accel/kxtj9.c +++ b/drivers/input/sensors/accel/kxtj9.c @@ -314,7 +314,7 @@ static const struct i2c_device_id gsensor_kxtj9_id[] = { static struct i2c_driver gsensor_kxtj9_driver = { .probe = gsensor_kxtj9_probe, - .remove = gsensor_kxtj9_remove, + .remove = (void *)gsensor_kxtj9_remove, .shutdown = sensor_shutdown, .id_table = gsensor_kxtj9_id, .driver = { diff --git a/drivers/input/sensors/accel/lis3dh.c b/drivers/input/sensors/accel/lis3dh.c index 8da118e398c8..e4159bac21e4 100644 --- a/drivers/input/sensors/accel/lis3dh.c +++ b/drivers/input/sensors/accel/lis3dh.c @@ -285,7 +285,7 @@ static const struct i2c_device_id gsensor_lis3dh_id[] = { static struct i2c_driver gsensor_lis3dh_driver = { .probe = gsensor_lis3dh_probe, - .remove = gsensor_lis3dh_remove, + .remove = (void *)gsensor_lis3dh_remove, .shutdown = sensor_shutdown, .id_table = gsensor_lis3dh_id, .driver = { diff --git a/drivers/input/sensors/accel/lsm303d.c b/drivers/input/sensors/accel/lsm303d.c index c30c02bd7405..6dedc500ccb0 100644 --- a/drivers/input/sensors/accel/lsm303d.c +++ b/drivers/input/sensors/accel/lsm303d.c @@ -344,7 +344,7 @@ static const struct i2c_device_id gsensor_lsm303d_id[] = { static struct i2c_driver gsensor_lsm303d_driver = { .probe = gsensor_lsm303d_probe, - .remove = gsensor_lsm303d_remove, + .remove = (void *)gsensor_lsm303d_remove, .shutdown = sensor_shutdown, .id_table = gsensor_lsm303d_id, .driver = { diff --git a/drivers/input/sensors/accel/lsm330_acc.c b/drivers/input/sensors/accel/lsm330_acc.c index 926cce0c79d4..3b58e0fcec2a 100644 --- a/drivers/input/sensors/accel/lsm330_acc.c +++ b/drivers/input/sensors/accel/lsm330_acc.c @@ -260,7 +260,7 @@ static const struct i2c_device_id gsensor_lsm330_id[] = { static struct i2c_driver gsensor_lsm330_driver = { .probe = gsensor_lsm330_probe, - .remove = gsensor_lsm330_remove, + .remove = (void *)gsensor_lsm330_remove, .shutdown = sensor_shutdown, .id_table = gsensor_lsm330_id, .driver = { diff --git a/drivers/input/sensors/accel/mc3230.c b/drivers/input/sensors/accel/mc3230.c index 2c35516ebb13..6a41441d9856 100644 --- a/drivers/input/sensors/accel/mc3230.c +++ b/drivers/input/sensors/accel/mc3230.c @@ -1331,7 +1331,7 @@ static const struct i2c_device_id gsensor_mc3230_id[] = { static struct i2c_driver gsensor_mc3230_driver = { .probe = gsensor_mc3230_probe, - .remove = gsensor_mc3230_remove, + .remove = (void *)gsensor_mc3230_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mc3230_id, .driver = { diff --git a/drivers/input/sensors/accel/mma7660.c b/drivers/input/sensors/accel/mma7660.c index e3bb5d783cb2..c3c6a7321a57 100644 --- a/drivers/input/sensors/accel/mma7660.c +++ b/drivers/input/sensors/accel/mma7660.c @@ -240,7 +240,7 @@ static const struct i2c_device_id gsensor_mma7660_id[] = { static struct i2c_driver gsensor_mma7660_driver = { .probe = gsensor_mma7660_probe, - .remove = gsensor_mma7660_remove, + .remove = (void *)gsensor_mma7660_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mma7660_id, .driver = { diff --git a/drivers/input/sensors/accel/mma8452.c b/drivers/input/sensors/accel/mma8452.c index fe829f4b9bb4..c5128edc9e42 100644 --- a/drivers/input/sensors/accel/mma8452.c +++ b/drivers/input/sensors/accel/mma8452.c @@ -406,7 +406,7 @@ static const struct i2c_device_id gsensor_mma8452_id[] = { static struct i2c_driver gsensor_mma8452_driver = { .probe = gsensor_mma8452_probe, - .remove = gsensor_mma8452_remove, + .remove = (void *)gsensor_mma8452_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mma8452_id, .driver = { diff --git a/drivers/input/sensors/accel/mpu6500_acc.c b/drivers/input/sensors/accel/mpu6500_acc.c index 10ffcca59c91..70e8317a63d6 100644 --- a/drivers/input/sensors/accel/mpu6500_acc.c +++ b/drivers/input/sensors/accel/mpu6500_acc.c @@ -282,7 +282,7 @@ static const struct i2c_device_id gsensor_mpu6500_id[] = { static struct i2c_driver gsensor_mpu6500_driver = { .probe = gsensor_mpu6500_probe, - .remove = gsensor_mpu6500_remove, + .remove = (void *)gsensor_mpu6500_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mpu6500_id, .driver = { diff --git a/drivers/input/sensors/accel/mpu6880_acc.c b/drivers/input/sensors/accel/mpu6880_acc.c index ee42fa958e3f..143374d40d9a 100644 --- a/drivers/input/sensors/accel/mpu6880_acc.c +++ b/drivers/input/sensors/accel/mpu6880_acc.c @@ -278,7 +278,7 @@ static const struct i2c_device_id gsensor_mpu6880_id[] = { static struct i2c_driver gsensor_mpu6880_driver = { .probe = gsensor_mpu6880_probe, - .remove = gsensor_mpu6880_remove, + .remove = (void *)gsensor_mpu6880_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mpu6880_id, .driver = { diff --git a/drivers/input/sensors/accel/mxc622x.c b/drivers/input/sensors/accel/mxc622x.c index 5c343c1a0b3c..5b706efdb158 100644 --- a/drivers/input/sensors/accel/mxc622x.c +++ b/drivers/input/sensors/accel/mxc622x.c @@ -266,7 +266,7 @@ static const struct i2c_device_id gsensor_mxc6225_id[] = { static struct i2c_driver gsensor_mxc6225_driver = { .probe = gsensor_mxc6225_probe, - .remove = gsensor_mxc6225_remove, + .remove = (void *)gsensor_mxc6225_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mxc6225_id, .driver = { diff --git a/drivers/input/sensors/accel/mxc6655xa.c b/drivers/input/sensors/accel/mxc6655xa.c old mode 100755 new mode 100644 index 7554e9bfa0e2..89bff0c54e32 --- a/drivers/input/sensors/accel/mxc6655xa.c +++ b/drivers/input/sensors/accel/mxc6655xa.c @@ -244,7 +244,7 @@ static const struct i2c_device_id gsensor_mxc6655_id[] = { static struct i2c_driver gsensor_mxc6655_driver = { .probe = gsensor_mxc6655_probe, - .remove = gsensor_mxc6655_remove, + .remove = (void *)gsensor_mxc6655_remove, .shutdown = sensor_shutdown, .id_table = gsensor_mxc6655_id, .driver = { diff --git a/drivers/input/sensors/accel/sc7660.c b/drivers/input/sensors/accel/sc7660.c index cccf640aa169..362099589866 100644 --- a/drivers/input/sensors/accel/sc7660.c +++ b/drivers/input/sensors/accel/sc7660.c @@ -1637,7 +1637,7 @@ static const struct i2c_device_id gsensor_sc7660_id[] = { static struct i2c_driver gsensor_sc7660_driver = { .probe = gsensor_sc7660_probe, - .remove = gsensor_sc7660_remove, + .remove = (void *)gsensor_sc7660_remove, .shutdown = sensor_shutdown, .id_table = gsensor_sc7660_id, .driver = { diff --git a/drivers/input/sensors/accel/sc7a20.c b/drivers/input/sensors/accel/sc7a20.c index dfa5ffe02e4b..619f6a107811 100644 --- a/drivers/input/sensors/accel/sc7a20.c +++ b/drivers/input/sensors/accel/sc7a20.c @@ -1750,7 +1750,7 @@ static const struct i2c_device_id gsensor_sc7a20_id[] = { static struct i2c_driver gsensor_sc7a20_driver = { .probe = gsensor_sc7a20_probe, - .remove = gsensor_sc7a20_remove, + .remove = (void *)gsensor_sc7a20_remove, .shutdown = sensor_shutdown, .id_table = gsensor_sc7a20_id, .driver = { diff --git a/drivers/input/sensors/accel/sc7a30.c b/drivers/input/sensors/accel/sc7a30.c index 765d7f361266..8aba6e9b5d7e 100644 --- a/drivers/input/sensors/accel/sc7a30.c +++ b/drivers/input/sensors/accel/sc7a30.c @@ -1197,7 +1197,7 @@ static const struct i2c_device_id gsensor_sc7a30_id[] = { static struct i2c_driver gsensor_sc7a30_driver = { .probe = gsensor_sc7a30_probe, - .remove = gsensor_sc7a30_remove, + .remove = (void *)gsensor_sc7a30_remove, .shutdown = sensor_shutdown, .id_table = gsensor_sc7a30_id, .driver = { diff --git a/drivers/input/sensors/accel/stk8baxx.c b/drivers/input/sensors/accel/stk8baxx.c index 915839c9211f..640320f21117 100644 --- a/drivers/input/sensors/accel/stk8baxx.c +++ b/drivers/input/sensors/accel/stk8baxx.c @@ -938,7 +938,7 @@ static const struct i2c_device_id gsensor_stk8baxx_id[] = { static struct i2c_driver gsensor_stk8baxx_driver = { .probe = gsensor_stk8baxx_probe, - .remove = gsensor_stk8baxx_remove, + .remove = (void *)gsensor_stk8baxx_remove, .shutdown = sensor_shutdown, .id_table = gsensor_stk8baxx_id, .driver = { diff --git a/drivers/input/sensors/angle/angle_kxtik.c b/drivers/input/sensors/angle/angle_kxtik.c old mode 100755 new mode 100644 index 303b5d7d9651..c644741c8164 --- a/drivers/input/sensors/angle/angle_kxtik.c +++ b/drivers/input/sensors/angle/angle_kxtik.c @@ -380,7 +380,7 @@ static const struct i2c_device_id angle_kxtik_id[] = { static struct i2c_driver angle_kxtik_driver = { .probe = angle_kxtik_probe, - .remove = angle_kxtik_remove, + .remove = (void *)angle_kxtik_remove, .shutdown = sensor_shutdown, .id_table = angle_kxtik_id, .driver = { diff --git a/drivers/input/sensors/angle/angle_lis3dh.c b/drivers/input/sensors/angle/angle_lis3dh.c old mode 100755 new mode 100644 index e9a1a0831e86..fd8ac101222b --- a/drivers/input/sensors/angle/angle_lis3dh.c +++ b/drivers/input/sensors/angle/angle_lis3dh.c @@ -322,7 +322,7 @@ static const struct i2c_device_id angle_lis3dh_id[] = { static struct i2c_driver angle_lis3dh_driver = { .probe = angle_lis3dh_probe, - .remove = angle_lis3dh_remove, + .remove = (void *)angle_lis3dh_remove, .shutdown = sensor_shutdown, .id_table = angle_lis3dh_id, .driver = { diff --git a/drivers/input/sensors/compass/ak09911.c b/drivers/input/sensors/compass/ak09911.c index 20ff1bcafbf4..f92f7b008a22 100644 --- a/drivers/input/sensors/compass/ak09911.c +++ b/drivers/input/sensors/compass/ak09911.c @@ -649,7 +649,7 @@ static const struct i2c_device_id compass_akm09911_id[] = { static struct i2c_driver compass_akm09911_driver = { .probe = compass_akm09911_probe, - .remove = compass_akm09911_remove, + .remove = (void *)compass_akm09911_remove, .shutdown = sensor_shutdown, .id_table = compass_akm09911_id, .driver = { diff --git a/drivers/input/sensors/compass/ak09918.c b/drivers/input/sensors/compass/ak09918.c index 27e13d03f05b..ef223314cd81 100644 --- a/drivers/input/sensors/compass/ak09918.c +++ b/drivers/input/sensors/compass/ak09918.c @@ -674,7 +674,7 @@ static const struct i2c_device_id compass_akm09918_id[] = { static struct i2c_driver compass_akm09918_driver = { .probe = compass_akm09918_probe, - .remove = compass_akm09918_remove, + .remove = (void *)compass_akm09918_remove, .shutdown = sensor_shutdown, .id_table = compass_akm09918_id, .driver = { diff --git a/drivers/input/sensors/compass/ak8963.c b/drivers/input/sensors/compass/ak8963.c index d1baee5f70aa..3fec968b3b5d 100644 --- a/drivers/input/sensors/compass/ak8963.c +++ b/drivers/input/sensors/compass/ak8963.c @@ -696,7 +696,7 @@ static const struct i2c_device_id compass_akm8963_id[] = { static struct i2c_driver compass_akm8963_driver = { .probe = compass_akm8963_probe, - .remove = compass_akm8963_remove, + .remove = (void *)compass_akm8963_remove, .shutdown = sensor_shutdown, .id_table = compass_akm8963_id, .driver = { diff --git a/drivers/input/sensors/compass/ak8975.c b/drivers/input/sensors/compass/ak8975.c index f8921c01b955..3b5742436584 100644 --- a/drivers/input/sensors/compass/ak8975.c +++ b/drivers/input/sensors/compass/ak8975.c @@ -630,7 +630,7 @@ static const struct i2c_device_id compass_akm8975_id[] = { static struct i2c_driver compass_akm8975_driver = { .probe = compass_akm8975_probe, - .remove = compass_akm8975_remove, + .remove = (void *)compass_akm8975_remove, .shutdown = sensor_shutdown, .id_table = compass_akm8975_id, .driver = { diff --git a/drivers/input/sensors/gyro/ewtsa.c b/drivers/input/sensors/gyro/ewtsa.c index 82a7947afb0b..9faa580bc028 100644 --- a/drivers/input/sensors/gyro/ewtsa.c +++ b/drivers/input/sensors/gyro/ewtsa.c @@ -443,7 +443,7 @@ static const struct i2c_device_id gyro_ewtsa_id[] = { static struct i2c_driver gyro_ewtsa_driver = { .probe = gyro_ewtsa_probe, - .remove = gyro_ewtsa_remove, + .remove = (void *)gyro_ewtsa_remove, .shutdown = sensor_shutdown, .id_table = gyro_ewtsa_id, .driver = { diff --git a/drivers/input/sensors/gyro/iam20680_gyro.c b/drivers/input/sensors/gyro/iam20680_gyro.c index 6e05ea8955fa..2c366d486855 100644 --- a/drivers/input/sensors/gyro/iam20680_gyro.c +++ b/drivers/input/sensors/gyro/iam20680_gyro.c @@ -176,7 +176,7 @@ static const struct i2c_device_id gyro_iam20680_id[] = { static struct i2c_driver gyro_iam20680_driver = { .probe = gyro_iam20680_probe, - .remove = gyro_iam20680_remove, + .remove = (void *)gyro_iam20680_remove, .shutdown = sensor_shutdown, .id_table = gyro_iam20680_id, .driver = { diff --git a/drivers/input/sensors/gyro/icm2060x_gyro.c b/drivers/input/sensors/gyro/icm2060x_gyro.c index 251c068d4c3b..e57f85e1051d 100644 --- a/drivers/input/sensors/gyro/icm2060x_gyro.c +++ b/drivers/input/sensors/gyro/icm2060x_gyro.c @@ -186,7 +186,7 @@ static const struct i2c_device_id gyro_icm2060x_id[] = { static struct i2c_driver gyro_icm2060x_driver = { .probe = gyro_icm2060x_probe, - .remove = gyro_icm2060x_remove, + .remove = (void *)gyro_icm2060x_remove, .shutdown = sensor_shutdown, .id_table = gyro_icm2060x_id, .driver = { diff --git a/drivers/input/sensors/gyro/icm4260x_gyro.c b/drivers/input/sensors/gyro/icm4260x_gyro.c index e66729d25116..c3a8f66b04fc 100644 --- a/drivers/input/sensors/gyro/icm4260x_gyro.c +++ b/drivers/input/sensors/gyro/icm4260x_gyro.c @@ -182,7 +182,7 @@ static const struct i2c_device_id gyro_icm4260x_id[] = { static struct i2c_driver gyro_icm4260x_driver = { .probe = gyro_icm4260x_probe, - .remove = gyro_icm4260x_remove, + .remove = (void *)gyro_icm4260x_remove, .shutdown = sensor_shutdown, .id_table = gyro_icm4260x_id, .driver = { diff --git a/drivers/input/sensors/gyro/l3g20d.c b/drivers/input/sensors/gyro/l3g20d.c index ebe7f7940e8d..9f3f536b8d73 100644 --- a/drivers/input/sensors/gyro/l3g20d.c +++ b/drivers/input/sensors/gyro/l3g20d.c @@ -239,7 +239,7 @@ static const struct i2c_device_id gyro_l3g20d_id[] = { static struct i2c_driver gyro_l3g20d_driver = { .probe = gyro_l3g20d_probe, - .remove = gyro_l3g20d_remove, + .remove = (void *)gyro_l3g20d_remove, .shutdown = sensor_shutdown, .id_table = gyro_l3g20d_id, .driver = { diff --git a/drivers/input/sensors/gyro/l3g4200d.c b/drivers/input/sensors/gyro/l3g4200d.c index 13ea48dd87cd..9405b0b60089 100644 --- a/drivers/input/sensors/gyro/l3g4200d.c +++ b/drivers/input/sensors/gyro/l3g4200d.c @@ -239,7 +239,7 @@ static const struct i2c_device_id gyro_l3g4200d_id[] = { static struct i2c_driver gyro_l3g4200d_driver = { .probe = gyro_l3g4200d_probe, - .remove = gyro_l3g4200d_remove, + .remove = (void *)gyro_l3g4200d_remove, .shutdown = sensor_shutdown, .id_table = gyro_l3g4200d_id, .driver = { diff --git a/drivers/input/sensors/gyro/lsm330_gyro.c b/drivers/input/sensors/gyro/lsm330_gyro.c index 09b102f585d9..ad4324f0c5c7 100644 --- a/drivers/input/sensors/gyro/lsm330_gyro.c +++ b/drivers/input/sensors/gyro/lsm330_gyro.c @@ -244,7 +244,7 @@ static const struct i2c_device_id gyro_lsm330_id[] = { static struct i2c_driver gyro_lsm330_driver = { .probe = gyro_lsm330_probe, - .remove = gyro_lsm330_remove, + .remove = (void *)gyro_lsm330_remove, .shutdown = sensor_shutdown, .id_table = gyro_lsm330_id, .driver = { diff --git a/drivers/input/sensors/gyro/mpu6500_gyro.c b/drivers/input/sensors/gyro/mpu6500_gyro.c index b14acd67c4a4..1fe350a21daf 100644 --- a/drivers/input/sensors/gyro/mpu6500_gyro.c +++ b/drivers/input/sensors/gyro/mpu6500_gyro.c @@ -186,7 +186,7 @@ static const struct i2c_device_id gyro_mpu6500_id[] = { static struct i2c_driver gyro_mpu6500_driver = { .probe = gyro_mpu6500_probe, - .remove = gyro_mpu6500_remove, + .remove = (void *)gyro_mpu6500_remove, .shutdown = sensor_shutdown, .id_table = gyro_mpu6500_id, .driver = { diff --git a/drivers/input/sensors/gyro/mpu6880_gyro.c b/drivers/input/sensors/gyro/mpu6880_gyro.c index bd10dc94bab2..581caf8cef3d 100644 --- a/drivers/input/sensors/gyro/mpu6880_gyro.c +++ b/drivers/input/sensors/gyro/mpu6880_gyro.c @@ -186,7 +186,7 @@ static const struct i2c_device_id gyro_mpu6880_id[] = { static struct i2c_driver gyro_mpu6880_driver = { .probe = gyro_mpu6880_probe, - .remove = gyro_mpu6880_remove, + .remove = (void *)gyro_mpu6880_remove, .shutdown = sensor_shutdown, .id_table = gyro_mpu6880_id, .driver = { diff --git a/drivers/input/sensors/hall/och165t_hall.c b/drivers/input/sensors/hall/och165t_hall.c index 6e26c91ce81d..944398054cae 100644 --- a/drivers/input/sensors/hall/och165t_hall.c +++ b/drivers/input/sensors/hall/och165t_hall.c @@ -141,7 +141,7 @@ static const struct i2c_device_id hall_och165t_id[] = { static struct i2c_driver hall_och165t_driver = { .probe = hall_och165t_probe, - .remove = hall_och165t_remove, + .remove = (void *)hall_och165t_remove, .shutdown = sensor_shutdown, .id_table = hall_och165t_id, .driver = { diff --git a/drivers/input/sensors/lsensor/cm3217.c b/drivers/input/sensors/lsensor/cm3217.c old mode 100755 new mode 100644 index 1931c332ff4f..8e097279b318 --- a/drivers/input/sensors/lsensor/cm3217.c +++ b/drivers/input/sensors/lsensor/cm3217.c @@ -220,7 +220,7 @@ static const struct i2c_device_id light_cm3217_id[] = { static struct i2c_driver light_cm3217_driver = { .probe = light_cm3217_probe, - .remove = light_cm3217_remove, + .remove = (void *)light_cm3217_remove, .shutdown = sensor_shutdown, .id_table = light_cm3217_id, .driver = { diff --git a/drivers/input/sensors/lsensor/cm3218.c b/drivers/input/sensors/lsensor/cm3218.c index cb9be2915dda..0ccd0148af20 100644 --- a/drivers/input/sensors/lsensor/cm3218.c +++ b/drivers/input/sensors/lsensor/cm3218.c @@ -397,7 +397,7 @@ static const struct i2c_device_id light_cm3218_id[] = { static struct i2c_driver light_cm3218_driver = { .probe = light_cm3218_probe, - .remove = light_cm3218_remove, + .remove = (void *)light_cm3218_remove, .shutdown = sensor_shutdown, .id_table = light_cm3218_id, .driver = { diff --git a/drivers/input/sensors/lsensor/cm3232.c b/drivers/input/sensors/lsensor/cm3232.c old mode 100755 new mode 100644 index ef84910ce8a7..48d5c5586046 --- a/drivers/input/sensors/lsensor/cm3232.c +++ b/drivers/input/sensors/lsensor/cm3232.c @@ -227,7 +227,7 @@ static const struct i2c_device_id light_cm3232_id[] = { static struct i2c_driver light_cm3232_driver = { .probe = light_cm3232_probe, - .remove = light_cm3232_remove, + .remove = (void *)light_cm3232_remove, .shutdown = sensor_shutdown, .id_table = light_cm3232_id, .driver = { diff --git a/drivers/input/sensors/lsensor/isl29023.c b/drivers/input/sensors/lsensor/isl29023.c old mode 100755 new mode 100644 index 4367638ce4fc..8d5afcc612d9 --- a/drivers/input/sensors/lsensor/isl29023.c +++ b/drivers/input/sensors/lsensor/isl29023.c @@ -255,7 +255,7 @@ static const struct i2c_device_id light_isl29023_id[] = { static struct i2c_driver light_isl29023_driver = { .probe = light_isl29023_probe, - .remove = light_isl29023_remove, + .remove = (void *)light_isl29023_remove, .shutdown = sensor_shutdown, .id_table = light_isl29023_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_al3006.c b/drivers/input/sensors/lsensor/ls_al3006.c old mode 100755 new mode 100644 index d1d24db68d10..9aa350d3aada --- a/drivers/input/sensors/lsensor/ls_al3006.c +++ b/drivers/input/sensors/lsensor/ls_al3006.c @@ -282,7 +282,7 @@ static const struct i2c_device_id light_al3006_id[] = { static struct i2c_driver light_al3006_driver = { .probe = light_al3006_probe, - .remove = light_al3006_remove, + .remove = (void *)light_al3006_remove, .shutdown = sensor_shutdown, .id_table = light_al3006_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_ap321xx.c b/drivers/input/sensors/lsensor/ls_ap321xx.c index ac928ca7b469..9504dc3a3e28 100644 --- a/drivers/input/sensors/lsensor/ls_ap321xx.c +++ b/drivers/input/sensors/lsensor/ls_ap321xx.c @@ -395,7 +395,7 @@ static const struct i2c_device_id light_ap321xx_id[] = { static struct i2c_driver light_ap321xx_driver = { .probe = light_ap321xx_probe, - .remove = light_ap321xx_remove, + .remove = (void *)light_ap321xx_remove, .shutdown = sensor_shutdown, .id_table = light_ap321xx_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_em3071x.c b/drivers/input/sensors/lsensor/ls_em3071x.c index d32d4196b16f..6b03fc4a4241 100644 --- a/drivers/input/sensors/lsensor/ls_em3071x.c +++ b/drivers/input/sensors/lsensor/ls_em3071x.c @@ -265,7 +265,7 @@ static const struct i2c_device_id light_em3071x_id[] = { static struct i2c_driver light_em3071x_driver = { .probe = light_em3071x_probe, - .remove = light_em3071x_remove, + .remove = (void *)light_em3071x_remove, .shutdown = sensor_shutdown, .id_table = light_em3071x_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_stk3171.c b/drivers/input/sensors/lsensor/ls_stk3171.c old mode 100755 new mode 100644 index 5c3f3ac0bf34..50339d97f81f --- a/drivers/input/sensors/lsensor/ls_stk3171.c +++ b/drivers/input/sensors/lsensor/ls_stk3171.c @@ -301,7 +301,7 @@ static const struct i2c_device_id light_stk3171_id[] = { static struct i2c_driver light_stk3171_driver = { .probe = light_stk3171_probe, - .remove = light_stk3171_remove, + .remove = (void *)light_stk3171_remove, .shutdown = sensor_shutdown, .id_table = light_stk3171_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_stk3332.c b/drivers/input/sensors/lsensor/ls_stk3332.c index 188114909b0e..8d8564cf0bf3 100644 --- a/drivers/input/sensors/lsensor/ls_stk3332.c +++ b/drivers/input/sensors/lsensor/ls_stk3332.c @@ -354,7 +354,7 @@ static const struct i2c_device_id light_stk3332_id[] = { static struct i2c_driver light_stk3332_driver = { .probe = light_stk3332_probe, - .remove = light_stk3332_remove, + .remove = (void *)light_stk3332_remove, .shutdown = sensor_shutdown, .id_table = light_stk3332_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_stk3410.c b/drivers/input/sensors/lsensor/ls_stk3410.c index 6800a2d37a88..b74724645566 100644 --- a/drivers/input/sensors/lsensor/ls_stk3410.c +++ b/drivers/input/sensors/lsensor/ls_stk3410.c @@ -356,7 +356,7 @@ static const struct i2c_device_id light_stk3410_id[] = { static struct i2c_driver light_stk3410_driver = { .probe = light_stk3410_probe, - .remove = light_stk3410_remove, + .remove = (void *)light_stk3410_remove, .shutdown = sensor_shutdown, .id_table = light_stk3410_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_ucs14620.c b/drivers/input/sensors/lsensor/ls_ucs14620.c index aaf85487c53b..e5f88642bfea 100644 --- a/drivers/input/sensors/lsensor/ls_ucs14620.c +++ b/drivers/input/sensors/lsensor/ls_ucs14620.c @@ -344,7 +344,7 @@ static const struct i2c_device_id light_ucs14620_id[] = { static struct i2c_driver light_ucs14620_driver = { .probe = light_ucs14620_probe, - .remove = light_ucs14620_remove, + .remove = (void *)light_ucs14620_remove, .shutdown = sensor_shutdown, .id_table = light_ucs14620_id, .driver = { diff --git a/drivers/input/sensors/lsensor/ls_us5152.c b/drivers/input/sensors/lsensor/ls_us5152.c index 2ca2b0959eaa..17cef2b33712 100644 --- a/drivers/input/sensors/lsensor/ls_us5152.c +++ b/drivers/input/sensors/lsensor/ls_us5152.c @@ -420,7 +420,7 @@ static const struct i2c_device_id light_us5152_id[] = { static struct i2c_driver light_us5152_driver = { .probe = light_us5152_probe, - .remove = light_us5152_remove, + .remove = (void *)light_us5152_remove, .shutdown = sensor_shutdown, .id_table = light_us5152_id, .driver = { diff --git a/drivers/input/sensors/pressure/pr_ms5607.c b/drivers/input/sensors/pressure/pr_ms5607.c old mode 100755 new mode 100644 index fc4fba585cb5..fa88c6f60fd6 --- a/drivers/input/sensors/pressure/pr_ms5607.c +++ b/drivers/input/sensors/pressure/pr_ms5607.c @@ -279,7 +279,7 @@ static const struct i2c_device_id pressure_ms5607_id[] = { static struct i2c_driver pressure_ms5607_driver = { .probe = pressure_ms5607_probe, - .remove = pressure_ms5607_remove, + .remove = (void *)pressure_ms5607_remove, .shutdown = sensor_shutdown, .id_table = pressure_ms5607_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_al3006.c b/drivers/input/sensors/psensor/ps_al3006.c old mode 100755 new mode 100644 index cd05bb0ef1ae..148f408bb97b --- a/drivers/input/sensors/psensor/ps_al3006.c +++ b/drivers/input/sensors/psensor/ps_al3006.c @@ -243,7 +243,7 @@ static const struct i2c_device_id proximity_al3006_id[] = { static struct i2c_driver proximity_al3006_driver = { .probe = proximity_al3006_probe, - .remove = proximity_al3006_remove, + .remove = (void *)proximity_al3006_remove, .shutdown = sensor_shutdown, .id_table = proximity_al3006_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_ap321xx.c b/drivers/input/sensors/psensor/ps_ap321xx.c index 00bf35886985..3fcd966b8e50 100644 --- a/drivers/input/sensors/psensor/ps_ap321xx.c +++ b/drivers/input/sensors/psensor/ps_ap321xx.c @@ -307,7 +307,7 @@ static const struct i2c_device_id proximity_ap321xx_id[] = { static struct i2c_driver proximity_ap321xx_driver = { .probe = proximity_ap321xx_probe, - .remove = proximity_ap321xx_remove, + .remove = (void *)proximity_ap321xx_remove, .shutdown = sensor_shutdown, .id_table = proximity_ap321xx_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_em3071x.c b/drivers/input/sensors/psensor/ps_em3071x.c index ee339d5c2786..d72dd839597a 100644 --- a/drivers/input/sensors/psensor/ps_em3071x.c +++ b/drivers/input/sensors/psensor/ps_em3071x.c @@ -262,7 +262,7 @@ static const struct i2c_device_id proximity_em3071x_id[] = { static struct i2c_driver proximity_em3071x_driver = { .probe = proximity_em3071x_probe, - .remove = proximity_em3071x_remove, + .remove = (void *)proximity_em3071x_remove, .shutdown = sensor_shutdown, .id_table = proximity_em3071x_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_stk3171.c b/drivers/input/sensors/psensor/ps_stk3171.c old mode 100755 new mode 100644 index 6069b7c5ccaf..8733918d47cf --- a/drivers/input/sensors/psensor/ps_stk3171.c +++ b/drivers/input/sensors/psensor/ps_stk3171.c @@ -250,7 +250,7 @@ static const struct i2c_device_id proximity_stk3171_id[] = { static struct i2c_driver proximity_stk3171_driver = { .probe = proximity_stk3171_probe, - .remove = proximity_stk3171_remove, + .remove = (void *)proximity_stk3171_remove, .shutdown = sensor_shutdown, .id_table = proximity_stk3171_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_stk3332.c b/drivers/input/sensors/psensor/ps_stk3332.c index 5c4d46ee1e75..15e3bddb3d17 100644 --- a/drivers/input/sensors/psensor/ps_stk3332.c +++ b/drivers/input/sensors/psensor/ps_stk3332.c @@ -365,7 +365,7 @@ static const struct i2c_device_id proximity_stk3332_id[] = { static struct i2c_driver proximity_stk3332_driver = { .probe = proximity_stk3332_probe, - .remove = proximity_stk3332_remove, + .remove = (void *)proximity_stk3332_remove, .shutdown = sensor_shutdown, .id_table = proximity_stk3332_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_stk3410.c b/drivers/input/sensors/psensor/ps_stk3410.c index 100b61ea1514..dcce3057b830 100644 --- a/drivers/input/sensors/psensor/ps_stk3410.c +++ b/drivers/input/sensors/psensor/ps_stk3410.c @@ -359,7 +359,7 @@ static const struct i2c_device_id proximity_stk3410_id[] = { static struct i2c_driver proximity_stk3410_driver = { .probe = proximity_stk3410_probe, - .remove = proximity_stk3410_remove, + .remove = (void *)proximity_stk3410_remove, .shutdown = sensor_shutdown, .id_table = proximity_stk3410_id, .driver = { diff --git a/drivers/input/sensors/psensor/ps_ucs14620.c b/drivers/input/sensors/psensor/ps_ucs14620.c index ca903b40a9b1..077688dd53f3 100644 --- a/drivers/input/sensors/psensor/ps_ucs14620.c +++ b/drivers/input/sensors/psensor/ps_ucs14620.c @@ -343,7 +343,7 @@ static const struct i2c_device_id proximity_ucs14620_id[] = { static struct i2c_driver proximity_ucs14620_driver = { .probe = proximity_ucs14620_probe, - .remove = proximity_ucs14620_remove, + .remove = (void *)proximity_ucs14620_remove, .shutdown = sensor_shutdown, .id_table = proximity_ucs14620_id, .driver = { diff --git a/drivers/input/sensors/sensor-i2c.c b/drivers/input/sensors/sensor-i2c.c old mode 100755 new mode 100644 diff --git a/drivers/input/sensors/temperature/tmp_ms5607.c b/drivers/input/sensors/temperature/tmp_ms5607.c old mode 100755 new mode 100644 index 3e78ca92c74d..10bcecb09d1d --- a/drivers/input/sensors/temperature/tmp_ms5607.c +++ b/drivers/input/sensors/temperature/tmp_ms5607.c @@ -296,7 +296,7 @@ static const struct i2c_device_id temperature_ms5607_id[] = { static struct i2c_driver temperature_ms5607_driver = { .probe = temperature_ms5607_probe, - .remove = temperature_ms5607_remove, + .remove = (void *)temperature_ms5607_remove, .shutdown = sensor_shutdown, .id_table = temperature_ms5607_id, .driver = { diff --git a/drivers/media/i2c/imx415.c b/drivers/media/i2c/imx415.c index 14d962e2c7a3..67a875593c4e 100644 --- a/drivers/media/i2c/imx415.c +++ b/drivers/media/i2c/imx415.c @@ -2457,15 +2457,15 @@ int __imx415_power_on(struct imx415 *imx415) if (imx415->is_thunderboot) return 0; - /* At least 20us between XCLR and I2C communication */ - usleep_range(20*1000, 30*1000); - ret = regulator_bulk_enable(IMX415_NUM_SUPPLIES, imx415->supplies); if (ret < 0) { dev_err(dev, "Failed to enable regulators\n"); goto err_pinctrl; } + /* At least 20us between XCLR and I2C communication */ + usleep_range(20*1000, 30*1000); + return 0; err_pinctrl: diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_api.h b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_api.h index e7ef7ec02b02..b9d2ca535644 100644 --- a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_api.h +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_api.h @@ -13,6 +13,7 @@ #include #include +#include "maxim2c_compact.h" #include "maxim2c_i2c.h" #include "maxim2c_link.h" #include "maxim2c_video_pipe.h" diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_compact.h b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_compact.h new file mode 100644 index 000000000000..45a9e272c31b --- /dev/null +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_compact.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2024 Rockchip Electronics Co., Ltd. + * + */ +#ifndef __MAXIM2C_COMPACT_H__ +#define __MAXIM2C_COMPACT_H__ + +#include + +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE +enum rkmodule_pad_type { + PAD0, + PAD1, + PAD2, + PAD3, + PAD_MAX, +}; + +#ifndef fallthrough +#define fallthrough +#endif + +#ifndef read_poll_timeout +#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, \ + sleep_before_read, args...) \ +{ \ + u64 __timeout_us = (timeout_us); \ + unsigned long __sleep_us = (sleep_us); \ + ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \ + might_sleep_if((__sleep_us) != 0); \ + if (sleep_before_read && __sleep_us) \ + usleep_range((__sleep_us >> 2) + 1, __sleep_us); \ + for (;;) { \ + (val) = op(args); \ + if (cond) \ + break; \ + if (__timeout_us && \ + ktime_compare(ktime_get(), __timeout) > 0) { \ + (val) = op(args); \ + break; \ + } \ + if (__sleep_us) \ + usleep_range((__sleep_us >> 2) + 1, __sleep_us); \ + cpu_relax(); \ + } \ + (cond) ? 0 : -ETIMEDOUT; \ +} +#endif /* read_poll_timeout */ +#endif /* LINUX_VERSION_CODE */ + +#endif /* __MAXIM2C_COMPACT_H__ */ diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_drv.c b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_drv.c index 1a86997423db..fa35f8915abd 100644 --- a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_drv.c +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_drv.c @@ -24,6 +24,10 @@ * 2. remote serializer is abstracted as v4l2 subdev * 3. remote camera is bound to remote serializer * + * V3.01.00 + * 1. fixed remote camera s_stream and s_power api return error. + * 2. compatible with kernel v4.19/v5.10/v6.1 + * */ #include #include @@ -51,7 +55,7 @@ #include "maxim2c_api.h" -#define DRIVER_VERSION KERNEL_VERSION(3, 0x00, 0x00) +#define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) #define MAXIM2C_XVCLK_FREQ 25000000 @@ -725,7 +729,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int maxim2c_remove(struct i2c_client *client) +#else +static void maxim2c_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); @@ -742,8 +750,9 @@ static int maxim2c_remove(struct i2c_client *client) if (!pm_runtime_status_suspended(&client->dev)) maxim2c_device_power_off(maxim2c); pm_runtime_set_suspended(&client->dev); - +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id maxim2c_of_match[] = { diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_pattern.c b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_pattern.c index 22cabb854475..8bbf1ae8cee6 100644 --- a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_pattern.c +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_pattern.c @@ -36,7 +36,11 @@ static const struct maxim2c_mode maxim2c_pattern_mode = { .link_freq_idx = 24, .bus_fmt = MEDIA_BUS_FMT_RGB888_1X24, .bpp = 24, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + .vc[PAD0] = 0, +#else .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, +#endif }; int maxim2c_pattern_enable(maxim2c_t *maxim2c, bool enable) diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_remote.c b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_remote.c index 5bb3d5f18197..5b93ebd9ae79 100644 --- a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_remote.c +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_remote.c @@ -24,7 +24,7 @@ int maxim2c_remote_devices_power(maxim2c_t *maxim2c, u8 link_mask, int on) struct device_node *remote_cam_node = NULL; struct i2c_client *remote_cam_client = NULL; struct v4l2_subdev *remote_cam_sd = NULL; - int ret = 0, i = 0; + int ret = 0, error = 0, i = 0; dev_dbg(dev, "%s: link mask = 0x%02x, on = %d\n", __func__, link_mask, on); @@ -57,7 +57,11 @@ int maxim2c_remote_devices_power(maxim2c_t *maxim2c, u8 link_mask, int on) } dev_info(dev, "link id = %d remote camera power = %d\n", i, on); - ret |= v4l2_subdev_call(remote_cam_sd, core, s_power, on); + error = v4l2_subdev_call(remote_cam_sd, core, s_power, on); + if (error < 0) { + ret |= error; + dev_err(dev, "link id = %d remote camera power error = %d\n", i, error); + } } return ret; @@ -72,7 +76,7 @@ int maxim2c_remote_devices_s_stream(maxim2c_t *maxim2c, u8 link_mask, int enable struct device_node *remote_cam_node = NULL; struct i2c_client *remote_cam_client = NULL; struct v4l2_subdev *remote_cam_sd = NULL; - int ret = 0, i = 0; + int ret = 0, error = 0, i = 0; dev_dbg(dev, "%s: link mask = 0x%02x, enable = %d\n", __func__, link_mask, enable); @@ -105,7 +109,11 @@ int maxim2c_remote_devices_s_stream(maxim2c_t *maxim2c, u8 link_mask, int enable } dev_info(dev, "link id = %d remote camera s_stream = %d\n", i, enable); - ret |= v4l2_subdev_call(remote_cam_sd, video, s_stream, enable); + error = v4l2_subdev_call(remote_cam_sd, video, s_stream, enable); + if (error < 0) { + ret |= error; + dev_err(dev, "link id = %d remote camera s_stream error = %d\n", i, error); + } } return ret; diff --git a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_v4l2.c b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_v4l2.c index 45797000fd06..49c499453eaf 100644 --- a/drivers/media/i2c/maxim/local/maxim2c/maxim2c_v4l2.c +++ b/drivers/media/i2c/maxim/local/maxim2c/maxim2c_v4l2.c @@ -66,10 +66,17 @@ static const struct maxim2c_mode maxim2c_def_mode = { .link_freq_idx = 15, .bus_fmt = MEDIA_BUS_FMT_UYVY8_2X8, .bpp = 16, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + .vc[PAD0] = 0, + .vc[PAD1] = 1, + .vc[PAD2] = 2, + .vc[PAD3] = 3, +#else .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, .vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_1, .vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_2, .vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_3, +#endif /* LINUX_VERSION_CODE */ }; static struct rkmodule_csi_dphy_param rk3588_dcphy_param = { @@ -212,8 +219,13 @@ static int maxim2c_support_mode_init(maxim2c_t *maxim2c) static int maxim2c_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct maxim2c_mode *def_mode = &maxim2c->supported_mode; mutex_lock(&maxim2c->mutex); @@ -598,7 +610,11 @@ static int maxim2c_s_stream(struct v4l2_subdev *sd, int on) goto unlock_and_return; if (on) { +#if KERNEL_VERSION(5, 5, 0) <= LINUX_VERSION_CODE ret = pm_runtime_resume_and_get(&client->dev); +#else + ret = pm_runtime_get_sync(&client->dev); +#endif if (ret < 0) goto unlock_and_return; @@ -635,9 +651,15 @@ static int maxim2c_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int maxim2c_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); const struct maxim2c_mode *mode = maxim2c->cur_mode; @@ -649,9 +671,15 @@ static int maxim2c_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int maxim2c_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); @@ -669,10 +697,15 @@ static int maxim2c_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } -static int -maxim2c_enum_frame_interval(struct v4l2_subdev *sd, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else +static int maxim2c_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); @@ -687,9 +720,15 @@ maxim2c_enum_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int maxim2c_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); const struct maxim2c_mode *mode = maxim2c->cur_mode; @@ -697,7 +736,11 @@ static int maxim2c_get_fmt(struct v4l2_subdev *sd, mutex_lock(&maxim2c->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&maxim2c->mutex); return -ENOTTY; @@ -717,9 +760,15 @@ static int maxim2c_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int maxim2c_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); struct device *dev = &maxim2c->client->dev; @@ -737,7 +786,11 @@ static int maxim2c_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&maxim2c->mutex); return -ENOTTY; @@ -769,9 +822,15 @@ static int maxim2c_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int maxim2c_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); @@ -786,6 +845,18 @@ static int maxim2c_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim2c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct maxim2c *maxim2c = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = maxim2c->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int maxim2c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -804,6 +875,26 @@ static int maxim2c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int maxim2c_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + maxim2c_t *maxim2c = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = maxim2c->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops maxim2c_internal_ops = { @@ -822,6 +913,9 @@ static const struct v4l2_subdev_core_ops maxim2c_core_ops = { static const struct v4l2_subdev_video_ops maxim2c_video_ops = { .s_stream = maxim2c_s_stream, .g_frame_interval = maxim2c_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = maxim2c_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops maxim2c_pad_ops = { @@ -831,7 +925,9 @@ static const struct v4l2_subdev_pad_ops maxim2c_pad_ops = { .get_fmt = maxim2c_get_fmt, .set_fmt = maxim2c_set_fmt, .get_selection = maxim2c_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = maxim2c_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops maxim2c_subdev_ops = { @@ -960,7 +1056,11 @@ int maxim2c_v4l2_subdev_init(maxim2c_t *maxim2c) maxim2c->module_index, facing, MAXIM2C_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_api.h b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_api.h index 8d7505449b6a..31a1fc6b20c6 100644 --- a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_api.h +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_api.h @@ -13,6 +13,7 @@ #include #include +#include "maxim4c_compact.h" #include "maxim4c_i2c.h" #include "maxim4c_link.h" #include "maxim4c_video_pipe.h" diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_compact.h b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_compact.h new file mode 100644 index 000000000000..18654290518b --- /dev/null +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_compact.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2024 Rockchip Electronics Co., Ltd. + * + */ +#ifndef __MAXIM4C_COMPACT_H__ +#define __MAXIM4C_COMPACT_H__ + +#include + +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE +enum rkmodule_pad_type { + PAD0, + PAD1, + PAD2, + PAD3, + PAD_MAX, +}; + +#ifndef fallthrough +#define fallthrough +#endif + +#ifndef read_poll_timeout +#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, \ + sleep_before_read, args...) \ +({ \ + u64 __timeout_us = (timeout_us); \ + unsigned long __sleep_us = (sleep_us); \ + ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \ + might_sleep_if((__sleep_us) != 0); \ + if (sleep_before_read && __sleep_us) \ + usleep_range((__sleep_us >> 2) + 1, __sleep_us); \ + for (;;) { \ + (val) = op(args); \ + if (cond) \ + break; \ + if (__timeout_us && \ + ktime_compare(ktime_get(), __timeout) > 0) { \ + (val) = op(args); \ + break; \ + } \ + if (__sleep_us) \ + usleep_range((__sleep_us >> 2) + 1, __sleep_us); \ + cpu_relax(); \ + } \ + (cond) ? 0 : -ETIMEDOUT; \ +}) +#endif /* read_poll_timeout */ +#endif /* LINUX_VERSION_CODE */ + +#endif /* __MAXIM4C_COMPACT_H__ */ diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_drv.c b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_drv.c index ca8ee9a1366c..fceea4605700 100644 --- a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_drv.c +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_drv.c @@ -47,6 +47,10 @@ * 2. remote serializer is abstracted as v4l2 subdev * 3. remote camera is bound to remote serializer * + * V3.01.00 + * 1. fixed remote camera s_stream and s_power api return error. + * 2. compatible with kernel v4.19/v5.10/v6.1 + * */ #include #include @@ -74,7 +78,7 @@ #include "maxim4c_api.h" -#define DRIVER_VERSION KERNEL_VERSION(3, 0x00, 0x00) +#define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) #define MAXIM4C_XVCLK_FREQ 25000000 @@ -799,7 +803,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int maxim4c_remove(struct i2c_client *client) +#else +static void maxim4c_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); @@ -818,8 +826,9 @@ static int maxim4c_remove(struct i2c_client *client) if (!pm_runtime_status_suspended(&client->dev)) maxim4c_device_power_off(maxim4c); pm_runtime_set_suspended(&client->dev); - +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id maxim4c_of_match[] = { diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_pattern.c b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_pattern.c index d59e077efa3b..25400b074245 100644 --- a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_pattern.c +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_pattern.c @@ -42,7 +42,11 @@ static const struct maxim4c_mode maxim4c_pattern_mode = { .link_freq_idx = 15, .bus_fmt = MEDIA_BUS_FMT_RGB888_1X24, .bpp = 24, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + .vc[PAD0] = 0, +#else .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, +#endif }; /* VPG0 or VPG1 register */ diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_remote.c b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_remote.c index a0cf923de8e0..7ded2259b345 100644 --- a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_remote.c +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_remote.c @@ -24,7 +24,7 @@ int maxim4c_remote_devices_power(maxim4c_t *maxim4c, u8 link_mask, int on) struct device_node *remote_cam_node = NULL; struct i2c_client *remote_cam_client = NULL; struct v4l2_subdev *remote_cam_sd = NULL; - int ret = 0, i = 0; + int ret = 0, error = 0, i = 0; dev_dbg(dev, "%s: link mask = 0x%02x, on = %d\n", __func__, link_mask, on); @@ -57,7 +57,11 @@ int maxim4c_remote_devices_power(maxim4c_t *maxim4c, u8 link_mask, int on) } dev_info(dev, "link id = %d remote camera power = %d\n", i, on); - ret |= v4l2_subdev_call(remote_cam_sd, core, s_power, on); + error = v4l2_subdev_call(remote_cam_sd, core, s_power, on); + if (error < 0) { + ret |= error; + dev_err(dev, "link id = %d remote camera power error = %d\n", i, error); + } } return ret; @@ -72,7 +76,7 @@ int maxim4c_remote_devices_s_stream(maxim4c_t *maxim4c, u8 link_mask, int enable struct device_node *remote_cam_node = NULL; struct i2c_client *remote_cam_client = NULL; struct v4l2_subdev *remote_cam_sd = NULL; - int ret = 0, i = 0; + int ret = 0, error = 0, i = 0; dev_dbg(dev, "%s: link mask = 0x%02x, enable = %d\n", __func__, link_mask, enable); @@ -105,7 +109,11 @@ int maxim4c_remote_devices_s_stream(maxim4c_t *maxim4c, u8 link_mask, int enable } dev_info(dev, "link id = %d remote camera s_stream = %d\n", i, enable); - ret |= v4l2_subdev_call(remote_cam_sd, video, s_stream, enable); + error = v4l2_subdev_call(remote_cam_sd, video, s_stream, enable); + if (error < 0) { + ret |= error; + dev_err(dev, "link id = %d remote camera s_stream error = %d\n", i, error); + } } return ret; diff --git a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_v4l2.c b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_v4l2.c index f9c797829dc7..20f755e0e241 100644 --- a/drivers/media/i2c/maxim/local/maxim4c/maxim4c_v4l2.c +++ b/drivers/media/i2c/maxim/local/maxim4c/maxim4c_v4l2.c @@ -66,10 +66,17 @@ static const struct maxim4c_mode maxim4c_def_mode = { .link_freq_idx = 15, .bus_fmt = MEDIA_BUS_FMT_UYVY8_2X8, .bpp = 16, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + .vc[PAD0] = 0, + .vc[PAD1] = 1, + .vc[PAD2] = 2, + .vc[PAD3] = 3, +#else .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0, .vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_1, .vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_2, .vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_3, +#endif /* LINUX_VERSION_CODE */ }; static struct rkmodule_csi_dphy_param rk3588_dcphy_param = { @@ -212,8 +219,13 @@ static int maxim4c_support_mode_init(maxim4c_t *maxim4c) static int maxim4c_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct maxim4c_mode *def_mode = &maxim4c->supported_mode; mutex_lock(&maxim4c->mutex); @@ -598,7 +610,11 @@ static int maxim4c_s_stream(struct v4l2_subdev *sd, int on) goto unlock_and_return; if (on) { +#if KERNEL_VERSION(5, 5, 0) <= LINUX_VERSION_CODE ret = pm_runtime_resume_and_get(&client->dev); +#else + ret = pm_runtime_get_sync(&client->dev); +#endif if (ret < 0) goto unlock_and_return; @@ -635,9 +651,15 @@ static int maxim4c_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int maxim4c_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); const struct maxim4c_mode *mode = maxim4c->cur_mode; @@ -649,9 +671,15 @@ static int maxim4c_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int maxim4c_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); @@ -669,10 +697,15 @@ static int maxim4c_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } -static int -maxim4c_enum_frame_interval(struct v4l2_subdev *sd, +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else +static int maxim4c_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); @@ -687,9 +720,15 @@ maxim4c_enum_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int maxim4c_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); const struct maxim4c_mode *mode = maxim4c->cur_mode; @@ -697,7 +736,11 @@ static int maxim4c_get_fmt(struct v4l2_subdev *sd, mutex_lock(&maxim4c->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&maxim4c->mutex); return -ENOTTY; @@ -717,9 +760,15 @@ static int maxim4c_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int maxim4c_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); struct device *dev = &maxim4c->client->dev; @@ -737,7 +786,11 @@ static int maxim4c_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&maxim4c->mutex); return -ENOTTY; @@ -769,9 +822,15 @@ static int maxim4c_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int maxim4c_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); @@ -786,6 +845,18 @@ static int maxim4c_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int maxim4c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct maxim4c *maxim4c = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = maxim4c->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int maxim4c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -804,6 +875,26 @@ static int maxim4c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int maxim4c_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + maxim4c_t *maxim4c = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = maxim4c->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops maxim4c_internal_ops = { @@ -822,6 +913,9 @@ static const struct v4l2_subdev_core_ops maxim4c_core_ops = { static const struct v4l2_subdev_video_ops maxim4c_video_ops = { .s_stream = maxim4c_s_stream, .g_frame_interval = maxim4c_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = maxim4c_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops maxim4c_pad_ops = { @@ -831,7 +925,9 @@ static const struct v4l2_subdev_pad_ops maxim4c_pad_ops = { .get_fmt = maxim4c_get_fmt, .set_fmt = maxim4c_set_fmt, .get_selection = maxim4c_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = maxim4c_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops maxim4c_subdev_ops = { @@ -960,7 +1056,11 @@ int maxim4c_v4l2_subdev_init(maxim4c_t *maxim4c) maxim4c->module_index, facing, MAXIM4C_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; diff --git a/drivers/media/i2c/maxim/remote/max9295.c b/drivers/media/i2c/maxim/remote/max9295.c index f688ddbd29a3..9501dfc88d5d 100644 --- a/drivers/media/i2c/maxim/remote/max9295.c +++ b/drivers/media/i2c/maxim/remote/max9295.c @@ -16,7 +16,7 @@ #include "maxim_remote.h" -#define DRIVER_VERSION KERNEL_VERSION(3, 0x00, 0x00) +#define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) #define MAX9295_NAME "max9295" @@ -527,13 +527,19 @@ static int max9295_probe(struct i2c_client *client, return 0; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int max9295_remove(struct i2c_client *client) +#else +static void max9295_remove(struct i2c_client *client) +#endif { maxim_remote_ser_t *max9295 = i2c_get_clientdata(client); mutex_destroy(&max9295->mutex); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id max9295_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/max96715.c b/drivers/media/i2c/maxim/remote/max96715.c index d468d2947983..fc6a6cf0ddbf 100644 --- a/drivers/media/i2c/maxim/remote/max96715.c +++ b/drivers/media/i2c/maxim/remote/max96715.c @@ -16,7 +16,7 @@ #include "maxim_remote.h" -#define DRIVER_VERSION KERNEL_VERSION(3, 0x00, 0x00) +#define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) #define MAX96715_NAME "max96715" @@ -528,13 +528,19 @@ static int max96715_probe(struct i2c_client *client, return 0; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int max96715_remove(struct i2c_client *client) +#else +static void max96715_remove(struct i2c_client *client) +#endif { maxim_remote_ser_t *max96715 = i2c_get_clientdata(client); mutex_destroy(&max96715->mutex); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id max96715_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/max96717.c b/drivers/media/i2c/maxim/remote/max96717.c index d45e2b0acbc9..c2a19887ea37 100644 --- a/drivers/media/i2c/maxim/remote/max96717.c +++ b/drivers/media/i2c/maxim/remote/max96717.c @@ -16,7 +16,7 @@ #include "maxim_remote.h" -#define DRIVER_VERSION KERNEL_VERSION(3, 0x00, 0x00) +#define DRIVER_VERSION KERNEL_VERSION(3, 0x01, 0x00) #define MAX96717_NAME "maxim-max96717" @@ -477,13 +477,19 @@ static int max96717_probe(struct i2c_client *client, return 0; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int max96717_remove(struct i2c_client *client) +#else +static void max96717_remove(struct i2c_client *client) +#endif { maxim_remote_ser_t *max96717 = i2c_get_clientdata(client); mutex_destroy(&max96717->mutex); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id max96717_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/maxim_remote.h b/drivers/media/i2c/maxim/remote/maxim_remote.h index 0fa29acf9f00..8a79df354ed1 100644 --- a/drivers/media/i2c/maxim/remote/maxim_remote.h +++ b/drivers/media/i2c/maxim/remote/maxim_remote.h @@ -9,6 +9,21 @@ #include #include +#include + +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE +enum rkmodule_pad_type { + PAD0, + PAD1, + PAD2, + PAD3, + PAD_MAX, +}; + +#ifndef fallthrough +#define fallthrough +#endif +#endif /* LINUX_VERSION_CODE */ /* I2C Device ID */ enum { diff --git a/drivers/media/i2c/maxim/remote/ov231x.c b/drivers/media/i2c/maxim/remote/ov231x.c index 2e28c9cd8061..9309be42ebc0 100644 --- a/drivers/media/i2c/maxim/remote/ov231x.c +++ b/drivers/media/i2c/maxim/remote/ov231x.c @@ -291,8 +291,13 @@ static const struct dev_pm_ops ov231x_pm_ops = { static int ov231x_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { struct ov231x *ov231x = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct ov231x_mode *def_mode = &ov231x->supported_modes[0]; mutex_lock(&ov231x->mutex); @@ -582,9 +587,15 @@ static int ov231x_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int ov231x_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); @@ -595,9 +606,15 @@ static int ov231x_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int ov231x_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); @@ -615,9 +632,15 @@ static int ov231x_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else static int ov231x_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); @@ -660,9 +683,15 @@ ov231x_find_best_fit(struct ov231x *ov231x, struct v4l2_subdev_format *fmt) return &ov231x->supported_modes[cur_best_fit]; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE static int ov231x_set_fmt(struct v4l2_subdev *sd, - struct v4l2_subdev_pad_config *cfg, - struct v4l2_subdev_format *fmt) + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else +static int ov231x_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); struct device *dev = &ov231x->client->dev; @@ -679,7 +708,11 @@ static int ov231x_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&ov231x->mutex); return -ENOTTY; @@ -705,9 +738,15 @@ static int ov231x_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int ov231x_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); const struct ov231x_mode *mode = ov231x->cur_mode; @@ -715,7 +754,11 @@ static int ov231x_get_fmt(struct v4l2_subdev *sd, mutex_lock(&ov231x->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&ov231x->mutex); return -ENOTTY; @@ -731,9 +774,15 @@ static int ov231x_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int ov231x_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { struct ov231x *ov231x = v4l2_get_subdevdata(sd); @@ -748,6 +797,18 @@ static int ov231x_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ov231x_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct ov231x *ov231x = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = ov231x->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int ov231x_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -766,6 +827,26 @@ static int ov231x_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int ov231x_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + struct ov231x *ov231x = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = ov231x->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops ov231x_internal_ops = { @@ -784,6 +865,9 @@ static const struct v4l2_subdev_core_ops ov231x_core_ops = { static const struct v4l2_subdev_video_ops ov231x_video_ops = { .s_stream = ov231x_s_stream, .g_frame_interval = ov231x_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = ov231x_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops ov231x_pad_ops = { @@ -793,7 +877,9 @@ static const struct v4l2_subdev_pad_ops ov231x_pad_ops = { .get_fmt = ov231x_get_fmt, .set_fmt = ov231x_set_fmt, .get_selection = ov231x_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = ov231x_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops ov231x_subdev_ops = { @@ -998,7 +1084,11 @@ static int ov231x_probe(struct i2c_client *client, ov231x->module_index, facing, OV231X_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; @@ -1046,7 +1136,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int ov231x_remove(struct i2c_client *client) +#else +static void ov231x_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); struct ov231x *ov231x = v4l2_get_subdevdata(sd); @@ -1065,7 +1159,9 @@ static int ov231x_remove(struct i2c_client *client) __ov231x_power_off(ov231x); pm_runtime_set_suspended(&client->dev); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id ov231x_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/ox01f10.c b/drivers/media/i2c/maxim/remote/ox01f10.c index 74c0a7a69d36..01fe29f20665 100644 --- a/drivers/media/i2c/maxim/remote/ox01f10.c +++ b/drivers/media/i2c/maxim/remote/ox01f10.c @@ -291,8 +291,13 @@ static const struct dev_pm_ops ox01f10_pm_ops = { static int ox01f10_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct ox01f10_mode *def_mode = &ox01f10->supported_modes[0]; mutex_lock(&ox01f10->mutex); @@ -582,9 +587,15 @@ static int ox01f10_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int ox01f10_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); @@ -595,9 +606,15 @@ static int ox01f10_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int ox01f10_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); @@ -615,9 +632,15 @@ static int ox01f10_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else static int ox01f10_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); @@ -660,9 +683,15 @@ ox01f10_find_best_fit(struct ox01f10 *ox01f10, struct v4l2_subdev_format *fmt) return &ox01f10->supported_modes[cur_best_fit]; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE static int ox01f10_set_fmt(struct v4l2_subdev *sd, - struct v4l2_subdev_pad_config *cfg, - struct v4l2_subdev_format *fmt) + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else +static int ox01f10_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); struct device *dev = &ox01f10->client->dev; @@ -679,7 +708,11 @@ static int ox01f10_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&ox01f10->mutex); return -ENOTTY; @@ -705,9 +738,15 @@ static int ox01f10_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int ox01f10_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); const struct ox01f10_mode *mode = ox01f10->cur_mode; @@ -715,7 +754,11 @@ static int ox01f10_get_fmt(struct v4l2_subdev *sd, mutex_lock(&ox01f10->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&ox01f10->mutex); return -ENOTTY; @@ -731,9 +774,15 @@ static int ox01f10_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int ox01f10_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); @@ -748,6 +797,18 @@ static int ox01f10_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox01f10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = ox01f10->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int ox01f10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -766,6 +827,26 @@ static int ox01f10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int ox01f10_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = ox01f10->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops ox01f10_internal_ops = { @@ -784,6 +865,9 @@ static const struct v4l2_subdev_core_ops ox01f10_core_ops = { static const struct v4l2_subdev_video_ops ox01f10_video_ops = { .s_stream = ox01f10_s_stream, .g_frame_interval = ox01f10_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = ox01f10_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops ox01f10_pad_ops = { @@ -793,7 +877,9 @@ static const struct v4l2_subdev_pad_ops ox01f10_pad_ops = { .get_fmt = ox01f10_get_fmt, .set_fmt = ox01f10_set_fmt, .get_selection = ox01f10_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = ox01f10_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops ox01f10_subdev_ops = { @@ -998,7 +1084,11 @@ static int ox01f10_probe(struct i2c_client *client, ox01f10->module_index, facing, OX01F10_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; @@ -1046,7 +1136,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int ox01f10_remove(struct i2c_client *client) +#else +static void ox01f10_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); struct ox01f10 *ox01f10 = v4l2_get_subdevdata(sd); @@ -1065,7 +1159,9 @@ static int ox01f10_remove(struct i2c_client *client) __ox01f10_power_off(ox01f10); pm_runtime_set_suspended(&client->dev); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id ox01f10_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/ox03j10.c b/drivers/media/i2c/maxim/remote/ox03j10.c index 750e691029cf..7f5a742c3fda 100644 --- a/drivers/media/i2c/maxim/remote/ox03j10.c +++ b/drivers/media/i2c/maxim/remote/ox03j10.c @@ -291,8 +291,13 @@ static const struct dev_pm_ops ox03j10_pm_ops = { static int ox03j10_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct ox03j10_mode *def_mode = &ox03j10->supported_modes[0]; mutex_lock(&ox03j10->mutex); @@ -582,9 +587,15 @@ static int ox03j10_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int ox03j10_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); @@ -595,9 +606,15 @@ static int ox03j10_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int ox03j10_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); @@ -615,9 +632,15 @@ static int ox03j10_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else static int ox03j10_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); @@ -660,9 +683,15 @@ ox03j10_find_best_fit(struct ox03j10 *ox03j10, struct v4l2_subdev_format *fmt) return &ox03j10->supported_modes[cur_best_fit]; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE static int ox03j10_set_fmt(struct v4l2_subdev *sd, - struct v4l2_subdev_pad_config *cfg, - struct v4l2_subdev_format *fmt) + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else +static int ox03j10_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); struct device *dev = &ox03j10->client->dev; @@ -679,7 +708,11 @@ static int ox03j10_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&ox03j10->mutex); return -ENOTTY; @@ -705,9 +738,15 @@ static int ox03j10_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int ox03j10_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); const struct ox03j10_mode *mode = ox03j10->cur_mode; @@ -715,7 +754,11 @@ static int ox03j10_get_fmt(struct v4l2_subdev *sd, mutex_lock(&ox03j10->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&ox03j10->mutex); return -ENOTTY; @@ -731,9 +774,15 @@ static int ox03j10_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int ox03j10_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); @@ -748,6 +797,18 @@ static int ox03j10_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int ox03j10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = ox03j10->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int ox03j10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -766,6 +827,26 @@ static int ox03j10_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int ox03j10_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = ox03j10->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops ox03j10_internal_ops = { @@ -784,6 +865,9 @@ static const struct v4l2_subdev_core_ops ox03j10_core_ops = { static const struct v4l2_subdev_video_ops ox03j10_video_ops = { .s_stream = ox03j10_s_stream, .g_frame_interval = ox03j10_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = ox03j10_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops ox03j10_pad_ops = { @@ -793,7 +877,9 @@ static const struct v4l2_subdev_pad_ops ox03j10_pad_ops = { .get_fmt = ox03j10_get_fmt, .set_fmt = ox03j10_set_fmt, .get_selection = ox03j10_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = ox03j10_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops ox03j10_subdev_ops = { @@ -998,7 +1084,11 @@ static int ox03j10_probe(struct i2c_client *client, ox03j10->module_index, facing, OX03J10_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; @@ -1046,7 +1136,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int ox03j10_remove(struct i2c_client *client) +#else +static void ox03j10_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); struct ox03j10 *ox03j10 = v4l2_get_subdevdata(sd); @@ -1065,7 +1159,9 @@ static int ox03j10_remove(struct i2c_client *client) __ox03j10_power_off(ox03j10); pm_runtime_set_suspended(&client->dev); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id ox03j10_of_match[] = { diff --git a/drivers/media/i2c/maxim/remote/sc320at.c b/drivers/media/i2c/maxim/remote/sc320at.c index 2247d27454e6..0d051278647c 100644 --- a/drivers/media/i2c/maxim/remote/sc320at.c +++ b/drivers/media/i2c/maxim/remote/sc320at.c @@ -291,8 +291,13 @@ static const struct dev_pm_ops sc320at_pm_ops = { static int sc320at_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { struct sc320at *sc320at = v4l2_get_subdevdata(sd); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + struct v4l2_mbus_framefmt *try_fmt = + v4l2_subdev_get_try_format(sd, fh->state, 0); +#else struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); +#endif const struct sc320at_mode *def_mode = &sc320at->supported_modes[0]; mutex_lock(&sc320at->mutex); @@ -582,9 +587,15 @@ static int sc320at_g_frame_interval(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_mbus_code_enum *code) +#else static int sc320at_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_mbus_code_enum *code) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); @@ -595,9 +606,15 @@ static int sc320at_enum_mbus_code(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_enum_frame_sizes(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_size_enum *fse) +#else static int sc320at_enum_frame_sizes(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_size_enum *fse) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); @@ -615,9 +632,15 @@ static int sc320at_enum_frame_sizes(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_enum_frame_interval(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_frame_interval_enum *fie) +#else static int sc320at_enum_frame_interval(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_frame_interval_enum *fie) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); @@ -660,9 +683,15 @@ sc320at_find_best_fit(struct sc320at *sc320at, struct v4l2_subdev_format *fmt) return &sc320at->supported_modes[cur_best_fit]; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE static int sc320at_set_fmt(struct v4l2_subdev *sd, - struct v4l2_subdev_pad_config *cfg, - struct v4l2_subdev_format *fmt) + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else +static int sc320at_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *fmt) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); struct device *dev = &sc320at->client->dev; @@ -679,7 +708,11 @@ static int sc320at_set_fmt(struct v4l2_subdev *sd, fmt->format.field = V4L2_FIELD_NONE; if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format; + #else *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format; + #endif #else mutex_unlock(&sc320at->mutex); return -ENOTTY; @@ -705,9 +738,15 @@ static int sc320at_set_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_get_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_format *fmt) +#else static int sc320at_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_format *fmt) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); const struct sc320at_mode *mode = sc320at->cur_mode; @@ -715,7 +754,11 @@ static int sc320at_get_fmt(struct v4l2_subdev *sd, mutex_lock(&sc320at->mutex); if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) { #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API + #if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + fmt->format = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad); + #else fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad); + #endif #else mutex_unlock(&sc320at->mutex); return -ENOTTY; @@ -731,9 +774,15 @@ static int sc320at_get_fmt(struct v4l2_subdev *sd, return 0; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *sd_state, + struct v4l2_subdev_selection *sel) +#else static int sc320at_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, struct v4l2_subdev_selection *sel) +#endif { struct sc320at *sc320at = v4l2_get_subdevdata(sd); @@ -748,6 +797,18 @@ static int sc320at_get_selection(struct v4l2_subdev *sd, return -EINVAL; } +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE +static int sc320at_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, + struct v4l2_mbus_config *config) +{ + struct sc320at *sc320at = v4l2_get_subdevdata(sd); + + config->type = V4L2_MBUS_CSI2_DPHY; + config->bus.mipi_csi2 = sc320at->bus_cfg.bus.mipi_csi2; + + return 0; +} +#elif KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE static int sc320at_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, struct v4l2_mbus_config *config) { @@ -766,6 +827,26 @@ static int sc320at_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, return 0; } +#else +static int sc320at_g_mbus_config(struct v4l2_subdev *sd, + struct v4l2_mbus_config *config) +{ + struct sc320at *sc320at = v4l2_get_subdevdata(sd); + u32 val = 0; + u8 data_lanes = sc320at->bus_cfg.bus.mipi_csi2.num_data_lanes; + + val |= V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; + val |= (1 << (data_lanes - 1)); + + val |= V4L2_MBUS_CSI2_CHANNEL_3 | V4L2_MBUS_CSI2_CHANNEL_2 | + V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_0; + + config->type = V4L2_MBUS_CSI2; + config->flags = val; + + return 0; +} +#endif /* LINUX_VERSION_CODE */ #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API static const struct v4l2_subdev_internal_ops sc320at_internal_ops = { @@ -784,6 +865,9 @@ static const struct v4l2_subdev_core_ops sc320at_core_ops = { static const struct v4l2_subdev_video_ops sc320at_video_ops = { .s_stream = sc320at_s_stream, .g_frame_interval = sc320at_g_frame_interval, +#if KERNEL_VERSION(5, 10, 0) > LINUX_VERSION_CODE + .g_mbus_config = sc320at_g_mbus_config, +#endif }; static const struct v4l2_subdev_pad_ops sc320at_pad_ops = { @@ -793,7 +877,9 @@ static const struct v4l2_subdev_pad_ops sc320at_pad_ops = { .get_fmt = sc320at_get_fmt, .set_fmt = sc320at_set_fmt, .get_selection = sc320at_get_selection, +#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE .get_mbus_config = sc320at_g_mbus_config, +#endif }; static const struct v4l2_subdev_ops sc320at_subdev_ops = { @@ -998,7 +1084,11 @@ static int sc320at_probe(struct i2c_client *client, sc320at->module_index, facing, SC320AT_NAME, dev_name(sd->dev)); +#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE + ret = v4l2_async_register_subdev_sensor(sd); +#else ret = v4l2_async_register_subdev_sensor_common(sd); +#endif if (ret) { dev_err(dev, "v4l2 async register subdev failed\n"); goto err_clean_entity; @@ -1046,7 +1136,11 @@ err_destroy_mutex: return ret; } +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE static int sc320at_remove(struct i2c_client *client) +#else +static void sc320at_remove(struct i2c_client *client) +#endif { struct v4l2_subdev *sd = i2c_get_clientdata(client); struct sc320at *sc320at = v4l2_get_subdevdata(sd); @@ -1065,7 +1159,9 @@ static int sc320at_remove(struct i2c_client *client) __sc320at_power_off(sc320at); pm_runtime_set_suspended(&client->dev); +#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE return 0; +#endif } static const struct of_device_id sc320at_of_match[] = { diff --git a/drivers/media/i2c/rk628/rk628.c b/drivers/media/i2c/rk628/rk628.c index 8236eaef9320..b3aaa731faa5 100644 --- a/drivers/media/i2c/rk628/rk628.c +++ b/drivers/media/i2c/rk628/rk628.c @@ -65,7 +65,7 @@ static const struct regmap_range rk628_hdmirx_readable_ranges[] = { regmap_reg_range(HDMI_RX_AUD_PLL_CTRL, HDMI_RX_AUD_PLL_CTRL), regmap_reg_range(HDMI_RX_AUD_CLK_CTRL, HDMI_RX_AUD_CLK_CTRL), regmap_reg_range(HDMI_RX_AUD_FIFO_CTRL, HDMI_RX_AUD_FIFO_TH), - regmap_reg_range(HDMI_RX_AUD_CHEXTR_CTRL, HDMI_RX_AUD_PAO_CTRL), + regmap_reg_range(HDMI_RX_AUD_CHEXTR_CTRL, HDMI_RX_AUD_SPARE), regmap_reg_range(HDMI_RX_AUD_FIFO_STS, HDMI_RX_AUD_FIFO_STS), regmap_reg_range(HDMI_RX_AUDPLL_GEN_CTS, HDMI_RX_AUDPLL_GEN_N), regmap_reg_range(HDMI_RX_I2CM_PHYG3_DATAI, HDMI_RX_I2CM_PHYG3_DATAI), @@ -82,10 +82,12 @@ static const struct regmap_range rk628_hdmirx_readable_ranges[] = { regmap_reg_range(HDMI_RX_SCDC_WRDATA0, HDMI_RX_SCDC_WRDATA0), regmap_reg_range(HDMI_RX_HDMI20_STATUS, HDMI_RX_HDMI20_STATUS), regmap_reg_range(HDMI_RX_PDEC_ISTS, HDMI_RX_PDEC_IEN), + regmap_reg_range(HDMI_RX_AUD_CEC_ISTS, HDMI_RX_AUD_CEC_IEN), regmap_reg_range(HDMI_RX_AUD_FIFO_ISTS, HDMI_RX_AUD_FIFO_IEN), regmap_reg_range(HDMI_RX_MD_ISTS, HDMI_RX_MD_IEN), regmap_reg_range(HDMI_RX_HDMI_ISTS, HDMI_RX_HDMI_IEN), regmap_reg_range(HDMI_RX_DMI_DISABLE_IF, HDMI_RX_DMI_DISABLE_IF), + regmap_reg_range(HDMI_RX_CEC_CTRL, HDMI_RX_CEC_WAKEUPCTRL), }; static const struct regmap_access_table rk628_hdmirx_readable_table = { @@ -322,7 +324,7 @@ static int rk628_reg_show(struct seq_file *s, void *v) const struct regmap_config *reg; struct rk628 *rk628 = s->private; unsigned int i, j; - u32 val; + u32 val = 0; seq_printf(s, "rk628_%s:\n", file_dentry(s->file)->d_iname); diff --git a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c index d3fa2c3dca8b..875d7998442a 100644 --- a/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_bt1120_v4l2.c @@ -99,6 +99,8 @@ struct rk628_bt1120 { bool avi_rcv_rdy; bool vid_ints_en; bool dual_edge; + bool cec_enable; + struct rk628_hdmirx_cec *cec; struct rk628_hdcp hdcp; bool i2s_enable_default; HAUDINFO audio_info; @@ -418,9 +420,9 @@ static void rk628_bt1120_delayed_work_enable_hotplug(struct work_struct *work) rk628_hdmirx_controller_setup(bt1120->rk628); rk628_hdmirx_hpd_ctrl(sd, true); rk628_hdmirx_config_all(sd); + if (bt1120->cec && bt1120->cec->adap) + rk628_hdmirx_cec_state_reconfiguration(bt1120->rk628, bt1120->cec); rk628_bt1120_enable_interrupts(sd, true); - rk628_i2c_update_bits(bt1120->rk628, GRF_SYSTEM_CON0, - SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(0)); } else { bt1120->nosignal = true; rk628_hdmirx_plugout(sd); @@ -482,7 +484,7 @@ static void rk628_delayed_work_res_change(struct work_struct *work) rk628_hdmirx_inno_phy_power_off(sd); rk628_hdmirx_controller_reset(bt1120->rk628); schedule_delayed_work(&bt1120->delayed_work_enable_hotplug, - msecs_to_jiffies(800)); + msecs_to_jiffies(1100)); } else { rk628_bt1120_enable_interrupts(sd, false); enable_stream(sd, false); @@ -514,6 +516,9 @@ static void rk628_hdmirx_hpd_ctrl(struct v4l2_subdev *sd, bool en) set_level = en ? en_level : !en_level; rk628_i2c_update_bits(bt1120->rk628, HDMI_RX_HDMI_SETUP_CTRL, HOT_PLUG_DETECT_MASK, HOT_PLUG_DETECT(set_level)); + + if (bt1120->cec_enable && bt1120->cec) + rk628_hdmirx_cec_hpd(bt1120->cec, en); } static int rk628_bt1120_s_ctrl_detect_tx_5v(struct v4l2_subdev *sd) @@ -834,7 +839,7 @@ static void rk628_bt1120_initial_setup(struct v4l2_subdev *sd) /* selete int io function */ rk628_i2c_write(bt1120->rk628, GRF_GPIO3AB_SEL_CON, 0x30002000); - rk628_i2c_write(bt1120->rk628, GRF_GPIO1AB_SEL_CON, HIWORD_UPDATE(0x7, 10, 8)); + rk628_i2c_write(bt1120->rk628, GRF_GPIO1AB_SEL_CON, HIWORD_UPDATE(0x7, 11, 8)); /* I2S_SCKM0 */ rk628_i2c_write(bt1120->rk628, GRF_GPIO0AB_SEL_CON, HIWORD_UPDATE(0x1, 2, 2)); /* I2SLR_M0 */ @@ -863,12 +868,14 @@ static void rk628_bt1120_initial_setup(struct v4l2_subdev *sd) SW_OUTPUT_MODE_MASK | SW_EFUSE_HDCP_EN_MASK | SW_HSYNC_POL_MASK | - SW_VSYNC_POL_MASK, + SW_VSYNC_POL_MASK | + SW_I2S_DATA_OEN_MASK, SW_INPUT_MODE(INPUT_MODE_HDMI) | SW_OUTPUT_MODE(OUTPUT_MODE_BT1120) | SW_EFUSE_HDCP_EN(0) | SW_HSYNC_POL(1) | - SW_VSYNC_POL(1)); + SW_VSYNC_POL(1) | + SW_I2S_DATA_OEN(0)); rk628_hdmirx_controller_reset(bt1120->rk628); def_edid.pad = 0; @@ -912,7 +919,7 @@ static void rk628_bt1120_enable_interrupts(struct v4l2_subdev *sd, bool en) pdec_mask = AVI_RCV_ENSET | AVI_CKS_CHG_ICLR; md_mask = VACT_LIN_ENSET | HACT_PIX_ENSET | HS_CLK_ENSET | - DE_ACTIVITY_ENSET | VS_ACT_ENSET | HS_ACT_ENSET; + DE_ACTIVITY_ENSET | VS_ACT_ENSET | HS_ACT_ENSET | VS_CLK_ENSET; v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, en ? "en" : "dis"); /* clr irq */ rk628_i2c_write(bt1120->rk628, HDMI_RX_MD_ICLR, md_mask); @@ -925,6 +932,10 @@ static void rk628_bt1120_enable_interrupts(struct v4l2_subdev *sd, bool en) rk628_i2c_write(bt1120->rk628, HDMI_RX_MD_IEN_CLR, md_mask); rk628_i2c_write(bt1120->rk628, HDMI_RX_PDEC_IEN_CLR, pdec_mask); rk628_i2c_write(bt1120->rk628, HDMI_RX_AUD_FIFO_IEN_CLR, 0x1f); + if (bt1120->cec && bt1120->cec->adap) { + rk628_i2c_write(bt1120->rk628, HDMI_RX_AUD_CEC_IEN_SET, 0); + rk628_i2c_write(bt1120->rk628, HDMI_RX_AUD_CEC_IEN_CLR, ~0); + } bt1120->vid_ints_en = false; } usleep_range(5000, 5000); @@ -946,10 +957,7 @@ static void rk628_work_isr(struct work_struct *work) rk628_i2c_read(bt1120->rk628, HDMI_RX_MD_ISTS, &md_ints); rk628_i2c_read(bt1120->rk628, HDMI_RX_PDEC_ISTS, &pdec_ints); if (bt1120->rk628->version >= RK628F_VERSION && - (md_ints & (VACT_LIN_ISTS | HACT_PIX_ISTS | - HS_CLK_ISTS | DE_ACTIVITY_ISTS | - VS_ACT_ISTS | HS_ACT_ISTS) || - pdec_ints & AVI_CKS_CHG_ISTS)) + rk628_hdmirx_is_signal_change_ists(bt1120->rk628)) rk628_set_bg_enable(bt1120->rk628, true); plugin = tx_5v_power_present(sd); @@ -975,14 +983,10 @@ static void rk628_work_isr(struct work_struct *work) } } if (bt1120->vid_ints_en) { - rk628_i2c_read(bt1120->rk628, HDMI_RX_MD_ISTS, &md_ints); v4l2_dbg(1, debug, sd, "%s: md_ints: %#x, pdec_ints:%#x, plugin: %d\n", __func__, md_ints, pdec_ints, plugin); - if ((md_ints & (VACT_LIN_ISTS | HACT_PIX_ISTS | - HS_CLK_ISTS | DE_ACTIVITY_ISTS | - VS_ACT_ISTS | HS_ACT_ISTS) || - pdec_ints & AVI_CKS_CHG_ISTS)) { + if (rk628_hdmirx_is_signal_change_ists(bt1120->rk628)) { rk628_i2c_read(bt1120->rk628, HDMI_RX_MD_HACT_PX, &hact); rk628_i2c_read(bt1120->rk628, HDMI_RX_MD_VAL, &vact); @@ -1046,6 +1050,9 @@ static irqreturn_t rk628_bt1120_irq_handler(int irq, void *dev_id) rk628_bt1120_isr(&bt1120->sd, 0, &handled); + if (bt1120->cec_enable && bt1120->cec) + rk628_hdmirx_cec_irq(bt1120->rk628, bt1120->cec); + return handled ? IRQ_HANDLED : IRQ_NONE; } @@ -1156,7 +1163,15 @@ static int rk628_bt1120_query_dv_timings(struct v4l2_subdev *sd, struct v4l2_dv_timings *timings) { int ret; + struct rk628_bt1120 *bt1120 = to_bt1120(sd); + struct v4l2_dv_timings default_timing = + V4L2_DV_BT_CEA_640X480P59_94; + if (!tx_5v_power_present(sd) || bt1120->nosignal) { + *timings = default_timing; + v4l2_info(sd, "%s: not detect 5v, set default timing\n", __func__); + return 0; + } ret = rk628_bt1120_get_detected_timings(sd, timings); if (ret) return ret; @@ -1741,6 +1756,9 @@ static int rk628_bt1120_probe_of(struct rk628_bt1120 *bt1120) if (of_property_read_bool(dev->of_node, "hdcp-enable")) hdcp1x_enable = true; + if (of_property_read_bool(dev->of_node, "cec-enable")) + bt1120->cec_enable = true; + if (of_property_read_bool(dev->of_node, "i2s-enable-default")) i2s_enable_default = true; @@ -1973,6 +1991,9 @@ static int rk628_bt1120_probe(struct i2c_client *client, goto err_work_queues; } + if (bt1120->cec_enable) + bt1120->cec = rk628_hdmirx_cec_register(rk628); + v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name, client->addr << 1, client->adapter->name); @@ -2000,6 +2021,10 @@ static void rk628_bt1120_remove(struct i2c_client *client) del_timer_sync(&bt1120->timer); flush_work(&bt1120->work_i2c_poll); } + + if (bt1120->cec_enable && bt1120->cec) + rk628_hdmirx_cec_unregister(bt1120->cec); + cancel_delayed_work_sync(&bt1120->delayed_work_enable_hotplug); cancel_delayed_work_sync(&bt1120->delayed_work_res_change); cancel_work_sync(&bt1120->work_isr); diff --git a/drivers/media/i2c/rk628/rk628_cru.c b/drivers/media/i2c/rk628/rk628_cru.c index 2005b280e339..45f034738020 100644 --- a/drivers/media/i2c/rk628/rk628_cru.c +++ b/drivers/media/i2c/rk628/rk628_cru.c @@ -433,6 +433,19 @@ static unsigned long rk628_cru_clk_set_rate_sclk_uart(struct rk628 *rk628, return rate; } +static unsigned long rk628_cru_clk_set_rate_cec(struct rk628 *rk628, + unsigned long rate) +{ + unsigned long m, n, parent_rate = REFCLK_RATE; + + rational_best_approximation(rate, parent_rate, + GENMASK(15, 0), GENMASK(15, 0), + &m, &n); + rk628_i2c_write(rk628, CRU_CLKSEL_CON12, m << 16 | n); + + return rate; +} + void rk628_clk_mux_testout(struct rk628 *rk628, int id) { switch (id) { @@ -445,6 +458,9 @@ void rk628_clk_mux_testout(struct rk628 *rk628, int id) case CGU_CLK_HDMIRX_AUD: rk628_i2c_write(rk628, CRU_CLKSEL_CON06, 0x000f000b); break; + case CGU_CLK_HDMIRX_CEC: + rk628_i2c_write(rk628, CRU_CLKSEL_CON06, 0x000f000c); + break; } } EXPORT_SYMBOL(rk628_clk_mux_testout); @@ -473,6 +489,9 @@ int rk628_clk_set_rate(struct rk628 *rk628, unsigned int id, case CGU_CLK_HDMIRX_AUD: rk628_cru_clk_set_rate_sclk_hdmirx_aud(rk628, rate); break; + case CGU_CLK_HDMIRX_CEC: + rk628_cru_clk_set_rate_cec(rk628, rate); + break; default: return -EINVAL; } diff --git a/drivers/media/i2c/rk628/rk628_csi.h b/drivers/media/i2c/rk628/rk628_csi.h index d8327a577e1e..86d8defe9050 100644 --- a/drivers/media/i2c/rk628/rk628_csi.h +++ b/drivers/media/i2c/rk628/rk628_csi.h @@ -74,6 +74,7 @@ #define STOPSTATE_LANE0 BIT(4) #define STOPSTATE_CLK BIT(1) #define DPHY_PLL_LOCK BIT(0) +#define CSITX_INTR_EN_IMD (CSITX_BASE + 0x0080) #define CSITX_ERR_INTR_EN_IMD (CSITX_BASE + 0x0090) #define CSITX_ERR_INTR_CLR_IMD (CSITX_BASE + 0x0094) #define CSITX_ERR_INTR_STATUS_IMD (CSITX_BASE + 0x0098) @@ -82,6 +83,10 @@ #define CSITX_DPHY_CTRL (CSITX_BASE + 0x00b0) #define CSI_DPHY_EN_MASK GENMASK(7, 3) #define CSI_DPHY_EN(x) UPDATE(x, 7, 3) +#define CSI_INT_EN_MASK GENMASK(7, 6) +#define CSI_INT_EN(x) UPDATE(x, 7, 6) +#define CSI_INT_WRITE_EN_MASK GENMASK(23, 22) +#define CSI_INT_WRITE_EN(x) UPDATE(x, 23, 22) #define DPHY_ENABLECLK BIT(3) #define CSI_MAX_REGISTER CSITX_DPHY_CTRL //for rk628f csi1 @@ -99,6 +104,7 @@ #define CSITX1_VOP_PATH_PKT_CTRL (CSITX1_BASE + 0x0050) #define CSITX1_CSITX_STATUS0 (CSITX1_BASE + 0x0070) #define CSITX1_CSITX_STATUS1 (CSITX1_BASE + 0x0074) +#define CSITX1_INTR_EN_IMD (CSITX1_BASE + 0x0080) #define CSITX1_ERR_INTR_EN_IMD (CSITX1_BASE + 0x0090) #define CSITX1_ERR_INTR_CLR_IMD (CSITX1_BASE + 0x0094) #define CSITX1_ERR_INTR_STATUS_IMD (CSITX1_BASE + 0x0098) diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index 1dfb1ddf557b..69d192d14b59 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -113,6 +113,8 @@ struct rk628_csi { bool avi_rcv_rdy; bool vid_ints_en; bool continues_clk; + bool cec_enable; + struct rk628_hdmirx_cec *cec; struct rk628_hdcp hdcp; bool i2s_enable_default; HAUDINFO audio_info; @@ -120,6 +122,8 @@ struct rk628_csi { struct rk628_dsi dsi; const struct rk628_plat_data *plat_data; struct device *classdev; + bool is_streaming; + bool csi_ints_en; }; struct rk628_csi_mode { @@ -208,7 +212,7 @@ static u8 rk628f_edid_init_data[] = { 0x60, 0x61, 0x23, 0x09, 0x07, 0x07, 0x83, 0x01, 0x00, 0x00, 0x6D, 0x03, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x44, 0x20, 0x00, 0x60, 0x03, 0x02, 0x01, - 0x67, 0xD8, 0x5D, 0xC4, 0x01, 0x78, 0xC0, 0x00, + 0x67, 0xD8, 0x5D, 0xC4, 0x01, 0x78, 0x80, 0x00, 0xE3, 0x05, 0x03, 0x01, 0xE4, 0x0F, 0x00, 0x18, 0x00, 0x02, 0x3A, 0x80, 0x18, 0x71, 0x38, 0x2D, 0x40, 0x58, 0x2C, 0x45, 0x00, 0xB9, 0xA8, 0x42, @@ -218,7 +222,7 @@ static u8 rk628f_edid_init_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, }; static const struct mipi_timing rk628d_csi_mipi = { @@ -325,6 +329,8 @@ static struct v4l2_dv_timings dst_timing = { static void rk628_post_process_setup(struct v4l2_subdev *sd); static void rk628_csi_enable_interrupts(struct v4l2_subdev *sd, bool en); +static void rk628_csi_enable_csi_interrupts(struct v4l2_subdev *sd, bool en); +static void rk628_csi_clear_csi_interrupts(struct v4l2_subdev *sd); static int rk628_csi_s_ctrl_detect_tx_5v(struct v4l2_subdev *sd); static int rk628_csi_s_dv_timings(struct v4l2_subdev *sd, struct v4l2_dv_timings *timings); @@ -505,9 +511,9 @@ static void rk628_csi_delayed_work_enable_hotplug(struct work_struct *work) rk628_hdmirx_controller_setup(csi->rk628); rk628_hdmirx_hpd_ctrl(sd, true); rk628_hdmirx_config_all(sd); + if (csi->cec && csi->cec->adap) + rk628_hdmirx_cec_state_reconfiguration(csi->rk628, csi->cec); rk628_csi_enable_interrupts(sd, true); - rk628_i2c_update_bits(csi->rk628, GRF_SYSTEM_CON0, - SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(0)); } else { rk628_hdmirx_plugout(sd); } @@ -566,7 +572,7 @@ static void rk628_delayed_work_res_change(struct work_struct *work) rk628_hdmirx_inno_phy_power_off(sd); rk628_hdmirx_controller_reset(csi->rk628); schedule_delayed_work(&csi->delayed_work_enable_hotplug, - msecs_to_jiffies(800)); + msecs_to_jiffies(1100)); } else { rk628_hdmirx_audio_cancel_work_audio(csi->audio_info, true); rk628_hdmirx_inno_phy_power_off(sd); @@ -600,6 +606,9 @@ static void rk628_hdmirx_hpd_ctrl(struct v4l2_subdev *sd, bool en) set_level = en ? en_level : !en_level; rk628_i2c_update_bits(csi->rk628, HDMI_RX_HDMI_SETUP_CTRL, HOT_PLUG_DETECT_MASK, HOT_PLUG_DETECT(set_level)); + + if (csi->cec_enable && csi->cec) + rk628_hdmirx_cec_hpd(csi->cec, en); } @@ -673,8 +682,6 @@ static void rk628_csi_soft_reset(struct v4l2_subdev *sd) static void enable_csitx(struct v4l2_subdev *sd) { - u32 i, ret, val; - u32 val_csi1 = 0; struct rk628_csi *csi = to_csi(sd); //enable dphy1 and split mode @@ -683,57 +690,38 @@ static void enable_csitx(struct v4l2_subdev *sd) rk628_i2c_update_bits(csi->rk628, GRF_POST_PROC_CON, SW_SPLIT_EN, csi->rk628->dual_mipi ? SW_SPLIT_EN : 0); rk628_csi_set_csi(sd); - for (i = 0; i < CSITX_ERR_RETRY_TIMES; i++) { - if (i) { - rk628_i2c_update_bits(csi->rk628, CSITX_CSITX_EN, - CSITX_EN_MASK, CSITX_EN(0)); - if (csi->rk628->version >= RK628F_VERSION) - rk628_i2c_update_bits(csi->rk628, CSITX1_CSITX_EN, - CSITX_EN_MASK, CSITX_EN(0)); - rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE); - if (csi->rk628->version >= RK628F_VERSION) - rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE); - usleep_range(5000, 5500); - rk628_csi_soft_reset(sd); - usleep_range(5000, 5500); - } + rk628_csi_soft_reset(sd); + usleep_range(5000, 5500); + //disabled csi state ints + rk628_i2c_write(csi->rk628, CSITX_INTR_EN_IMD, 0x0fff0000); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_write(csi->rk628, CSITX1_INTR_EN_IMD, 0x0fff0000); - rk628_i2c_update_bits(csi->rk628, CSITX_CSITX_EN, + rk628_i2c_update_bits(csi->rk628, CSITX_CSITX_EN, DPHY_EN_MASK | CSITX_EN_MASK, DPHY_EN(1) | CSITX_EN(1)); - rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); - if (csi->rk628->version >= RK628F_VERSION) { - rk628_i2c_update_bits(csi->rk628, CSITX1_CSITX_EN, + rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); + if (csi->rk628->version >= RK628F_VERSION) { + rk628_i2c_update_bits(csi->rk628, CSITX1_CSITX_EN, DPHY_EN_MASK | CSITX_EN_MASK, DPHY_EN(1) | CSITX_EN(1)); - rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE_IMD); - } + rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE_IMD); + } - rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_CLR_IMD, 0xffffffff); - if (csi->rk628->version <= RK628D_VERSION) - rk628_i2c_update_bits(csi->rk628, CSITX_SYS_CTRL1, + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_CLR_IMD, 0xffffffff); + if (csi->rk628->version <= RK628D_VERSION) + rk628_i2c_update_bits(csi->rk628, CSITX_SYS_CTRL1, BYPASS_SELECT_MASK, BYPASS_SELECT(0)); - rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); + rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); - if (csi->rk628->version >= RK628F_VERSION) { - rk628_i2c_write(csi->rk628, CSITX1_ERR_INTR_CLR_IMD, 0xffffffff); - rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE_IMD); - } - msleep(50); - ret = rk628_i2c_read(csi->rk628, CSITX_ERR_INTR_RAW_STATUS_IMD, &val); - if (csi->rk628->version >= RK628F_VERSION) - ret |= rk628_i2c_read(csi->rk628, - CSITX1_ERR_INTR_RAW_STATUS_IMD, &val_csi1); - if (!ret && !val && !val_csi1) - break; - - v4l2_err(sd, "%s csitx err, retry:%d, err status csi0:%#x, csi1:%#x, ret:%d\n", - __func__, i, val, val_csi1, ret); + if (csi->rk628->version >= RK628F_VERSION) { + rk628_i2c_write(csi->rk628, CSITX1_ERR_INTR_CLR_IMD, 0xffffffff); + rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE_IMD); } } @@ -872,17 +860,24 @@ static void enable_stream(struct v4l2_subdev *sd, bool en) } rk628_hdmirx_vid_enable(sd, true); - if (csi->plat_data->tx_mode == DSI_MODE) + if (csi->plat_data->tx_mode == DSI_MODE) { enable_dsitx(sd); - else + } else { enable_csitx(sd); + /* csitx int en */ + rk628_csi_enable_csi_interrupts(sd, true); + } + csi->is_streaming = true; } else { if (csi->plat_data->tx_mode == CSI_MODE) { + rk628_csi_enable_csi_interrupts(sd, false); + msleep(20); rk628_hdmirx_vid_enable(sd, false); rk628_csi_disable_stream(sd); } else { rk628_dsi_enable_stream(sd, en); } + csi->is_streaming = false; } } @@ -1297,7 +1292,7 @@ static void rk628_csi_initial_setup(struct v4l2_subdev *sd) /* selete int io function */ rk628_i2c_write(csi->rk628, GRF_GPIO3AB_SEL_CON, 0x30002000); - rk628_i2c_write(csi->rk628, GRF_GPIO1AB_SEL_CON, HIWORD_UPDATE(0x7, 10, 8)); + rk628_i2c_write(csi->rk628, GRF_GPIO1AB_SEL_CON, HIWORD_UPDATE(0xf, 11, 8)); /* I2S_SCKM0 */ rk628_i2c_write(csi->rk628, GRF_GPIO0AB_SEL_CON, HIWORD_UPDATE(0x1, 2, 2)); /* I2SLR_M0 */ @@ -1333,12 +1328,14 @@ static void rk628_csi_initial_setup(struct v4l2_subdev *sd) mask | SW_EFUSE_HDCP_EN_MASK | SW_HSYNC_POL_MASK | - SW_VSYNC_POL_MASK, + SW_VSYNC_POL_MASK | + SW_I2S_DATA_OEN_MASK, SW_INPUT_MODE(INPUT_MODE_HDMI) | val | SW_EFUSE_HDCP_EN(0) | SW_HSYNC_POL(1) | - SW_VSYNC_POL(1)); + SW_VSYNC_POL(1) | + SW_I2S_DATA_OEN(0)); rk628_hdmirx_controller_reset(csi->rk628); def_edid.pad = 0; @@ -1395,6 +1392,48 @@ static void rk628_csi_format_change(struct v4l2_subdev *sd) v4l2_subdev_notify_event(sd, &rk628_csi_ev_fmt); } +static void rk628_csi_enable_csi_interrupts(struct v4l2_subdev *sd, bool en) +{ + struct rk628_csi *csi = to_csi(sd); + + rk628_csi_clear_csi_interrupts(sd); + //disabled csi state ints + rk628_i2c_write(csi->rk628, CSITX_INTR_EN_IMD, 0x0fff0000); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_write(csi->rk628, CSITX1_INTR_EN_IMD, 0x0fff0000); + + //enable csi error ints + if (en) { + if (csi->rk628->version >= RK628F_VERSION) { + rk628_i2c_update_bits(csi->rk628, + GRF_INTR0_EN, CSI_INT_EN_MASK | CSI_INT_WRITE_EN_MASK, + CSI_INT_EN(3) | CSI_INT_WRITE_EN(3)); + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_EN_IMD, 0x0fff0fff); + rk628_i2c_write(csi->rk628, CSITX1_ERR_INTR_EN_IMD, 0x0fff0fff); + } else { + rk628_i2c_update_bits(csi->rk628, + GRF_INTR0_EN, CSI_INT_EN_MASK | CSI_INT_WRITE_EN_MASK, + CSI_INT_EN(1) | CSI_INT_WRITE_EN(1)); + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_EN_IMD, 0x0fff0fff); + } + csi->csi_ints_en = true; + } else { + if (csi->rk628->version >= RK628F_VERSION) { + rk628_i2c_update_bits(csi->rk628, + GRF_INTR0_EN, CSI_INT_EN_MASK | CSI_INT_WRITE_EN_MASK, + CSI_INT_EN(0) | CSI_INT_WRITE_EN(3)); + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_EN_IMD, 0x0fff0000); + rk628_i2c_write(csi->rk628, CSITX1_ERR_INTR_EN_IMD, 0x0fff0000); + } else { + rk628_i2c_update_bits(csi->rk628, + GRF_INTR0_EN, CSI_INT_EN_MASK | CSI_INT_WRITE_EN_MASK, + CSI_INT_EN(0) | CSI_INT_WRITE_EN(1)); + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_EN_IMD, 0x0fff0000); + } + csi->csi_ints_en = false; + } +} + static void rk628_csi_enable_interrupts(struct v4l2_subdev *sd, bool en) { u32 pdec_ien, md_ien; @@ -1403,7 +1442,7 @@ static void rk628_csi_enable_interrupts(struct v4l2_subdev *sd, bool en) pdec_mask = AVI_RCV_ENSET | AVI_CKS_CHG_ICLR; md_mask = VACT_LIN_ENSET | HACT_PIX_ENSET | HS_CLK_ENSET | - DE_ACTIVITY_ENSET | VS_ACT_ENSET | HS_ACT_ENSET; + DE_ACTIVITY_ENSET | VS_ACT_ENSET | HS_ACT_ENSET | VS_CLK_ENSET; v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, en ? "en" : "dis"); /* clr irq */ rk628_i2c_write(csi->rk628, HDMI_RX_MD_ICLR, md_mask); @@ -1416,6 +1455,10 @@ static void rk628_csi_enable_interrupts(struct v4l2_subdev *sd, bool en) rk628_i2c_write(csi->rk628, HDMI_RX_MD_IEN_CLR, md_mask); rk628_i2c_write(csi->rk628, HDMI_RX_PDEC_IEN_CLR, pdec_mask); rk628_i2c_write(csi->rk628, HDMI_RX_AUD_FIFO_IEN_CLR, 0x1f); + if (csi->cec && csi->cec->adap) { + rk628_i2c_write(csi->rk628, HDMI_RX_AUD_CEC_IEN_SET, 0); + rk628_i2c_write(csi->rk628, HDMI_RX_AUD_CEC_IEN_CLR, ~0); + } csi->vid_ints_en = false; } usleep_range(5000, 5000); @@ -1424,6 +1467,59 @@ static void rk628_csi_enable_interrupts(struct v4l2_subdev *sd, bool en) v4l2_dbg(1, debug, sd, "%s MD_IEN:%#x, PDEC_IEN:%#x\n", __func__, md_ien, pdec_ien); } +static void rk628_csi_clear_csi_interrupts(struct v4l2_subdev *sd) +{ + struct rk628_csi *csi = to_csi(sd); + + //clr int status + rk628_i2c_write(csi->rk628, CSITX_ERR_INTR_CLR_IMD, 0xffffffff); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_write(csi->rk628, CSITX1_ERR_INTR_CLR_IMD, 0xffffffff); + + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_update_bits(csi->rk628, GRF_INTR0_CLR_EN, CSI_INT_EN_MASK | + CSI_INT_WRITE_EN_MASK, CSI_INT_EN(3) | CSI_INT_WRITE_EN(3)); + else + rk628_i2c_update_bits(csi->rk628, GRF_INTR0_CLR_EN, CSI_INT_EN_MASK | + CSI_INT_WRITE_EN_MASK, CSI_INT_EN(1) | CSI_INT_WRITE_EN(1)); +} + +static void rk628_csi_error_process(struct v4l2_subdev *sd) +{ + struct rk628_csi *csi = to_csi(sd); + + if (csi->is_streaming) { + v4l2_info(sd, + "%s: csitx is streaming, reset csitx and restart cstitx!\n", __func__); + rk628_csi_enable_csi_interrupts(sd, false); + rk628_i2c_update_bits(csi->rk628, CSITX_CSITX_EN, CSITX_EN_MASK, CSITX_EN(0)); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_update_bits(csi->rk628, CSITX1_CSITX_EN, + CSITX_EN_MASK, CSITX_EN(0)); + rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE); + + usleep_range(5000, 5500); + rk628_csi_soft_reset(sd); + usleep_range(5000, 5500); + + rk628_i2c_update_bits(csi->rk628, CSITX_CSITX_EN, CSITX_EN_MASK, CSITX_EN(1)); + rk628_i2c_write(csi->rk628, CSITX_CONFIG_DONE, CONFIG_DONE_IMD); + if (csi->rk628->version >= RK628F_VERSION) { + rk628_i2c_update_bits(csi->rk628, CSITX1_CSITX_EN, + CSITX_EN_MASK, CSITX_EN(1)); + rk628_i2c_write(csi->rk628, CSITX1_CONFIG_DONE, CONFIG_DONE_IMD); + } + //clr int status + rk628_csi_clear_csi_interrupts(sd); + rk628_csi_enable_csi_interrupts(sd, true); + } else { + v4l2_info(sd, + "%s: csitx is not streaming\n", __func__); + } +} + static void rk628_work_isr(struct work_struct *work) { struct rk628_csi *csi = container_of(work, struct rk628_csi, work_isr); @@ -1432,20 +1528,23 @@ static void rk628_work_isr(struct work_struct *work) bool plugin; void *audio_info = csi->audio_info; bool handled = false; + u32 csi0_raw_ints, csi1_raw_ints = 0x0; + u32 int0_status; mutex_lock(&csi->rk628->rst_lock); + rk628_i2c_read(csi->rk628, GRF_INTR0_STATUS, &int0_status); + v4l2_dbg(1, debug, sd, "%s: int0 status: 0x%x\n", __func__, int0_status); + rk628_i2c_read(csi->rk628, HDMI_RX_MD_ISTS, &md_ints); rk628_i2c_read(csi->rk628, HDMI_RX_PDEC_ISTS, &pdec_ints); if (csi->rk628->version >= RK628F_VERSION && - (md_ints & (VACT_LIN_ISTS | HACT_PIX_ISTS | - HS_CLK_ISTS | DE_ACTIVITY_ISTS | - VS_ACT_ISTS | HS_ACT_ISTS) || - pdec_ints & AVI_CKS_CHG_ISTS)) + rk628_hdmirx_is_signal_change_ists(csi->rk628)) rk628_set_bg_enable(csi->rk628, true); plugin = tx_5v_power_present(sd); if (!plugin) { rk628_csi_enable_interrupts(sd, false); + rk628_csi_enable_csi_interrupts(sd, false); goto __clear_int; } @@ -1466,15 +1565,10 @@ static void rk628_work_isr(struct work_struct *work) } } if (csi->vid_ints_en) { - rk628_i2c_read(csi->rk628, HDMI_RX_MD_ISTS, &md_ints); v4l2_dbg(1, debug, sd, "%s: md_ints: %#x, pdec_ints:%#x, plugin: %d\n", __func__, md_ints, pdec_ints, plugin); - if ((md_ints & (VACT_LIN_ISTS | HACT_PIX_ISTS | - HS_CLK_ISTS | DE_ACTIVITY_ISTS | - VS_ACT_ISTS | HS_ACT_ISTS) || - pdec_ints & AVI_CKS_CHG_ISTS)) { - + if (rk628_hdmirx_is_signal_change_ists(csi->rk628)) { rk628_i2c_read(csi->rk628, HDMI_RX_MD_HACT_PX, &hact); rk628_i2c_read(csi->rk628, HDMI_RX_MD_VAL, &vact); v4l2_dbg(1, debug, sd, "%s: HACT:%#x, VACT:%#x\n", @@ -1503,6 +1597,21 @@ static void rk628_work_isr(struct work_struct *work) handled = true; } } + + if (int0_status & (BIT(6) | BIT(7))) { + rk628_i2c_read(csi->rk628, CSITX_ERR_INTR_RAW_STATUS_IMD, &csi0_raw_ints); + if (csi->rk628->version >= RK628F_VERSION) + rk628_i2c_read(csi->rk628, CSITX1_ERR_INTR_RAW_STATUS_IMD, &csi1_raw_ints); + + if (csi0_raw_ints || csi1_raw_ints) { + v4l2_info(sd, + "%s: csi interrupt: csi0_raw_ints: 0x%x, csi1_raw_ints: 0x%x!\n", + __func__, csi0_raw_ints, csi1_raw_ints); + rk628_csi_error_process(sd); + } + handled = true; + } + if (!handled) v4l2_dbg(1, debug, sd, "%s: unhandled interrupt!\n", __func__); @@ -1514,6 +1623,7 @@ __clear_int: rk628_i2c_write(csi->rk628, GRF_INTR0_CLR_EN, 0x02000200); else rk628_i2c_write(csi->rk628, GRF_INTR0_CLR_EN, 0x01000100); + rk628_csi_clear_csi_interrupts(sd); mutex_unlock(&csi->rk628->rst_lock); } @@ -1540,6 +1650,9 @@ static irqreturn_t rk628_csi_irq_handler(int irq, void *dev_id) rk628_csi_isr(&csi->sd, 0, &handled); + if (csi->cec_enable && csi->cec) + rk628_hdmirx_cec_irq(csi->rk628, csi->cec); + return handled ? IRQ_HANDLED : IRQ_NONE; } @@ -1651,7 +1764,14 @@ static int rk628_csi_query_dv_timings(struct v4l2_subdev *sd, { int ret; struct rk628_csi *csi = to_csi(sd); + struct v4l2_dv_timings default_timing = + V4L2_DV_BT_CEA_640X480P59_94; + if (!tx_5v_power_present(sd) || csi->nosignal) { + *timings = default_timing; + v4l2_info(sd, "%s: not detect 5v, set default timing\n", __func__); + return 0; + } mutex_lock(&csi->confctl_mutex); ret = rk628_csi_get_detected_timings(sd, timings); mutex_unlock(&csi->confctl_mutex); @@ -2077,6 +2197,7 @@ static long rk628_csi_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) capture_info->multi_dev = csi->multi_dev_info; } else { capture_info->mode = 0; + capture_info->multi_dev = csi->multi_dev_info; } break; case RKMODULE_GET_CSI_DSI_INFO: @@ -2426,6 +2547,9 @@ static int rk628_csi_probe_of(struct rk628_csi *csi) if (of_property_read_bool(dev->of_node, "hdcp-enable")) hdcp1x_enable = true; + if (of_property_read_bool(dev->of_node, "cec-enable")) + csi->cec_enable = true; + if (of_property_read_bool(dev->of_node, "i2s-enable-default")) i2s_enable_default = true; @@ -2838,6 +2962,10 @@ static int rk628_csi_remove(struct i2c_client *client) del_timer_sync(&csi->timer); flush_work(&csi->work_i2c_poll); } + + if (csi->cec_enable && csi->cec) + rk628_hdmirx_cec_unregister(csi->cec); + rk628_hdmirx_audio_cancel_work_audio(csi->audio_info, true); rk628_hdmirx_audio_cancel_work_rate_change(csi->audio_info, true); cancel_delayed_work_sync(&csi->delayed_work_enable_hotplug); diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.c b/drivers/media/i2c/rk628/rk628_hdmirx.c index cf64ed580639..e1533536a348 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.c +++ b/drivers/media/i2c/rk628/rk628_hdmirx.c @@ -178,7 +178,7 @@ EXPORT_SYMBOL(rk628_hdmirx_set_hdcp); void rk628_hdmirx_controller_setup(struct rk628 *rk628) { - rk628_i2c_write(rk628, HDMI_RX_HDMI20_CONTROL, 0x10000f11); + rk628_i2c_write(rk628, HDMI_RX_HDMI20_CONTROL, 0x10000011); rk628_i2c_write(rk628, HDMI_RX_HDMI_MODE_RECOVER, 0x00000021); rk628_i2c_write(rk628, HDMI_RX_PDEC_CTRL, 0xbfff8011); rk628_i2c_write(rk628, HDMI_RX_PDEC_ASP_CTRL, 0x00000040); @@ -368,7 +368,7 @@ static void rk628_csi_delayed_work_audio_v2(struct work_struct *work) delayed_work_audio); struct rk628_audiostate *audio_state = &aif->audio_state; struct rk628 *rk628 = aif->rk628; - u32 fs_audio; + u32 fs_audio, sample_flat; int init_state, pre_state, fifo_status, fifo_ints; unsigned long delay = 500; @@ -423,6 +423,14 @@ static void rk628_csi_delayed_work_audio_v2(struct work_struct *work) } } audio_state->pre_state = fifo_status; + + rk628_i2c_read(rk628, HDMI_RX_AUD_SPARE, &sample_flat); + sample_flat = sample_flat & AUDS_MAS_SAMPLE_FLAT; + if (!sample_flat) + rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(0)); + else + rk628_i2c_update_bits(rk628, GRF_SYSTEM_CON0, SW_I2S_DATA_OEN_MASK, SW_I2S_DATA_OEN(1)); + exit: schedule_delayed_work(&aif->delayed_work_audio, msecs_to_jiffies(delay)); } @@ -836,6 +844,270 @@ static void rk628_hdmirxphy_set_clrdpt(struct rk628 *rk628, bool is_8bit) hdmirxphy_write(rk628, 0x03, 0x0060); } +static int rk628_hdmirx_cec_log_addr(struct cec_adapter *adap, u8 logical_addr) +{ + struct rk628_hdmirx_cec *cec = cec_get_drvdata(adap); + struct rk628 *rk628 = cec->rk628; + + if (logical_addr == CEC_LOG_ADDR_INVALID) + cec->addresses = 0; + else + cec->addresses |= BIT(logical_addr) | BIT(15); + + rk628_i2c_write(rk628, HDMI_RX_CEC_ADDR_L, cec->addresses & 0xff); + rk628_i2c_write(rk628, HDMI_RX_CEC_ADDR_H, (cec->addresses >> 8) & 0xff); + + return 0; +} + +static int rk628_hdmirx_cec_enable(struct cec_adapter *adap, bool enable) +{ + struct rk628_hdmirx_cec *cec = cec_get_drvdata(adap); + struct rk628 *rk628 = cec->rk628; + + if (!enable) { + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_IEN_CLR, ~0); + rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, CEC_ENABLE_MASK, 0); + } else { + unsigned int irqs; + + rk628_hdmirx_cec_log_addr(cec->adap, CEC_LOG_ADDR_INVALID); + rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, CEC_ENABLE_MASK, + CEC_ENABLE_MASK); + + rk628_i2c_write(rk628, HDMI_RX_CEC_CTRL, 0); + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_ICLR, ~0); + rk628_i2c_write(rk628, HDMI_RX_CEC_LOCK, 0); + + irqs = ERROR_INIT_ENSET | NACK_ENSET | EOM_ENSET | DONE_ENSET; + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_IEN_SET, irqs); + } + + return 0; +} + +static int rk628_hdmirx_cec_transmit(struct cec_adapter *adap, u8 attempts, + u32 signal_free_time, struct cec_msg *msg) +{ + struct rk628_hdmirx_cec *cec = cec_get_drvdata(adap); + struct rk628 *rk628 = cec->rk628; + int i, msg_len; + unsigned int ctrl; + + switch (signal_free_time) { + case CEC_SIGNAL_FREE_TIME_RETRY: + ctrl = CEC_CTRL_RETRY; + break; + case CEC_SIGNAL_FREE_TIME_NEW_INITIATOR: + default: + ctrl = CEC_CTRL_NORMAL; + break; + case CEC_SIGNAL_FREE_TIME_NEXT_XFER: + ctrl = CEC_CTRL_IMMED; + break; + } + + msg_len = msg->len; + if (msg->len > 16) + msg_len = 16; + if (msg_len <= 0) + return 0; + + for (i = 0; i < msg_len; i++) + rk628_i2c_write(rk628, HDMI_RX_CEC_TX_DATA_0 + i * 4, msg->msg[i]); + + rk628_i2c_write(rk628, HDMI_RX_CEC_TX_CNT, msg_len); + rk628_i2c_write(rk628, HDMI_RX_CEC_CTRL, ctrl | CEC_SEND); + + return 0; +} + +static const struct cec_adap_ops rk628_hdmirx_cec_ops = { + .adap_enable = rk628_hdmirx_cec_enable, + .adap_log_addr = rk628_hdmirx_cec_log_addr, + .adap_transmit = rk628_hdmirx_cec_transmit, +}; + +static void rk628_hdmirx_cec_del(void *data) +{ + struct rk628_hdmirx_cec *cec = data; + + cec_delete_adapter(cec->adap); +} + +void rk628_hdmirx_cec_irq(struct rk628 *rk628, struct rk628_hdmirx_cec *cec) +{ + u32 stat, val; + + rk628_i2c_read(rk628, HDMI_RX_AUD_CEC_ISTS, &stat); + if (stat == 0) + return; + + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_ICLR, stat); + + if (stat & ERROR_INIT) { + cec->tx_status = CEC_TX_STATUS_ERROR; + cec->tx_done = true; + } else if (stat & DONE) { + cec->tx_status = CEC_TX_STATUS_OK; + cec->tx_done = true; + } else if (stat & NACK) { + cec->tx_status = CEC_TX_STATUS_NACK; + cec->tx_done = true; + } + + if (stat & EOM) { + unsigned int len, i; + + rk628_i2c_read(rk628, HDMI_RX_CEC_RX_CNT, &val); + len = val & 0x1f; + if (len > sizeof(cec->rx_msg.msg)) + len = sizeof(cec->rx_msg.msg); + + for (i = 0; i < len; i++) { + rk628_i2c_read(rk628, HDMI_RX_CEC_RX_DATA_0 + i * 4, &val); + cec->rx_msg.msg[i] = val & 0xff; + } + rk628_i2c_write(rk628, HDMI_RX_CEC_LOCK, 0); + + cec->rx_msg.len = len; + cec->rx_done = true; + } + + if (cec->tx_done) { + cec->tx_done = false; + cec_transmit_attempt_done(cec->adap, cec->tx_status); + } + if (cec->rx_done) { + cec->rx_done = false; + cec_received_msg(cec->adap, &cec->rx_msg); + } +} +EXPORT_SYMBOL(rk628_hdmirx_cec_irq); + +struct rk628_hdmirx_cec *rk628_hdmirx_cec_register(struct rk628 *rk628) +{ + struct rk628_hdmirx_cec *cec; + int ret; + unsigned int irqs; + + if (!rk628) + return NULL; + + /* + * Our device is just a convenience - we want to link to the real + * hardware device here, so that userspace can see the association + * between the HDMI hardware and its associated CEC chardev. + */ + cec = devm_kzalloc(rk628->dev, sizeof(*cec), GFP_KERNEL); + if (!cec) + return NULL; + + cec->rk628 = rk628; + cec->dev = rk628->dev; + + rk628_i2c_write(rk628, HDMI_RX_CEC_MASK, 0); + rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, CEC_ENABLE_MASK, CEC_ENABLE_MASK); + + rk628_i2c_write(rk628, HDMI_RX_CEC_TX_CNT, 0); + rk628_i2c_write(rk628, HDMI_RX_CEC_RX_CNT, 0); + /* clk_hdmirx_cec = 32.768k */ + rk628_clk_set_rate(rk628, CGU_CLK_HDMIRX_CEC, 32768); + + cec->adap = cec_allocate_adapter(&rk628_hdmirx_cec_ops, cec, "rk628-hdmirx", + CEC_CAP_LOG_ADDRS | CEC_CAP_TRANSMIT | + CEC_CAP_RC | CEC_CAP_PASSTHROUGH, + CEC_MAX_LOG_ADDRS); + if (IS_ERR(cec->adap)) { + dev_err(cec->dev, "cec adap allocate failed!\n"); + return NULL; + } + + /* override the module pointer */ + cec->adap->owner = THIS_MODULE; + + ret = devm_add_action(cec->dev, rk628_hdmirx_cec_del, cec); + if (ret) { + cec_delete_adapter(cec->adap); + return NULL; + } + + cec->notify = cec_notifier_cec_adap_register(cec->dev, + NULL, cec->adap); + if (!cec->notify) { + dev_err(cec->dev, "cec notify register failed!\n"); + return NULL; + } + + ret = cec_register_adapter(cec->adap, cec->dev); + if (ret < 0) { + dev_err(cec->dev, "cec register adapter failed!\n"); + cec_notifier_cec_adap_unregister(cec->notify, cec->adap); + return NULL; + } + + /* The TV functionality can only map to physical address 0 */ + cec_s_phys_addr(cec->adap, 0, false); + + rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, CEC_ENABLE_MASK, CEC_ENABLE_MASK); + irqs = ERROR_INIT_ENSET | NACK_ENSET | EOM_ENSET | DONE_ENSET; + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_IEN_SET, irqs); + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_ICLR, ~0); + + /* + * CEC documentation says we must not call cec_delete_adapter + * after a successful call to cec_register_adapter(). + */ + devm_remove_action(cec->dev, rk628_hdmirx_cec_del, cec); + + return cec; +} +EXPORT_SYMBOL(rk628_hdmirx_cec_register); + +void rk628_hdmirx_cec_unregister(struct rk628_hdmirx_cec *cec) +{ + if (!cec) + return; + + cec_notifier_cec_adap_unregister(cec->notify, cec->adap); + cec_unregister_adapter(cec->adap); +} +EXPORT_SYMBOL(rk628_hdmirx_cec_unregister); + +void rk628_hdmirx_cec_hpd(struct rk628_hdmirx_cec *cec, bool en) +{ + if (!cec || !cec->adap) + return; + + cec_queue_pin_hpd_event(cec->adap, en, ktime_get()); +} +EXPORT_SYMBOL(rk628_hdmirx_cec_hpd); + +void rk628_hdmirx_cec_state_reconfiguration(struct rk628 *rk628, + struct rk628_hdmirx_cec *cec) +{ + unsigned int irqs; + u32 val; + + rk628_i2c_write(rk628, HDMI_RX_CEC_ADDR_L, cec->addresses & 0xff); + rk628_i2c_write(rk628, HDMI_RX_CEC_ADDR_H, (cec->addresses >> 8) & 0xff); + + rk628_i2c_write(rk628, HDMI_RX_CEC_MASK, 0); + rk628_i2c_write(rk628, HDMI_RX_CEC_TX_CNT, 0); + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_IEN_CLR, ~0); + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_ICLR, ~0); + rk628_i2c_write(rk628, HDMI_RX_CEC_CTRL, 0); + rk628_i2c_write(rk628, HDMI_RX_CEC_LOCK, 0); + + irqs = ERROR_INIT_ENSET | NACK_ENSET | EOM_ENSET | DONE_ENSET; + rk628_i2c_read(rk628, HDMI_RX_AUD_CEC_IEN, &val); + if (!(val & irqs)) + rk628_i2c_write(rk628, HDMI_RX_AUD_CEC_IEN_SET, irqs); + + rk628_i2c_update_bits(rk628, HDMI_RX_DMI_DISABLE_IF, CEC_ENABLE_MASK, CEC_ENABLE(1)); +} +EXPORT_SYMBOL(rk628_hdmirx_cec_state_reconfiguration); + void rk628_hdmirx_verisyno_phy_power_on(struct rk628 *rk628) { bool is_hdmi2 = false; @@ -1123,6 +1395,7 @@ int rk628_hdmirx_get_timings(struct rk628 *rk628, { int i, cnt = 0, ret = 0; u32 last_w, last_h; + u32 val; u8 last_fmt; struct v4l2_bt_timings *bt = &timings->bt; @@ -1158,6 +1431,17 @@ int rk628_hdmirx_get_timings(struct rk628 *rk628, ret = -EINVAL; } + if (rk628->version >= RK628F_VERSION) { + val = DIV_ROUND_CLOSEST_ULL(1188000000, bt->pixelclock); + val *= bt->pixelclock; + if (val > 1188000000) { + /* set pll rate according hdmirx tmds clk */ + rk628_clk_set_rate(rk628, CGU_CLK_CPLL, val); + dev_dbg(rk628->dev, "set CPLL to %d\n", val); + msleep(50); + } + } + return ret; } EXPORT_SYMBOL(rk628_hdmirx_get_timings); @@ -1213,3 +1497,24 @@ bool rk628_hdmirx_scdc_ced_err(struct rk628 *rk628) return true; } EXPORT_SYMBOL(rk628_hdmirx_scdc_ced_err); + +bool rk628_hdmirx_is_signal_change_ists(struct rk628 *rk628) +{ + u32 md_ints, pdec_ints; + u32 md_mask, pded_madk; + + md_mask = VACT_LIN_ISTS | HACT_PIX_ISTS | + HS_CLK_ISTS | DE_ACTIVITY_ISTS | + VS_ACT_ISTS | HS_ACT_ISTS | VS_CLK_ISTS; + rk628_i2c_read(rk628, HDMI_RX_MD_ISTS, &md_ints); + if (md_ints & md_mask) + return true; + + pded_madk = AVI_CKS_CHG_ISTS; + rk628_i2c_read(rk628, HDMI_RX_PDEC_ISTS, &pdec_ints); + if (pdec_ints & pded_madk) + return true; + + return false; +} +EXPORT_SYMBOL(rk628_hdmirx_is_signal_change_ists); diff --git a/drivers/media/i2c/rk628/rk628_hdmirx.h b/drivers/media/i2c/rk628/rk628_hdmirx.h index 801ae63b7705..3aed4642da39 100644 --- a/drivers/media/i2c/rk628/rk628_hdmirx.h +++ b/drivers/media/i2c/rk628/rk628_hdmirx.h @@ -8,6 +8,8 @@ #ifndef __RK628_HDMIRX_H #define __RK628_HDMIRX_H +#include +#include #include #include "rk628.h" @@ -188,6 +190,8 @@ #define I2S_32_16(x) UPDATE(x, 0, 0) #define HDMI_RX_AUD_PAO_CTRL (HDMI_RX_BASE + 0x0264) #define PAO_RATE(x) UPDATE(x, 17, 16) +#define HDMI_RX_AUD_SPARE (HDMI_RX_BASE + 0x0268) +#define AUDS_MAS_SAMPLE_FLAT GENMASK(7, 4) #define HDMI_RX_AUD_FIFO_STS (HDMI_RX_BASE + 0x027c) #define HDMI_RX_AUDPLL_GEN_CTS (HDMI_RX_BASE + 0x0280) #define HDMI_RX_AUDPLL_GEN_N (HDMI_RX_BASE + 0x0284) @@ -316,7 +320,21 @@ #define HDMI_RX_PDEC_ICLR (HDMI_RX_BASE + 0x0f88) #define HDMI_RX_PDEC_ISET (HDMI_RX_BASE + 0x0f8c) #define HDMI_RX_AUD_CEC_IEN_CLR (HDMI_RX_BASE + 0x0f90) +#define HDMI_RX_AUD_CEC_IEN_SET (HDMI_RX_BASE + 0x0f94) +#define ERROR_INIT_ENSET BIT(20) +#define ARBLST_ENSET BIT(19) +#define NACK_ENSET BIT(18) +#define EOM_ENSET BIT(17) +#define DONE_ENSET BIT(16) +#define HDMI_RX_AUD_CEC_ISTS (HDMI_RX_BASE + 0x0f98) +#define ERROR_INIT BIT(20) +#define ARBLST BIT(19) +#define NACK BIT(18) +#define EOM BIT(17) +#define DONE BIT(16) #define HDMI_RX_AUD_CEC_IEN (HDMI_RX_BASE + 0x0f9c) +#define HDMI_RX_AUD_CEC_ICLR (HDMI_RX_BASE + 0x0fa0) +#define HDMI_RX_AUD_CEC_ISET (HDMI_RX_BASE + 0x0fa4) #define HDMI_RX_AUD_FIFO_IEN_CLR (HDMI_RX_BASE + 0x0fa8) #define HDMI_RX_AUD_FIFO_IEN_SET (HDMI_RX_BASE + 0x0fac) #define AFIF_OVERFL_ENSET BIT(4) @@ -335,6 +353,8 @@ #define HDMI_RX_MD_IEN_CLR (HDMI_RX_BASE + 0x0fc0) #define HDMI_RX_MD_IEN_SET (HDMI_RX_BASE + 0x0fc4) #define VACT_LIN_ENSET BIT(9) +#define VS_CLK_ENSET BIT(8) +#define VTOT_CLK_ENSET BIT(7) #define HACT_PIX_ENSET BIT(6) #define HS_CLK_ENSET BIT(5) #define DE_ACTIVITY_ENSET BIT(2) @@ -342,6 +362,8 @@ #define HS_ACT_ENSET BIT(0) #define HDMI_RX_MD_ISTS (HDMI_RX_BASE + 0x0fc8) #define VACT_LIN_ISTS BIT(9) +#define VS_CLK_ISTS BIT(8) +#define VTOT_CLK_ISTS BIT(7) #define HACT_PIX_ISTS BIT(6) #define HS_CLK_ISTS BIT(5) #define DE_ACTIVITY_ISTS BIT(2) @@ -365,11 +387,29 @@ #define HDMI_RX_DMI_DISABLE_IF (HDMI_RX_BASE + 0x0ff4) #define VID_ENABLE(x) UPDATE(x, 7, 7) #define VID_ENABLE_MASK BIT(7) +#define CEC_ENABLE(x) UPDATE(x, 5, 5) +#define CEC_ENABLE_MASK BIT(5) #define AUD_ENABLE(x) UPDATE(x, 4, 4) #define AUD_ENABLE_MASK BIT(4) #define HDMI_ENABLE(x) UPDATE(x, 2, 2) #define HDMI_ENABLE_MASK BIT(2) +#define HDMI_RX_CEC_CTRL (HDMI_RX_BASE + 0x1f00) +#define CEC_CTRL_FRAME_TYP (3 << 1) +#define CEC_CTRL_IMMED (2 << 1) +#define CEC_CTRL_NORMAL (1 << 1) +#define CEC_CTRL_RETRY (0 << 1) +#define CEC_SEND BIT(0) +#define HDMI_RX_CEC_MASK (HDMI_RX_BASE + 0x1f08) +#define HDMI_RX_CEC_ADDR_L (HDMI_RX_BASE + 0x1f14) +#define HDMI_RX_CEC_ADDR_H (HDMI_RX_BASE + 0x1f18) +#define HDMI_RX_CEC_TX_CNT (HDMI_RX_BASE + 0x1f1c) +#define HDMI_RX_CEC_RX_CNT (HDMI_RX_BASE + 0x1f20) +#define HDMI_RX_CEC_TX_DATA_0 (HDMI_RX_BASE + 0x1f40) +#define HDMI_RX_CEC_RX_DATA_0 (HDMI_RX_BASE + 0x1f80) +#define HDMI_RX_CEC_LOCK (HDMI_RX_BASE + 0x1fc0) +#define HDMI_RX_CEC_WAKEUPCTRL (HDMI_RX_BASE + 0x1fc4) + #define HDMI_RX_IVECTOR_INDEX_CB (HDMI_RX_BASE + 0x32e4) #define HDMI_RX_MAX_REGISTER HDMI_RX_IVECTOR_INDEX_CB @@ -430,6 +470,18 @@ struct rk628_hdcp { struct hdcp_keys *keys; }; +struct rk628_hdmirx_cec { + struct device *dev; + struct rk628 *rk628; + u32 addresses; + struct cec_adapter *adap; + struct cec_msg rx_msg; + unsigned int tx_status; + bool tx_done; + bool rx_done; + struct cec_notifier *notify; +}; + void rk628_hdmirx_set_hdcp(struct rk628 *rk628, struct rk628_hdcp *hdcp, bool en); void rk628_hdmirx_controller_setup(struct rk628 *rk628); @@ -463,5 +515,12 @@ int rk628_hdmirx_get_timings(struct rk628 *rk628, u8 rk628_hdmirx_get_range(struct rk628 *rk628); void rk628_hdmirx_controller_reset(struct rk628 *rk628); bool rk628_hdmirx_scdc_ced_err(struct rk628 *rk628); +bool rk628_hdmirx_is_signal_change_ists(struct rk628 *rk628); +void rk628_hdmirx_cec_irq(struct rk628 *rk628, struct rk628_hdmirx_cec *cec); +struct rk628_hdmirx_cec *rk628_hdmirx_cec_register(struct rk628 *rk628); +void rk628_hdmirx_cec_unregister(struct rk628_hdmirx_cec *cec); +void rk628_hdmirx_cec_hpd(struct rk628_hdmirx_cec *cec, bool en); +void rk628_hdmirx_cec_state_reconfiguration(struct rk628 *rk628, + struct rk628_hdmirx_cec *cec); #endif diff --git a/drivers/media/i2c/rk628/rk628_post_process.c b/drivers/media/i2c/rk628/rk628_post_process.c index 6126bfbf13d6..2b9173be8987 100644 --- a/drivers/media/i2c/rk628/rk628_post_process.c +++ b/drivers/media/i2c/rk628/rk628_post_process.c @@ -1293,7 +1293,7 @@ static int rockchip_calc_post_csc(struct post_csc_coef *csc_simple_coef, static void rk628_post_process_csc(struct rk628 *rk628) { enum bus_format in_fmt, out_fmt; - struct post_csc_coef csc_coef; + struct post_csc_coef csc_coef = {}; bool is_input_yuv, is_output_yuv; u32 color_space = V4L2_COLORSPACE_BT709F; u32 csc_mode; diff --git a/drivers/media/i2c/sc450ai.c b/drivers/media/i2c/sc450ai.c index da39d54640ff..8e0bbc256717 100644 --- a/drivers/media/i2c/sc450ai.c +++ b/drivers/media/i2c/sc450ai.c @@ -27,6 +27,8 @@ #include #include #include "../platform/rockchip/isp/rkisp_tb_helper.h" +#include "cam-tb-setup.h" +#include "cam-sleep-wakeup.h" #define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x01) @@ -163,6 +165,7 @@ struct sc450ai { bool is_thunderboot; bool is_first_streamoff; struct preisp_hdrae_exp_s init_hdrae_exp; + struct cam_sw_info *cam_sw_inf; }; #define to_sc450ai(sd) container_of(sd, struct sc450ai, subdev) @@ -1251,6 +1254,8 @@ static int __sc450ai_power_on(struct sc450ai *sc450ai) return ret; } + cam_sw_regulator_bulk_init(sc450ai->cam_sw_inf, SC450AI_NUM_SUPPLIES, sc450ai->supplies); + if (sc450ai->is_thunderboot) return 0; @@ -1317,6 +1322,51 @@ static void __sc450ai_power_off(struct sc450ai *sc450ai) regulator_bulk_disable(SC450AI_NUM_SUPPLIES, sc450ai->supplies); } +#if IS_REACHABLE(CONFIG_VIDEO_CAM_SLEEP_WAKEUP) +static int __maybe_unused sc450ai_resume(struct device *dev) +{ + int ret; + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct sc450ai *sc450ai = to_sc450ai(sd); + + cam_sw_prepare_wakeup(sc450ai->cam_sw_inf, dev); + + usleep_range(4000, 5000); + cam_sw_write_array(sc450ai->cam_sw_inf); + + if (__v4l2_ctrl_handler_setup(&sc450ai->ctrl_handler)) + dev_err(dev, "__v4l2_ctrl_handler_setup fail!"); + + if (sc450ai->has_init_exp && sc450ai->cur_mode != NO_HDR) { // hdr mode + ret = sc450ai_ioctl(&sc450ai->subdev, PREISP_CMD_SET_HDRAE_EXP, + &sc450ai->cam_sw_inf->hdr_ae); + if (ret) { + dev_err(&sc450ai->client->dev, "set exp fail in hdr mode\n"); + return ret; + } + } + return 0; +} + +static int __maybe_unused sc450ai_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct v4l2_subdev *sd = i2c_get_clientdata(client); + struct sc450ai *sc450ai = to_sc450ai(sd); + + cam_sw_write_array_cb_init(sc450ai->cam_sw_inf, client, + (void *)sc450ai->cur_mode->reg_list, + (sensor_write_array)sc450ai_write_array); + cam_sw_prepare_sleep(sc450ai->cam_sw_inf); + + return 0; +} +#else +#define sc450ai_resume NULL +#define sc450ai_suspend NULL +#endif + static int __maybe_unused sc450ai_runtime_resume(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -1377,6 +1427,7 @@ static int sc450ai_enum_frame_interval(struct v4l2_subdev *sd, static const struct dev_pm_ops sc450ai_pm_ops = { SET_RUNTIME_PM_OPS(sc450ai_runtime_suspend, sc450ai_runtime_resume, NULL) + SET_LATE_SYSTEM_SLEEP_PM_OPS(sc450ai_suspend, sc450ai_resume) }; #ifdef CONFIG_VIDEO_V4L2_SUBDEV_API @@ -1750,6 +1801,14 @@ static int sc450ai_probe(struct i2c_client *client, goto err_power_off; #endif + if (!sc450ai->cam_sw_inf) { + sc450ai->cam_sw_inf = cam_sw_init(); + cam_sw_clk_init(sc450ai->cam_sw_inf, sc450ai->xvclk, + sc450ai->cur_mode->xvclk_freq); + cam_sw_reset_pin_init(sc450ai->cam_sw_inf, sc450ai->reset_gpio, 0); + cam_sw_pwdn_pin_init(sc450ai->cam_sw_inf, sc450ai->pwdn_gpio, 1); + } + memset(facing, 0, sizeof(facing)); if (strcmp(sc450ai->module_facing, "back") == 0) facing[0] = 'b'; @@ -1800,6 +1859,8 @@ static int sc450ai_remove(struct i2c_client *client) v4l2_ctrl_handler_free(&sc450ai->ctrl_handler); mutex_destroy(&sc450ai->mutex); + cam_sw_deinit(sc450ai->cam_sw_inf); + pm_runtime_disable(&client->dev); if (!pm_runtime_status_suspended(&client->dev)) __sc450ai_power_off(sc450ai); diff --git a/drivers/misc/rk628/Kconfig b/drivers/misc/rk628/Kconfig index 7f89f18f42a1..d986ec89808f 100644 --- a/drivers/misc/rk628/Kconfig +++ b/drivers/misc/rk628/Kconfig @@ -16,6 +16,14 @@ config RK628_MISC_HDMITX Say y here to enable Rockchip rk628 misc hdmitx driver. This option is used to support hdmi output. +config RK628_MISC_GPIO_TEST + bool "RK628 gpio test function support" + default n + depends on RK628_MISC + help + Say y here to enable Rockchip rk628 gpio test function support. + This option is used to switch gpio mux and output level. + config ROCKCHIP_THUNDER_BOOT_RK628 bool "Rockchip RK628 Thunder Boot support" default n diff --git a/drivers/misc/rk628/rk628_efuse.c b/drivers/misc/rk628/rk628_efuse.c index ee41b0d0fb72..1fb0e33a321c 100644 --- a/drivers/misc/rk628/rk628_efuse.c +++ b/drivers/misc/rk628/rk628_efuse.c @@ -9,6 +9,7 @@ #include #include "rk628.h" +#include "rk628_efuse.h" #define EFUSE_SIZE 64 diff --git a/drivers/misc/rk628/rk628_hdmirx.c b/drivers/misc/rk628/rk628_hdmirx.c index 5667f10b8356..473ee9bed174 100644 --- a/drivers/misc/rk628/rk628_hdmirx.c +++ b/drivers/misc/rk628/rk628_hdmirx.c @@ -93,7 +93,7 @@ struct rk628_hdmirx { struct rk628_audiostate audio_state; }; -void rk628_hdmirx_reset_control_assert(struct rk628 *rk628) +static void rk628_hdmirx_reset_control_assert(struct rk628 *rk628) { /* presetn_hdmirx */ rk628_i2c_write(rk628, CRU_SOFTRST_CON02, 0x40004); @@ -101,7 +101,7 @@ void rk628_hdmirx_reset_control_assert(struct rk628 *rk628) rk628_i2c_write(rk628, CRU_SOFTRST_CON02, 0x10001000); } -void rk628_hdmirx_reset_control_deassert(struct rk628 *rk628) +static void rk628_hdmirx_reset_control_deassert(struct rk628 *rk628) { /* presetn_hdmirx */ rk628_i2c_write(rk628, CRU_SOFTRST_CON02, 0x40000); @@ -127,7 +127,7 @@ static u32 hdmirx_phy_read(struct rk628 *rk628, u32 offset) return val; } -void rk628_hdmirx_phy_enable(struct rk628 *rk628, bool is_hdmi2) +static void rk628_hdmirx_phy_enable(struct rk628 *rk628, bool is_hdmi2) { hdmirx_phy_write(rk628, 0x02, 0x1860); hdmirx_phy_write(rk628, 0x03, 0x0060); @@ -203,7 +203,7 @@ static const struct file_operations rk628_hdmirx_phy_fops = { .release = single_release, }; -void rk628_hdmirx_phy_set_clrdpt(struct rk628 *rk628, bool is_8bit) +static void rk628_hdmirx_phy_set_clrdpt(struct rk628 *rk628, bool is_8bit) { if (is_8bit) hdmirx_phy_write(rk628, 0x03, 0x0000); diff --git a/drivers/misc/rk628/rk628_pinctrl.c b/drivers/misc/rk628/rk628_pinctrl.c index 115f9044115a..19e5316cfb4f 100644 --- a/drivers/misc/rk628/rk628_pinctrl.c +++ b/drivers/misc/rk628/rk628_pinctrl.c @@ -6,6 +6,7 @@ */ #include "rk628.h" +#include "rk628_gpio.h" static int rk628_calc_mux_offset(struct rk628 *rk628, int mux, int reg, int offset) { @@ -178,7 +179,7 @@ int rk628_misc_gpio_set_direction(struct rk628 *rk628, int gpio, int direction) return 0; } - +#ifdef RK628_MISC_GPIO_TEST int rk628_misc_iomux_init(struct rk628 *rk628) { int i, iomux_base, offset, val, mux; @@ -195,7 +196,7 @@ int rk628_misc_iomux_init(struct rk628 *rk628) return 0; } - +#endif int rk628_misc_gpio_direction_input(struct rk628 *rk628, int gpio) { @@ -295,8 +296,7 @@ int rk628_misc_gpio_set_pull_highz_up_down(struct rk628 *rk628, int gpio, int pu return 0; } - - +#ifdef RK628_MISC_GPIO_TEST int rk628_misc_gpio_test_all(struct rk628 *rk628) { int i; @@ -323,4 +323,5 @@ int rk628_misc_gpio_test_all(struct rk628 *rk628) return 0; } +#endif diff --git a/drivers/misc/rk628/rk628_post_process.c b/drivers/misc/rk628/rk628_post_process.c index f6479ace3b92..d2de17aed21e 100644 --- a/drivers/misc/rk628/rk628_post_process.c +++ b/drivers/misc/rk628/rk628_post_process.c @@ -9,6 +9,7 @@ #include "rk628.h" #include "rk628_config.h" #include "rk628_cru.h" +#include "rk628_post_process.h" #define PQ_CSC_HUE_TABLE_NUM 256 #define PQ_CSC_MODE_COEF_COMMENT_LEN 32 @@ -1037,30 +1038,6 @@ static const struct csc_mapping csc_mapping_table[] = { }, }; -static const struct rk_pq_csc_coef r2y_for_y2y = { - 306, 601, 117, - -151, -296, 446, - 630, -527, -102, -}; - -static const struct rk_pq_csc_coef y2r_for_y2y = { - 1024, -0, 1167, - 1024, -404, -594, - 1024, 2081, -1, -}; - -static const struct rk_pq_csc_coef rgb_input_swap_matrix = { - 0, 0, 1, - 1, 0, 0, - 0, 1, 0, -}; - -static const struct rk_pq_csc_coef yuv_output_swap_matrix = { - 0, 0, 1, - 1, 0, 0, - 0, 1, 0, -}; - static bool is_rgb_format(u64 format) { switch (format) { diff --git a/include/dt-bindings/clock/rk628-cgu.h b/include/dt-bindings/clock/rk628-cgu.h deleted file mode 100644 index bc2dd772c47d..000000000000 --- a/include/dt-bindings/clock/rk628-cgu.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ -/* - * Copyright (c) 2020 Rockchip Electronics Co. Ltd. - * - * Author: Wyon Bi - */ - -#ifndef _RK628_CGU_H -#define _RK628_CGU_H - -#define CGU_CLK_CPLL 1 -#define CGU_CLK_GPLL 2 -#define CGU_CLK_CPLL_MUX 3 -#define CGU_CLK_GPLL_MUX 4 -#define CGU_PCLK_GPIO0 5 -#define CGU_PCLK_GPIO1 6 -#define CGU_PCLK_GPIO2 7 -#define CGU_PCLK_GPIO3 8 -#define CGU_PCLK_TXPHY_CON 9 -#define CGU_PCLK_EFUSE 10 -#define CGU_PCLK_DSI0 11 -#define CGU_PCLK_DSI1 12 -#define CGU_PCLK_CSI 13 -#define CGU_PCLK_HDMITX 14 -#define CGU_PCLK_RXPHY 15 -#define CGU_PCLK_HDMIRX 16 -#define CGU_PCLK_DPRX 17 -#define CGU_PCLK_GVIHOST 18 -#define CGU_CLK_CFG_DPHY0 19 -#define CGU_CLK_CFG_DPHY1 20 -#define CGU_CLK_TXESC 21 -#define CGU_CLK_DPRX_VID 22 -#define CGU_CLK_IMODET 23 -#define CGU_CLK_HDMIRX_AUD 24 -#define CGU_CLK_HDMIRX_CEC 25 -#define CGU_CLK_RX_READ 26 -#define CGU_SCLK_VOP 27 -#define CGU_PCLK_LOGIC 28 -#define CGU_CLK_GPIO_DB0 29 -#define CGU_CLK_GPIO_DB1 30 -#define CGU_CLK_GPIO_DB2 31 -#define CGU_CLK_GPIO_DB3 32 -#define CGU_CLK_I2S_8CH_SRC 33 -#define CGU_CLK_I2S_8CH_FRAC 34 -#define CGU_MCLK_I2S_8CH 35 -#define CGU_I2S_MCLKOUT 36 -#define CGU_BT1120DEC 37 -#define CGU_CLK_TESTOUT 38 -#define CGU_NR_CLKS 39 - -#endif diff --git a/include/dt-bindings/reset/rk628-rgu.h b/include/dt-bindings/reset/rk628-rgu.h deleted file mode 100644 index e0c714bef00c..000000000000 --- a/include/dt-bindings/reset/rk628-rgu.h +++ /dev/null @@ -1,43 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (c) 2020 Rockchip Electronics Co. Ltd. - * - * Author: Wyon Bi - */ - -#ifndef _RK628_RGU_H -#define _RK628_RGU_H - -#define RGU_LOGIC 0 -#define RGU_CRU 1 -#define RGU_REGFILE 2 -#define RGU_I2C2APB 3 -#define RGU_EFUSE 4 -#define RGU_ADAPTER 5 -#define RGU_CLK_RX 6 -#define RGU_BT1120DEC 7 -#define RGU_VOP 8 -#define RGU_GPIO0 9 -#define RGU_GPIO1 10 -#define RGU_GPIO2 11 -#define RGU_GPIO3 12 -#define RGU_GPIO_DB0 13 -#define RGU_GPIO_DB1 14 -#define RGU_GPIO_DB2 15 -#define RGU_GPIO_DB3 16 -#define RGU_RXPHY 17 -#define RGU_HDMIRX 18 -#define RGU_TXPHY_CON 19 -#define RGU_HDMITX 20 -#define RGU_GVIHOST 21 -#define RGU_DSI0 22 -#define RGU_DSI1 23 -#define RGU_CSI 24 -#define RGU_TXDATA 25 -#define RGU_DECODER 26 -#define RGU_ENCODER 27 -#define RGU_HDMIRX_PON 28 -#define RGU_TXBYTEHS 29 -#define RGU_TXESC 30 - -#endif