--- .../arm64/boot/dts/renesas/r8a7795-salvator-xs.dts | 10 - arch/arm64/boot/dts/renesas/salvator-common.dtsi | 431 ++++++++++----------- drivers/iio/imu/Kconfig | 1 + drivers/iio/imu/Makefile | 1 + drivers/media/i2c/adv748x/adv748x-core.c | 48 ++- drivers/media/i2c/adv748x/adv748x.h | 12 + drivers/pinctrl/sh-pfc/pfc-r8a7795.c | 6 +- 7 files changed, 260 insertions(+), 249 deletions(-) diff --git a/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts b/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts index 498f788..b4236a5 100644 --- a/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts +++ b/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts @@ -166,16 +166,6 @@ remote-endpoint = <&rcar_dw_hdmi1_out>; }; -&lvds0 { - ports { - port@1 { - lvds0_out: endpoint { - remote-endpoint = <&lvds_in>; - }; - }; - }; -}; - &ohci2 { status = "okay"; }; diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi b/arch/arm64/boot/dts/renesas/salvator-common.dtsi index 878ed7c..32d19d9 100644 --- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi +++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi @@ -34,6 +34,10 @@ aliases { serial0 = &scif2; serial1 = &scif1; + serial2 = &scif5; + serial3 = &hscif1; + serial4 = &hscif0; + serial5 = &hscif2; ethernet0 = &avb; }; @@ -62,65 +66,26 @@ resets = <&cpg 922>; }; - backlight: backlight { - compatible = "pwm-backlight"; - pwms = <&pwm1 0 50000>; - - brightness-levels = <256 128 64 16 8 4 0>; - default-brightness-level = <6>; - - power-supply = <®_12v>; - enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>; - }; - - cvbs-in { - compatible = "composite-video-connector"; - label = "CVBS IN"; - - port { - cvbs_con: endpoint { - remote-endpoint = <&adv7482_ain7>; - }; - }; - }; - - hdmi-in { + hdmi0-in { compatible = "hdmi-connector"; - label = "HDMI IN"; + label = "HDMI0 IN"; type = "a"; port { hdmi_in_con: endpoint { - remote-endpoint = <&adv7482_hdmi>; + remote-endpoint = <&adv7481_hdmi>; }; }; }; - lvds { - compatible = "panel-lvds"; - - width-mm = <210>; - height-mm = <158>; - - data-mapping = "jeida-24"; - enable-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>; - - panel-timing { - /* 1024x768 @60Hz */ - clock-frequency = <65000000>; - hactive = <1024>; - vactive = <768>; - hsync-len = <136>; - hfront-porch = <20>; - hback-porch = <160>; - vfront-porch = <3>; - vback-porch = <29>; - vsync-len = <6>; - }; + hdmi2-in { + compatible = "hdmi-connector"; + label = "HDMI2 IN"; + type = "a"; port { - lvds_in: endpoint { - remote-endpoint = <&lvds0_out>; + hdmi_in_con2: endpoint { + remote-endpoint = <&adv7481_hdmi2>; }; }; }; @@ -160,17 +125,6 @@ dais = <&rsnd_port0>; }; - vbus0_usb2: regulator-vbus0-usb2 { - compatible = "regulator-fixed"; - - regulator-name = "USB20_VBUS0"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - - gpio = <&gpio6 16 GPIO_ACTIVE_HIGH>; - enable-active-high; - }; - vcc_sdhi0: regulator-vcc-sdhi0 { compatible = "regulator-fixed"; @@ -241,40 +195,6 @@ }; }; - vga { - compatible = "vga-connector"; - no-use-ddc; - max-pixelclock = <100000>; - - port { - vga_in: endpoint { - remote-endpoint = <&adv7123_out>; - }; - }; - }; - - vga-encoder { - compatible = "adi,adv7123"; - - ports { - #address-cells = <1>; - #size-cells = <0>; - - port@0 { - reg = <0>; - adv7123_in: endpoint { - remote-endpoint = <&du_out_rgb>; - }; - }; - port@1 { - reg = <1>; - adv7123_out: endpoint { - remote-endpoint = <&vga_in>; - }; - }; - }; - }; - x12_clk: x12 { compatible = "fixed-clock"; #clock-cells = <0>; @@ -325,49 +245,41 @@ }; }; -&csi20 { +&csi40 { status = "okay"; ports { port@0 { reg = <0>; - csi20_in: endpoint { + + csi40_in: endpoint { clock-lanes = <0>; - data-lanes = <1>; - remote-endpoint = <&adv7482_txb>; + data-lanes = <1 2 3 4>; + remote-endpoint = <&adv7481_txa>; }; }; }; }; -&csi40 { +&csi41 { status = "okay"; ports { port@0 { reg = <0>; - csi40_in: endpoint { + csi41_in: endpoint { clock-lanes = <0>; data-lanes = <1 2 3 4>; - remote-endpoint = <&adv7482_txa>; + remote-endpoint = <&adv7481_txa2>; }; }; }; }; &du { - pinctrl-0 = <&du_pins>; - pinctrl-names = "default"; status = "okay"; - ports { - port@0 { - endpoint { - remote-endpoint = <&adv7123_in>; - }; - }; - }; }; &ehci0 { @@ -383,12 +295,27 @@ clock-frequency = <32768>; }; +&hscif0 { + pinctrl-0 = <&hscif0_pins>; + pinctrl-names = "default"; + uart-has-rtscts; + + status = "okay"; +}; + &hscif1 { pinctrl-0 = <&hscif1_pins>; pinctrl-names = "default"; /* Please use exclusively to the scif1 node */ - /* status = "okay"; */ + status = "okay"; +}; + +&hscif2 { + pinctrl-0 = <&hscif2_pins>; + pinctrl-names = "default"; + + status = "okay"; }; &hsusb { @@ -404,24 +331,65 @@ clock-frequency = <100000>; - ak4613: codec@10 { - compatible = "asahi-kasei,ak4613"; - #sound-dai-cells = <0>; - reg = <0x10>; - clocks = <&rcar_sound 3>; + video-receiver@70 { + compatible = "adi,adv7481"; + reg = <0x70>; - asahi-kasei,in1-single-end; - asahi-kasei,in2-single-end; - asahi-kasei,out1-single-end; - asahi-kasei,out2-single-end; - asahi-kasei,out3-single-end; - asahi-kasei,out4-single-end; - asahi-kasei,out5-single-end; - asahi-kasei,out6-single-end; + #address-cells = <1>; + #size-cells = <0>; - port { - ak4613_endpoint: endpoint { - remote-endpoint = <&rsnd_endpoint0>; + interrupt-parent = <&gpio0>; + interrupt-names = "intrq1", "intrq3"; + interrupts = <4 IRQ_TYPE_LEVEL_LOW>, + <5 IRQ_TYPE_LEVEL_LOW>; + + port@8 { + reg = <8>; + + adv7481_hdmi: endpoint { + remote-endpoint = <&hdmi_in_con>; + }; + }; + + port@a { + reg = <10>; + + adv7481_txa: endpoint { + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + remote-endpoint = <&csi40_in>; + }; + }; + + }; + + video-receiver@71 { + compatible = "adi,adv7481"; + reg = <0x71>; + + #address-cells = <1>; + #size-cells = <0>; + + interrupt-parent = <&gpio6>; + interrupt-names = "intrq1", "intrq3"; + interrupts = <0 IRQ_TYPE_LEVEL_LOW>, + <1 IRQ_TYPE_LEVEL_LOW>; + + port@8 { + reg = <8>; + + adv7481_hdmi2: endpoint { + remote-endpoint = <&hdmi_in_con2>; + }; + }; + + port@a { + reg = <10>; + + adv7481_txa2: endpoint { + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + remote-endpoint = <&csi41_in>; }; }; }; @@ -438,75 +406,62 @@ }; }; -&i2c4 { +&i2c3 { + pinctrl-0 = <&i2c3_pins>; + pinctrl-names = "default"; + status = "okay"; - pca9654: gpio@20 { - compatible = "onnn,pca9654"; - reg = <0x20>; - gpio-controller; - #gpio-cells = <2>; - }; + clock-frequency = <100000>; - csa_vdd: adc@7c { - compatible = "maxim,max9611"; - reg = <0x7c>; + asm330lhh@6a { + compatible = "st,asm330lhh"; + reg = <0x6a>; - shunt-resistor-micro-ohms = <5000>; + interrupt-names = "int1", "int2"; + interrupts = <&gpio6 23 IRQ_TYPE_EDGE_RISING>, + <&gpio2 6 IRQ_TYPE_EDGE_RISING>; }; +}; - csa_dvfs: adc@7f { - compatible = "maxim,max9611"; - reg = <0x7f>; +&i2c4 { + status = "okay"; - shunt-resistor-micro-ohms = <5000>; + versaclock5: clock-generator@68 { + compatible = "idt,9fgv0841"; + reg = <0x68>; + #clock-cells = <1>; + clocks = <&x23_clk>; + clock-names = "xin"; }; +}; - video-receiver@70 { - compatible = "adi,adv7482"; - reg = <0x70>; - - #address-cells = <1>; - #size-cells = <0>; - - interrupt-parent = <&gpio6>; - interrupt-names = "intrq1", "intrq2"; - interrupts = <30 IRQ_TYPE_LEVEL_LOW>, - <31 IRQ_TYPE_LEVEL_LOW>; - - port@7 { - reg = <7>; - - adv7482_ain7: endpoint { - remote-endpoint = <&cvbs_con>; - }; - }; - - port@8 { - reg = <8>; +&i2c5 { + pinctrl-0 = <&i2c5_pins>; + pinctrl-names = "default"; - adv7482_hdmi: endpoint { - remote-endpoint = <&hdmi_in_con>; - }; - }; + status = "okay"; - port@a { - reg = <10>; + clock-frequency = <100000>; - adv7482_txa: endpoint { - clock-lanes = <0>; - data-lanes = <1 2 3 4>; - remote-endpoint = <&csi40_in>; - }; - }; + ak4613: codec@10 { + compatible = "asahi-kasei,ak4613"; + #sound-dai-cells = <0>; + reg = <0x10>; + clocks = <&rcar_sound 3>; - port@b { - reg = <11>; + asahi-kasei,in1-single-end; + asahi-kasei,in2-single-end; + asahi-kasei,out1-single-end; + asahi-kasei,out2-single-end; + asahi-kasei,out3-single-end; + asahi-kasei,out4-single-end; + asahi-kasei,out5-single-end; + asahi-kasei,out6-single-end; - adv7482_txb: endpoint { - clock-lanes = <0>; - data-lanes = <1>; - remote-endpoint = <&csi20_in>; + port { + ak4613_endpoint: endpoint { + remote-endpoint = <&rsnd_endpoint0>; }; }; }; @@ -550,10 +505,6 @@ }; }; -&lvds0 { - status = "okay"; -}; - &ohci0 { dr_mode = "otg"; status = "okay"; @@ -565,6 +516,7 @@ &pcie_bus_clk { clock-frequency = <100000000>; + status = "okay"; }; &pciec0 { @@ -575,6 +527,21 @@ status = "okay"; }; +&canfd { + pinctrl-0 = <&canfd0_pins &canfd1_pins>; + pinctrl-names = "default"; + + status = "okay"; + + channel0 { + status = "okay"; + }; + + channel1 { + status = "okay"; + }; +}; + &pfc { pinctrl-0 = <&scif_clk_pins>; pinctrl-names = "default"; @@ -597,38 +564,43 @@ }; }; - du_pins: du { - groups = "du_rgb888", "du_sync", "du_oddf", "du_clk_out_0"; - function = "du"; + hscif0_pins: hscif0 { + groups = "hscif0_data", "hscif0_ctrl"; + function = "hscif0"; }; hscif1_pins: hscif1 { - groups = "hscif1_data_a", "hscif1_ctrl_a"; + groups = "hscif1_data_a"; function = "hscif1"; }; + hscif2_pins: hscif2 { + groups = "hscif2_data_c"; + function = "hscif2"; + }; + i2c2_pins: i2c2 { groups = "i2c2_a"; function = "i2c2"; }; - irq0_pins: irq0 { - groups = "intc_ex_irq0"; - function = "intc_ex"; + i2c3_pins: i2c3 { + groups = "i2c3"; + function = "i2c3"; }; - pwm1_pins: pwm1 { - groups = "pwm1_a"; - function = "pwm1"; + i2c5_pins: i2c5 { + groups = "i2c5"; + function = "i2c5"; }; - pwm2_pins: pwm2 { - groups = "pwm2_a"; - function = "pwm2"; + irq0_pins: irq0 { + groups = "intc_ex_irq0"; + function = "intc_ex"; }; scif1_pins: scif1 { - groups = "scif1_data_a", "scif1_ctrl"; + groups = "scif1_data_b"; function = "scif1"; }; @@ -637,6 +609,11 @@ function = "scif2"; }; + scif5_pins: scif5 { + groups = "scif5_data_a"; + function = "scif5"; + }; + scif_clk_pins: scif_clk { groups = "scif_clk_a"; function = "scif_clk"; @@ -679,13 +656,13 @@ }; sound_pins: sound { - groups = "ssi01239_ctrl", "ssi0_data", "ssi1_data_a"; + groups = "ssi349_ctrl", "ssi3_data", "ssi4_data"; function = "ssi"; }; sound_clk_pins: sound_clk { - groups = "audio_clk_a_a", "audio_clk_b_a", "audio_clk_c_a", - "audio_clkout_a", "audio_clkout3_a"; + groups = "audio_clk_a_a", "audio_clk_b_a", + "audio_clkout_a", "audio_clkout3_b"; function = "audio_clk"; }; @@ -695,40 +672,24 @@ }; usb1_pins: usb1 { - mux { - groups = "usb1"; - function = "usb1"; - }; - - ovc { - pins = "GP_6_27"; - bias-pull-up; - }; - - pwen { - pins = "GP_6_26"; - bias-pull-down; - }; + groups = "usb1"; + function = "usb1"; }; usb30_pins: usb30 { groups = "usb30"; function = "usb30"; }; -}; - -&pwm1 { - pinctrl-0 = <&pwm1_pins>; - pinctrl-names = "default"; - - status = "okay"; -}; -&pwm2 { - pinctrl-0 = <&pwm2_pins>; - pinctrl-names = "default"; + canfd0_pins: canfd0 { + groups = "canfd0_data_a"; + function = "canfd0"; + }; - status = "okay"; + canfd1_pins: canfd1 { + groups = "canfd1_data"; + function = "canfd1"; + }; }; &rcar_sound { @@ -775,8 +736,8 @@ bitclock-master = <&rsnd_endpoint0>; frame-master = <&rsnd_endpoint0>; - playback = <&ssi0 &src0 &dvc0>; - capture = <&ssi1 &src1 &dvc1>; + playback = <&ssi3>; //ssi0 -> ssi3 + capture = <&ssi4>; //ssi1 -> ssi4 }; }; }; @@ -803,6 +764,13 @@ status = "okay"; }; +&scif5 { + pinctrl-0 = <&scif5_pins>; + pinctrl-names = "default"; + + status = "okay"; +}; + &scif_clk { clock-frequency = <14745600>; }; @@ -857,7 +825,7 @@ status = "okay"; }; -&ssi1 { +&ssi4 { shared-pin; }; @@ -869,7 +837,6 @@ pinctrl-0 = <&usb0_pins>; pinctrl-names = "default"; - vbus-supply = <&vbus0_usb2>; status = "okay"; }; diff --git a/drivers/iio/imu/Kconfig b/drivers/iio/imu/Kconfig index 156630a..463210d 100644 --- a/drivers/iio/imu/Kconfig +++ b/drivers/iio/imu/Kconfig @@ -40,6 +40,7 @@ config KMX61 source "drivers/iio/imu/inv_mpu6050/Kconfig" source "drivers/iio/imu/st_lsm6dsx/Kconfig" +source "drivers/iio/imu/st_asm330lhh/Kconfig" endmenu diff --git a/drivers/iio/imu/Makefile b/drivers/iio/imu/Makefile index 68629c68..349a7de 100644 --- a/drivers/iio/imu/Makefile +++ b/drivers/iio/imu/Makefile @@ -20,3 +20,4 @@ obj-y += inv_mpu6050/ obj-$(CONFIG_KMX61) += kmx61.o obj-y += st_lsm6dsx/ +obj-y += st_asm330lhh/ diff --git a/drivers/media/i2c/adv748x/adv748x-core.c b/drivers/media/i2c/adv748x/adv748x-core.c index da8f062..c2b37f7 100644 --- a/drivers/media/i2c/adv748x/adv748x-core.c +++ b/drivers/media/i2c/adv748x/adv748x-core.c @@ -165,6 +165,21 @@ static int adv748x_i2c_addresses[ADV748X_PAGE_MAX] = { ADV748X_I2C_TXA, }; +/* Default addresses for the I2C pages 0x71*/ +static int adv748x_i2c_addresses2[ADV748X_PAGE_MAX] = { + ADV748X_I2C_IO2, + ADV748X_I2C_DPLL2, + ADV748X_I2C_CP2, + ADV748X_I2C_HDMI2, + ADV748X_I2C_EDID2, + ADV748X_I2C_REPEATER2, + ADV748X_I2C_INFOFRAME2, + ADV748X_I2C_CEC2, + ADV748X_I2C_SDP2, + ADV748X_I2C_TXB2, + ADV748X_I2C_TXA2, +}; + static int adv748x_read_check(struct adv748x_state *state, int client_page, u8 reg) { @@ -238,9 +253,16 @@ static int adv748x_initialise_clients(struct adv748x_state *state) int ret; for (i = ADV748X_PAGE_DPLL; i < ADV748X_PAGE_MAX; ++i) { - state->i2c_clients[i] = - adv748x_dummy_client(state, adv748x_i2c_addresses[i], - ADV748X_IO_SLAVE_ADDR_BASE + i); + if((state->client->addr << 1) == 0xe0) { + state->i2c_clients[i] = + adv748x_dummy_client(state, adv748x_i2c_addresses[i], + ADV748X_IO_SLAVE_ADDR_BASE + i); + } else { + state->i2c_clients[i] = + adv748x_dummy_client(state, adv748x_i2c_addresses2[i], + ADV748X_IO_SLAVE_ADDR_BASE + i); + } + if (state->i2c_clients[i] == NULL) { adv_err(state, "failed to create i2c client %u\n", i); return -ENOMEM; @@ -508,6 +530,20 @@ static const struct adv748x_reg_value adv748x_set_slave_address[] = { {ADV748X_PAGE_EOR, 0xff, 0xff} /* End of register table */ }; +static const struct adv748x_reg_value adv748x_set_slave_address2[] = { + {ADV748X_PAGE_IO, 0xf3, ADV748X_I2C_DPLL2 << 1}, + {ADV748X_PAGE_IO, 0xf4, ADV748X_I2C_CP2 << 1}, + {ADV748X_PAGE_IO, 0xf5, ADV748X_I2C_HDMI2 << 1}, + {ADV748X_PAGE_IO, 0xf6, ADV748X_I2C_EDID2 << 1}, + {ADV748X_PAGE_IO, 0xf7, ADV748X_I2C_REPEATER2 << 1}, + {ADV748X_PAGE_IO, 0xf8, ADV748X_I2C_INFOFRAME2 << 1}, + {ADV748X_PAGE_IO, 0xfa, ADV748X_I2C_CEC2 << 1}, + {ADV748X_PAGE_IO, 0xfb, ADV748X_I2C_SDP2 << 1}, + {ADV748X_PAGE_IO, 0xfc, ADV748X_I2C_TXB2 << 1}, + {ADV748X_PAGE_IO, 0xfd, ADV748X_I2C_TXA2 << 1}, + {ADV748X_PAGE_EOR, 0xff, 0xff} /* End of register table */ +}; + /* Supported Formats For Script Below */ /* - 01-29 HDMI to MIPI TxA CSI 4-Lane - RGB888: */ static const struct adv748x_reg_value adv748x_init_txa_4lane[] = { @@ -683,7 +719,11 @@ static int adv748x_reset(struct adv748x_state *state) if (ret < 0) return ret; - ret = adv748x_write_regs(state, adv748x_set_slave_address); + if((state->client->addr << 1) == 0xe0) { + ret = adv748x_write_regs(state, adv748x_set_slave_address); //i2c address 0x70 + } else { + ret = adv748x_write_regs(state, adv748x_set_slave_address2); //i2c address 0x71 + } if (ret < 0) return ret; diff --git a/drivers/media/i2c/adv748x/adv748x.h b/drivers/media/i2c/adv748x/adv748x.h index fb30bfa..ac50a9e 100644 --- a/drivers/media/i2c/adv748x/adv748x.h +++ b/drivers/media/i2c/adv748x/adv748x.h @@ -40,6 +40,18 @@ #define ADV748X_I2C_TXB 0x48 /* CSI-TXB Map */ #define ADV748X_I2C_TXA 0x4a /* CSI-TXA Map */ +#define ADV748X_I2C_IO2 0x71 /* IO Map */ +#define ADV748X_I2C_DPLL2 0x27 /* DPLL Map */ +#define ADV748X_I2C_CP2 0x23 /* CP Map */ +#define ADV748X_I2C_HDMI2 0x35 /* HDMI Map */ +#define ADV748X_I2C_EDID2 0x37 /* EDID Map */ +#define ADV748X_I2C_REPEATER2 0x33 /* HDMI RX Repeater Map */ +#define ADV748X_I2C_INFOFRAME2 0x30 /* HDMI RX InfoFrame Map */ +#define ADV748X_I2C_CEC2 0x42 /* CEC Map */ +#define ADV748X_I2C_SDP2 0x78 /* SDP Map */ +#define ADV748X_I2C_TXB2 0x49 /* CSI-TXB Map */ +#define ADV748X_I2C_TXA2 0x4b /* CSI-TXA Map */ + enum adv748x_page { ADV748X_PAGE_IO, ADV748X_PAGE_DPLL, diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c index 3ebe8de..546761c 100644 --- a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c +++ b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c @@ -3912,7 +3912,7 @@ static const unsigned int tmu_tclk2_b_mux[] = { /* - USB0 ------------------------------------------------------------------- */ static const unsigned int usb0_pins[] = { /* PWEN, OVC */ - RCAR_GP_PIN(6, 24), RCAR_GP_PIN(6, 25), + RCAR_GP_PIN(6, 24), }; static const unsigned int usb0_mux[] = { USB0_PWEN_MARK, USB0_OVC_MARK, @@ -3920,7 +3920,7 @@ static const unsigned int usb0_mux[] = { /* - USB1 ------------------------------------------------------------------- */ static const unsigned int usb1_pins[] = { /* PWEN, OVC */ - RCAR_GP_PIN(6, 26), RCAR_GP_PIN(6, 27), + RCAR_GP_PIN(6, 27), }; static const unsigned int usb1_mux[] = { USB1_PWEN_MARK, USB1_OVC_MARK, @@ -3936,7 +3936,7 @@ static const unsigned int usb2_mux[] = { /* - USB2_CH3 --------------------------------------------------------------- */ static const unsigned int usb2_ch3_pins[] = { /* PWEN, OVC */ - RCAR_GP_PIN(6, 30), RCAR_GP_PIN(6, 31), + RCAR_GP_PIN(6, 30), }; static const unsigned int usb2_ch3_mux[] = { USB2_CH3_PWEN_MARK, USB2_CH3_OVC_MARK, -- 2.7.4