blob: 35ebc94c01e4e7e9bd4fd463ed3c168979acbafc [file] [log] [blame]
/*
* Copyright (C) Maxime Coquelin 2015
* Author: Maxime Coquelin <mcoquelin.stm32@gmail.com>
* License terms: GNU General Public License (GPL), version 2
*/
#ifndef __PINCTRL_STM32_H
#define __PINCTRL_STM32_H
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinconf-generic.h>
#define STM32_PIN_NO(x) ((x) << 8)
#define STM32_GET_PIN_NO(x) ((x) >> 8)
#define STM32_GET_PIN_FUNC(x) ((x) & 0xff)
#define STM32_PIN_GPIO 0
#define STM32_PIN_AF(x) ((x) + 1)
#define STM32_PIN_ANALOG (STM32_PIN_AF(15) + 1)
struct stm32_desc_function {
const char *name;
const unsigned char num;
};
struct stm32_desc_pin {
struct pinctrl_pin_desc pin;
const struct stm32_desc_function *functions;
};
#define STM32_PIN(_pin, ...) \
{ \
.pin = _pin, \
.functions = (struct stm32_desc_function[]){ \
__VA_ARGS__, { } }, \
}
#define STM32_FUNCTION(_num, _name) \
{ \
.num = _num, \
.name = _name, \
}
struct stm32_pinctrl_match_data {
const struct stm32_desc_pin *pins;
const unsigned int npins;
};
int stm32_pctl_probe(struct platform_device *pdev);
#endif /* __PINCTRL_STM32_H */