From 0a23f11a17728b0ba3462bf789ddec5995c0361a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= Date: Tue, 23 Jun 2020 19:43:24 +0200 Subject: [PATCH 025/464] ARM: dts: sun8i-a83t-tbs-a711: Add camera sensors (HM5065, GC2145) The tablet has two cameras, that can be switched between. Add support for the both of them. Sensor is connected via parallel bus to CSI and via I2C bus to PE14/PE15 pins. Enable CSI module and add the node for HM5065 camera sensor. Camera sensors are connected via I2C to PE14/PE15 pins on A83T. Unfortunately while the A83T datasheet suggests TWI2 I2C controller can be configured to have SDA/SCL on these pins, this configuration doesn't work in reality. We need to either use CCI I2C controller that is part of the CSI module, or as is done in this patch, use GPIO based bitbanging I2C driver. Reduce camera IOVDD voltage. Force dvdd-csi-r/f regulators to 1.8V. This is required by camera sensors that are connected to them. Signed-off-by: Ondrej Jirman --- .../dts/allwinner/sun8i-a83t-tbs-a711.dts | 101 +++++++++++++++++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/allwinner/sun8i-a83t-tbs-a711.dts b/arch/arm/boot/dts/allwinner/sun8i-a83t-tbs-a711.dts index 3d1493ce018d..62355c497b74 100644 --- a/arch/arm/boot/dts/allwinner/sun8i-a83t-tbs-a711.dts +++ b/arch/arm/boot/dts/allwinner/sun8i-a83t-tbs-a711.dts @@ -70,6 +70,16 @@ backlight: backlight { default-brightness-level = <9>; }; + i2c_gpio: i2c-gpio { + compatible = "i2c-gpio"; + /* PE15 = sda, PE14 = scl */ + sda-gpios = <&pio 4 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + scl-gpios = <&pio 4 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + i2c-gpio,delay-us = <1>; /* ~100 kHz */ + #address-cells = <1>; + #size-cells = <0>; + }; + panel { compatible = "tbs,a711-panel", "panel-lvds"; backlight = <&backlight>; @@ -220,6 +230,13 @@ link2_codec: codec { }; }; +&ccu { + /* Use a stable clock source with known fixed rate for MCLK */ + assigned-clocks = <&ccu CLK_CSI_MCLK>; + assigned-clock-parents = <&osc24M>; + assigned-clock-rates = <24000000>; +}; + &cpu0 { cpu-supply = <®_dcdc2>; }; @@ -228,6 +245,37 @@ &cpu100 { cpu-supply = <®_dcdc3>; }; +&csi { + pinctrl-names = "default"; + pinctrl-0 = <&csi_8bit_parallel_pins>, <&csi_mclk_pin>; + status = "okay"; + + port { + #address-cells = <1>; + #size-cells = <0>; + + csi_hm5065_ep: endpoint@0 { + reg = <0>; + remote-endpoint = <&hm5065_ep>; + bus-width = <8>; + data-active = <1>; + pclk-sample = <0>; + hsync-active = <0>; + vsync-active = <1>; + }; + + csi_gc2145_ep: endpoint@1 { + reg = <1>; + remote-endpoint = <&gc2145_ep>; + bus-width = <8>; + hsync-active = <1>; + vsync-active = <1>; + data-active = <1>; + pclk-sample = <1>; + }; + }; +}; + &de { status = "okay"; }; @@ -288,6 +336,55 @@ npc100: nfc@28 { }; }; +&i2c_gpio { + hm5065: rear-camera@1f { + compatible = "himax,hm5065"; + reg = <0x1f>; + clocks = <&ccu CLK_CSI_MCLK>; + clock-names = "xclk"; + IOVDD-supply = <®_dldo3>; + AVDD-supply = <®_dldo4>; + DVDD-supply = <®_eldo3>; + AFVDD-supply = <®_dldo3>; + reset-gpios = <&pio 4 18 GPIO_ACTIVE_LOW>; /* PE18 */ + enable-gpios = <&pio 4 19 GPIO_ACTIVE_HIGH>; /* PE19 */ + + port { + hm5065_ep: endpoint { + remote-endpoint = <&csi_hm5065_ep>; + bus-width = <8>; + data-active = <1>; + pclk-sample = <0>; + hsync-active = <0>; + vsync-active = <1>; + }; + }; + }; + + gc2145: front-camera@3c { + compatible = "galaxycore,gc2145"; + reg = <0x3c>; + clocks = <&ccu CLK_CSI_MCLK>; + clock-names = "xclk"; + IOVDD-supply = <®_dldo3>; + AVDD-supply = <®_dldo4>; + DVDD-supply = <®_eldo3>; + reset-gpios = <&pio 4 16 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; /* PE16 */ + enable-gpios = <&pio 4 17 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; /* PE17 */ + + port { + gc2145_ep: endpoint { + remote-endpoint = <&csi_gc2145_ep>; + bus-width = <8>; + hsync-active = <1>; + vsync-active = <1>; + data-active = <1>; + pclk-sample = <1>; + }; + }; + }; +}; + &i2s0 { status = "okay"; pinctrl-names = "default"; @@ -509,7 +606,7 @@ ®_drivevbus { }; ®_eldo1 { - regulator-min-microvolt = <1200000>; + regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "pvdd-nfc"; regulator-always-on; @@ -522,7 +619,7 @@ ®_eldo2 { }; ®_eldo3 { - regulator-min-microvolt = <1200000>; + regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "dvdd-csi-f"; }; -- 2.34.1