diff options
author | Scott Murray <scott.murray@konsulko.com> | 2021-09-07 11:03:24 -0400 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2021-09-09 16:44:21 -0400 |
commit | a0117f8c0d614a2d15111db312eebfe9378c868e (patch) | |
tree | 0bfe62babbd27521671bf72595ff751d5ca20075 /meta-agl-refhw-gen3/recipes-kernel | |
parent | e98aa7a71c06400b50a5c5bdd7e3e576485122bd (diff) |
Add WLAN card support
This is loosely based on the contents of the tar file provided with
the WLAN cards (AGL_Refhw_sample_software_KK_20210225.tar.gz) with
updates for BSP v4.7.0 and other fixes.
Changes:
- Kernel patches and configuration update to enable the TI WL1837
module. As opposed to the original changes from Panasonic or the
Kingfisher support, the HCI LL driver is used instead of the older
ti-st + btwilink combination, since the the latter are deprecated
and are removed in kernel 5.5.
- As part of the above the sound configuration in the devicetree has
been reworked to support the WL1837 BT audio. This includes
dropping the HDMI1 audio configuration from the original Salvator-X
devicetree, as it conflicts with the SSI used for the ak4613 in the
reference hardware.
- Recipes added for wlconf (from meta-ti) and ti-bt-firmware (loosely
derived from the meta-rcar-gen3-adas version). The TI-TFL license
used by ti-bt-firmware has been added in a top-level "licenses"
directory and that added to LICENSE_PATH in layer.conf to satisfy
the license packaging QA checking.
Bug-AGL: SPEC-4071
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Ib17fc01331efe0f49a90f7a8b223ec88b33b44f7
Diffstat (limited to 'meta-agl-refhw-gen3/recipes-kernel')
4 files changed, 299 insertions, 11 deletions
diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-Add-support-for-TI-WL1837.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-Add-support-for-TI-WL1837.patch new file mode 100644 index 0000000..cfd1276 --- /dev/null +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0001-Add-support-for-TI-WL1837.patch @@ -0,0 +1,233 @@ +Add support for TI WL1837 + +This patch adds description of TI WL1837 and links interfaces +to communicate with the IC. + +Signed-off-by: ito.yoshiki001 <ito.yoshiki001@jp.panasonic.com> + +Reworked: +- WL1837 specific devicetree configuration moved to the board + specific r8a7795-agl-refhw.dts from agl-refhw-common.dtsi. +- Switched to HCI_LL driver for BT support to match other upstream + users and prepare for btwilink driver going away (dropped in 5.5 + upstream). +- WLAN_PWR_EN enabling moved to GPIO initialization to work around + BT initialization problems. +- Update sound configuration to enable WL1837 BT audio, and disable + the HDMI1 audio left over from the original Salvator-X devicetree. + The latter is clean up, as HDMI1 as defined uses a SSI that + conflicts with the ak4613 configuration. + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> +--- + arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi | 37 +++++++--- + arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts | 84 ++++++++++++++++++----- + 2 files changed, 94 insertions(+), 27 deletions(-) + +diff --git a/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi b/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi +index 796ac4c078e0..6f34b54c6ce1 100644 +--- a/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi ++++ b/arch/arm64/boot/dts/renesas/agl-refhw-common.dtsi +@@ -183,6 +183,18 @@ + 1800000 0>; + }; + ++ wlan_en: regulator-wlan_en { ++ compatible = "regulator-fixed"; ++ ++ regulator-name = "wlan-en-regulator"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ gpio = <&gpio7 2 GPIO_ACTIVE_HIGH>; ++ startup-delay-us = <70000>; ++ enable-active-high; ++ }; ++ + hdmi0-out { + compatible = "hdmi-connector"; + label = "HDMI0 OUT"; +@@ -672,7 +684,8 @@ + }; + + sound_pins: sound { +- groups = "ssi349_ctrl", "ssi3_data", "ssi4_data"; ++ groups = "ssi349_ctrl", "ssi3_data", "ssi4_data", ++ "ssi78_ctrl", "ssi7_data", "ssi8_data"; + function = "ssi"; + }; + +@@ -827,24 +840,28 @@ + }; + + &sdhi3 { ++ /* Default WLAN card configuration */ + pinctrl-0 = <&sdhi3_pins>; +- pinctrl-1 = <&sdhi3_pins_uhs>; +- pinctrl-names = "default", "state_uhs"; ++ pinctrl-names = "default"; + +- vmmc-supply = <&vcc_sdhi3>; +- vqmmc-supply = <&vccq_sdhi3>; +- cd-gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; +- wp-gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>; ++ vmmc-supply = <&wlan_en>; + bus-width = <4>; +- sd-uhs-sdr50; +- sd-uhs-sdr104; +- status = "okay"; ++ no-1-8-v; ++ non-removable; ++ cap-power-off-card; ++ keep-power-in-suspend; ++ ++ /* leave disabled by default */ + }; + + &ssi4 { + shared-pin; + }; + ++&ssi8 { ++ shared-pin; ++}; ++ + &usb_extal_clk { + clock-frequency = <50000000>; + }; +diff --git a/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts b/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts +index 83638a6228c0..97cc6e08ee8f 100644 +--- a/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts ++++ b/arch/arm64/boot/dts/renesas/r8a7795-agl-refhw.dts +@@ -119,6 +119,23 @@ + }; + }; + ++ sound_wl18xx { ++ compatible = "audio-graph-card"; ++ label = "wl18xx"; ++ ++ dais = <&rsnd_port2>; ++ }; ++ ++ wl18xx_pcm { ++ compatible = "ti,wl18xx-pcm"; ++ status = "okay"; ++ ++ port { ++ wl18xx_endpoint: endpoint { ++ remote-endpoint = <&rsnd_for_wl18xx>; ++ }; ++ }; ++ }; + }; + + &adsp { +@@ -155,8 +172,14 @@ + + &sound_card { + dais = <&rsnd_port0 /* ak4613 */ +- &rsnd_port1 /* HDMI0 */ +- &rsnd_port2>; /* HDMI1 */ ++ &rsnd_port1>; /* HDMI0 */ ++}; ++ ++&hscif0 { ++ bluetooth { ++ compatible = "ti,wl1837-st"; ++ enable-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>; ++ }; + }; + + &hdmi0 { +@@ -192,12 +215,6 @@ + remote-endpoint = <&hdmi1_con>; + }; + }; +- port@2 { +- reg = <2>; +- dw_hdmi1_snd_in: endpoint { +- remote-endpoint = <&rsnd_endpoint2>; +- }; +- }; + }; + }; + +@@ -215,8 +232,11 @@ + }; + + &rcar_sound { ++ /* Multi DAI */ ++ #sound-dai-cells = <1>; ++ + ports { +- /* rsnd_port0 is on salvator-common */ ++ /* rsnd_port0 is in agl-refhw-common */ + rsnd_port1: port@1 { + reg = <1>; + rsnd_endpoint1: endpoint { +@@ -231,14 +251,15 @@ + }; + rsnd_port2: port@2 { + reg = <2>; +- rsnd_endpoint2: endpoint { +- remote-endpoint = <&dw_hdmi1_snd_in>; ++ rsnd_for_wl18xx: endpoint { ++ remote-endpoint = <&wl18xx_endpoint>; + +- dai-format = "i2s"; +- bitclock-master = <&rsnd_endpoint2>; +- frame-master = <&rsnd_endpoint2>; ++ simple-audio-card,format = "i2s"; ++ bitclock-master = <&wl18xx_endpoint>; ++ frame-master = <&wl18xx_endpoint>; + +- playback = <&ssi3>; ++ playback = <&ssi7>; ++ capture = <&ssi8>; + }; + }; + }; +@@ -373,11 +394,40 @@ + }; + + &sdhi3 { +- /delete-property/ wp-gpios; +- non-removable; ++ status = "okay"; ++ ++ max-frequency = <50000000>; ++ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ wlcore: wlcore@2 { ++ compatible = "ti,wl1837"; ++ reg = <2>; ++ interrupt-parent = <&gpio1>; ++ interrupts = <25 IRQ_TYPE_EDGE_FALLING>; ++ }; + }; + + &gpio6 { ++ /* ++ * Enable WLAN_PWR_EN right from boot to get reliable BT ++ * initialization, as doing it at SDHI initialization ++ * does not seem to do so, no matter how much BT_EN is ++ * delayed. ++ * ++ * This is perhaps not ideal per the requirements described ++ * in the "Level Shifting WL18xx/WL18xxMOD/WL18xxQ I/Os" ++ * document (SWRA448A)[1], but the BT UART seems unusable ++ * otherwise. ++ * ++ * [1] https://www.ti.com/lit/an/swra448a/swra448a.pdf ++ */ ++ wlan-pwr-en { ++ gpio-hog; ++ gpios = <9 GPIO_ACTIVE_HIGH>; ++ output-high; ++ }; ++ + /* Enable the CAN 1 & 2 transceivers */ + can-1-transceiver-stb { + gpio-hog; diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-revert-e233201a.patch b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-revert-e233201a.patch new file mode 100644 index 0000000..76039be --- /dev/null +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/0002-revert-e233201a.patch @@ -0,0 +1,47 @@ +Revert "wl18xx: do not invert IRQ on WLxxxx side" + +This reverts commit 2bcfc394307ae164cbbdff74b902af61dc0181b4. +The hard-coded assumption that the IRQ inversion logic is not +needed breaks non-Kingfisher users, specifically the WLAN card +for the AGL reference hardware board. + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> + +--- + drivers/net/wireless/ti/wl18xx/main.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/drivers/net/wireless/ti/wl18xx/main.c b/drivers/net/wireless/ti/wl18xx/main.c +index 764987101116..0b3cf8477c6c 100644 +--- a/drivers/net/wireless/ti/wl18xx/main.c ++++ b/drivers/net/wireless/ti/wl18xx/main.c +@@ -865,9 +865,7 @@ static int wl18xx_pre_upload(struct wl1271 *wl) + { + u32 tmp; + int ret; +-#if 0 + u16 irq_invert; +-#endif + + BUILD_BUG_ON(sizeof(struct wl18xx_mac_and_phy_params) > + WL18XX_PHY_INIT_MEM_SIZE); +@@ -920,11 +918,6 @@ static int wl18xx_pre_upload(struct wl1271 *wl) + if (ret < 0) + goto out; + +-#if 0 +- /* We have level translator with inversion on IRQ line so we +- * set IRQ_TYPE_EDGE_FALLING in DTS, but we do not need to +- * invert IRQ logic on WLxxxx side! +- */ + ret = irq_get_trigger_type(wl->irq); + if ((ret == IRQ_TYPE_LEVEL_LOW) || (ret == IRQ_TYPE_EDGE_FALLING)) { + wl1271_info("using inverted interrupt logic: %d", ret); +@@ -944,7 +937,6 @@ static int wl18xx_pre_upload(struct wl1271 *wl) + + ret = wlcore_set_partition(wl, &wl->ptable[PART_PHY_INIT]); + } +-#endif + + out: + return ret; diff --git a/meta-agl-refhw-gen3/recipes-kernel/linux/files/refhw-rcar.cfg b/meta-agl-refhw-gen3/recipes-kernel/linux/files/refhw-rcar.cfg index fc8afbc..9fa24e9 100644 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/files/refhw-rcar.cfg +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/files/refhw-rcar.cfg @@ -3,25 +3,31 @@ CONFIG_USB_NET_AX88179_178A=y CONFIG_GPIO_SYSFS=y -CONFIG_RFKILL=y - CONFIG_CAN=y CONFIG_CAN_DEV=y CONFIG_CAN_RCAR_CANFD=y -CONFIG_BT=y -CONFIG_BT_QCA=y -CONFIG_BT_HCIUART=y +CONFIG_BT=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_BNEP=m +CONFIG_BT_HIDP=m + +CONFIG_BT_HCIUART=m CONFIG_BT_HCIUART_SERDEV=y CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_BCM=y -CONFIG_CFG80211=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_CFG80211_WEXT=y CONFIG_MAC80211=y -CONFIG_ATH_COMMON=y -CONFIG_WLAN_VENDOR_ATH=y -CONFIG_ATH10K=y -CONFIG_ATH10K_PCI=m +CONFIG_WLAN=y +CONFIG_WLCORE=m +CONFIG_WLCORE_SDIO=m +CONFIG_WL18xx=m +CONFIG_SND_SOC_WL18XX=y CONFIG_USB_GADGET=y CONFIG_USB_RENESAS_USB3=y 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 82c4a2a..325e507 100644 --- a/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend +++ b/meta-agl-refhw-gen3/recipes-kernel/linux/linux-renesas_%.bbappend @@ -4,6 +4,8 @@ SRC_URI_append = " \ file://0001-create-r8a7795-usb-ovc-pinmux-groups.patch \ file://0001-add-agl-refhw.patch \ file://0003-rcar3-dw-hdmi-cec-mute.patch \ + file://0001-Add-support-for-TI-WL1837.patch \ + file://0002-revert-e233201a.patch \ file://refhw-rcar.cfg \ " |