i2c-owl.c (ead5d1f4d877e92c051e1a1ade623d0d30e71619) i2c-owl.c (06856269d43ab3ce6609c90a6e42bcd9564eaa02)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Actions Semiconductor Owl SoC's I2C driver
4 *
5 * Copyright (c) 2014 Actions Semi Inc.
6 * Author: David Liu <liuwei@actions-semi.com>
7 *
8 * Copyright (c) 2018 Linaro Ltd.

--- 151 unchanged lines hidden (view full) ---

160 /* Set clock divider factor */
161 writel(OWL_I2C_DIV_FACTOR(val), i2c_dev->base + OWL_I2C_REG_CLKDIV);
162}
163
164static irqreturn_t owl_i2c_interrupt(int irq, void *_dev)
165{
166 struct owl_i2c_dev *i2c_dev = _dev;
167 struct i2c_msg *msg = i2c_dev->msg;
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Actions Semiconductor Owl SoC's I2C driver
4 *
5 * Copyright (c) 2014 Actions Semi Inc.
6 * Author: David Liu <liuwei@actions-semi.com>
7 *
8 * Copyright (c) 2018 Linaro Ltd.

--- 151 unchanged lines hidden (view full) ---

160 /* Set clock divider factor */
161 writel(OWL_I2C_DIV_FACTOR(val), i2c_dev->base + OWL_I2C_REG_CLKDIV);
162}
163
164static irqreturn_t owl_i2c_interrupt(int irq, void *_dev)
165{
166 struct owl_i2c_dev *i2c_dev = _dev;
167 struct i2c_msg *msg = i2c_dev->msg;
168 unsigned long flags;
169 unsigned int stat, fifostat;
170
168 unsigned int stat, fifostat;
169
171 spin_lock_irqsave(&i2c_dev->lock, flags);
170 spin_lock(&i2c_dev->lock);
172
173 i2c_dev->err = 0;
174
175 /* Handle NACK from slave */
176 fifostat = readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT);
177 if (fifostat & OWL_I2C_FIFOSTAT_RNB) {
178 i2c_dev->err = -ENXIO;
179 goto stop;

--- 23 unchanged lines hidden (view full) ---

203 }
204
205stop:
206 /* Clear pending interrupts */
207 owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_STAT,
208 OWL_I2C_STAT_IRQP, true);
209
210 complete_all(&i2c_dev->msg_complete);
171
172 i2c_dev->err = 0;
173
174 /* Handle NACK from slave */
175 fifostat = readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT);
176 if (fifostat & OWL_I2C_FIFOSTAT_RNB) {
177 i2c_dev->err = -ENXIO;
178 goto stop;

--- 23 unchanged lines hidden (view full) ---

202 }
203
204stop:
205 /* Clear pending interrupts */
206 owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_STAT,
207 OWL_I2C_STAT_IRQP, true);
208
209 complete_all(&i2c_dev->msg_complete);
211 spin_unlock_irqrestore(&i2c_dev->lock, flags);
210 spin_unlock(&i2c_dev->lock);
212
213 return IRQ_HANDLED;
214}
215
216static u32 owl_i2c_func(struct i2c_adapter *adap)
217{
218 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
219}

--- 270 unchanged lines hidden ---
211
212 return IRQ_HANDLED;
213}
214
215static u32 owl_i2c_func(struct i2c_adapter *adap)
216{
217 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
218}

--- 270 unchanged lines hidden ---