On 11/23/2016 07:39 PM, Christoph Fritz wrote: > This patch adds initial support for Samtec VIN|ING 2000 board. > > Signed-off-by: Christoph Fritz <chf.fr...@googlemail.com> > --- > Changes since v1: > - add more comments (enet phy init) > - fix layout style e.g. multi-line-comments > - use pinmux macros > - use helper funcs clrsetbits_le32() and wait_for_bit() > - make some functions static > - drop board_ehci_hcd_init() and board_phy_config() > - simplify environment > Changes since v2: > - adapt error handling in board_eth_init() and read_adc() > - purge unused macros > - use config_distro_bootcmd as environment > - fix CONFIG_PWM_IMX undef handling
[...] > +int board_eth_init(bd_t *bis) > +{ > + struct iomuxc *iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR; > + int ret; > + unsigned char eth1addr[6]; > + > + /* just to get secound mac address */ > + imx_get_mac_from_fuse(1, eth1addr); > + if (!getenv("eth1addr") && is_valid_ethaddr(eth1addr)) > + eth_setenv_enetaddr("eth1addr", eth1addr); > + > + imx_iomux_v3_setup_multiple_pads(fec1_pads, ARRAY_SIZE(fec1_pads)); > + > + /* > + * Generate phy reference clock via pin IOMUX ENET_REF_CLK1/2 by erasing > + * ENET1/2_TX_CLK_DIR gpr1[14:13], so that reference clock is driven by > + * ref_enetpll0/1 and enable ENET1/2_TX_CLK output driver. > + */ > + clrsetbits_le32(&iomuxc_regs->gpr[1], > + IOMUX_GPR1_FEC1_CLOCK_MUX2_SEL_MASK | > + IOMUX_GPR1_FEC2_CLOCK_MUX2_SEL_MASK, > + IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK | > + IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK); > + > + ret = enable_fec_anatop_clock(0, ENET_50MHZ); > + > + if (ret) { You can drop the newline above. > + printf("FEC anatop MXC: %s:failed (%0x)\n", __func__, ret); > + goto eth_fail; > + } [...] > +static int read_adc(unsigned int *val) s/unsigned int/u32/ > +{ > + int ret; > + void __iomem *b = map_physmem(ADC1_BASE_ADDR, 0x100, MAP_NOCACHE); > + > + /* use software mode */ > + writel(ADCx_CFG_SWMODE, b + ADCx_CFG); > + > + /* start auto calibration */ > + setbits_le32(b + ADCx_GC, ADCx_GC_CAL); > + ret = wait_for_bit("ADC", b + ADCx_GC, ADCx_GC_CAL, ADCx_GC_CAL, 10, 0); > + if (ret) > + goto adc_exit; > + > + /* start conversation */ "conversion" > + writel(0, b + ADCx_HC0); > + > + /* wait for conversation */ DTTO > + ret = wait_for_bit("ADC", b + ADCx_HS, ADCx_HS_C0, ADCx_HS_C0, 10, 0); > + if (ret) > + goto adc_exit; > + > + /* read result */ > + *val = readl(b + ADCx_R0); > + > +adc_exit: > + if (ret) > + printf("ADC failure (ret=%i)\n", ret); > + unmap_physmem(b, MAP_NOCACHE); > + return ret; > +} > + > +#define VAL_UPPER 2498 > +#define VAL_LOWER 1550 > + > +static int set_pin_state(void) > +{ > + unsigned int val; > + int ret; > + > + ret = read_adc(&val); > + if (ret) > + return ret; > + > + if (val >= VAL_UPPER) > + setenv("pin_state", "connected"); > + else if (val < VAL_UPPER && val >= VAL_LOWER) > + setenv("pin_state", "open"); > + else if (val < VAL_LOWER) Isn't this just catch-all statement ? You can drop the condition. > + setenv("pin_state", "button"); > + > + return ret; > +} [...] -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot