From: Przemyslaw Marczak <p.marczak@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 6/7] Exynos: add internal ADC driver
Date: Fri, 04 Sep 2015 17:04:29 +0200 [thread overview]
Message-ID: <55E9B2FD.70306@samsung.com> (raw)
In-Reply-To: <CAPnjgZ1c02_GDP+zgfxr2i3_LkrpRyGGXaq8t=6KKtJFPfErkw@mail.gmail.com>
Hello,
On 09/01/2015 02:33 AM, Simon Glass wrote:
> Hi Przemyslaw,
>
> On 28 August 2015 at 07:59, Przemyslaw Marczak <p.marczak@samsung.com> wrote:
>> This commit adds driver for Voltage Level Monitor based
>> on 12-bit resolution internal ADC with 9-channel multiplexer.
>>
>> New function:
>> - exynos_adc_read_channel(int channel) - returns an 12-bit average
>> value after 8 time conversion, done by the hardware.
>> The default sample rate is: 600kSPS. The channel range: 0-9.
>>
>> Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
>> ---
>> arch/arm/mach-exynos/Makefile | 1 +
>> arch/arm/mach-exynos/adc.c | 83 +++++++++++++++++++++++++++++++++
>> arch/arm/mach-exynos/include/mach/adc.h | 45 ++++++++++++++++++
>> arch/arm/mach-exynos/include/mach/cpu.h | 4 +-
>> 4 files changed, 131 insertions(+), 2 deletions(-)
>> create mode 100644 arch/arm/mach-exynos/adc.c
>
> Can we add this to the device tree? Maybe we should even have a driver
> model uclass for ADC?
>
Ok, I can add a simple ADC uclass.
>>
>> diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
>> index 8542f89..4b7f91f 100644
>> --- a/arch/arm/mach-exynos/Makefile
>> +++ b/arch/arm/mach-exynos/Makefile
>> @@ -7,6 +7,7 @@
>>
>> obj-y += clock.o power.o soc.o system.o pinmux.o tzpc.o
>>
>> +obj-$(CONFIG_EXYNOS5420) += adc.o
>> obj-$(CONFIG_EXYNOS5420) += sec_boot.o
>>
>> ifdef CONFIG_SPL_BUILD
>> diff --git a/arch/arm/mach-exynos/adc.c b/arch/arm/mach-exynos/adc.c
>> new file mode 100644
>> index 0000000..e8dd619
>> --- /dev/null
>> +++ b/arch/arm/mach-exynos/adc.c
>> @@ -0,0 +1,83 @@
>> +/*
>> + * Copyright (C) 2015 Samsung Electronics
>> + * Przemyslaw Marczak <p.marczak@samsung.com>
>> + *
>> + * SPDX-License-Identifier: GPL-2.0+
>> + */
>> +#include <common.h>
>> +#include <errno.h>
>> +#include <asm/arch/adc.h>
>> +#include <asm/arch/power.h>
>> +
>> +extern void sdelay(unsigned long loops);
>> +
>> +struct exynos_adc_v2 *exynos_adc_probe(void)
>> +{
>> + struct exynos_adc_v2 *adc;
>> +
>> + adc = (struct exynos_adc_v2 *)samsung_get_base_adc();
>> + if (!adc) {
>> + error("Invalid ADC base address!");
>> + return NULL;
>> + }
>> +
>> + /* Check HW version */
>> + if (readl(&adc->version) != ADC_V2_VERSION) {
>> + error("This driver supports only ADC v2!");
>> + return NULL;
>> + }
>> +
>> + /* ADC Reset */
>> + writel(ADC_V2_CON1_SOFT_RESET, &adc->con1);
>> +
>> + return adc;
>> +}
>> +
>> +static void exynos_adc_start_conversion(struct exynos_adc_v2 *adc, int channel)
>> +{
>> + unsigned int cfg;
>> +
>> + /* Disable INT - will read status only */
>> + writel(0x0, &adc->int_en);
>> +
>> + /* CON2 - set conversion parameters */
>> + cfg = ADC_V2_CON2_C_TIME(3); /* Conversion times: (1 << 3) = 8 */
>> + cfg |= ADC_V2_CON2_OSEL(OSEL_BINARY);
>> + cfg |= ADC_V2_CON2_CHAN_SEL(channel);
>> + cfg |= ADC_V2_CON2_ESEL(ESEL_ADC_EVAL_TIME_20CLK);
>> + cfg |= ADC_V2_CON2_HIGHF(HIGHF_CONV_RATE_600KSPS);
>> + writel(cfg, &adc->con2);
>> +
>> + /* Start conversion */
>> + cfg = readl(&adc->con1);
>> + writel(cfg | ADC_V2_CON1_STC_EN, &adc->con1);
>> +}
>> +
>> +int exynos_adc_read_channel(int channel)
>> +{
>> + struct exynos_adc_v2 *adc;
>> + int timeout_us = ADC_V2_CONV_TIMEOUT_US;
>> +
>> + adc = exynos_adc_probe();
>> + if (!adc) {
>> + error("Can't init ADC!");
>> + return -ENODEV;
>> + }
>> +
>> + if (channel > ADC_V2_MAX_CHANNEL) {
>> + error("ADC: max channel is: %d.", ADC_V2_MAX_CHANNEL);
>> + return -ENODEV;
>> + }
>> +
>> + exynos_adc_start_conversion(adc, channel);
>> +
>> + while (ADC_V2_GET_STATUS_FLAG(readl(&adc->status)) != FLAG_CONV_END) {
>> + sdelay(4);
>> + if (!timeout_us--) {
>> + error("ADC conversion timeout!");
>> + return -ETIME;
>> + }
>> + }
>> +
>> + return readl(&adc->dat) & ADC_V2_DAT_MASK;
>> +}
>> diff --git a/arch/arm/mach-exynos/include/mach/adc.h b/arch/arm/mach-exynos/include/mach/adc.h
>> index a0e26d7..228acf4 100644
>> --- a/arch/arm/mach-exynos/include/mach/adc.h
>> +++ b/arch/arm/mach-exynos/include/mach/adc.h
>> @@ -9,6 +9,38 @@
>> #ifndef __ASM_ARM_ARCH_ADC_H_
>> #define __ASM_ARM_ARCH_ADC_H_
>>
>> +#define ADC_V2_CON1_SOFT_RESET (0x2 << 1)
>> +#define ADC_V2_CON1_STC_EN (0x1)
>> +
>> +#define ADC_V2_CON2_OSEL(x) (((x) & 0x1) << 10)
>> +#define OSEL_2S (0x0)
>> +#define OSEL_BINARY (0x1)
>> +#define ADC_V2_CON2_ESEL(x) (((x) & 0x1) << 9)
>> +#define ESEL_ADC_EVAL_TIME_40CLK (0x0)
>> +#define ESEL_ADC_EVAL_TIME_20CLK (0x1)
>> +#define ADC_V2_CON2_HIGHF(x) (((x) & 0x1) << 8)
>> +#define HIGHF_CONV_RATE_30KSPS (0x0)
>> +#define HIGHF_CONV_RATE_600KSPS (0x1)
>> +#define ADC_V2_CON2_C_TIME(x) (((x) & 0x7) << 4)
>> +#define ADC_V2_CON2_CHAN_SEL(x) ((x) & 0xf)
>> +
>> +#define ADC_V2_GET_STATUS_FLAG(x) (((x) >> 2) & 0x1)
>> +#define FLAG_CONV_END (0x1)
>> +
>> +#define ADC_V2_INT_DISABLE (0x0)
>> +#define ADC_V2_INT_ENABLE (0x1)
>> +#define INT_NOT_GENERATED (0x0)
>> +#define INT_GENERATED (0x1)
>> +
>> +#define ADC_V2_VERSION (0x80000008)
>> +
>> +#define ADC_V2_MAX_CHANNEL (9)
>> +
>> +/* For default 8 time convertion with sample rate 600 kSPS - 15us timeout */
>> +#define ADC_V2_CONV_TIMEOUT_US (15)
>> +
>> +#define ADC_V2_DAT_MASK (0xfff)
>> +
>> #ifndef __ASSEMBLY__
>> struct s5p_adc {
>> unsigned int adccon;
>> @@ -21,6 +53,19 @@ struct s5p_adc {
>> unsigned int adcmux;
>> unsigned int adcclrintpndnup;
>> };
>> +
>> +struct exynos_adc_v2 {
>> + unsigned int con1;
>> + unsigned int con2;
>> + unsigned int status;
>> + unsigned int dat;
>> + unsigned int int_en;
>> + unsigned int int_status;
>> + unsigned int reserved[2];
>> + unsigned int version;
>> +};
>> +
>> +int exynos_adc_read_channel(int channel);
>> #endif
>>
>> #endif /* __ASM_ARM_ARCH_ADC_H_ */
>> diff --git a/arch/arm/mach-exynos/include/mach/cpu.h b/arch/arm/mach-exynos/include/mach/cpu.h
>> index 14a1692..75933e7 100644
>> --- a/arch/arm/mach-exynos/include/mach/cpu.h
>> +++ b/arch/arm/mach-exynos/include/mach/cpu.h
>> @@ -167,10 +167,11 @@
>> #define EXYNOS5420_USB_HOST_EHCI_BASE 0x12110000
>> #define EXYNOS5420_MMC_BASE 0x12200000
>> #define EXYNOS5420_SROMC_BASE 0x12250000
>> -#define EXYNOS5420_USB3PHY_BASE 0x12500000
>> +#define EXYNOS5420_USB3PHY_BASE 0x12500000
>
> unrelated change?
>
Yes, will remove.
>> #define EXYNOS5420_UART_BASE 0x12C00000
>> #define EXYNOS5420_I2C_BASE 0x12C60000
>> #define EXYNOS5420_I2C_8910_BASE 0x12E00000
>> +#define EXYNOS5420_ADC_BASE 0x12D10000
>
> Then we can drop this.
>
Right
>> #define EXYNOS5420_SPI_BASE 0x12D20000
>> #define EXYNOS5420_I2S_BASE 0x12D60000
>> #define EXYNOS5420_PWMTIMER_BASE 0x12DD0000
>> @@ -186,7 +187,6 @@
>> #define EXYNOS5420_USBPHY_BASE DEVICE_NOT_AVAILABLE
>> #define EXYNOS5420_USBOTG_BASE DEVICE_NOT_AVAILABLE
>> #define EXYNOS5420_FIMD_BASE DEVICE_NOT_AVAILABLE
>> -#define EXYNOS5420_ADC_BASE DEVICE_NOT_AVAILABLE
>> #define EXYNOS5420_MODEM_BASE DEVICE_NOT_AVAILABLE
>> #define EXYNOS5420_USB_HOST_XHCI_BASE DEVICE_NOT_AVAILABLE
>>
>> --
>> 1.9.1
>>
>
> Regards,
> Simon
>
Thanks,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com
next prev parent reply other threads:[~2015-09-04 15:04 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-28 13:59 [U-Boot] [PATCH 0/7] Add board detection for Odroid XU3 / XU3Lite / XU4 Przemyslaw Marczak
2015-08-28 13:59 ` [U-Boot] [PATCH 1/7] s5p: cpu_info: use defined CPU name if available Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-09-04 15:04 ` Przemyslaw Marczak
2015-08-28 13:59 ` [U-Boot] [PATCH 2/7] peach-pi: define CPU name for SoC Exynos5800 Przemyslaw Marczak
2015-08-28 13:59 ` [U-Boot] [PATCH 3/7] Exynos5422/5800: set cpu id to 0x5422 Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-08-28 13:59 ` [U-Boot] [PATCH 4/7] dm: pmic: add s2mps11 PMIC I/O driver Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-09-04 15:04 ` Przemyslaw Marczak
2015-09-07 0:11 ` Minkyu Kang
2015-09-09 10:31 ` Przemyslaw Marczak
2015-08-28 13:59 ` [U-Boot] [PATCH 5/7] odroid-xu3: enable s2mps11 PMIC support Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-08-28 13:59 ` [U-Boot] [PATCH 6/7] Exynos: add internal ADC driver Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-09-04 15:04 ` Przemyslaw Marczak [this message]
2015-08-28 13:59 ` [U-Boot] [PATCH 7/7] exynos5-dt: add board detection for Odroid XU3/XU3L/XU4 Przemyslaw Marczak
2015-09-01 0:33 ` Simon Glass
2015-09-04 15:04 ` Przemyslaw Marczak
2015-08-30 19:03 ` [U-Boot] [PATCH 0/7] Add board detection for Odroid XU3 / XU3Lite / XU4 Anand Moon
2015-08-31 12:17 ` Przemyslaw Marczak
2015-10-21 1:58 ` Siarhei Siamashka
2015-10-21 9:47 ` Anand Moon
2015-10-21 9:57 ` Anand Moon
2015-10-21 10:13 ` Przemyslaw Marczak
2015-08-31 13:22 ` Simon Glass
2015-08-31 18:29 ` Przemyslaw Marczak
2015-08-31 23:13 ` Simon Glass
2015-09-04 15:04 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 00/11] " Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 01/11] samsung: board/misc: check returned pointer for get_board_type() calls Przemyslaw Marczak
2015-10-03 14:27 ` Simon Glass
2015-09-21 12:26 ` [U-Boot] [PATCH V2 02/11] s5p: cpu_info: print "cpu-model" if exists in dts Przemyslaw Marczak
2015-10-03 14:27 ` Simon Glass
2015-10-13 11:57 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 03/11] Peach-Pi: dts: add cpu-model string Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-10-13 11:57 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 04/11] Exynos5422/5800: set cpu id to 0x5422 Przemyslaw Marczak
2015-09-21 12:47 ` Jaehoon Chung
2015-09-21 13:01 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-10-13 11:57 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 06/11] dm: adc: add simple ADC uclass implementation Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-10-13 11:57 ` Przemyslaw Marczak
2015-09-21 12:26 ` [U-Boot] [PATCH V2 07/11] dm: adc: add Exynos54xx compatible ADC driver Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-10-13 11:58 ` Przemyslaw Marczak
2015-10-19 2:20 ` Simon Glass
2015-09-21 12:26 ` [U-Boot] [PATCH V2 08/11] Odroid-XU3: enable s2mps11 PMIC support Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-09-21 12:26 ` [U-Boot] [PATCH V2 09/11] Exynos54xx: dts: add ADC node Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-09-21 12:26 ` [U-Boot] [PATCH V2 10/11] Odroid-XU3: dts: enable ADC, with request for pre-reloc bind Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-09-21 12:26 ` [U-Boot] [PATCH V2 11/11] exynos5-dt-types: add board detection for Odroid XU3/XU3L/XU4 Przemyslaw Marczak
2015-10-03 14:28 ` Simon Glass
2015-10-13 11:59 ` Przemyslaw Marczak
2015-10-19 2:21 ` Simon Glass
2015-09-27 12:20 ` [U-Boot] [PATCH V2 00/11] Add board detection for Odroid XU3 / XU3Lite / XU4 Anand Moon
2015-09-28 10:19 ` Przemyslaw Marczak
2015-10-01 11:07 ` Przemyslaw Marczak
2015-10-03 14:30 ` Simon Glass
2015-10-13 11:59 ` Przemyslaw Marczak
2015-10-27 12:07 ` [U-Boot] [PATCH V3 00/14] " Przemyslaw Marczak
2015-10-27 12:07 ` [U-Boot] [PATCH V3 01/14] samsung: board/misc: check returned pointer for get_board_type() calls Przemyslaw Marczak
2015-10-28 18:50 ` Simon Glass
2015-10-30 3:00 ` Anand Moon
2015-10-27 12:07 ` [U-Boot] [PATCH V3 02/14] s5p: cpu_info: print "cpu-model" if exists in dts Przemyslaw Marczak
2015-10-28 18:50 ` Simon Glass
2015-10-30 3:01 ` Anand Moon
2015-10-27 12:07 ` [U-Boot] [PATCH V3 03/14] Peach-Pi: dts: add cpu-model string Przemyslaw Marczak
2015-10-28 18:50 ` Simon Glass
2015-10-30 3:02 ` Anand Moon
2015-10-27 12:07 ` [U-Boot] [PATCH V3 04/14] Exynos5422/5800: set cpu id to 0x5422 Przemyslaw Marczak
2015-10-30 3:03 ` Anand Moon
2015-10-27 12:07 ` [U-Boot] [PATCH V3 05/14] dm: pmic: add s2mps11 PMIC I/O driver Przemyslaw Marczak
2015-10-28 18:50 ` Simon Glass
2015-10-30 3:04 ` Anand Moon
2015-10-27 12:07 ` [U-Boot] [PATCH V3 06/14] dm: regulator: add function device_get_supply_regulator() Przemyslaw Marczak
2015-11-05 18:25 ` Simon Glass
2015-10-27 12:08 ` [U-Boot] [PATCH V3 07/14] dm: adc: add simple ADC uclass implementation Przemyslaw Marczak
2015-10-27 13:53 ` Przemyslaw Marczak
2015-11-05 18:25 ` Simon Glass
2015-10-27 12:08 ` [U-Boot] [PATCH V3 08/14] dm: adc: add Exynos54xx compatible ADC driver Przemyslaw Marczak
2015-11-06 0:15 ` Simon Glass
2015-10-27 12:08 ` [U-Boot] [PATCH V3 09/14] Odroid-XU3: enable s2mps11 PMIC support Przemyslaw Marczak
2015-10-30 3:09 ` Anand Moon
2015-10-27 12:08 ` [U-Boot] [PATCH V3 10/14] Exynos54xx: dts: add ADC node Przemyslaw Marczak
2015-10-28 18:50 ` Simon Glass
2015-10-29 13:58 ` Przemyslaw Marczak
2015-11-06 3:15 ` Simon Glass
2015-11-06 8:48 ` Przemyslaw Marczak
2015-10-27 12:08 ` [U-Boot] [PATCH V3 11/14] Odroid-XU3: dts: enable ADC, with request for pre-reloc bind Przemyslaw Marczak
2015-10-27 12:08 ` [U-Boot] [PATCH V3 12/14] exynos5-dt-types: add board detection for Odroid XU3/XU3L/XU4 Przemyslaw Marczak
2015-10-30 3:06 ` Anand Moon
2015-10-27 12:08 ` [U-Boot] [PATCH V3 13/14] sandbox: add ADC driver Przemyslaw Marczak
2015-11-04 9:52 ` [U-Boot] [PATCH] Add missing file: include/sandbox-adc.h Przemyslaw Marczak
2015-11-06 12:07 ` Simon Glass
2015-11-06 0:15 ` [U-Boot] [PATCH V3 13/14] sandbox: add ADC driver Simon Glass
2015-10-27 12:08 ` [U-Boot] [PATCH V3 14/14] sandbox: add ADC unit tests Przemyslaw Marczak
2015-11-06 0:15 ` Simon Glass
2015-11-02 5:37 ` [U-Boot] [PATCH V3 00/14] Add board detection for Odroid XU3 / XU3Lite / XU4 Minkyu Kang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E9B2FD.70306@samsung.com \
--to=p.marczak@samsung.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.