summaryrefslogtreecommitdiff
path: root/driver/ioexpander/pcal6408.h
blob: 3bedf5bdc4395a3d84131780d4480dbb07a5bacc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Copyright 2020 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * NXP PCA(L)6408 I/O expander
 */

#ifndef __CROS_EC_IOEXPANDER_PCAL6408_H
#define __CROS_EC_IOEXPANDER_PCAL6408_H

#define PCAL6408_I2C_ADDR0 0x20
#define PCAL6408_I2C_ADDR1 0x21

#define PCAL6408_REG_INPUT 0x00
#define PCAL6408_REG_OUTPUT 0x01
#define PCAL6408_REG_POLARITY_INVERSION 0x02
#define PCAL6408_REG_CONFIG 0x03
#define PCAL6408_REG_OUT_STRENGTH0 0x40
#define PCAL6408_REG_OUT_STRENGTH1 0x41
#define PCAL6408_REG_INPUT_LATCH 0x42
#define PCAL6408_REG_PULL_ENABLE 0x43
#define PCAL6408_REG_PULL_UP_DOWN 0x44
#define PCAL6408_REG_INT_MASK 0x45
#define PCAL6408_REG_INT_STATUS 0x46
#define PCAL6408_REG_OUT_CONFIG 0x4f

#define PCAL6408_VALID_GPIO_MASK 0xff

#define PCAL6408_OUTPUT 0
#define PCAL6408_INPUT 1

#define PCAL6408_OUT_CONFIG_OPEN_DRAIN 0x01

/*
 * Check which IO's interrupt event is triggered. If any, call its
 * registered interrupt handler.
 */
int pcal6408_ioex_event_handler(int ioex);

extern const struct ioexpander_drv pcal6408_ioexpander_drv;

#endif /* __CROS_EC_IOEXPANDER_PCAL6408_H */