2018-05-07 05:58:06 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
2012-07-24 05:23:52 +08:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2012 Samsung Electronics
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _S3C24X0_I2C_H
|
|
|
|
#define _S3C24X0_I2C_H
|
|
|
|
|
|
|
|
struct s3c24x0_i2c {
|
|
|
|
u32 iiccon;
|
|
|
|
u32 iicstat;
|
|
|
|
u32 iicadd;
|
|
|
|
u32 iicds;
|
|
|
|
u32 iiclc;
|
|
|
|
};
|
2012-12-27 04:03:12 +08:00
|
|
|
|
2013-10-15 18:32:44 +08:00
|
|
|
struct exynos5_hsi2c {
|
|
|
|
u32 usi_ctl;
|
|
|
|
u32 usi_fifo_ctl;
|
|
|
|
u32 usi_trailing_ctl;
|
|
|
|
u32 usi_clk_ctl;
|
|
|
|
u32 usi_clk_slot;
|
|
|
|
u32 spi_ctl;
|
|
|
|
u32 uart_ctl;
|
|
|
|
u32 res1;
|
|
|
|
u32 usi_int_en;
|
|
|
|
u32 usi_int_stat;
|
|
|
|
u32 usi_modem_stat;
|
|
|
|
u32 usi_error_stat;
|
|
|
|
u32 usi_fifo_stat;
|
|
|
|
u32 usi_txdata;
|
|
|
|
u32 usi_rxdata;
|
|
|
|
u32 res2;
|
|
|
|
u32 usi_conf;
|
|
|
|
u32 usi_auto_conf;
|
|
|
|
u32 usi_timeout;
|
|
|
|
u32 usi_manual_cmd;
|
|
|
|
u32 usi_trans_status;
|
|
|
|
u32 usi_timing_hs1;
|
|
|
|
u32 usi_timing_hs2;
|
|
|
|
u32 usi_timing_hs3;
|
|
|
|
u32 usi_timing_fs1;
|
|
|
|
u32 usi_timing_fs2;
|
|
|
|
u32 usi_timing_fs3;
|
|
|
|
u32 usi_timing_sla;
|
|
|
|
u32 i2c_addr;
|
|
|
|
};
|
|
|
|
|
2012-12-27 04:03:12 +08:00
|
|
|
struct s3c24x0_i2c_bus {
|
2013-10-15 18:32:10 +08:00
|
|
|
bool active; /* port is active and available */
|
2012-12-27 04:03:12 +08:00
|
|
|
int node; /* device tree node */
|
|
|
|
int bus_num; /* i2c bus number */
|
|
|
|
struct s3c24x0_i2c *regs;
|
2013-10-15 18:32:44 +08:00
|
|
|
struct exynos5_hsi2c *hsregs;
|
|
|
|
int is_highspeed; /* High speed type, rather than I2C */
|
|
|
|
unsigned clock_frequency;
|
2013-01-14 03:49:36 +08:00
|
|
|
int id;
|
2013-10-15 18:32:44 +08:00
|
|
|
unsigned clk_cycle;
|
|
|
|
unsigned clk_div;
|
2012-12-27 04:03:12 +08:00
|
|
|
};
|
2016-11-23 21:34:43 +08:00
|
|
|
|
|
|
|
#define I2C_WRITE 0
|
|
|
|
#define I2C_READ 1
|
|
|
|
|
|
|
|
#define I2C_OK 0
|
|
|
|
#define I2C_NOK 1
|
|
|
|
#define I2C_NACK 2
|
|
|
|
#define I2C_NOK_LA 3 /* Lost arbitration */
|
|
|
|
#define I2C_NOK_TOUT 4 /* time out */
|
|
|
|
|
|
|
|
/* S3C I2C Controller bits */
|
|
|
|
#define I2CSTAT_BSY 0x20 /* Busy bit */
|
|
|
|
#define I2CSTAT_NACK 0x01 /* Nack bit */
|
|
|
|
#define I2CCON_ACKGEN 0x80 /* Acknowledge generation */
|
|
|
|
#define I2CCON_IRPND 0x10 /* Interrupt pending bit */
|
|
|
|
#define I2C_MODE_MT 0xC0 /* Master Transmit Mode */
|
|
|
|
#define I2C_MODE_MR 0x80 /* Master Receive Mode */
|
|
|
|
#define I2C_START_STOP 0x20 /* START / STOP */
|
|
|
|
#define I2C_TXRX_ENA 0x10 /* I2C Tx/Rx enable */
|
|
|
|
|
|
|
|
#define I2C_TIMEOUT_MS 10 /* 10 ms */
|
|
|
|
|
2012-07-24 05:23:52 +08:00
|
|
|
#endif /* _S3C24X0_I2C_H */
|