11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef I2C_HI35XX_H
171bd4fe43Sopenharmony_ci#define I2C_HI35XX_H
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci
201bd4fe43Sopenharmony_ci#ifdef __cplusplus
211bd4fe43Sopenharmony_ci#if __cplusplus
221bd4fe43Sopenharmony_ciextern "C" {
231bd4fe43Sopenharmony_ci#endif /* __cplusplus */
241bd4fe43Sopenharmony_ci#endif /* __cplusplus */
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_ci/*
271bd4fe43Sopenharmony_ci * I2C Registers offsets
281bd4fe43Sopenharmony_ci */
291bd4fe43Sopenharmony_ci#define HI35XX_I2C_GLB       0x0
301bd4fe43Sopenharmony_ci#define HI35XX_I2C_SCL_H     0x4
311bd4fe43Sopenharmony_ci#define HI35XX_I2C_SCL_L     0x8
321bd4fe43Sopenharmony_ci#define HI35XX_I2C_DATA1     0x10
331bd4fe43Sopenharmony_ci#define HI35XX_I2C_TXF       0x20
341bd4fe43Sopenharmony_ci#define HI35XX_I2C_RXF       0x24
351bd4fe43Sopenharmony_ci#define HI35XX_I2C_CMD_BASE  0x30
361bd4fe43Sopenharmony_ci#define HI35XX_I2C_LOOP1     0xb0
371bd4fe43Sopenharmony_ci#define HI35XX_I2C_DST1      0xb4
381bd4fe43Sopenharmony_ci#define HI35XX_I2C_TX_WATER  0xc8
391bd4fe43Sopenharmony_ci#define HI35XX_I2C_RX_WATER  0xcc
401bd4fe43Sopenharmony_ci#define HI35XX_I2C_CTRL1     0xd0
411bd4fe43Sopenharmony_ci#define HI35XX_I2C_CTRL2     0xd4
421bd4fe43Sopenharmony_ci#define HI35XX_I2C_STAT      0xd8
431bd4fe43Sopenharmony_ci#define HI35XX_I2C_INTR_RAW  0xe0
441bd4fe43Sopenharmony_ci#define HI35XX_I2C_INTR_EN   0xe4
451bd4fe43Sopenharmony_ci#define HI35XX_I2C_INTR_STAT 0xe8
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_ci#ifndef BIT
481bd4fe43Sopenharmony_ci#define BIT(n) (1U << (n))
491bd4fe43Sopenharmony_ci#endif
501bd4fe43Sopenharmony_ci/*
511bd4fe43Sopenharmony_ci * I2C Global Config Register -- HI35XX_I2C_GLB
521bd4fe43Sopenharmony_ci * */
531bd4fe43Sopenharmony_ci#define GLB_EN_MASK         BIT(0)
541bd4fe43Sopenharmony_ci#define GLB_SDA_HOLD_MASK   0xffff00
551bd4fe43Sopenharmony_ci#define GLB_SDA_HOLD_SHIFT  8
561bd4fe43Sopenharmony_ci
571bd4fe43Sopenharmony_ci/*
581bd4fe43Sopenharmony_ci * I2C Timing CMD Register -- HI35XX_I2C_CMD_BASE + n * 4 (n = 0, 1, 2, ... 31)
591bd4fe43Sopenharmony_ci */
601bd4fe43Sopenharmony_ci#define CMD_EXIT    0x0
611bd4fe43Sopenharmony_ci#define CMD_TX_S    0x1
621bd4fe43Sopenharmony_ci#define CMD_TX_D1_2 0x4
631bd4fe43Sopenharmony_ci#define CMD_TX_D1_1 0x5
641bd4fe43Sopenharmony_ci#define CMD_TX_FIFO 0x9
651bd4fe43Sopenharmony_ci#define CMD_RX_FIFO 0x12
661bd4fe43Sopenharmony_ci#define CMD_RX_ACK  0x13
671bd4fe43Sopenharmony_ci#define CMD_IGN_ACK 0x15
681bd4fe43Sopenharmony_ci#define CMD_TX_ACK  0x16
691bd4fe43Sopenharmony_ci#define CMD_TX_NACK 0x17
701bd4fe43Sopenharmony_ci#define CMD_JMP1    0x18
711bd4fe43Sopenharmony_ci#define CMD_UP_TXF  0x1d
721bd4fe43Sopenharmony_ci#define CMD_TX_RS   0x1e
731bd4fe43Sopenharmony_ci#define CMD_TX_P    0x1f
741bd4fe43Sopenharmony_ci
751bd4fe43Sopenharmony_ci/*
761bd4fe43Sopenharmony_ci * I2C Control Register 1 -- HI35XX_I2C_CTRL1
771bd4fe43Sopenharmony_ci */
781bd4fe43Sopenharmony_ci#define CTRL1_CMD_START_MASK    BIT(0)
791bd4fe43Sopenharmony_ci#define CTRL1_DMA_MASK          (BIT(9) | BIT(8))
801bd4fe43Sopenharmony_ci#define CTRL1_DMA_R         (BIT(9) | BIT(8))
811bd4fe43Sopenharmony_ci#define CTRL1_DMA_W         (BIT(9))
821bd4fe43Sopenharmony_ci
831bd4fe43Sopenharmony_ci/*
841bd4fe43Sopenharmony_ci * I2C Status Register -- HI35XX_I2C_STAT
851bd4fe43Sopenharmony_ci */
861bd4fe43Sopenharmony_ci#define STAT_RXF_NOE_MASK   BIT(16) /* RX FIFO not empty flag */
871bd4fe43Sopenharmony_ci#define STAT_TXF_NOF_MASK   BIT(19) /* TX FIFO not full flag */
881bd4fe43Sopenharmony_ci
891bd4fe43Sopenharmony_ci/*
901bd4fe43Sopenharmony_ci * I2C Interrupt status and mask Register --
911bd4fe43Sopenharmony_ci * HI35XX_I2C_INTR_RAW, HI35XX_I2C_STAT, HI35XX_I2C_INTR_STAT
921bd4fe43Sopenharmony_ci */
931bd4fe43Sopenharmony_ci#define INTR_ABORT_MASK     (BIT(0) | BIT(11))
941bd4fe43Sopenharmony_ci#define INTR_RX_MASK        BIT(2)
951bd4fe43Sopenharmony_ci#define INTR_TX_MASK        BIT(4)
961bd4fe43Sopenharmony_ci#define INTR_CMD_DONE_MASK  BIT(12)
971bd4fe43Sopenharmony_ci#define INTR_USE_MASK       (INTR_ABORT_MASK \
981bd4fe43Sopenharmony_ci        |INTR_RX_MASK \
991bd4fe43Sopenharmony_ci        | INTR_TX_MASK \
1001bd4fe43Sopenharmony_ci        | INTR_CMD_DONE_MASK)
1011bd4fe43Sopenharmony_ci#define INTR_ALL_MASK       0xffffffff
1021bd4fe43Sopenharmony_ci
1031bd4fe43Sopenharmony_ci#define I2C_DEFAULT_FREQUENCY   100000
1041bd4fe43Sopenharmony_ci#define I2C_TXF_DEPTH       64
1051bd4fe43Sopenharmony_ci#define I2C_RXF_DEPTH       64
1061bd4fe43Sopenharmony_ci#define I2C_TXF_WATER       32
1071bd4fe43Sopenharmony_ci#define I2C_RXF_WATER       32
1081bd4fe43Sopenharmony_ci#define I2C_WAIT_TIMEOUT    0x800
1091bd4fe43Sopenharmony_ci#define I2C_TIMEOUT_COUNT    0x10000
1101bd4fe43Sopenharmony_ci#define I2C_IRQ_TIMEOUT     (msecs_to_jiffies(1000))
1111bd4fe43Sopenharmony_ci/* for i2c rescue */
1121bd4fe43Sopenharmony_ci#define CHECK_SDA_IN_SHIFT     16
1131bd4fe43Sopenharmony_ci#define GPIO_MODE_SHIFT        8
1141bd4fe43Sopenharmony_ci#define FORCE_SCL_OEN_SHIFT    4
1151bd4fe43Sopenharmony_ci#define FORCE_SDA_OEN_SHIFT    0
1161bd4fe43Sopenharmony_ci
1171bd4fe43Sopenharmony_ci#ifdef __cplusplus
1181bd4fe43Sopenharmony_ci#if __cplusplus
1191bd4fe43Sopenharmony_ci}
1201bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1211bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1221bd4fe43Sopenharmony_ci#endif /* I2C_HI35XX_H */
123