From mboxrd@z Thu Jan 1 00:00:00 1970 From: Przemyslaw Marczak Date: Wed, 05 Aug 2015 16:16:52 +0200 Subject: [U-Boot] [PATCH v2 09/19] exynos: Add common board code for exynos5 boards that use device tree In-Reply-To: <1438611577-2245-10-git-send-email-sjg@chromium.org> References: <1438611577-2245-1-git-send-email-sjg@chromium.org> <1438611577-2245-10-git-send-email-sjg@chromium.org> Message-ID: <55C21AD4.3010305@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Simon, On 08/03/2015 04:19 PM, Simon Glass wrote: > Some boards use device tree for almost all board-specific configuration. > They therefore do not need their own separate board code, but can all use > the same version. Add a common version of the board code. It uses the > PMIC, regulator and video bridge uclasses. This will support smdk5250, > smdk5420, snow, spring, pit and pi. > > Signed-off-by: Simon Glass > --- > > Changes in v2: None > > board/samsung/common/Makefile | 1 + > board/samsung/common/exynos5-dt.c | 362 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 363 insertions(+) > create mode 100644 board/samsung/common/exynos5-dt.c > > diff --git a/board/samsung/common/Makefile b/board/samsung/common/Makefile > index 5fb01ce..6cbd906 100644 > --- a/board/samsung/common/Makefile > +++ b/board/samsung/common/Makefile > @@ -11,4 +11,5 @@ obj-$(CONFIG_MISC_COMMON) += misc.o > > ifndef CONFIG_SPL_BUILD > obj-$(CONFIG_BOARD_COMMON) += board.o > +obj-$(CONFIG_EXYNOS5_DT) += exynos5-dt.o > endif > diff --git a/board/samsung/common/exynos5-dt.c b/board/samsung/common/exynos5-dt.c > new file mode 100644 > index 0000000..7d1b88a > --- /dev/null > +++ b/board/samsung/common/exynos5-dt.c > @@ -0,0 +1,362 @@ > +/* > + * Copyright (C) 2012 Samsung Electronics > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static void board_enable_audio_codec(void) > +{ > + int node, ret; > + struct gpio_desc en_gpio; > + > + node = fdtdec_next_compatible(gd->fdt_blob, 0, > + COMPAT_SAMSUNG_EXYNOS5_SOUND); > + if (node <= 0) > + return; > + > + ret = gpio_request_by_name_nodev(gd->fdt_blob, node, > + "codec-enable-gpio", 0, &en_gpio, > + GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE); > + if (ret == -FDT_ERR_NOTFOUND) > + return; > + > + /* Turn on the GPIO which connects to the codec's "enable" line. */ > + gpio_set_pull(gpio_get_number(&en_gpio), S5P_GPIO_PULL_NONE); > + > +#ifdef CONFIG_SOUND_MAX98095 > + /* Enable MAX98095 Codec */ > + gpio_request(EXYNOS5_GPIO_X17, "max98095_enable"); > + gpio_direction_output(EXYNOS5_GPIO_X17, 1); > + gpio_set_pull(EXYNOS5_GPIO_X17, S5P_GPIO_PULL_NONE); > +#endif > +} > + > +int exynos_init(void) > +{ > + board_enable_audio_codec(); > + > + return 0; > +} > + > +static int exynos_set_regulator(const char *name, uint uv) > +{ > + struct udevice *dev; > + int ret; > + > + ret = regulator_get_by_platname(name, &dev); > + if (ret) { > + debug("%s: Cannot find regulator %s\n", __func__, name); > + return ret; > + } > + ret = regulator_set_value(dev, uv); > + if (ret) { > + debug("%s: Cannot set regulator %s\n", __func__, name); > + return ret; > + } > + > + return 0; > +} > + > +int exynos_power_init(void) > +{ > + struct udevice *dev; > + int ret; > + > + ret = pmic_get("max77686", &dev); > + if (!ret) { > + /* TODO(sjg at chromium.org): Move into the clock/pmic API */ > + ret = pmic_clrsetbits(dev, MAX77686_REG_PMIC_32KHZ, 0, > + MAX77686_32KHCP_EN); > + if (ret) > + return ret; > + ret = pmic_clrsetbits(dev, MAX77686_REG_PMIC_BBAT, 0, > + MAX77686_BBCHOSTEN | MAX77686_BBCVS_3_5V); > + if (ret) > + return ret; > + } else { > + ret = pmic_get("s5m8767-pmic", &dev); > + /* TODO(sjg at chromium.org): Use driver model to access clock */ > +#ifdef CONFIG_PMIC_S5M8767 What about: "if (dev)" or "if (!ret && dev)", instead of #ifdef? > + if (!ret) > + s5m8767_enable_32khz_cp(dev); > +#endif ... snip ... Best regards -- Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com