blob: d01c491f51face5ab1d2365dc5774ea5f325e9c2 [file] [log] [blame]
Dan Kalowsky2d6ba512015-09-24 10:57:06 -07001/*
2 * Copyright (c) 2015 Intel Corporation
3 *
David B. Kinderac74d8b2017-01-18 17:01:01 -08004 * SPDX-License-Identifier: Apache-2.0
Dan Kalowsky2d6ba512015-09-24 10:57:06 -07005 */
Rodrigo Caballero18c24a92016-02-07 13:34:13 -06006
7/**
8 * @file
9 * Public APIs for Pinmux drivers
10 */
11
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070012#ifndef __INCLUDE_PINMUX_H
13#define __INCLUDE_PINMUX_H
14
Anas Nashif75482aa2015-10-26 06:18:44 -040015/**
16 * @brief Pinmux Interface
17 * @defgroup pinmux_interface Pinmux Interface
18 * @ingroup io_interfaces
19 * @{
20 */
21
Kumar Gala78908162017-04-19 10:32:08 -050022#include <zephyr/types.h>
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070023#include <device.h>
24
Peter Mitsisa0e45682016-01-22 12:38:49 -050025#ifdef __cplusplus
26extern "C" {
27#endif
28
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070029#define PINMUX_FUNC_A 0
30#define PINMUX_FUNC_B 1
31#define PINMUX_FUNC_C 2
32#define PINMUX_FUNC_D 3
Leandro Pereira287ea242017-06-26 17:09:03 -070033#define PINMUX_FUNC_E 4
34#define PINMUX_FUNC_F 5
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070035
Dan Kalowskye46d5c62015-12-04 15:05:23 -080036#define PINMUX_PULLUP_ENABLE (0x1)
37#define PINMUX_PULLUP_DISABLE (0x0)
38
39#define PINMUX_INPUT_ENABLED (0x1)
40#define PINMUX_OUTPUT_ENABLED (0x0)
41
Inaky Perez-Gonzalez05180632016-06-15 14:18:38 -070042/**
43 * @typedef pmux_set
44 * @brief Callback API upon setting a PIN's function
45 * See pinmux_pin_set() for argument description
46 */
Kumar Galacc334c72017-04-21 10:55:34 -050047typedef int (*pmux_set)(struct device *dev, u32_t pin, u32_t func);
Inaky Perez-Gonzalez05180632016-06-15 14:18:38 -070048/**
49 * @typedef pmux_get
50 * @brief Callback API upon getting a PIN's function
51 * See pinmux_pin_get() for argument description
52 */
Kumar Galacc334c72017-04-21 10:55:34 -050053typedef int (*pmux_get)(struct device *dev, u32_t pin, u32_t *func);
Inaky Perez-Gonzalez05180632016-06-15 14:18:38 -070054/**
55 * @typedef pmux_pullup
56 * @brief Callback API upon setting a PIN's pullup
57 * See pinmix_pin_pullup() for argument description
58 */
Kumar Galacc334c72017-04-21 10:55:34 -050059typedef int (*pmux_pullup)(struct device *dev, u32_t pin, u8_t func);
Inaky Perez-Gonzalez05180632016-06-15 14:18:38 -070060/**
61 * @typedef pmux_input
62 * @brief Callback API upon setting a PIN's input function
63 * See pinmux_input() for argument description
64 */
Kumar Galacc334c72017-04-21 10:55:34 -050065typedef int (*pmux_input)(struct device *dev, u32_t pin, u8_t func);
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070066
67struct pinmux_driver_api {
68 pmux_set set;
69 pmux_get get;
Dan Kalowskye46d5c62015-12-04 15:05:23 -080070 pmux_pullup pullup;
71 pmux_input input;
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070072};
73
Andrew Boie4d91f5a2017-10-26 12:42:13 -070074__syscall int pinmux_pin_set(struct device *dev, u32_t pin, u32_t func);
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070075
Andrew Boie4d91f5a2017-10-26 12:42:13 -070076static inline int _impl_pinmux_pin_set(struct device *dev, u32_t pin,
77 u32_t func)
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070078{
Marcus Shawcroft07b56d82016-10-22 10:02:12 +010079 const struct pinmux_driver_api *api = dev->driver_api;
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070080
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070081 return api->set(dev, pin, func);
82}
83
Andrew Boie4d91f5a2017-10-26 12:42:13 -070084__syscall int pinmux_pin_get(struct device *dev, u32_t pin, u32_t *func);
85
86static inline int _impl_pinmux_pin_get(struct device *dev, u32_t pin,
87 u32_t *func)
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070088{
Marcus Shawcroft07b56d82016-10-22 10:02:12 +010089 const struct pinmux_driver_api *api = dev->driver_api;
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070090
Dan Kalowsky2d6ba512015-09-24 10:57:06 -070091 return api->get(dev, pin, func);
92}
93
Andrew Boie4d91f5a2017-10-26 12:42:13 -070094__syscall int pinmux_pin_pullup(struct device *dev, u32_t pin, u8_t func);
95
96static inline int _impl_pinmux_pin_pullup(struct device *dev, u32_t pin,
97 u8_t func)
Dan Kalowskye46d5c62015-12-04 15:05:23 -080098{
Marcus Shawcroft07b56d82016-10-22 10:02:12 +010099 const struct pinmux_driver_api *api = dev->driver_api;
Dan Kalowskye46d5c62015-12-04 15:05:23 -0800100
Dan Kalowskye46d5c62015-12-04 15:05:23 -0800101 return api->pullup(dev, pin, func);
102}
103
Andrew Boie4d91f5a2017-10-26 12:42:13 -0700104__syscall int pinmux_pin_input_enable(struct device *dev, u32_t pin, u8_t func);
105
106static inline int _impl_pinmux_pin_input_enable(struct device *dev,
107 u32_t pin, u8_t func)
Dan Kalowskye46d5c62015-12-04 15:05:23 -0800108{
Marcus Shawcroft07b56d82016-10-22 10:02:12 +0100109 const struct pinmux_driver_api *api = dev->driver_api;
Dan Kalowskye46d5c62015-12-04 15:05:23 -0800110
Dan Kalowskye46d5c62015-12-04 15:05:23 -0800111 return api->input(dev, pin, func);
112}
113
Peter Mitsisa0e45682016-01-22 12:38:49 -0500114#ifdef __cplusplus
115}
116#endif
117
Anas Nashif75482aa2015-10-26 06:18:44 -0400118/**
119 *
120 * @}
121 */
Peter Mitsisa0e45682016-01-22 12:38:49 -0500122
Andrew Boie4d91f5a2017-10-26 12:42:13 -0700123#include <syscalls/pinmux.h>
124
Dan Kalowsky2d6ba512015-09-24 10:57:06 -0700125#endif /* __INCLUDE_PINMUX_H */