drivers: adc: silabs: removed the old IADC driver

iadc_gecko driver has been replaced by adc_silabs_iadc.c.
The old files and bindings are removed.

Signed-off-by: Martin Hoff <martin.hoff@silabs.com>
diff --git a/drivers/adc/CMakeLists.txt b/drivers/adc/CMakeLists.txt
index f547561..c29b997 100644
--- a/drivers/adc/CMakeLists.txt
+++ b/drivers/adc/CMakeLists.txt
@@ -45,7 +45,6 @@
 zephyr_library_sources_ifdef(CONFIG_ADC_ESP32		adc_esp32.c)
 zephyr_library_sources_ifdef(CONFIG_ADC_ESP32_DMA	adc_esp32_dma.c)
 zephyr_library_sources_ifdef(CONFIG_ADC_GECKO_ADC   	adc_gecko.c)
-zephyr_library_sources_ifdef(CONFIG_ADC_GECKO_IADC   	iadc_gecko.c)
 zephyr_library_sources_ifdef(CONFIG_ADC_SILABS_IADC   	adc_silabs_iadc.c)
 zephyr_library_sources_ifdef(CONFIG_ADC_SILABS_SIWX91X 	adc_silabs_siwx91x.c)
 zephyr_library_sources_ifdef(CONFIG_ADC_INFINEON_CAT1	adc_ifx_cat1.c)
diff --git a/drivers/adc/Kconfig.gecko b/drivers/adc/Kconfig.gecko
index 693803b..5ee6b4c 100644
--- a/drivers/adc/Kconfig.gecko
+++ b/drivers/adc/Kconfig.gecko
@@ -3,15 +3,6 @@
 # Copyright (c) 2023 Antmicro <www.antmicro.com>
 # SPDX-License-Identifier: Apache-2.0
 
-config ADC_GECKO_IADC
-	bool "Gecko Incremental ADC driver"
-	default y
-	depends on DT_HAS_SILABS_GECKO_IADC_ENABLED
-	select SOC_GECKO_IADC
-	select ADC_CONFIGURABLE_INPUTS
-	help
-	  Enable the driver implementation for the Silabs GeckoEXX32 Incremental ADC
-
 config ADC_GECKO_ADC
 	bool "Gecko ADC driver"
 	default y
