Zephyr API Documentation 4.0.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
mfd_ite_it8801.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 ITE Corporation. All Rights Reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_ITE_IT8801_H_
8#define ZEPHYR_INCLUDE_DRIVERS_MFD_ITE_IT8801_H_
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14/*
15 * IC clock and power management controller register fields
16 */
17/* 0xf9: Gather interrupt status register */
18#define IT8801_REG_GISR 0xf9
19#define IT8801_REG_MASK_GISR_GKSIIS BIT(6)
20/* 0xfb: Gather interrupt enable control register */
21#define IT8801_REG_GIECR 0xfb
22#define IT8801_REG_MASK_GKSIIE BIT(3)
23#define IT8801_REG_MASK_GGPIOIE BIT(2)
24
25/*
26 * General control register fields
27 */
28#define IT8801_REG_LBVIDR 0xfe
29#define IT8801_REG_HBVIDR 0xff
30
35
36static const struct it8801_vendor_id_t it8801_id_verify[] = {
37 {0x12, IT8801_REG_HBVIDR},
38 {0x83, IT8801_REG_LBVIDR},
39};
40
41/*
42 * SMbus interface register fields
43 */
44/* 0xfa: SMBus control register */
45#define IT8801_REG_SMBCR 0xfa
46#define IT8801_REG_MASK_ARE BIT(4)
47
48/*
49 * GPIO register fields
50 */
51#define IT8801_GPIOAFS_FUN1 0x0
52#define IT8801_GPIOAFS_FUN2 0x01
53#define IT8801_GPIOAFS_FUN3 0x02
54/* GPIO control register */
55/* GPIO direction */
56#define IT8801_GPIODIR BIT(5)
57/* GPIO input and output type */
58#define IT8801_GPIOIOT_OD BIT(4)
59#define IT8801_GPIOIOT_INT_FALL BIT(4)
60#define IT8801_GPIOIOT_INT_RISE BIT(3)
61/* GPIO polarity */
62#define IT8801_GPIOPOL BIT(2)
63/* GPIO pull-down enable */
64#define IT8801_GPIOPDE BIT(1)
65/* GPIO pull-up enable */
66#define IT8801_GPIOPUE BIT(0)
67
68/*
69 * Keyboard matrix scan controller register fields
70 */
71/* 0x40: Keyboard scan out mode control register */
72#define IT8801_REG_MASK_KSOSDIC BIT(7)
73#define IT8801_REG_MASK_KSE BIT(6)
74#define IT8801_REG_MASK_AKSOSC BIT(5)
75
76/*
77 * PWM register fields
78 */
79#define PWM_IT8801_FREQ 32895
80/* Control push-pull flag */
81#define PWM_IT8801_PUSH_PULL BIT(8)
82/* 0x5f: PWM output open-drain disable register */
83#define IT8801_REG_PWMODDSR 0x5f
84/* PWM mode control register */
85#define IT8801_PWMMCR_MCR_MASK GENMASK(1, 0)
86#define IT8801_PWMMCR_MCR_OFF 0
87#define IT8801_PWMMCR_MCR_BLINKING 1
88#define IT8801_PWMMCR_MCR_BREATHING 2
89#define IT8801_PWMMCR_MCR_ON 3
90
91/*
92 * For IT8801 MFD alternate function controller
93 */
94#define IT8801_DT_INST_MFDCTRL(inst, idx) DT_INST_PHANDLE_BY_IDX(inst, mfdctrl, idx)
95
96#define IT8801_DT_INST_MFDCTRL_LEN(inst) DT_INST_PROP_LEN_OR(inst, mfdctrl, 0)
97
98#define IT8801_DEV_MFD(idx, inst) \
99 DEVICE_DT_GET(DT_PHANDLE(IT8801_DT_INST_MFDCTRL(inst, idx), altctrls))
100#define IT8801_DEV_MFD_PIN(idx, inst) DT_PHA(IT8801_DT_INST_MFDCTRL(inst, idx), altctrls, pin)
101#define IT8801_DEV_MFD_FUNC(idx, inst) DT_PHA(IT8801_DT_INST_MFDCTRL(inst, idx), altctrls, alt_func)
102
103#define IT8801_DT_MFD_ITEMS_FUNC(idx, inst) \
104 { \
105 .gpiocr = IT8801_DEV_MFD(idx, inst), \
106 .pin = IT8801_DEV_MFD_PIN(idx, inst), \
107 .alt_func = IT8801_DEV_MFD_FUNC(idx, inst), \
108 }
109
110#define IT8801_DT_MFD_ITEMS_LIST(inst) \
111 {LISTIFY(IT8801_DT_INST_MFDCTRL_LEN(inst), \
112 IT8801_DT_MFD_ITEMS_FUNC, (,), \
113 inst) }
114
115/*
116 * Configure alternate function pin
117 */
118int mfd_it8801_configure_pins(const struct i2c_dt_spec *i2c_dev, const struct device *dev,
119 uint8_t pin, uint8_t func);
120
121/* Define the IT8801 MFD interrupt callback function handler */
122typedef void (*it8801_callback_handler_t)(const struct device *dev);
123
129/* Register the interrupt of IT8801 MFD callback function */
131 struct it8801_mfd_callback *callback);
132
133#ifdef __cplusplus
134}
135#endif
136
137#endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_ITE_IT8801_H_ */
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
static const struct it8801_vendor_id_t it8801_id_verify[]
Definition mfd_ite_it8801.h:36
void(* it8801_callback_handler_t)(const struct device *dev)
Definition mfd_ite_it8801.h:122
#define IT8801_REG_LBVIDR
Definition mfd_ite_it8801.h:28
int mfd_it8801_configure_pins(const struct i2c_dt_spec *i2c_dev, const struct device *dev, uint8_t pin, uint8_t func)
void mfd_it8801_register_interrupt_callback(const struct device *mfd, struct it8801_mfd_callback *callback)
#define IT8801_REG_HBVIDR
Definition mfd_ite_it8801.h:29
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:411
Complete I2C DT information.
Definition i2c.h:77
Definition mfd_ite_it8801.h:124
it8801_callback_handler_t cb
Definition mfd_ite_it8801.h:126
const struct device * dev
Definition mfd_ite_it8801.h:127
sys_snode_t node
Definition mfd_ite_it8801.h:125
Definition mfd_ite_it8801.h:31
uint8_t reg
Definition mfd_ite_it8801.h:33
uint8_t chip_id
Definition mfd_ite_it8801.h:32