[U-Boot] [PATCH v3] mx6sx: Add initial support for Samtec VIN|ING 2000 board
Marek Vasut
marex at denx.de
Wed Nov 23 20:04:02 CET 2016
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.fritz at 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
More information about the U-Boot
mailing list