diff options
-rw-r--r-- | README | 78 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/conf/machine/agl-refhw-h3.conf | 16 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md | 58 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_%.bbappend | 11 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-agl-refhw.patch | 1418 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-create-r8a7795-usb-ovc-pinmux-groups.patch | 410 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-Introduce-dts-file-for-refhw-r-car-board.patch | 90 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-add-st_asm330lhh-driver.patch (renamed from meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-st_asm330lhh-driver.patch) | 0 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-agl-reference-hardware-sample-bsp.patch | 846 | ||||
-rw-r--r-- | meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend | 10 |
10 files changed, 1955 insertions, 982 deletions
@@ -1,54 +1,65 @@ This README file contains information on the contents of the meta-agl-refhw-gen3 -layer which provides the reference hardware support for AGL environment. +layer which provides support for the Renesas R-Car H3 based AGL reference +hardware. -Dependency -========== +Dependencies +============ -- Yocto layers of AGL Happy Halibut. - Especially depends on meta-renesas-rcar-gen3. +This layer depends on: + + URI: git://git.openembedded.org/openembedded-core + layers: meta + branch: dunfell + + URI: git://git.openembedded.org/meta-openembedded + layers: meta-oe, meta-python + branch: dunfell + + URI: https://github.com/renesas-rcar/meta-renesas + branch: dunfell-dev-4.14 Build Instructions ================== - I. Adding the meta-agl-refhw-gen3 layer to your AGL environment + I. Building with the layer in the AGL environment II. Build agl-demo-platform by using meta-agl-refhw-gen3 -III. Update firmware. +III. Updating firmware IV. Notes I. Adding the meta-agl-refhw-gen3 layer to your AGL environment -============================================================== - -You can add this layer to your AGL HH environemnt as following: +=============================================================== -1. Put meta-refhw folder into the "$AGL_TOP/bsp" directory where AGL BSP layers - like meta-renesas-rcar-gen3/ are placed. - # See "Downloading AGL Software" in AGL developper site. +This layer has been integrated into the AGL build environment for the UCB 11.0 +(Kooky Koi) release, so manual integration is no longer required. See section +(II) below for how to build an image, and the "How to build the Firmware" section +in the document meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md for how to +configure a standalone build without AGL. -2. Put refhw-h3 folder into the meta-agl/templates/machine where other machine - configuration files are placed. II. Build for Reference Hardware ================================ -You should follow the instructions in "Building for Supported Renesas Boards" -section in AGL developper site to build images for reference hardware. -The modification needed is to set machine to "refhw-h3" when execute -aglsetup.sh (parameter of "-m" option). +You should follow the instructions in the "Building for Supported Renesas Boards" +section on the AGL developer site to build images for the reference hardware. + +Use the "h3ulcb" machine when configuring, e.g.: $ cd $AGL_TOP - $ source meta-agl/scripts/aglsetup.sh -m refhw-h3 -b build \ - agl-devel agl-demo agl-netboot agl-appfw-smack agl-localdev + $ source meta-agl/scripts/aglsetup.sh -m h3uclb -b build \ + agl-devel agl-demo agl-localdev -The "real" MACHINE in the internal building is set to "salvator-x" so that we -can divert the configurations defined for salvator-x. While, the DTB file used -by reference hardware is "r8a7795-refhw.dtb". so the settings in u-boot is -expected as following (in case of booting from the Micro SD card in SD#0): +This works as the AGL reference hardware support has been integrated with the +"h3ulcb" (and "h3ulcb-nogfx") machine templates in the AGL UCB tree. In the +resulting build, the image can be used on the reference hardware by using the +DTB file "r8a7795-agl-refhw.dtb". In the reference hardware u-boot settings, +this can be done with the following (in case of booting from the Micro SD card +in SD#0): => setenv bootargs 'console=ttySC0,115200 root=/dev/mmcblk1p1 rootwait ro rootfstype=ext4' => setenv bootcmd 'run load_ker; run load_dtb; booti 0x48080000 - 0x48000000' - => setenv load_dtb 'ext4load mmc 0:1 0x48000000 /boot/r8a7795-refhw.dtb' + => setenv load_dtb 'ext4load mmc 0:1 0x48000000 /boot/r8a7795-agl-refhw.dtb' => setenv load_ker 'ext4load mmc 0:1 0x48080000 /boot/Image' => saveenv @@ -56,16 +67,19 @@ expected as following (in case of booting from the Micro SD card in SD#0): ... bootargs=console=ttySC0,115200 root=/dev/mmcblk1p1 rootwait ro rootfstype=ext4 bootcmd=run load_ker; run load_dtb; booti 0x48080000 - 0x48000000 - load_dtb=ext4load mmc 0:1 0x48000000 /boot/r8a7795-refhw.dtb + load_dtb=ext4load mmc 0:1 0x48000000 /boot/r8a7795-agl-refhw.dtb load_ker=ext4load mmc 0:1 0x48080000 /boot/Image .. -III. Update firmware. -===================== -Please refer to meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md for detail. + +III. Updating firmware +====================== + +Please refer to meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md for details. + IV. Notes -========== +========= 1. SD#1 is not supported. -2. There are suspicious HDMI0/1 interrupts detected and disabled forcely by +2. There are suspicious HDMI0/1 interrupts detected and disabled forcibly by the kernel during boot. The reason is under investigation. diff --git a/meta-agl-refhw-gen3/conf/machine/agl-refhw-h3.conf b/meta-agl-refhw-gen3/conf/machine/agl-refhw-h3.conf new file mode 100644 index 0000000..f302d45 --- /dev/null +++ b/meta-agl-refhw-gen3/conf/machine/agl-refhw-h3.conf @@ -0,0 +1,16 @@ +# Using H3, needs to be defined before pulling in salvator-x as a base +SOC_FAMILY = "r8a7795" + +require conf/machine/salvator-x.conf + +# This is a bit of a hack, we add salvator-x to avoid having to +# bbappend various recipes to update COMPATIBLE_MACHINE. Ideally, +# we would want the ordering salvator-x:<machine>, but that is +# non-trivial to accomplish and not absolutely necessary for our +# expected use. +MACHINEOVERRIDES_append = ":salvator-x" + +# Reference hardware has USB3 +MACHINE_FEATURES_append = " usb3" + +KERNEL_DEVICETREE_append = " renesas/r8a7795-agl-refhw.dtb" diff --git a/meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md b/meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md index 9e826dc..92d3642 100644 --- a/meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md +++ b/meta-agl-refhw-gen3/docs/ReferenceHW_Rcar_gen3.md @@ -1,4 +1,4 @@ -# Reference Hardware Board +# Reference Hardware Board - [About](#about) - [Difference to Salvator-XS When Flashing Firmware](#difference-to-salvator-xs-when-flashing-firmware) @@ -42,6 +42,56 @@ using serial download. Output the following image. ./AArch64_output/AArch64_Flash_writer_SCIF_DUMMY_CERT_E6300400_salvator-x.mot +## How to build the Firmware + +1. In a temporary working directory, clone poky the poky repository and check out the dunfell branch: +``` + git clone git://git.yoctoproject.org/poky + cd poky + git checkout dunfell + .. +``` +2. Clone the Renesas BSP and it's dependent layers: +``` + git clone https://github.com/renesas-rcar/meta-renesas + cd meta-renesas + git checkout dunfell-dev-4.14 + cd .. + git clone git://git.openembedded.org/meta-openembedded + cd meta-openembedded + git checkout dunfell + cd .. +``` +3. Clone the reference hardware BSP layer: +``` + git clone https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl-refhw +``` +4. Create a build environment: +``` + . ./poky/oe-init-build-env build +``` +5. Add the layers to `conf/bblayers.conf`, the `BBLAYERS` variable definition should look like: +``` + BBLAYERS ?= " \ + /home/user/workdir/poky/meta \ + /home/user/workdir/poky/meta-poky \ + /home/user/poky/meta-yocto-bsp \ + /home/user/workdir/meta-openembedded/meta-oe \ + /home/user/workdir/meta-openembedded/meta-python \ + /home/user/workdir/meta-renesas/meta-rcar-gen3 \ + /home/user/workdir/meta-agl-refhw/meta-agl-refhw-gen3 \ + " +``` +6. Add the machine setting to `conf/local.conf`, for example: +``` + echo MACHINE=agl-refhw-h3 >> conf/local.conf +``` +7. Build the firmware: +``` + bitbake arm-trusted-firmware u-boot +``` +8. Afterwards, the firmware files will be in the directory `tmp/deploy/images/agl-refhw-h3`. + ## How to Flash Firmware 1. Connect reference hardware board to the development PC by using USB serial @@ -129,10 +179,10 @@ Output the following image. Name | Load address | eMMC partition | Flash address | Description --------------------------------------|-----------------------|-----------------------|-----------------------|----------------------------- bootparam_sa0-4x2g.srec | H'E6320000 | 1 | H'000000 | Boot parameter - bl2-salvator-x-4x2g.srec | H'E6304000 | 1 | H'00001E | bl2 loader + bl2-agl-refhw-h3-4x2g.srec | H'E6304000 | 1 | H'00001E | bl2 loader cert_header_sa6-4x2g.srec | H'E6320000 | 1 | H'000180 | Certification - bl31-salvator-x-4x2g.srec | H'44000000 | 1 | H'000200 | bl3 loader - tee-salvator-x.srec | H'44100000 | 1 | H'001000 | OP-Tee + bl31-agl-refhw-h3-4x2g.srec | H'44000000 | 1 | H'000200 | bl3 loader + tee-agl-refhw-h3.srec | H'44100000 | 1 | H'001000 | OP-Tee u-boot-elf-salvator-xs-4x2g.srec | H'50000000 | 2 | H'000000 | U-boot You can find these firmwares in the AGL build directory $AGL_TOP/build/tmp/deploy/images/salvator-x diff --git a/meta-agl-refhw-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_%.bbappend b/meta-agl-refhw-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_%.bbappend index 1fccf80..951a34f 100644 --- a/meta-agl-refhw-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_%.bbappend +++ b/meta-agl-refhw-gen3/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_%.bbappend @@ -1,4 +1,7 @@ -#FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/:" +# It is believed the eMMC configuration below makes the result AGL +# reference hardware specific, mark it as such to try to prevent +# unintended usage on other boards. +COMPATIBLE_MACHINE = "agl-refhw-h3" # There are hardware issues in using hyperflash. arm-trusted-firmware, optee and # u-boot have to be stored into eMMC by using serial donwload. @@ -6,20 +9,20 @@ EMMC_BOOT_OPTION = "RCAR_SA6_TYPE=1" DDR_8G_OPTION= "RCAR_DRAM_LPDDR4_MEMCONF=1" -ATFW_OPT_append_refhw = " ${EMMC_BOOT_OPTION} " +ATFW_OPT_append_agl-refhw-h3 = " ${EMMC_BOOT_OPTION}" # In arm-trusted-firmware-control.inc, a "extra_ipl_opt" task is appended to # create firmware for 4x2g or 2x2g variation. it is supposed to use # EXTRA_ATFW_OPT to customize the compiler opton. # -#EXTRA_ATFW_OPT_append_refhw = " ${EMMC_BOOT_OPTION} ${DDR_8G_OPTION} " +#EXTRA_ATFW_OPT_append_agl-refhw-h3 = " ${EMMC_BOOT_OPTION} ${DDR_8G_OPTION}" # # Unfortunately in do_extra_ipl_opt() it use d.setVar() instead of d.appendVar() # to setup EXTRA_ATFW_OPT variable which makes it impossible to customize it properly # by others... Override it. # # -do_ipl_opt_compile_refhw () { +do_ipl_opt_compile_agl-refhw-h3 () { oe_runmake distclean oe_runmake bl2 bl31 dummytool PLAT=${PLATFORM} ${EXTRA_ATFW_OPT} ${ATFW_OPT_LOSSY} ${EMMC_BOOT_OPTION} ${DDR_8G_OPTION} } diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-agl-refhw.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-agl-refhw.patch new file mode 100644 index 0000000..d6bf869 --- /dev/null +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-agl-refhw.patch @@ -0,0 +1,1418 @@ +Add AGL reference hardware support + +Upstream-Status: pending + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +--- + arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi | 912 ++++++++++++++++++++++ + arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts | 378 +++++++++ + drivers/media/i2c/adv748x/adv748x-core.c | 48 +- + drivers/media/i2c/adv748x/adv748x.h | 12 + + 4 files changed, 1346 insertions(+), 4 deletions(-) + +diff --git a/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi b/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi +new file mode 100644 +index 000000000000..a35cd24b27b9 +--- /dev/null ++++ b/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi +@@ -0,0 +1,912 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Device Tree Source for common parts of AGL Reference Hardware board variants ++ * ++ * Copyright (C) 2015-2017 Renesas Electronics Corp. ++ * Copyright (C) 2020 Konsulko Group ++ */ ++ ++/* ++ * This file is derived from salvator-common.dtsi ++ * ++ * It is currently unclear if the modifications made are such that they could ++ * be done on top of salvator-common.dtsi to allow removing the duplication. ++ * It is likely that the common pieces with salvator-common.dtsi would need to ++ * be factored out into a new common file, which is perhaps hard to justify. ++ */ ++ ++/* ++ * SSI-AK4613 ++ * ++ * This command is required when Playback/Capture ++ * ++ * amixer set "DVC Out" 100% ++ * amixer set "DVC In" 100% ++ * ++ * You can use Mute ++ * ++ * amixer set "DVC Out Mute" on ++ * amixer set "DVC In Mute" on ++ * ++ * You can use Volume Ramp ++ * ++ * amixer set "DVC Out Ramp Up Rate" "0.125 dB/64 steps" ++ * amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps" ++ * amixer set "DVC Out Ramp" on ++ * aplay xxx.wav & ++ * amixer set "DVC Out" 80% // Volume Down ++ * amixer set "DVC Out" 100% // Volume Up ++ */ ++ ++#include <dt-bindings/gpio/gpio.h> ++ ++/ { ++ aliases { ++ serial0 = &scif2; ++ serial1 = &scif1; ++ serial2 = &scif5; ++ serial3 = &hscif1; ++ serial4 = &hscif0; ++ serial5 = &hscif2; ++ ethernet0 = &avb; ++ }; ++ ++ chosen { ++ bootargs = "ignore_loglevel rw root=/dev/nfs ip=dhcp"; ++ stdout-path = "serial0:115200n8"; ++ }; ++ ++ audio_clkout: audio-clkout { ++ /* ++ * This is same as <&rcar_sound 0> ++ * but needed to avoid cs2000/rcar_sound probe dead-lock ++ */ ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <12288000>; ++ }; ++ ++ avb-mch@ec5a0100 { ++ compatible = "renesas,avb-mch-gen3"; ++ reg = <0 0xec5a0100 0 0x100>; /* ADG_AVB */ ++ reg-name = "adg_avb"; ++ ++ clocks = <&cpg CPG_MOD 922>; ++ clock-names = "adg"; ++ resets = <&cpg 922>; ++ }; ++ ++ hdmi0-in { ++ compatible = "hdmi-connector"; ++ label = "HDMI0 IN"; ++ type = "a"; ++ ++ port { ++ hdmi_in_con: endpoint { ++ remote-endpoint = <&adv7481_hdmi>; ++ }; ++ }; ++ }; ++ ++ hdmi2-in { ++ compatible = "hdmi-connector"; ++ label = "HDMI2 IN"; ++ type = "a"; ++ ++ port { ++ hdmi_in_con2: endpoint { ++ remote-endpoint = <&adv7481_hdmi2>; ++ }; ++ }; ++ }; ++ ++ reg_1p8v: regulator0 { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator1 { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_12v: regulator2 { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-12V"; ++ regulator-min-microvolt = <12000000>; ++ regulator-max-microvolt = <12000000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ sound_card: sound { ++ compatible = "audio-graph-card"; ++ ++ label = "rcar-sound"; ++ ++ dais = <&rsnd_port0>; ++ }; ++ ++ vcc_sdhi0: regulator-vcc-sdhi0 { ++ compatible = "regulator-fixed"; ++ ++ regulator-name = "SDHI0 Vcc"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpio = <&gpio5 2 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; ++ ++ vccq_sdhi0: regulator-vccq-sdhi0 { ++ compatible = "regulator-gpio"; ++ ++ regulator-name = "SDHI0 VccQ"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>; ++ gpios-states = <1>; ++ states = <3300000 1 ++ 1800000 0>; ++ }; ++ ++ vcc_sdhi3: regulator-vcc-sdhi3 { ++ compatible = "regulator-fixed"; ++ ++ regulator-name = "SDHI3 Vcc"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpio = <&gpio3 15 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; ++ ++ vccq_sdhi3: regulator-vccq-sdhi3 { ++ compatible = "regulator-gpio"; ++ ++ regulator-name = "SDHI3 VccQ"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; ++ gpios-states = <1>; ++ states = <3300000 1 ++ 1800000 0>; ++ }; ++ ++ hdmi0-out { ++ compatible = "hdmi-connector"; ++ label = "HDMI0 OUT"; ++ type = "a"; ++ ++ port { ++ hdmi0_con: endpoint { ++ }; ++ }; ++ }; ++ ++ hdmi1-out { ++ compatible = "hdmi-connector"; ++ label = "HDMI1 OUT"; ++ type = "a"; ++ ++ port { ++ hdmi1_con: endpoint { ++ }; ++ }; ++ }; ++ ++ x12_clk: x12 { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <24576000>; ++ }; ++ ++ /* External DU dot clocks */ ++ x21_clk: x21-clock { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <33000000>; ++ }; ++ ++ x22_clk: x22-clock { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <33000000>; ++ }; ++ ++ x23_clk: x23-clock { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <25000000>; ++ }; ++}; ++ ++&a57_0 { ++ cpu-supply = <&dvfs>; ++}; ++ ++&audio_clk_a { ++ clock-frequency = <22579200>; ++}; ++ ++&avb { ++ pinctrl-0 = <&avb_pins>; ++ pinctrl-names = "default"; ++ phy-handle = <&phy0>; ++ phy-mode = "rgmii-txid"; ++ status = "okay"; ++ ++ phy0: ethernet-phy@0 { ++ rxc-skew-ps = <1500>; ++ reg = <0>; ++ interrupt-parent = <&gpio2>; ++ interrupts = <11 IRQ_TYPE_LEVEL_LOW>; ++ reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>; ++ }; ++}; ++ ++&csi40 { ++ status = "okay"; ++ ++ ports { ++ port@0 { ++ reg = <0>; ++ ++ csi40_in: endpoint { ++ clock-lanes = <0>; ++ data-lanes = <1 2 3 4>; ++ remote-endpoint = <&adv7481_txa>; ++ }; ++ }; ++ }; ++}; ++ ++&csi41 { ++ status = "okay"; ++ ++ ports { ++ port@0 { ++ reg = <0>; ++ ++ csi41_in: endpoint { ++ clock-lanes = <0>; ++ data-lanes = <1 2 3 4>; ++ remote-endpoint = <&adv7481_txa2>; ++ }; ++ }; ++ }; ++}; ++ ++&du { ++ status = "okay"; ++ ++}; ++ ++&ehci0 { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&ehci1 { ++ status = "okay"; ++}; ++ ++&extalr_clk { ++ 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"; ++}; ++ ++&hscif2 { ++ pinctrl-0 = <&hscif2_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&hsusb { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&i2c2 { ++ pinctrl-0 = <&i2c2_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++ ++ clock-frequency = <100000>; ++ ++ video-receiver@70 { ++ compatible = "adi,adv7481"; ++ reg = <0x70>; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ 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>; ++ }; ++ }; ++ }; ++ ++ cs2000: clk_multiplier@4f { ++ #clock-cells = <0>; ++ compatible = "cirrus,cs2000-cp"; ++ reg = <0x4f>; ++ clocks = <&audio_clkout>, <&x12_clk>; ++ clock-names = "clk_in", "ref_clk"; ++ ++ assigned-clocks = <&cs2000>; ++ assigned-clock-rates = <24576000>; /* 1/1 divide */ ++ }; ++}; ++ ++&i2c3 { ++ pinctrl-0 = <&i2c3_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++ ++ clock-frequency = <100000>; ++ ++ asm330lhh@6a { ++ compatible = "st,asm330lhh"; ++ reg = <0x6a>; ++ ++ interrupt-names = "int1", "int2"; ++ interrupts = <&gpio6 23 IRQ_TYPE_EDGE_RISING>, ++ <&gpio2 6 IRQ_TYPE_EDGE_RISING>; ++ }; ++}; ++ ++&i2c4 { ++ status = "okay"; ++ ++ versaclock5: clock-generator@68 { ++ compatible = "idt,9fgv0841"; ++ reg = <0x68>; ++ #clock-cells = <1>; ++ clocks = <&x23_clk>; ++ clock-names = "xin"; ++ }; ++}; ++ ++&i2c5 { ++ pinctrl-0 = <&i2c5_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++ ++ clock-frequency = <100000>; ++ ++ ak4613: codec@10 { ++ compatible = "asahi-kasei,ak4613"; ++ #sound-dai-cells = <0>; ++ reg = <0x10>; ++ clocks = <&rcar_sound 3>; ++ ++ 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; ++ ++ port { ++ ak4613_endpoint: endpoint { ++ remote-endpoint = <&rsnd_endpoint0>; ++ }; ++ }; ++ }; ++}; ++ ++&i2c_dvfs { ++ status = "okay"; ++ ++ clock-frequency = <400000>; ++ ++ pmic: pmic@30 { ++ pinctrl-0 = <&irq0_pins>; ++ pinctrl-names = "default"; ++ ++ compatible = "rohm,bd9571mwv"; ++ reg = <0x30>; ++ interrupt-parent = <&intc_ex>; ++ interrupts = <0 IRQ_TYPE_LEVEL_LOW>; ++ interrupt-controller; ++ #interrupt-cells = <2>; ++ gpio-controller; ++ #gpio-cells = <2>; ++ rohm,ddr-backup-power = <0xf>; ++ rohm,rstbmode-level; ++ ++ regulators { ++ dvfs: dvfs { ++ regulator-name = "dvfs"; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <1030000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ }; ++ }; ++ ++ eeprom@50 { ++ compatible = "rohm,br24t01", "atmel,24c01"; ++ reg = <0x50>; ++ pagesize = <8>; ++ }; ++}; ++ ++&ohci0 { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&ohci1 { ++ status = "okay"; ++}; ++ ++&pcie_bus_clk { ++ clock-frequency = <100000000>; ++ status = "okay"; ++}; ++ ++&pciec0 { ++ status = "okay"; ++}; ++ ++&pciec1 { ++ 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"; ++ ++ avb_pins: avb { ++ mux { ++ groups = "avb_link", "avb_mdio", "avb_mii"; ++ function = "avb"; ++ }; ++ ++ pins_mdio { ++ groups = "avb_mdio"; ++ drive-strength = <24>; ++ }; ++ ++ pins_mii_tx { ++ pins = "PIN_AVB_TX_CTL", "PIN_AVB_TXC", "PIN_AVB_TD0", ++ "PIN_AVB_TD1", "PIN_AVB_TD2", "PIN_AVB_TD3"; ++ drive-strength = <12>; ++ }; ++ }; ++ ++ hscif0_pins: hscif0 { ++ groups = "hscif0_data", "hscif0_ctrl"; ++ function = "hscif0"; ++ }; ++ ++ hscif1_pins: hscif1 { ++ groups = "hscif1_data_a"; ++ function = "hscif1"; ++ }; ++ ++ hscif2_pins: hscif2 { ++ groups = "hscif2_data_c"; ++ function = "hscif2"; ++ }; ++ ++ i2c2_pins: i2c2 { ++ groups = "i2c2_a"; ++ function = "i2c2"; ++ }; ++ ++ i2c3_pins: i2c3 { ++ groups = "i2c3"; ++ function = "i2c3"; ++ }; ++ ++ i2c5_pins: i2c5 { ++ groups = "i2c5"; ++ function = "i2c5"; ++ }; ++ ++ irq0_pins: irq0 { ++ groups = "intc_ex_irq0"; ++ function = "intc_ex"; ++ }; ++ ++ scif1_pins: scif1 { ++ groups = "scif1_data_b"; ++ function = "scif1"; ++ }; ++ ++ scif2_pins: scif2 { ++ groups = "scif2_data_a"; ++ function = "scif2"; ++ }; ++ ++ scif5_pins: scif5 { ++ groups = "scif5_data_a"; ++ function = "scif5"; ++ }; ++ ++ scif_clk_pins: scif_clk { ++ groups = "scif_clk_a"; ++ function = "scif_clk"; ++ }; ++ ++ sdhi0_pins: sd0 { ++ groups = "sdhi0_data4", "sdhi0_ctrl"; ++ function = "sdhi0"; ++ power-source = <3300>; ++ }; ++ ++ sdhi0_pins_uhs: sd0_uhs { ++ groups = "sdhi0_data4", "sdhi0_ctrl"; ++ function = "sdhi0"; ++ power-source = <1800>; ++ }; ++ ++ sdhi2_pins: sd2 { ++ groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds"; ++ function = "sdhi2"; ++ power-source = <3300>; ++ }; ++ ++ sdhi2_pins_uhs: sd2_uhs { ++ groups = "sdhi2_data8", "sdhi2_ctrl", "sdhi2_ds"; ++ function = "sdhi2"; ++ power-source = <1800>; ++ }; ++ ++ sdhi3_pins: sd3 { ++ groups = "sdhi3_data4", "sdhi3_ctrl"; ++ function = "sdhi3"; ++ power-source = <3300>; ++ }; ++ ++ sdhi3_pins_uhs: sd3_uhs { ++ groups = "sdhi3_data4", "sdhi3_ctrl"; ++ function = "sdhi3"; ++ power-source = <1800>; ++ }; ++ ++ sound_pins: sound { ++ groups = "ssi349_ctrl", "ssi3_data", "ssi4_data"; ++ function = "ssi"; ++ }; ++ ++ sound_clk_pins: sound_clk { ++ groups = "audio_clk_a_a", "audio_clk_b_a", ++ "audio_clkout_a", "audio_clkout3_b"; ++ function = "audio_clk"; ++ }; ++ ++ usb0_pins: usb0 { ++ groups = "usb0"; ++ function = "usb0"; ++ }; ++ ++ usb1_pins: usb1 { ++ groups = "usb1"; ++ function = "usb1"; ++ }; ++ ++ usb30_pins: usb30 { ++ groups = "usb30", "usb30_ovc"; ++ function = "usb30"; ++ }; ++ ++ canfd0_pins: canfd0 { ++ groups = "canfd0_data_a"; ++ function = "canfd0"; ++ }; ++ ++ canfd1_pins: canfd1 { ++ groups = "canfd1_data"; ++ function = "canfd1"; ++ }; ++}; ++ ++&rcar_sound { ++ pinctrl-0 = <&sound_pins &sound_clk_pins>; ++ pinctrl-names = "default"; ++ ++ /* Single DAI */ ++ #sound-dai-cells = <0>; ++ ++ /* audio_clkout0/1/2/3 */ ++ #clock-cells = <1>; ++ clock-frequency = <12288000 11289600>; ++ ++ status = "okay"; ++ ++ /* update <audio_clk_b> to <cs2000> */ ++ clocks = <&cpg CPG_MOD 1005>, ++ <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>, ++ <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>, ++ <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>, ++ <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>, ++ <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>, ++ <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>, ++ <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>, ++ <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>, ++ <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>, ++ <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>, ++ <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, ++ <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, ++ <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>, ++ <&audio_clk_a>, <&cs2000>, ++ <&audio_clk_c>, ++ <&cpg CPG_CORE CPG_AUDIO_CLK_I>; ++ ++ ports { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ rsnd_port0: port@0 { ++ reg = <0>; ++ rsnd_endpoint0: endpoint { ++ remote-endpoint = <&ak4613_endpoint>; ++ ++ dai-format = "left_j"; ++ bitclock-master = <&rsnd_endpoint0>; ++ frame-master = <&rsnd_endpoint0>; ++ ++ playback = <&ssi3>; //ssi0 -> ssi3 ++ capture = <&ssi4>; //ssi1 -> ssi4 ++ }; ++ }; ++ }; ++}; ++ ++&rwdt { ++ timeout-sec = <60>; ++ status = "okay"; ++}; ++ ++&scif1 { ++ pinctrl-0 = <&scif1_pins>; ++ pinctrl-names = "default"; ++ ++ uart-has-rtscts; ++ /* Please use exclusively to the hscif1 node */ ++ status = "okay"; ++}; ++ ++&scif2 { ++ pinctrl-0 = <&scif2_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&scif5 { ++ pinctrl-0 = <&scif5_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&scif_clk { ++ clock-frequency = <14745600>; ++}; ++ ++&sdhi0 { ++ pinctrl-0 = <&sdhi0_pins>; ++ pinctrl-1 = <&sdhi0_pins_uhs>; ++ pinctrl-names = "default", "state_uhs"; ++ ++ vmmc-supply = <&vcc_sdhi0>; ++ vqmmc-supply = <&vccq_sdhi0>; ++ cd-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>; ++ wp-gpios = <&gpio3 13 GPIO_ACTIVE_HIGH>; ++ bus-width = <4>; ++ sd-uhs-sdr50; ++ sd-uhs-sdr104; ++ status = "okay"; ++}; ++ ++&sdhi2 { ++ /* used for on-board 8bit eMMC */ ++ pinctrl-0 = <&sdhi2_pins>; ++ pinctrl-1 = <&sdhi2_pins_uhs>; ++ pinctrl-names = "default", "state_uhs"; ++ ++ iommus = <&ipmmu_ds1 34>; ++ ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_1p8v>; ++ bus-width = <8>; ++ mmc-hs200-1_8v; ++ mmc-hs400-1_8v; ++ no-sd; ++ no-sdio; ++ non-removable; ++ fixed-emmc-driver-type = <1>; ++ status = "okay"; ++}; ++ ++&sdhi3 { ++ pinctrl-0 = <&sdhi3_pins>; ++ pinctrl-1 = <&sdhi3_pins_uhs>; ++ pinctrl-names = "default", "state_uhs"; ++ ++ vmmc-supply = <&vcc_sdhi3>; ++ vqmmc-supply = <&vccq_sdhi3>; ++ cd-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; ++ wp-gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>; ++ bus-width = <4>; ++ sd-uhs-sdr50; ++ sd-uhs-sdr104; ++ status = "okay"; ++}; ++ ++&ssi4 { ++ shared-pin; ++}; ++ ++&usb_extal_clk { ++ clock-frequency = <50000000>; ++}; ++ ++&usb2_phy0 { ++ pinctrl-0 = <&usb0_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&usb2_phy1 { ++ pinctrl-0 = <&usb1_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&usb3_peri0 { ++ phys = <&usb3_phy0>; ++ phy-names = "usb"; ++ ++ status = "okay"; ++}; ++ ++&usb3_phy0 { ++ status = "okay"; ++}; ++ ++&usb3s0_clk { ++ clock-frequency = <100000000>; ++}; ++ ++&vin0 { ++ status = "okay"; ++}; ++ ++&vin1 { ++ status = "okay"; ++}; ++ ++&vin2 { ++ status = "okay"; ++}; ++ ++&vin3 { ++ status = "okay"; ++}; ++ ++&vin4 { ++ status = "okay"; ++}; ++ ++&vin5 { ++ status = "okay"; ++}; ++ ++&vin6 { ++ status = "okay"; ++}; ++ ++&vin7 { ++ status = "okay"; ++}; ++ ++&xhci0 { ++ pinctrl-0 = <&usb30_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; +diff --git a/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts b/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts +new file mode 100644 +index 000000000000..0a63d2e7a64b +--- /dev/null ++++ b/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts +@@ -0,0 +1,378 @@ ++/* ++ * Device Tree Source for the AGL reference hardware board with R-Car H3 ES3.0 ++ * ++ * Copyright (C) 2019 Panasonic Corp. ++ * Copyright (C) 2020 Konsulko Group ++ * ++ * This file is licensed under the terms of the GNU General Public License ++ * version 2. This program is licensed "as is" without any warranty of any ++ * kind, whether express or implied. ++ */ ++ ++/* ++ * This file is for the most part derived from: ++ * ++ * - r8a7795-salvator-xs-4x2g.dts ++ * - r8a7795-salvator-xs.dts ++ * - salvator-xs.dtsi ++ * ++ * With agl-refhw-common.dtsi replacing (and derived from) salvator-common.dtsi. ++ */ ++ ++/dts-v1/; ++#include "r8a7795.dtsi" ++#include "agl-refhw-common.dtsi" ++ ++/ { ++ model = "AGL Reference Hardware based on r8a7795 ES3.0+ with 8GiB (4 x 2 GiB)"; ++ compatible = "agl,refhw-h3", "renesas,r8a7795"; ++ ++ memory@48000000 { ++ device_type = "memory"; ++ /* first 128MB is reserved for secure area. */ ++ reg = <0x0 0x48000000 0x0 0x78000000>; ++ }; ++ ++ memory@500000000 { ++ device_type = "memory"; ++ reg = <0x5 0x00000000 0x0 0x80000000>; ++ }; ++ ++ memory@600000000 { ++ device_type = "memory"; ++ reg = <0x6 0x00000000 0x0 0x80000000>; ++ }; ++ ++ memory@700000000 { ++ device_type = "memory"; ++ reg = <0x7 0x00000000 0x0 0x80000000>; ++ }; ++ ++ reserved-memory { ++ #address-cells = <2>; ++ #size-cells = <2>; ++ ranges; ++ ++ /* device specific region for Lossy Decompression */ ++ lossy_decompress: linux,lossy_decompress@54000000 { ++ no-map; ++ reg = <0x00000000 0x54000000 0x0 0x03000000>; ++ }; ++ ++ /* For Audio DSP */ ++ adsp_reserved: linux,adsp@57000000 { ++ compatible = "shared-dma-pool"; ++ reusable; ++ reg = <0x00000000 0x57000000 0x0 0x01000000>; ++ }; ++ ++ /* global autoconfigured region for contiguous allocations */ ++ linux,cma@58000000 { ++ compatible = "shared-dma-pool"; ++ reusable; ++ reg = <0x00000000 0x58000000 0x0 0x18000000>; ++ linux,cma-default; ++ }; ++ ++ /* device specific region for contiguous allocations */ ++ mmp_reserved: linux,multimedia@70000000 { ++ compatible = "shared-dma-pool"; ++ reusable; ++ reg = <0x00000000 0x70000000 0x0 0x10000000>; ++ }; ++ }; ++ ++ mmngr { ++ compatible = "renesas,mmngr"; ++ memory-region = <&mmp_reserved>, <&lossy_decompress>; ++ }; ++ ++ mmngrbuf { ++ compatible = "renesas,mmngrbuf"; ++ }; ++ ++ vspm_if { ++ compatible = "renesas,vspm_if"; ++ }; ++ ++ vga { ++ port { ++ vga_in: endpoint { ++ /delete-property/remote-endpoint; ++ }; ++ }; ++ }; ++ ++ vga-encoder { ++ ports { ++ port@0 { ++ adv7123_in: endpoint { ++ /delete-property/remote-endpoint; ++ }; ++ }; ++ ++ port@1 { ++ adv7123_out: endpoint { ++ /delete-property/remote-endpoint; ++ }; ++ }; ++ }; ++ }; ++ ++}; ++ ++&adsp { ++ status = "okay"; ++ memory-region = <&adsp_reserved>; ++}; ++ ++&du { ++ clocks = <&cpg CPG_MOD 724>, ++ <&cpg CPG_MOD 723>, ++ <&cpg CPG_MOD 722>, ++ <&cpg CPG_MOD 721>, ++ <&versaclock6 1>, ++ <&x21_clk>, ++ <&x22_clk>, ++ <&versaclock6 2>; ++ clock-names = "du.0", "du.1", "du.2", "du.3", ++ "dclkin.0", "dclkin.1", "dclkin.2", "dclkin.3"; ++}; ++ ++&ehci2 { ++ status = "okay"; ++}; ++ ++&ehci3 { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&hsusb3 { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&sound_card { ++ dais = <&rsnd_port0 /* ak4613 */ ++ &rsnd_port1 /* HDMI0 */ ++ &rsnd_port2>; /* HDMI1 */ ++}; ++ ++&hdmi0 { ++ status = "okay"; ++ ++ ports { ++ port@1 { ++ reg = <1>; ++ rcar_dw_hdmi0_out: endpoint { ++ remote-endpoint = <&hdmi0_con>; ++ }; ++ }; ++ port@2 { ++ reg = <2>; ++ dw_hdmi0_snd_in: endpoint { ++ remote-endpoint = <&rsnd_endpoint1>; ++ }; ++ }; ++ }; ++}; ++ ++&hdmi0_con { ++ remote-endpoint = <&rcar_dw_hdmi0_out>; ++}; ++ ++&hdmi1 { ++ status = "okay"; ++ ++ ports { ++ port@1 { ++ reg = <1>; ++ rcar_dw_hdmi1_out: endpoint { ++ remote-endpoint = <&hdmi1_con>; ++ }; ++ }; ++ port@2 { ++ reg = <2>; ++ dw_hdmi1_snd_in: endpoint { ++ remote-endpoint = <&rsnd_endpoint2>; ++ }; ++ }; ++ }; ++}; ++ ++&hdmi1_con { ++ remote-endpoint = <&rcar_dw_hdmi1_out>; ++}; ++ ++&ohci2 { ++ status = "okay"; ++}; ++ ++&ohci3 { ++ dr_mode = "otg"; ++ status = "okay"; ++}; ++ ++&rcar_sound { ++ ports { ++ /* rsnd_port0 is on salvator-common */ ++ rsnd_port1: port@1 { ++ reg = <1>; ++ rsnd_endpoint1: endpoint { ++ remote-endpoint = <&dw_hdmi0_snd_in>; ++ ++ dai-format = "i2s"; ++ bitclock-master = <&rsnd_endpoint1>; ++ frame-master = <&rsnd_endpoint1>; ++ ++ playback = <&ssi2>; ++ }; ++ }; ++ rsnd_port2: port@2 { ++ reg = <2>; ++ rsnd_endpoint2: endpoint { ++ remote-endpoint = <&dw_hdmi1_snd_in>; ++ ++ dai-format = "i2s"; ++ bitclock-master = <&rsnd_endpoint2>; ++ frame-master = <&rsnd_endpoint2>; ++ ++ playback = <&ssi3>; ++ }; ++ }; ++ }; ++}; ++ ++&pfc { ++ usb2_pins: usb2 { ++ groups = "usb2", "usb2_ovc"; ++ function = "usb2"; ++ }; ++ ++ /* ++ * - On Salvator-X[S], GP6_3[01] are connected to ADV7482 as irq pins ++ * (when SW31 is the default setting on Salvator-XS). ++ * - If SW31 is the default setting, you cannot use USB2.0 ch3 on ++ * r8a7795 with Salvator-XS. ++ * Hence the SW31 setting must be changed like 2) below. ++ * 1) Default setting of SW31: ON-ON-OFF-OFF-OFF-OFF: ++ * - Connect GP6_3[01] to ADV7842. ++ * 2) Changed setting of SW31: OFF-OFF-ON-ON-ON-ON: ++ * - Connect GP6_3[01] to BD082065 (USB2.0 ch3's host power). ++ * - Connect GP6_{04,21} to ADV7842. ++ */ ++ usb2_ch3_pins: usb2_ch3 { ++ groups = "usb2_ch3"; ++ function = "usb2_ch3"; ++ }; ++}; ++ ++&usb2_phy2 { ++ pinctrl-0 = <&usb2_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&usb2_phy3 { ++ pinctrl-0 = <&usb2_ch3_pins>; ++ pinctrl-names = "default"; ++ ++ status = "okay"; ++}; ++ ++&vspbc { ++ status = "okay"; ++}; ++ ++&vspbd { ++ status = "okay"; ++}; ++ ++&vspi0 { ++ status = "okay"; ++}; ++ ++&vspi1 { ++ status = "okay"; ++}; ++ ++/* End r8a7795-salvator-xs.dts content */ ++ ++ ++/* Start r8a7795-salvator-xs-4x2g.dts content */ ++ ++&pciec0 { ++ /* Map all possible DDR as inbound ranges */ ++ dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>; ++}; ++ ++&pciec1 { ++ /* Map all possible DDR as inbound ranges */ ++ dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 0 0x80000000>; ++}; ++ ++/* End r8a7795-salvator-xs-4x2g.dts content */ ++ ++ ++/* Start salvator-xs.dts content */ ++ ++&extal_clk { ++ clock-frequency = <16640000>; ++}; ++ ++&i2c4 { ++ clock-frequency = <400000>; ++ ++ versaclock6: clock-generator@6a { ++ compatible = "idt,5p49v6901"; ++ reg = <0x6a>; ++ #clock-cells = <1>; ++ clocks = <&x23_clk>; ++ clock-names = "xin"; ++ }; ++}; ++ ++/* End salvator-xs.dts content */ ++ ++ ++/* Start reference hardware specific tweaks */ ++ ++&du { ++ ports { ++ port@0 { ++ endpoint { ++ /delete-property/remote-endpoint; ++ }; ++ }; ++ ++ port@3 { ++ endpoint { ++ /delete-property/remote-endpoint; ++ }; ++ }; ++ }; ++}; ++ ++&lvds0 { ++ status = "disabled"; ++}; ++ ++&pwm1 { ++ status = "disabled"; ++}; ++ ++&scif_clk { ++ clock-frequency = <0>; ++}; ++ ++&sdhi0 { ++ /delete-property/ wp-gpios; ++ non-removable; ++}; ++ ++&sdhi3 { ++ /delete-property/ wp-gpios; ++ non-removable; ++}; +diff --git a/drivers/media/i2c/adv748x/adv748x-core.c b/drivers/media/i2c/adv748x/adv748x-core.c +index da8f0621a10b..c2b37f70f711 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 fb30bfade946..ac50a9e41b08 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/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-create-r8a7795-usb-ovc-pinmux-groups.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-create-r8a7795-usb-ovc-pinmux-groups.patch new file mode 100644 index 0000000..da49e7f --- /dev/null +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-create-r8a7795-usb-ovc-pinmux-groups.patch @@ -0,0 +1,410 @@ +Create r8a7795 USB OVC pin groups + +Split the r8a7795 USB pin groups to create separate groups for the +OVC pins. This is required for the AGL reference hardware boards, +which use some of the OVC pins in other pinmux modes. + +Upstream-Status: pending + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +--- + .../boot/dts/renesas/r8a7795-es1-salvator-x.dts | 2 +- + arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts | 2 +- + .../arm64/boot/dts/renesas/r8a7795-salvator-xs.dts | 4 +- + arch/arm64/boot/dts/renesas/salvator-common.dtsi | 6 +- + arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 2 +- + arch/arm64/boot/dts/renesas/ulcb.dtsi | 2 +- + drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c | 75 +++++++++++++++++----- + drivers/pinctrl/sh-pfc/pfc-r8a7795.c | 75 +++++++++++++++++----- + 8 files changed, 129 insertions(+), 39 deletions(-) + +diff --git a/arch/arm64/boot/dts/renesas/r8a7795-es1-salvator-x.dts b/arch/arm64/boot/dts/renesas/r8a7795-es1-salvator-x.dts +index 5c3935ef4fb9..07d3f03274e3 100644 +--- a/arch/arm64/boot/dts/renesas/r8a7795-es1-salvator-x.dts ++++ b/arch/arm64/boot/dts/renesas/r8a7795-es1-salvator-x.dts +@@ -202,7 +202,7 @@ + + &pfc { + usb2_pins: usb2 { +- groups = "usb2"; ++ groups = "usb2", "usb2_ovc"; + function = "usb2"; + }; + }; +diff --git a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts +index 6928afbd8e06..9c229b1bbb59 100644 +--- a/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts ++++ b/arch/arm64/boot/dts/renesas/r8a7795-salvator-x.dts +@@ -202,7 +202,7 @@ + + &pfc { + usb2_pins: usb2 { +- groups = "usb2"; ++ groups = "usb2", "usb2_ovc"; + function = "usb2"; + }; + }; +diff --git a/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts b/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts +index 498f78875dbd..abd1d480292e 100644 +--- a/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts ++++ b/arch/arm64/boot/dts/renesas/r8a7795-salvator-xs.dts +@@ -217,7 +217,7 @@ + + &pfc { + usb2_pins: usb2 { +- groups = "usb2"; ++ groups = "usb2", "usb2_ovc"; + function = "usb2"; + }; + +@@ -234,7 +234,7 @@ + * - Connect GP6_{04,21} to ADV7842. + */ + usb2_ch3_pins: usb2_ch3 { +- groups = "usb2_ch3"; ++ groups = "usb2_ch3", "usb2_ch3_ovc"; + function = "usb2_ch3"; + }; + }; +diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi b/arch/arm64/boot/dts/renesas/salvator-common.dtsi +index 878ed7caca77..a9e2d0a02fe1 100644 +--- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi ++++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi +@@ -690,13 +690,13 @@ + }; + + usb0_pins: usb0 { +- groups = "usb0"; ++ groups = "usb0", "usb0_ovc"; + function = "usb0"; + }; + + usb1_pins: usb1 { + mux { +- groups = "usb1"; ++ groups = "usb1", "usb1_ovc"; + function = "usb1"; + }; + +@@ -712,7 +712,7 @@ + }; + + usb30_pins: usb30 { +- groups = "usb30"; ++ groups = "usb30", "usb30_ovc"; + function = "usb30"; + }; + }; +diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi +index 1b316d79df88..9d44b5ef4f63 100644 +--- a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi ++++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi +@@ -170,7 +170,7 @@ + }; + + usb0_pins: usb0 { +- groups = "usb0"; ++ groups = "usb0", "usb0_ovc"; + function = "usb0"; + }; + }; +diff --git a/arch/arm64/boot/dts/renesas/ulcb.dtsi b/arch/arm64/boot/dts/renesas/ulcb.dtsi +index b60fd45f0a17..6f054ab8e611 100644 +--- a/arch/arm64/boot/dts/renesas/ulcb.dtsi ++++ b/arch/arm64/boot/dts/renesas/ulcb.dtsi +@@ -366,7 +366,7 @@ + }; + + usb1_pins: usb1 { +- groups = "usb1"; ++ groups = "usb1", "usb1_ovc"; + function = "usb1"; + }; + }; +diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c b/drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c +index 9f302f60297f..55f99fe4d8ac 100644 +--- a/drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c ++++ b/drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c +@@ -3822,44 +3822,79 @@ 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), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 24), + }; + static const unsigned int usb0_mux[] = { +- USB0_PWEN_MARK, USB0_OVC_MARK, ++ USB0_PWEN_MARK, ++}; ++static const unsigned int usb0_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 25), ++}; ++static const unsigned int usb0_ovc_mux[] = { ++ USB0_OVC_MARK, + }; + /* - USB1 ------------------------------------------------------------------- */ + static const unsigned int usb1_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 26), RCAR_GP_PIN(6, 27), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 26), + }; + static const unsigned int usb1_mux[] = { +- USB1_PWEN_MARK, USB1_OVC_MARK, ++ USB1_PWEN_MARK, ++}; ++static const unsigned int usb1_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 27), ++}; ++static const unsigned int usb1_ovc_mux[] = { ++ USB1_OVC_MARK, + }; + /* - USB2 ------------------------------------------------------------------- */ + static const unsigned int usb2_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 14), RCAR_GP_PIN(6, 15), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 14), + }; + static const unsigned int usb2_mux[] = { +- USB2_PWEN_MARK, USB2_OVC_MARK, ++ USB2_PWEN_MARK, ++}; ++static const unsigned int usb2_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 15), ++}; ++static const unsigned int usb2_ovc_mux[] = { ++ USB2_OVC_MARK, + }; + + /* - USB30 ------------------------------------------------------------------ */ + static const unsigned int usb30_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 28), RCAR_GP_PIN(6, 29), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 28), + }; + static const unsigned int usb30_mux[] = { +- USB30_PWEN_MARK, USB30_OVC_MARK, ++ USB30_PWEN_MARK, ++}; ++static const unsigned int usb30_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 29), ++}; ++static const unsigned int usb30_ovc_mux[] = { ++ USB30_OVC_MARK, + }; + /* - USB31 ------------------------------------------------------------------ */ + static const unsigned int usb31_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 30), RCAR_GP_PIN(6, 31), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 30), + }; + static const unsigned int usb31_mux[] = { +- USB31_PWEN_MARK, USB31_OVC_MARK, ++ USB31_PWEN_MARK, ++}; ++static const unsigned int usb31_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 31), ++}; ++static const unsigned int usb31_ovc_mux[] = { ++ USB31_OVC_MARK, + }; + + /* - VIN4 ------------------------------------------------------------------- */ +@@ -4486,10 +4521,15 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { + SH_PFC_PIN_GROUP(tmu_tclk2_a), + SH_PFC_PIN_GROUP(tmu_tclk2_b), + SH_PFC_PIN_GROUP(usb0), ++ SH_PFC_PIN_GROUP(usb0_ovc), + SH_PFC_PIN_GROUP(usb1), ++ SH_PFC_PIN_GROUP(usb1_ovc), + SH_PFC_PIN_GROUP(usb2), ++ SH_PFC_PIN_GROUP(usb2_ovc), + SH_PFC_PIN_GROUP(usb30), ++ SH_PFC_PIN_GROUP(usb30_ovc), + SH_PFC_PIN_GROUP(usb31), ++ SH_PFC_PIN_GROUP(usb31_ovc), + SH_PFC_PIN_GROUP(vin4_data8_a), + SH_PFC_PIN_GROUP(vin4_data16_a), + SH_PFC_PIN_GROUP(vin4_data18_a), +@@ -4977,22 +5017,27 @@ static const char * const tmu_groups[] = { + + static const char * const usb0_groups[] = { + "usb0", ++ "usb0_ovc", + }; + + static const char * const usb1_groups[] = { + "usb1", ++ "usb1_ovc", + }; + + static const char * const usb2_groups[] = { + "usb2", ++ "usb2_ovc", + }; + + static const char * const usb30_groups[] = { + "usb30", ++ "usb30_ovc", + }; + + static const char * const usb31_groups[] = { + "usb31", ++ "usb31_ovc", + }; + + static const char * const vin4_groups[] = { +diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c +index 3ebe8deb24d6..745f93884fe1 100644 +--- a/drivers/pinctrl/sh-pfc/pfc-r8a7795.c ++++ b/drivers/pinctrl/sh-pfc/pfc-r8a7795.c +@@ -3911,44 +3911,79 @@ 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), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 24), + }; + static const unsigned int usb0_mux[] = { +- USB0_PWEN_MARK, USB0_OVC_MARK, ++ USB0_PWEN_MARK, ++}; ++static const unsigned int usb0_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 25), ++}; ++static const unsigned int usb0_ovc_mux[] = { ++ USB0_OVC_MARK, + }; + /* - USB1 ------------------------------------------------------------------- */ + static const unsigned int usb1_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 26), RCAR_GP_PIN(6, 27), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 26), + }; + static const unsigned int usb1_mux[] = { +- USB1_PWEN_MARK, USB1_OVC_MARK, ++ USB1_PWEN_MARK, ++}; ++static const unsigned int usb1_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 27), ++}; ++static const unsigned int usb1_ovc_mux[] = { ++ USB1_OVC_MARK, + }; + /* - USB2 ------------------------------------------------------------------- */ + static const unsigned int usb2_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 14), RCAR_GP_PIN(6, 15), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 14), + }; + static const unsigned int usb2_mux[] = { +- USB2_PWEN_MARK, USB2_OVC_MARK, ++ USB2_PWEN_MARK, ++}; ++static const unsigned int usb2_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 15), ++}; ++static const unsigned int usb2_ovc_mux[] = { ++ USB2_OVC_MARK, + }; + /* - USB2_CH3 --------------------------------------------------------------- */ + static const unsigned int usb2_ch3_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 30), RCAR_GP_PIN(6, 31), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 30), + }; + static const unsigned int usb2_ch3_mux[] = { +- USB2_CH3_PWEN_MARK, USB2_CH3_OVC_MARK, ++ USB2_CH3_PWEN_MARK, ++}; ++static const unsigned int usb2_ch3_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 31), ++}; ++static const unsigned int usb2_ch3_ovc_mux[] = { ++ USB2_CH3_OVC_MARK, + }; + + /* - USB30 ------------------------------------------------------------------ */ + static const unsigned int usb30_pins[] = { +- /* PWEN, OVC */ +- RCAR_GP_PIN(6, 28), RCAR_GP_PIN(6, 29), ++ /* PWEN */ ++ RCAR_GP_PIN(6, 28), + }; + static const unsigned int usb30_mux[] = { +- USB30_PWEN_MARK, USB30_OVC_MARK, ++ USB30_PWEN_MARK, ++}; ++static const unsigned int usb30_ovc_pins[] = { ++ /* OVC */ ++ RCAR_GP_PIN(6, 29), ++}; ++static const unsigned int usb30_ovc_mux[] = { ++ USB30_OVC_MARK, + }; + + /* - VIN4 ------------------------------------------------------------------- */ +@@ -4528,10 +4563,15 @@ static const struct sh_pfc_pin_group pinmux_groups[] = { + SH_PFC_PIN_GROUP(tmu_tclk2_a), + SH_PFC_PIN_GROUP(tmu_tclk2_b), + SH_PFC_PIN_GROUP(usb0), ++ SH_PFC_PIN_GROUP(usb0_ovc), + SH_PFC_PIN_GROUP(usb1), ++ SH_PFC_PIN_GROUP(usb1_ovc), + SH_PFC_PIN_GROUP(usb2), ++ SH_PFC_PIN_GROUP(usb2_ovc), + SH_PFC_PIN_GROUP(usb2_ch3), ++ SH_PFC_PIN_GROUP(usb2_ch3_ovc), + SH_PFC_PIN_GROUP(usb30), ++ SH_PFC_PIN_GROUP(usb30_ovc), + VIN_DATA_PIN_GROUP(vin4_data_a, 8), + VIN_DATA_PIN_GROUP(vin4_data_a, 10), + VIN_DATA_PIN_GROUP(vin4_data_a, 12), +@@ -5026,22 +5066,27 @@ static const char * const tmu_groups[] = { + + static const char * const usb0_groups[] = { + "usb0", ++ "usb0_ovc", + }; + + static const char * const usb1_groups[] = { + "usb1", ++ "usb1_ovc", + }; + + static const char * const usb2_groups[] = { + "usb2", ++ "usb2_ovc", + }; + + static const char * const usb2_ch3_groups[] = { + "usb2_ch3", ++ "usb2_ch3_ovc", + }; + + static const char * const usb30_groups[] = { + "usb30", ++ "usb30_ovc", + }; + + static const char * const vin4_groups[] = { diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-Introduce-dts-file-for-refhw-r-car-board.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-Introduce-dts-file-for-refhw-r-car-board.patch deleted file mode 100644 index cefd7cd..0000000 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-Introduce-dts-file-for-refhw-r-car-board.patch +++ /dev/null @@ -1,90 +0,0 @@ ---- - arch/arm64/boot/dts/renesas/r8a7795-refhw.dts | 76 +++++++++++++++++++++++++++ - 1 file changed, 76 insertions(+) - create mode 100644 arch/arm64/boot/dts/renesas/r8a7795-refhw.dts - -diff --git a/arch/arm64/boot/dts/renesas/r8a7795-refhw.dts b/arch/arm64/boot/dts/renesas/r8a7795-refhw.dts -new file mode 100644 -index 0000000..d586c4c ---- /dev/null -+++ b/arch/arm64/boot/dts/renesas/r8a7795-refhw.dts -@@ -0,0 +1,76 @@ -+/* -+ * Device Tree Source for the reference hardware board with R-Car H3 ES3.0 -+ * -+ * Copyright (C) 2019 Panasonic Corp. -+ * -+ * This file is licensed under the terms of the GNU General Public License -+ * version 2. This program is licensed "as is" without any warranty of any -+ * kind, whether express or implied. -+ */ -+ -+#include "r8a7795-salvator-xs-4x2g.dts" -+ -+/ { -+ vga { -+ port { -+ vga_in: endpoint { -+ /delete-property/remote-endpoint; -+ }; -+ }; -+ }; -+ -+ vga-encoder { -+ ports { -+ port@0 { -+ adv7123_in: endpoint { -+ /delete-property/remote-endpoint; -+ }; -+ }; -+ -+ port@1 { -+ adv7123_out: endpoint { -+ /delete-property/remote-endpoint; -+ }; -+ }; -+ }; -+ }; -+ -+}; -+ -+&du { -+ ports { -+ port@0 { -+ endpoint { -+ /delete-property/remote-endpoint; -+ }; -+ }; -+ -+ port@3 { -+ endpoint { -+ /delete-property/remote-endpoint; -+ }; -+ }; -+ }; -+}; -+ -+&lvds0 { -+ status = "disabled"; -+}; -+ -+&pwm1 { -+ status = "disabled"; -+}; -+ -+&scif_clk { -+ clock-frequency = <0>; -+}; -+ -+&sdhi0 { -+ /delete-property/ wp-gpios; -+ non-removable; -+}; -+ -+&sdhi3 { -+ /delete-property/ wp-gpios; -+ non-removable; -+}; --- -2.7.4 - diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-st_asm330lhh-driver.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-add-st_asm330lhh-driver.patch index c779b39..c779b39 100644 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-add-st_asm330lhh-driver.patch +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-add-st_asm330lhh-driver.patch diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-agl-reference-hardware-sample-bsp.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-agl-reference-hardware-sample-bsp.patch deleted file mode 100644 index 6763558..0000000 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-agl-reference-hardware-sample-bsp.patch +++ /dev/null @@ -1,846 +0,0 @@ ---- - .../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 - diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend b/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend index 3a77619..a9cdd0c 100644 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend @@ -1,12 +1,10 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI_append = " \ - file://0002-Introduce-dts-file-for-refhw-r-car-board.patch \ - file://0001-add-st_asm330lhh-driver.patch \ - file://0002-agl-reference-hardware-sample-bsp.patch \ + file://0001-create-r8a7795-usb-ovc-pinmux-groups.patch \ + file://0001-add-agl-refhw.patch \ + file://0002-add-st_asm330lhh-driver.patch \ file://refhw-rcar.cfg \ " -KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/refhw-rcar.cfg " - -KERNEL_DEVICETREE_refhw = "renesas/r8a7795-refhw.dtb" +KERNEL_CONFIG_FRAGMENTS_append = " ${WORKDIR}/refhw-rcar.cfg" |