arm: imx: Add EEPROM for MAC functionallity:
authorJosep Orga <jorga@somdevices.com>
Tue, 28 Apr 2020 11:22:03 +0000 (13:22 +0200)
committerJosep Orga <jorga@somdevices.com>
Tue, 28 Apr 2020 11:22:03 +0000 (13:22 +0200)
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 <jorga@somdevices.com>
arch/arm/dts/imx6ull-somdevices.dts
board/somdevices/imx6ull_somdevices/imx6ull_somdevices.c

index c5d71f0..97dcb08 100644 (file)
                        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 hp-det-polarity>;
-                * 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 {
        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 {
                        >;
                };
 
-               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
                        >;
                };
 
                        >;
                };
 
-               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
                        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
                        >;
                };
 
                        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
                        >;
                };
 
        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>;
index a7b1203..b5fac7e 100644 (file)
@@ -26,6 +26,7 @@
 #include <power/pmic.h>
 #include <power/pfuze3000_pmic.h>
 #include "../common/pfuze.h"
+#include <environment.h>
 
 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;
 }