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