tSTART_SU &= 0xFF;
tSTART_HD &= 0xFF;
tSTOP_SU &= 0xFF;
- __raw_writel(((tSTART_SU << 24) | (tSTART_HD << 16) | (tSTOP_SU << 8)), base + I2C_TIMING_HS1);
+ putreg32(((tSTART_SU << 24) | (tSTART_HD << 16) | (tSTOP_SU << 8)), base + I2C_TIMING_HS1);
tDATA_SU &= 0xFF;
tSCL_L &= 0xFF;
tSCL_H &= 0xFF;
- __raw_writel(((tDATA_SU << 24) | (tSCL_L << 8) | (tSCL_H << 0)), base + I2C_TIMING_HS2);
+ putreg32(((tDATA_SU << 24) | (tSCL_L << 8) | (tSCL_H << 0)), base + I2C_TIMING_HS2);
nClkDiv &= 0xFF;
tSR_RELEASE &= 0xFF;
- __raw_writel(((nClkDiv << 16) | (tSR_RELEASE << 0)), base + I2C_TIMING_HS3);
+ putreg32(((nClkDiv << 16) | (tSR_RELEASE << 0)), base + I2C_TIMING_HS3);
tDATA_HD &= 0xFFFF;
- __raw_writel(tDATA_HD, base + I2C_TIMING_SLA);
+ putreg32(tDATA_HD, base + I2C_TIMING_SLA);
}
tSTART_SU &= 0xFF;
tSTART_HD &= 0xFF;
tSTOP_SU &= 0xFF;
- __raw_writel(((tSTART_SU << 24) | (tSTART_HD << 16) | (tSTOP_SU << 8)), base + I2C_TIMING_FS1);
+ putreg32(((tSTART_SU << 24) | (tSTART_HD << 16) | (tSTOP_SU << 8)), base + I2C_TIMING_FS1);
tDATA_SU &= 0xFF;
tSCL_L &= 0xFF;
tSCL_H &= 0xFF;
- __raw_writel(((tDATA_SU << 24) | (tSCL_L << 8) | (tSCL_H << 0)), base + I2C_TIMING_FS2);
+ putreg32(((tDATA_SU << 24) | (tSCL_L << 8) | (tSCL_H << 0)), base + I2C_TIMING_FS2);
nClkDiv &= 0xFF;
tSR_RELEASE &= 0xFF;
- __raw_writel(((nClkDiv << 16) | (tSR_RELEASE << 0)), base + I2C_TIMING_FS3);
+ putreg32(((nClkDiv << 16) | (tSR_RELEASE << 0)), base + I2C_TIMING_FS3);
tDATA_HD &= 0xFFFF;
- __raw_writel(tDATA_HD, base + I2C_TIMING_SLA);
+ putreg32(tDATA_HD, base + I2C_TIMING_SLA);
}
static void hsi2c_calculate_timing(unsigned int base, unsigned int nPclk, unsigned int nOpClk)
{
+ unsigned int reg;
unsigned int nClkDiv;
unsigned int tFTL_CYCLE_SCL;
s32 i;
s32 uTemp1;
s32 uTemp2 = 0;
- HW_REG32(base, I2C_CONF) &= ~(0x7 << 13);
- HW_REG32(base, I2C_CONF) &= ~(0x7 << 16);
- tFTL_CYCLE_SCL = (HW_REG32(base, I2C_CONF) >> 16) & 0x7;
+ reg = getreg32(base + I2C_CONF);
+ reg &= ~(0x7 << 13);
+ putreg32(reg, base + I2C_CONF);
+
+ reg = getreg32(base + I2C_CONF);
+ reg &= ~(0x7 << 16);
+ putreg32(reg, base + I2C_CONF);
+
+ tFTL_CYCLE_SCL = getreg32((base + I2C_CONF) >> 16) & 0x7;
uTemp0 = (float)(nPclk / nOpClk) - (tFTL_CYCLE_SCL + 3) * 2;
{
unsigned int val;
- val = __raw_readl(base + I2C_CONF);
+ val = getreg32(base + I2C_CONF);
val &= ~(3 << 30);
if (nOpClk > I2C_SPEED_400KHZ) {
val |= (1 << 29);
} else {
val &= ~(1 << 29);
}
- __raw_writel(val, base + I2C_CONF);
+ putreg32(val, base + I2C_CONF);
}
static void hsi2c_enable_int(unsigned int base, unsigned int bit)
{
unsigned int val;
- val = __raw_readl(base + INT_EN);
+ val = getreg32(base + INT_EN);
val |= bit;
- __raw_writel(val, base + INT_EN);
+ putreg32(val, base + INT_EN);
}
static void hsi2c_disable_int(unsigned int base, unsigned int bit)
{
unsigned int val;
- val = __raw_readl(base + INT_EN);
+ val = getreg32(base + INT_EN);
val &= ~bit;
- __raw_writel(val, base + INT_EN);
+ putreg32(val, base + INT_EN);
}
static void hsi2c_clear_int(unsigned int base, unsigned int bit)
{
- __raw_writel(bit, base + INT_STAT);
+ putreg32(bit, base + INT_STAT);
}
static unsigned int hsi2c_read_int_status(unsigned int base)
{
- return __raw_readl(base + INT_STAT) & __raw_readl(base + INT_EN);
+ return getreg32(base + INT_STAT) & getreg32(base + INT_EN);
}
static void hsi2c_set_slave_addr(unsigned int base, u16 addr, unsigned int is_master)
addr &= 0x3FF;
- val = __raw_readl(base + I2C_ADDR);
+ val = getreg32(base + I2C_ADDR);
if (is_master == 0) {
val &= ~0x3ff;
val &= ~(0x3FF << 10);
val |= (addr << 10);
}
- __raw_writel(val, base + I2C_ADDR);
+ putreg32(val, base + I2C_ADDR);
}
static int hsi2c_manual_fast_init(struct s5j_i2c_priv_s *priv)
priv->initialized = 1;
- val = __raw_readl(base + I2C_CONF);
+ val = getreg32(base + I2C_CONF);
val &= ~((1 << 31) | (1 << 29));
- __raw_writel(val, base + I2C_CONF);
+ putreg32(val, base + I2C_CONF);
hsi2c_enable_int(base, HSI2C_INT_XFER_DONE);
unsigned int base = priv->config->base;
while (timeout-- > 0) {
- val = __raw_readl(base + INT_STAT) & HSI2C_INT_XFER_DONE_MANUAL;
+ val = getreg32(base + INT_STAT) & HSI2C_INT_XFER_DONE_MANUAL;
if (val) {
- __raw_writel(val, base + INT_STAT);
+ putreg32(val, base + INT_STAT);
return (val == HSI2C_INT_XFER_DONE_MANUAL);
}
}
unsigned int base = priv->config->base;
while (timeout-- > 0) {
- val = __raw_readl(base + INT_STAT) & HSI2C_INT_XFER_DONE_NOACK_MANUAL;
+ val = getreg32(base + INT_STAT) & HSI2C_INT_XFER_DONE_NOACK_MANUAL;
if (val) {
- __raw_writel(val, base + INT_STAT);
+ putreg32(val, base + INT_STAT);
return (val == HSI2C_INT_XFER_DONE_NOACK_MANUAL);
}
}
// dbg("S ");
- __raw_writel(0x88, priv->config->base + CTL);
+ putreg32(0x88, priv->config->base + CTL);
- __raw_writel(I2C_START, priv->config->base + I2C_MANUAL_CMD);
+ putreg32(I2C_START, priv->config->base + I2C_MANUAL_CMD);
debug_msg = hsi2c_wait_xfer_done(priv);
}
{
// dbg("P\n");
- __raw_writel(I2C_STOP, priv->config->base + I2C_MANUAL_CMD);
+ putreg32(I2C_STOP, priv->config->base + I2C_MANUAL_CMD);
hsi2c_wait_xfer_done(priv);
}
{
// dbg("Sr ");
- __raw_writel(I2C_RESTART, priv->config->base + I2C_MANUAL_CMD);
+ putreg32(I2C_RESTART, priv->config->base + I2C_MANUAL_CMD);
}
static int hsi2c_outb(struct s5j_i2c_priv_s *priv, u8 data)
int ret;
val = ((unsigned int)data) << 24 | I2C_SEND_DATA;
- __raw_writel(val, priv->config->base + I2C_MANUAL_CMD);
+ putreg32(val, priv->config->base + I2C_MANUAL_CMD);
ret = hsi2c_wait_xfer_done(priv);
if (!is_ack) {
val |= I2C_RX_ACK;
}
- __raw_writel(val, base + I2C_MANUAL_CMD);
+ putreg32(val, base + I2C_MANUAL_CMD);
ret = hsi2c_wait_xfer_done(priv);
if (ret < 0) {
return ret; /* timeout */
}
- data = (__raw_readl(base + I2C_MANUAL_CMD) >> 16) & 0xff;
+ data = (getreg32(base + I2C_MANUAL_CMD) >> 16) & 0xff;
// dbg("[0x%02X] %s ", data, is_ack ? "A" : "NA");
return data;
static void hsi2c_run_auto_mode(unsigned int base, int on)
{
- unsigned int val = __raw_readl(base + I2C_AUTO_CONF);
+ unsigned int val = getreg32(base + I2C_AUTO_CONF);
if (on) {
val |= (1 << 31);
val &= ~(1 << 31);
}
- __raw_writel(val, base + I2C_AUTO_CONF);
+ putreg32(val, base + I2C_AUTO_CONF);
}
static void hsi2c_tx_fifo_reset(unsigned int base, int resetb)
{
- unsigned int val = __raw_readl(base + FIFO_CTL);
+ unsigned int val = getreg32(base + FIFO_CTL);
if (resetb) {
val |= (1 << 3);
val &= ~(1 << 3);
}
- __raw_writel(val, base + FIFO_CTL);
+ putreg32(val, base + FIFO_CTL);
}
static void hsi2c_set_auto_config(unsigned int base, unsigned int stop, unsigned int tx, unsigned int len)
{
- unsigned int val = __raw_readl(base + I2C_AUTO_CONF);
+ unsigned int val = getreg32(base + I2C_AUTO_CONF);
if (stop) {
val |= (1 << 17);
val &= ~0xFFFF;
val |= len;
- __raw_writel(val, base + I2C_AUTO_CONF);
+ putreg32(val, base + I2C_AUTO_CONF);
}
static void hsi2c_set_trans_mode(unsigned int base, unsigned int master, unsigned int tx)
{
- unsigned int val = __raw_readl(base + CTL);
+ unsigned int val = getreg32(base + CTL);
val |= (1 << 0); /* ctrl 0 bit write 1 */
val |= (1 << 6);
}
- __raw_writel(val, base + CTL);
+ putreg32(val, base + CTL);
}
static void hsi2c_set_hwacg_mode(unsigned int base, unsigned int slave)
{
- unsigned int val = __raw_readl(base + CTL);
+ unsigned int val = getreg32(base + CTL);
val &= ~(0x3 << 24);
val &= ~(0x1 << 24);
}
- __raw_writel(val, base + CTL);
+ putreg32(val, base + CTL);
}
static int hsi2c_master_handler(void *args)
int_status = hsi2c_read_int_status(base);
if (int_status & HSI2C_INT_TX_ALMOST_EMPTY) {
if (buf_off < msg->length) {
- __raw_writel(msg->buffer[buf_off], base + TXDATA);
+ putreg32(msg->buffer[buf_off], base + TXDATA);
priv->master_test_data->buf_count++;
} else {
hsi2c_disable_int(base, HSI2C_INT_TX_ALMOST_EMPTY);
hsi2c_clear_int(base, HSI2C_INT_TX_ALMOST_EMPTY);
}
if (int_status & HSI2C_INT_RX_ALMOST_FULL) {
- msg->buffer[buf_off] = (u8) __raw_readl(base + RXDATA);
+ msg->buffer[buf_off] = (u8) getreg32(base + RXDATA);
priv->master_test_data->buf_count++;
hsi2c_clear_int(base, HSI2C_INT_RX_ALMOST_FULL);
}
unsigned int base = priv->config->base;
int_status = hsi2c_read_int_status(base);
if (int_status & HSI2C_INT_SLAVE_ADDR_MATCH) {
- val = __raw_readl(base + I2C_TRANS_STATUS);
+ val = getreg32(base + I2C_TRANS_STATUS);
if (val & SLAVE_TX_MODE) {
priv->slave_test_data->status = SLAVE_SET_DATA;
hsi2c_enable_int(base, HSI2C_INT_TX_ALMOST_EMPTY);
hsi2c_clear_int(base, HSI2C_INT_SLAVE_ADDR_MATCH);
} else if (int_status & HSI2C_INT_RX_ALMOST_FULL) {
if (priv->slave_test_data->status == SLAVE_GET_REG) {
- priv->slave_test_data->current_reg = __raw_readl(base + RXDATA);
+ priv->slave_test_data->current_reg = getreg32(base + RXDATA);
priv->slave_test_data->status = SLAVE_GET_DATA;
} else if (priv->slave_test_data->status == SLAVE_GET_DATA) {
- priv->slave_test_data->data[priv->slave_test_data->current_reg] = __raw_readl(base + RXDATA);
+ priv->slave_test_data->data[priv->slave_test_data->current_reg] = getreg32(base + RXDATA);
// dbg("rx[%x] : 0x%x\n", priv->slave_test_data->current_reg , priv->slave_test_data->data[priv->slave_test_data->current_reg]);
priv->slave_test_data->current_reg++;
}
hsi2c_clear_int(base, HSI2C_INT_RX_ALMOST_FULL);
} else if (int_status & HSI2C_INT_TX_ALMOST_EMPTY) {
- if (__raw_readl(base + I2C_TRANS_STATUS) & STOP_COND) {
+ if (getreg32(base + I2C_TRANS_STATUS) & STOP_COND) {
hsi2c_disable_int(base, HSI2C_INT_TX_ALMOST_EMPTY);
} else {
if (priv->slave_test_data->status == SLAVE_SET_DATA) {
// dbg("tx[%x] : 0x%x\n", priv->slave_test_data->current_reg , priv->slave_test_data->data[priv->slave_test_data->current_reg]);
- __raw_writel(priv->slave_test_data->data[priv->slave_test_data->current_reg], base + TXDATA);
+ putreg32(priv->slave_test_data->data[priv->slave_test_data->current_reg], base + TXDATA);
priv->slave_test_data->current_reg++;
}
}
{
unsigned int val;
- val = __raw_readl(base + I2C_CONF);
+ val = getreg32(base + I2C_CONF);
val |= (1 << 31);
- __raw_writel(val, base + I2C_CONF);
+ putreg32(val, base + I2C_CONF);
}
static void hsi2c_set_fifo_level(unsigned int base)
{
- __raw_writel(0x10013, base + FIFO_CTL);
+ putreg32(0x10013, base + FIFO_CTL);
}
static void hsi2c_master_setup(struct s5j_i2c_priv_s *priv, unsigned int mode, unsigned int speed, unsigned int slave_addr)
priv->mode = I2C_POLLING;
priv->xfer_speed = I2C_SPEED_400KHZ;
- __raw_writel(0x80000000, priv->config->base + CTL);
+ putreg32(0x80000000, priv->config->base + CTL);
udelay(10);
- __raw_writel(0x0, priv->config->base + CTL);
+ putreg32(0x0, priv->config->base + CTL);
udelay(100);
return 0;
if (priv->xfer_speed > I2C_SPEED_400KHZ) {
hsi2c_conf(base, I2C_SPEED_400KHZ);
- __raw_writel((0xF << 24 | I2C_SEND_DATA), base + I2C_MANUAL_CMD);
+ putreg32((0xF << 24 | I2C_SEND_DATA), base + I2C_MANUAL_CMD);
hsi2c_wait_xfer_noack(priv);
hsi2c_conf(base, priv->xfer_speed);