diff --git a/drivers/adc/iadc_gecko.c b/drivers/adc/iadc_gecko.c
deleted file mode 100644
index fb0cfc2..0000000
--- a/drivers/adc/iadc_gecko.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*
- * Copyright (c) 2023 Antmicro <www.antmicro.com>
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-
-#define DT_DRV_COMPAT silabs_gecko_iadc
-
-#include <zephyr/drivers/adc.h>
-#include <zephyr/drivers/clock_control.h>
-#include <zephyr/drivers/clock_control/clock_control_silabs.h>
-#include <zephyr/drivers/pinctrl.h>
-#include <zephyr/pm/device.h>
-
-#include <em_iadc.h>
-
-#define ADC_CONTEXT_USES_KERNEL_TIMER
-#include "adc_context.h"
-
-#include <zephyr/logging/log.h>
-LOG_MODULE_REGISTER(iadc_gecko, CONFIG_ADC_LOG_LEVEL);
-
-/* Number of channels available. */
-#define GECKO_CHANNEL_COUNT	16
-#define GECKO_INTERNAL_REFERENCE_mV	1210
-#define GECKO_DATA_RES12BIT(DATA)	((DATA) & 0x0FFF)
-
-struct adc_gecko_channel_config {
-	IADC_CfgAnalogGain_t gain;
-	IADC_CfgReference_t reference;
-	IADC_PosInput_t input_positive;
-	IADC_NegInput_t input_negative;
-	bool initialized;
-};
-
-struct adc_gecko_data {
-	const struct device *dev;
-	struct adc_context ctx;
-	uint16_t *buffer;
-	uint16_t *repeat_buffer;
-	uint32_t channels;
-	uint8_t channel_id;
-	struct adc_gecko_channel_config channel_config[GECKO_CHANNEL_COUNT];
-};
-
-struct adc_gecko_config {
-	IADC_Config_t config;
-	IADC_TypeDef *base;
-	const struct pinctrl_dev_config *pcfg;
-	const struct device *clock_dev;
-	const struct silabs_clock_control_cmu_config clock_cfg;
-	void (*irq_cfg_func)(void);
-};
-
-static void adc_gecko_set_config(const struct device *dev)
-{
-	struct adc_gecko_data *data = dev->data;
-	struct adc_gecko_channel_config *channel_config = NULL;
-	const struct adc_gecko_config *config = dev->config;
-
-	IADC_TypeDef *iadc = (IADC_TypeDef *)config->base;
-	IADC_InitSingle_t sInit = IADC_INITSINGLE_DEFAULT;
-	IADC_SingleInput_t initSingleInput = IADC_SINGLEINPUT_DEFAULT;
-	IADC_Init_t init = IADC_INIT_DEFAULT;
-	IADC_AllConfigs_t initAllConfigs = IADC_ALLCONFIGS_DEFAULT;
-
-	channel_config = &data->channel_config[data->channel_id];
-
-	initSingleInput.posInput = channel_config->input_positive;
-	initSingleInput.negInput = channel_config->input_negative;
-
-	initAllConfigs.configs[0].analogGain = channel_config->gain;
-
-	initAllConfigs.configs[0].reference = channel_config->reference;
-
-	IADC_init(iadc, &init, &initAllConfigs);
-
-	IADC_initSingle(iadc, &sInit, &initSingleInput);
-}
-
-static int adc_gecko_check_buffer_size(const struct adc_sequence *sequence,
-					uint8_t active_channels)
-{
-	size_t needed_buffer_size;
-
-	needed_buffer_size = active_channels * sizeof(uint16_t);
-
-	if (sequence->options) {
-		needed_buffer_size *= (1 + sequence->options->extra_samplings);
-	}
-
-	if (sequence->buffer_size < needed_buffer_size) {
-		LOG_DBG("Provided buffer is too small (%u/%u)",
-			sequence->buffer_size, needed_buffer_size);
-		return -ENOMEM;
-	}
-
-	return 0;
-}
-
-static int adc_gecko_check_resolution(const struct adc_sequence *sequence)
-{
-	int value = sequence->resolution;
-
-	/* Base resolution is on 12, it can be changed only up by oversampling */
-	if (value != 12) {
-		return -EINVAL;
-	}
-
-	return value;
-}
-
-static int start_read(const struct device *dev, const struct adc_sequence *sequence)
-{
-
-	struct adc_gecko_data *data = dev->data;
-	uint32_t channels;
-	uint8_t channel_count;
-	uint8_t index;
-	int res;
-
-	/* Check if at least 1 channel is requested */
-	if (sequence->channels == 0) {
-		LOG_DBG("No channel requested");
-		return -EINVAL;
-	}
-
-	if (sequence->oversampling) {
-		LOG_ERR("Oversampling is not supported");
-		return -EINVAL;
-	}
-
-	/* Check resolution setting */
-	res = adc_gecko_check_resolution(sequence);
-	if (res < 0) {
-		return -EINVAL;
-	}
-
-	/* Verify all requested channels are initialized and store resolution */
-	channels = sequence->channels;
-	channel_count = 0;
-	while (channels) {
-		/* Iterate through all channels and check if they are initialized */
-		index = find_lsb_set(channels) - 1;
-		if (index >= GECKO_CHANNEL_COUNT) {
-			LOG_DBG("Requested channel index not available: %d", index);
-			return -EINVAL;
-		}
-
-		if (!data->channel_config[index].initialized) {
-			LOG_DBG("Channel not initialized");
-			return -EINVAL;
-		}
-		channel_count++;
-		channels &= ~BIT(index);
-	}
-
-	/* Check buffer size */
-	res = adc_gecko_check_buffer_size(sequence, channel_count);
-	if (res < 0) {
-		return res;
-	}
-
-	data->buffer = sequence->buffer;
-
-	adc_context_start_read(&data->ctx, sequence);
-
-	res = adc_context_wait_for_completion(&data->ctx);
-
-	return res;
-}
-
-static void adc_gecko_start_channel(const struct device *dev)
-{
-	const struct adc_gecko_config *config = dev->config;
-	struct adc_gecko_data *data = dev->data;
-
-	IADC_TypeDef *iadc = (IADC_TypeDef *)config->base;
-
-	data->channel_id = find_lsb_set(data->channels) - 1;
-
-	LOG_DBG("Starting channel %d", data->channel_id);
-
-	adc_gecko_set_config(data->dev);
-
-	/* Enable single conversion interrupt */
-	IADC_enableInt(iadc, IADC_IEN_SINGLEDONE);
-
-	/* Start single conversion */
-	IADC_command(iadc, iadcCmdStartSingle);
-}
-
-static void adc_context_start_sampling(struct adc_context *ctx)
-{
-	struct adc_gecko_data *data =
-		CONTAINER_OF(ctx, struct adc_gecko_data, ctx);
-
-	data->channels = ctx->sequence.channels;
-	data->repeat_buffer = data->buffer;
-
-	adc_gecko_start_channel(data->dev);
-}
-
-static void adc_context_update_buffer_pointer(struct adc_context *ctx,
-						bool repeat_sampling)
-{
-	struct adc_gecko_data *data =
-		CONTAINER_OF(ctx, struct adc_gecko_data, ctx);
-
-	if (repeat_sampling) {
-		data->buffer = data->repeat_buffer;
-	}
-}
-
-static void adc_gecko_isr(void *arg)
-{
-	const struct device *dev = (const struct device *)arg;
-	const struct adc_gecko_config *config = dev->config;
-	struct adc_gecko_data *data = dev->data;
-	IADC_TypeDef *iadc = config->base;
-	IADC_Result_t sample;
-	uint32_t flags, err;
-
-	/*
-	 * IRQ is enabled only for SINGLEDONE. However, other
-	 * interrupt flags - the ones singaling an error - may be
-	 * set simultaneously with SINGLEDONE. We read & clear them
-	 * to determine if conversion is successful or not.
-	 */
-	flags = IADC_getInt(iadc);
-
-	__ASSERT(flags & IADC_IF_SINGLEDONE,
-		 "unexpected IADC IRQ (flags=0x%08x)!", flags);
-
-	err = flags & (IADC_IF_PORTALLOCERR |
-			IADC_IF_POLARITYERR |
-			IADC_IF_EM23ABORTERROR);
-	if (!err) {
-		sample = IADC_readSingleResult(iadc);
-
-		*data->buffer++ = GECKO_DATA_RES12BIT((uint16_t)sample.data);
-		data->channels &= ~BIT(data->channel_id);
-
-		if (data->channels) {
-			adc_gecko_start_channel(dev);
-		} else {
-			adc_context_on_sampling_done(&data->ctx, dev);
-		}
-	} else {
-		LOG_ERR("IADC conversion error, flags=%08x", err);
-		adc_context_complete(&data->ctx, -EIO);
-	}
-
-	IADC_clearInt(iadc, IADC_IF_SINGLEDONE | err);
-}
-
-static int adc_gecko_read(const struct device *dev,
-			  const struct adc_sequence *sequence)
-{
-	struct adc_gecko_data *data = dev->data;
-	int error;
-
-	adc_context_lock(&data->ctx, false, NULL);
-	error = start_read(dev, sequence);
-	adc_context_release(&data->ctx, error);
-
-	return error;
-}
-
-#ifdef CONFIG_ADC_ASYNC
-static int adc_gecko_read_async(const struct device *dev,
-				const struct adc_sequence *sequence,
-				struct k_poll_signal *async)
-{
-	struct adc_gecko_data *data = dev->data;
-	int error;
-
-	adc_context_lock(&data->ctx, true, async);
-	error = start_read(dev, sequence);
-	adc_context_release(&data->ctx, error);
-
-	return error;
-}
-#endif
-
-static int adc_gecko_channel_setup(const struct device *dev,
-				const struct adc_channel_cfg *channel_cfg)
-{
-	struct adc_gecko_data *data = dev->data;
-	struct adc_gecko_channel_config *channel_config = NULL;
-
-	if (channel_cfg->channel_id < GECKO_CHANNEL_COUNT) {
-		channel_config = &data->channel_config[channel_cfg->channel_id];
-	} else {
-		LOG_DBG("Requested channel index not available: %d", channel_cfg->channel_id);
-		return -EINVAL;
-	}
-
-	channel_config->initialized = false;
-
-	channel_config->input_positive = channel_cfg->input_positive;
-
-	if (channel_cfg->differential) {
-		channel_config->input_negative = channel_cfg->input_negative;
-	} else {
-		channel_config->input_negative = iadcNegInputGnd;
-	}
-
-	/* Setup input */
-
-	switch (channel_cfg->gain) {
-#if defined(_IADC_CFG_ANALOGGAIN_ANAGAIN0P25)
-	case ADC_GAIN_1_4:
-		channel_config->gain = iadcCfgAnalogGain0P25x;
-		break;
-#endif
-	case ADC_GAIN_1_2:
-		channel_config->gain = iadcCfgAnalogGain0P5x;
-		break;
-	case ADC_GAIN_1:
-		channel_config->gain = iadcCfgAnalogGain1x;
-		break;
-	case ADC_GAIN_2:
-		channel_config->gain = iadcCfgAnalogGain2x;
-		break;
-	case ADC_GAIN_3:
-		channel_config->gain = iadcCfgAnalogGain3x;
-		break;
-	case ADC_GAIN_4:
-		channel_config->gain = iadcCfgAnalogGain4x;
-		break;
-	default:
-		LOG_ERR("unsupported channel gain '%d'", channel_cfg->gain);
-		return -EINVAL;
-	}
-
-	/* Setup reference */
-	switch (channel_cfg->reference) {
-	case ADC_REF_VDD_1:
-		channel_config->reference = iadcCfgReferenceVddx;
-		break;
-	case ADC_REF_INTERNAL:
-		channel_config->reference = iadcCfgReferenceInt1V2;
-		break;
-#if defined(_IADC_CFG_REFSEL_VREF2P5)
-	case ADC_REF_EXTERNAL1:
-		channel_config->reference = iadcCfgReferenceExt2V5;
-		break;
-#endif
-	case ADC_REF_EXTERNAL0:
-		channel_config->reference = iadcCfgReferenceExt1V25;
-		break;
-	default:
-		LOG_ERR("unsupported channel reference type '%d'",
-			channel_cfg->reference);
-		return -EINVAL;
-	}
-
-	channel_config->initialized = true;
-	LOG_DBG("Channel setup succeeded!");
-
-	return 0;
-}
-
-static int adc_gecko_pm_action(const struct device *dev, enum pm_device_action action)
-{
-	int err;
-	const struct adc_gecko_config *config = dev->config;
-
-	if (action == PM_DEVICE_ACTION_RESUME) {
-		err = clock_control_on(config->clock_dev,
-				       (clock_control_subsys_t)&config->clock_cfg);
-		if (err < 0 && err != -EALREADY) {
-			return err;
-		}
-
-		err = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT);
-		if (err < 0 && err != -ENOENT) {
-			return err;
-		}
-	} else if (IS_ENABLED(CONFIG_PM_DEVICE) && (action == PM_DEVICE_ACTION_SUSPEND)) {
-		err = clock_control_off(config->clock_dev,
-					(clock_control_subsys_t)&config->clock_cfg);
-		if (err < 0) {
-			return err;
-		}
-
-		err = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_SLEEP);
-		if (err < 0 && err != -ENOENT) {
-			return err;
-		}
-	} else {
-		return -ENOTSUP;
-	}
-
-	return 0;
-}
-
-static int adc_gecko_init(const struct device *dev)
-{
-	const struct adc_gecko_config *config = dev->config;
-	struct adc_gecko_data *data = dev->data;
-
-	data->dev = dev;
-
-	config->irq_cfg_func();
-
-	adc_context_unlock_unconditionally(&data->ctx);
-
-	return pm_device_driver_init(dev, adc_gecko_pm_action);
-}
-
-static DEVICE_API(adc, api_gecko_adc_driver_api) = {
-	.channel_setup = adc_gecko_channel_setup,
-	.read = adc_gecko_read,
-#ifdef CONFIG_ADC_ASYNC
-	.read_async = adc_gecko_read_async,
-#endif
-	.ref_internal = GECKO_INTERNAL_REFERENCE_mV,
-};
-
-#define GECKO_IADC_INIT(n)						\
-	PINCTRL_DT_INST_DEFINE(n);					\
-	PM_DEVICE_DT_INST_DEFINE(n, adc_gecko_pm_action);		\
-									\
-	static void adc_gecko_config_func_##n(void);			\
-									\
-	const static struct adc_gecko_config adc_gecko_config_##n = {	\
-		.base = (IADC_TypeDef *)DT_INST_REG_ADDR(n),\
-		.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n),		\
-		.clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)),	\
-		.clock_cfg = SILABS_DT_INST_CLOCK_CFG(n),		\
-		.irq_cfg_func = adc_gecko_config_func_##n,		\
-	};								\
-	static struct adc_gecko_data adc_gecko_data_##n = {		\
-		ADC_CONTEXT_INIT_TIMER(adc_gecko_data_##n, ctx),	\
-		ADC_CONTEXT_INIT_LOCK(adc_gecko_data_##n, ctx),	\
-		ADC_CONTEXT_INIT_SYNC(adc_gecko_data_##n, ctx),	\
-	};								\
-	static void adc_gecko_config_func_##n(void)			\
-	{								\
-		IRQ_CONNECT(DT_INST_IRQN(n),	\
-			    DT_INST_IRQ(n, priority), \
-			    adc_gecko_isr, DEVICE_DT_INST_GET(n), 0);	\
-		irq_enable(DT_INST_IRQN(n));	\
-	}; \
-	DEVICE_DT_INST_DEFINE(n,					 \
-			      adc_gecko_init, PM_DEVICE_DT_INST_GET(n),  \
-			      &adc_gecko_data_##n, &adc_gecko_config_##n,\
-			      POST_KERNEL, CONFIG_ADC_INIT_PRIORITY,	 \
-			      &api_gecko_adc_driver_api);
-
-DT_INST_FOREACH_STATUS_OKAY(GECKO_IADC_INIT)
diff --git a/dts/bindings/adc/silabs,gecko-iadc.yaml b/dts/bindings/adc/silabs,gecko-iadc.yaml
deleted file mode 100644
index f4a320e..0000000
--- a/dts/bindings/adc/silabs,gecko-iadc.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2023 Antmicro <www.antmicro.com>
-# SPDX-License-Identifier: Apache-2.0
-
-title: Silicon Labs Series 2 IADC (Incremental Analog to Digital Converter)
-
-description: |
-  Incremental ADC peripheral for Silicon Labs Series 2 SoCs.
-
-compatible: "silabs,gecko-iadc"
-
-include: [adc-controller.yaml, pinctrl-device.yaml]
-
-properties:
-  reg:
-    required: true
-
-  interrupts:
-    required: true
-
-  "#io-channel-cells":
-    const: 1
-
-io-channel-cells:
-  - input