From c8764ecb522b205345cfcd9065a907e074bb66b9 Mon Sep 17 00:00:00 2001 From: Josep Orga Date: Tue, 28 Apr 2020 13:22:03 +0200 Subject: [PATCH] arm: imx: Add EEPROM for MAC functionallity: imx6ull-somdevices.dts: Remove some unused functionallity and set I2C2 correctly. imx6ull_somdevices.c: Read EEPROM bytes and set in ethaddr variables environment. Signed-off-by: Josep Orga --- arch/arm/dts/imx6ull-somdevices.dts | 123 ++---------------- .../imx6ull_somdevices/imx6ull_somdevices.c | 52 ++++++++ 2 files changed, 63 insertions(+), 112 deletions(-) diff --git a/arch/arm/dts/imx6ull-somdevices.dts b/arch/arm/dts/imx6ull-somdevices.dts index c5d71f00a3..97dcb08a6a 100644 --- a/arch/arm/dts/imx6ull-somdevices.dts +++ b/arch/arm/dts/imx6ull-somdevices.dts @@ -75,43 +75,6 @@ states = <1300000 0x1 1400000 0x0>; }; }; - - sound { - compatible = "fsl,imx6ul-evk-wm8960", - "fsl,imx-audio-wm8960"; - model = "wm8960-audio"; - cpu-dai = <&sai2>; - audio-codec = <&codec>; - asrc-controller = <&asrc>; - codec-master; - gpr = <&gpr 4 0x100000 0x100000>; - /* - * hp-det = ; - * hp-det-pin: JD1 JD2 or JD3 - * hp-det-polarity = 0: hp detect high for headphone - * hp-det-polarity = 1: hp detect high for speaker - */ - hp-det = <3 0>; - hp-det-gpios = <&gpio5 4 0>; - mic-det-gpios = <&gpio5 4 0>; - audio-routing = - "Headphone Jack", "HP_L", - "Headphone Jack", "HP_R", - "Ext Spk", "SPK_LP", - "Ext Spk", "SPK_LN", - "Ext Spk", "SPK_RP", - "Ext Spk", "SPK_RN", - "LINPUT2", "Mic Jack", - "LINPUT3", "Mic Jack", - "RINPUT1", "Main MIC", - "RINPUT2", "Main MIC", - "Mic Jack", "MICB", - "Main MIC", "MICB", - "CPU-Playback", "ASRC-Playback", - "Playback", "CPU-Playback", - "ASRC-Capture", "CPU-Capture", - "CPU-Capture", "Capture"; - }; }; &cpu0 { @@ -167,46 +130,14 @@ fsl,ldo-bypass = <0>; /* DCDC, ldo-enable */ }; -&i2c1 { - clock-frequency = <100000>; - pinctrl-names = "default", "gpio"; - pinctrl-0 = <&pinctrl_i2c1>; - pinctrl-1 = <&pinctrl_i2c1_gpio>; - scl-gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>; - sda-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>; - status = "okay"; - - mag3110@0e { - compatible = "fsl,mag3110"; - reg = <0x0e>; - position = <2>; - }; - - fxls8471@1e { - compatible = "fsl,fxls8471"; - reg = <0x1e>; - position = <0>; - interrupt-parent = <&gpio5>; - interrupts = <0 8>; - }; -}; - &i2c2 { clock_frequency = <100000>; pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c2>; pinctrl-1 = <&pinctrl_i2c2_gpio>; - scl-gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>; - sda-gpios = <&gpio1 31 GPIO_ACTIVE_HIGH>; + scl-gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; + sda-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>; status = "okay"; - - codec: wm8960@1a { - compatible = "wlf,wm8960"; - reg = <0x1a>; - clocks = <&clks IMX6UL_CLK_SAI2>; - clock-names = "mclk"; - wlf,shared-lrclk; - }; }; &iomuxc { @@ -287,31 +218,17 @@ >; }; - pinctrl_i2c1: i2c1grp { - fsl,pins = < - MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0 - MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0 - >; - }; - - pinctrl_i2c1_gpio: i2c1grp_gpio { - fsl,pins = < - MX6UL_PAD_UART4_TX_DATA__GPIO1_IO28 0x1b8b0 - MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29 0x1b8b0 - >; - }; - pinctrl_i2c2: i2c2grp { fsl,pins = < - MX6UL_PAD_UART5_TX_DATA__I2C2_SCL 0x4001b8b0 - MX6UL_PAD_UART5_RX_DATA__I2C2_SDA 0x4001b8b0 + MX6UL_PAD_GPIO1_IO00__I2C2_SCL 0x4001b8b0 + MX6UL_PAD_GPIO1_IO01__I2C2_SDA 0x4001b8b0 >; }; pinctrl_i2c2_gpio: i2c2grp_gpio { fsl,pins = < - MX6UL_PAD_UART5_TX_DATA__GPIO1_IO30 0x1b8b0 - MX6UL_PAD_UART5_RX_DATA__GPIO1_IO31 0x1b8b0 + MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x1b8b0 + MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0x1b8b0 >; }; @@ -380,15 +297,6 @@ >; }; - pinctrl_tsc: tscgrp { - fsl,pins = < - MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0 - MX6UL_PAD_GPIO1_IO02__GPIO1_IO02 0xb0 - MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0xb0 - MX6UL_PAD_GPIO1_IO04__GPIO1_IO04 0xb0 - >; - }; - pinctrl_uart1: uart1grp { fsl,pins = < MX6UL_PAD_UART1_TX_DATA__UART1_DCE_TX 0x1b0b1 @@ -400,8 +308,8 @@ fsl,pins = < MX6UL_PAD_UART2_TX_DATA__UART2_DCE_TX 0x1b0b1 MX6UL_PAD_UART2_RX_DATA__UART2_DCE_RX 0x1b0b1 - MX6UL_PAD_UART3_RX_DATA__UART2_DCE_RTS 0x1b0b1 - MX6UL_PAD_UART3_TX_DATA__UART2_DCE_CTS 0x1b0b1 + MX6UL_PAD_UART2_RTS_B__UART2_DCE_RTS 0x1b0b1 + MX6UL_PAD_UART2_CTS_B__UART2_DCE_CTS 0x1b0b1 >; }; @@ -409,14 +317,14 @@ fsl,pins = < MX6UL_PAD_UART2_TX_DATA__UART2_DTE_RX 0x1b0b1 MX6UL_PAD_UART2_RX_DATA__UART2_DTE_TX 0x1b0b1 - MX6UL_PAD_UART3_RX_DATA__UART2_DTE_CTS 0x1b0b1 - MX6UL_PAD_UART3_TX_DATA__UART2_DTE_RTS 0x1b0b1 + MX6UL_PAD_UART2_RTS_B__UART2_DTE_CTS 0x1b0b1 + MX6UL_PAD_UART2_CTS_B__UART2_DTE_RTS 0x1b0b1 >; }; pinctrl_usb_otg1_id: usbotg1idgrp { fsl,pins = < - MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 + MX6UL_PAD_UART3_TX_DATA__ANATOP_OTG1_ID 0x17059 >; }; @@ -631,15 +539,6 @@ status = "okay"; }; -&tsc { - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_tsc>; - xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; - measure-delay-time = <0xffff>; - pre-charge-time = <0xfff>; - status = "okay"; -}; - &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>; diff --git a/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c b/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c index a7b1203b5a..b5fac7e2e4 100644 --- a/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c +++ b/board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c @@ -26,6 +26,7 @@ #include #include #include "../common/pfuze.h" +#include DECLARE_GLOBAL_DATA_PTR; @@ -46,6 +47,11 @@ DECLARE_GLOBAL_DATA_PTR; PAD_CTL_SRE_FAST) #define GPMI_PAD_CTRL2 (GPMI_PAD_CTRL0 | GPMI_PAD_CTRL1) +#define EEPROM_BUS_NUM 1 +#define EEPROM_ADDR 0x50 +#define EEPROM_ADDR_LEN 1 +#define EEPROM_OFFSET 0xFA + #ifdef CONFIG_DM_PMIC int power_init_board(void) @@ -339,6 +345,51 @@ struct display_info_t const displays[] = {{ size_t display_count = ARRAY_SIZE(displays); #endif +int set_mac_eeprom(void) +{ + struct udevice *dev; + u8 buf[6]; + int ret; + + if (!env_get("ethaddr")) { + //If ethaddr variable is not set in environment + char ethaddr[18]; + printf("Setting MAC from EEPROM\n"); + //Configure EEPROM: 7bit address 0x50 + ret = i2c_get_chip_for_busnum(EEPROM_BUS_NUM, EEPROM_ADDR, + EEPROM_ADDR_LEN, &dev); + if (ret) { + printf("Cannot find EEPROM for MAC: %d\n", ret); + return 0; + } + //Reading from EEPROM + if (dm_i2c_read(dev, EEPROM_OFFSET, (u8 *)&buf, sizeof(buf)) < 0) { + printf("i2c EEPROM for MAC read failed\n"); + return 0; + } + sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", + buf[0], + buf[1], + buf[2], + buf[3], + buf[4], + buf[5]); + //Set ethaddr variable for first ethernet + env_set("ethaddr", ethaddr); + sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", + 0x00, + 0xaa, + buf[2], + buf[3], + buf[4], + buf[5]); + //Set eth1addr variable for second ethernet + env_set("eth1addr", ethaddr); + env_save(); + } + return 0; +} + int board_early_init_f(void) { setup_iomux_uart(); @@ -405,6 +456,7 @@ int board_late_init(void) board_late_mmc_env_init(); #endif + set_mac_eeprom(); return 0; } -- 2.17.1