<commit_before>/*
 * Copyright (c) 2018 <NAME>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <errno.h>
#include <kernel.h>
#include <device.h>
#include <init.h>
#include <soc.h>
#include <drivers/gpio.h>

#include "gpio_utils.h"

typedef void (*config_func_t)(struct device *dev);

struct gpio_sam_config {
	Pio *regs;
	config_func_t config_func;
	u32_t periph_id;
};

struct gpio_sam_runtime {
	sys_slist_t cb;
};

#define DEV_CFG(dev) \
	((const struct gpio_sam_config *const)(dev)->config->config_info)

static int gpio_sam_config_pin(Pio * const pio, u32_t mask, int flags)
{
	/* Setup the pin direcion. */
	if ((flags & GPIO_DIR_MASK) == GPIO_DIR_OUT) {
		pio->PIO_OER = mask;
	} else {
		pio->PIO_ODR = mask;
	}

	/* Setup interrupt configuration. */
	if (flags & GPIO_INT) {
		if (flags & GPIO_INT_DOUBLE_EDGE) {
			return -ENOTSUP;
		}

		/* Enable the interrupt. */
		pio->PIO_IER = mask;

		/* Enable the additional interrupt modes. */
		pio->PIO_AIMER = mask;

		if (flags & GPIO_INT_EDGE) {
			pio->PIO_ESR = mask;
		} else {
			pio->PIO_LSR = mask;
		}

		if (flags & GPIO_INT_ACTIVE_HIGH) {
			/* Set to high-level or rising edge. */
			pio->PIO_REHLSR = mask;
		} else {
			/* Set to low-level or falling edge. */
			pio->PIO_FELLSR = mask;
		}
	} else {
		/* Disable the interrupt. */
		pio->PIO_IDR = mask;

		/* Disable their additional interrupt modes. */
		pio->PIO_AIMDR = mask;
	}

	/* Setup Pull-up resistor. */
	if ((flags & GPIO_PUD_MASK) == GPIO_PUD_PULL_UP) {
		/* Enable pull-up. */
		pio->PIO_PUER = mask;
	} else {
		pio->PIO_PUDR = mask;
	}

	/* Setup Pull-down resistor. */
	if ((flags & GPIO_PUD_MASK) == GPIO_PUD_PULL_DOWN) {
		pio->PIO_PPDER = mask;
	} else {
		pio->PIO_PPDDR = mask;
	}

#if defined(SOC_SERIES_SAM3X)
	/* Setup debounce. */
	if (flags & GPIO_INT_DEBOUNCE) {
		pio->PIO_DIFSR = mask;
	} else {
		pio->PIO_SCIFSR = mask;
	}
#elif defined(SOC_SERIES_SAM4S) || defined(SOC_SERIES_SAME70)
	/* Setup debounce. */
	if (flags & GPIO_INT_DEBOUNCE) {
		pio->PIO_IFSCER = mask;
	} else {
		pio->PIO_IFSCDR = mask;
	}
#endif

	/* Enable the PIO to control the pin (instead of a peripheral). */<commit_msg>drivers: fix #ifdef in gpio_sam driver<commit_after>/*
 * Copyright (c) 2018 <NAME>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <errno.h>
#include <kernel.h>
#include <device.h>
#include <init.h>
#include <soc.h>
#include <drivers/gpio.h>

#include "gpio_utils.h"

typedef void (*config_func_t)(struct device *dev);

struct gpio_sam_config {
	Pio *regs;
	config_func_t config_func;
	u32_t periph_id;
};

struct gpio_sam_runtime {
	sys_slist_t cb;
};

#define DEV_CFG(dev) \
	((const struct gpio_sam_config *const)(dev)->config->config_info)

static int gpio_sam_config_pin(Pio * const pio, u32_t mask, int flags)
{
	/* Setup the pin direcion. */
	if ((flags & GPIO_DIR_MASK) == GPIO_DIR_OUT) {
		pio->PIO_OER = mask;
	} else {
		pio->PIO_ODR = mask;
	}

	/* Setup interrupt configuration. */
	if (flags & GPIO_INT) {
		if (flags & GPIO_INT_DOUBLE_EDGE) {
			return -ENOTSUP;
		}

		/* Enable the interrupt. */
		pio->PIO_IER = mask;

		/* Enable the additional interrupt modes. */
		pio->PIO_AIMER = mask;

		if (flags & GPIO_INT_EDGE) {
			pio->PIO_ESR = mask;
		} else {
			pio->PIO_LSR = mask;
		}

		if (flags & GPIO_INT_ACTIVE_HIGH) {
			/* Set to high-level or rising edge. */
			pio->PIO_REHLSR = mask;
		} else {
			/* Set to low-level or falling edge. */
			pio->PIO_FELLSR = mask;
		}
	} else {
		/* Disable the interrupt. */
		pio->PIO_IDR = mask;

		/* Disable their additional interrupt modes. */
		pio->PIO_AIMDR = mask;
	}

	/* Setup Pull-up resistor. */
	if ((flags & GPIO_PUD_MASK) == GPIO_PUD_PULL_UP) {
		/* Enable pull-up. */
		pio->PIO_PUER = mask;
	} else {
		pio->PIO_PUDR = mask;
	}

#if defined(CONFIG_SOC_SERIES_SAM4S) || defined(CONFIG_SOC_SERIES_SAME70)
	/* Setup Pull-down resistor. */
	if ((flags & GPIO_PUD_MASK) == GPIO_PUD_PULL_DOWN) {
		pio->PIO_PPDER = mask;
	} else {
		pio->PIO_PPDDR = mask;
	}
#endif

#if defined(CONFIG_SOC_SERIES_SAM3X)
	/* Setup debounce. */
	if (flags & GPIO_INT_DEBOUNCE) {
		pio->PIO_DIFSR = mask;
	} else {
		pio->PIO_SCIFSR = mask;
	}
#elif defined(CONFIG_SOC_SERIES_SAM4S) || defined(CONFIG_SOC_SERIES_SAME70)
	/* Setup debounce. */
	if (flags & GPIO_INT_DEBOUNCE) {
		pio->PIO_IFSCER = mask;
	} else {
		pio->PIO_IFSCDR = mask;
	}
#endif

	/* Enable the PIO to control the pin (instead of a peripheral). */
{'fraction_non_alphanumeric': 0.14733047983780131, 'fraction_numerical': 0.006983554854697004, 'mean_word_length': 3.3486777668952006, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 57, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3064424', 'n_tokens_mistral': 1940, 'n_tokens_neox': 1883, 'n_words': 395}