Lines Matching refs:pdata
144 static int xgbe_i2c_abort(struct xgbe_prv_data *pdata) in xgbe_i2c_abort() argument
149 XI2C_IOWRITE_BITS(pdata, IC_ENABLE, EN, 1); in xgbe_i2c_abort()
152 XI2C_IOWRITE_BITS(pdata, IC_ENABLE, ABORT, 1); in xgbe_i2c_abort()
155 if (!XI2C_IOREAD_BITS(pdata, IC_ENABLE, ABORT)) in xgbe_i2c_abort()
164 static int xgbe_i2c_set_enable(struct xgbe_prv_data *pdata, bool enable) in xgbe_i2c_set_enable() argument
170 XI2C_IOWRITE_BITS(pdata, IC_ENABLE, EN, mode); in xgbe_i2c_set_enable()
171 if (XI2C_IOREAD_BITS(pdata, IC_ENABLE_STATUS, EN) == mode) in xgbe_i2c_set_enable()
180 static int xgbe_i2c_disable(struct xgbe_prv_data *pdata) in xgbe_i2c_disable() argument
184 ret = xgbe_i2c_set_enable(pdata, false); in xgbe_i2c_disable()
187 ret = xgbe_i2c_abort(pdata); in xgbe_i2c_disable()
192 ret = xgbe_i2c_set_enable(pdata, false); in xgbe_i2c_disable()
198 static int xgbe_i2c_enable(struct xgbe_prv_data *pdata) in xgbe_i2c_enable() argument
200 return xgbe_i2c_set_enable(pdata, true); in xgbe_i2c_enable()
203 static void xgbe_i2c_clear_all_interrupts(struct xgbe_prv_data *pdata) in xgbe_i2c_clear_all_interrupts() argument
205 XI2C_IOREAD(pdata, IC_CLR_INTR); in xgbe_i2c_clear_all_interrupts()
208 static void xgbe_i2c_disable_interrupts(struct xgbe_prv_data *pdata) in xgbe_i2c_disable_interrupts() argument
210 XI2C_IOWRITE(pdata, IC_INTR_MASK, 0); in xgbe_i2c_disable_interrupts()
213 static void xgbe_i2c_enable_interrupts(struct xgbe_prv_data *pdata) in xgbe_i2c_enable_interrupts() argument
215 XI2C_IOWRITE(pdata, IC_INTR_MASK, XGBE_DEFAULT_INT_MASK); in xgbe_i2c_enable_interrupts()
218 static void xgbe_i2c_write(struct xgbe_prv_data *pdata) in xgbe_i2c_write() argument
220 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; in xgbe_i2c_write()
225 tx_slots = pdata->i2c.tx_fifo_size - XI2C_IOREAD(pdata, IC_TXFLR); in xgbe_i2c_write()
235 XI2C_IOWRITE(pdata, IC_DATA_CMD, cmd); in xgbe_i2c_write()
243 XI2C_IOWRITE_BITS(pdata, IC_INTR_MASK, TX_EMPTY, 0); in xgbe_i2c_write()
246 static void xgbe_i2c_read(struct xgbe_prv_data *pdata) in xgbe_i2c_read() argument
248 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; in xgbe_i2c_read()
255 rx_slots = XI2C_IOREAD(pdata, IC_RXFLR); in xgbe_i2c_read()
257 *state->rx_buf++ = XI2C_IOREAD(pdata, IC_DATA_CMD); in xgbe_i2c_read()
263 static void xgbe_i2c_clear_isr_interrupts(struct xgbe_prv_data *pdata, in xgbe_i2c_clear_isr_interrupts() argument
266 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; in xgbe_i2c_clear_isr_interrupts()
269 state->tx_abort_source = XI2C_IOREAD(pdata, IC_TX_ABRT_SOURCE); in xgbe_i2c_clear_isr_interrupts()
270 XI2C_IOREAD(pdata, IC_CLR_TX_ABRT); in xgbe_i2c_clear_isr_interrupts()
274 XI2C_IOREAD(pdata, IC_CLR_STOP_DET); in xgbe_i2c_clear_isr_interrupts()
279 struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_i2c); in xgbe_i2c_isr_task() local
280 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; in xgbe_i2c_isr_task()
283 isr = XI2C_IOREAD(pdata, IC_RAW_INTR_STAT); in xgbe_i2c_isr_task()
287 netif_dbg(pdata, intr, pdata->netdev, in xgbe_i2c_isr_task()
290 xgbe_i2c_clear_isr_interrupts(pdata, isr); in xgbe_i2c_isr_task()
293 netif_dbg(pdata, link, pdata->netdev, in xgbe_i2c_isr_task()
297 xgbe_i2c_disable_interrupts(pdata); in xgbe_i2c_isr_task()
304 xgbe_i2c_read(pdata); in xgbe_i2c_isr_task()
307 xgbe_i2c_write(pdata); in xgbe_i2c_isr_task()
312 complete(&pdata->i2c_complete); in xgbe_i2c_isr_task()
316 if (pdata->vdata->irq_reissue_support) in xgbe_i2c_isr_task()
317 XP_IOWRITE(pdata, XP_INT_REISSUE_EN, 1 << 2); in xgbe_i2c_isr_task()
322 struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data; in xgbe_i2c_isr() local
324 if (pdata->isr_as_tasklet) in xgbe_i2c_isr()
325 tasklet_schedule(&pdata->tasklet_i2c); in xgbe_i2c_isr()
327 xgbe_i2c_isr_task(&pdata->tasklet_i2c); in xgbe_i2c_isr()
332 static void xgbe_i2c_set_mode(struct xgbe_prv_data *pdata) in xgbe_i2c_set_mode() argument
336 reg = XI2C_IOREAD(pdata, IC_CON); in xgbe_i2c_set_mode()
342 XI2C_IOWRITE(pdata, IC_CON, reg); in xgbe_i2c_set_mode()
345 static void xgbe_i2c_get_features(struct xgbe_prv_data *pdata) in xgbe_i2c_get_features() argument
347 struct xgbe_i2c *i2c = &pdata->i2c; in xgbe_i2c_get_features()
350 reg = XI2C_IOREAD(pdata, IC_COMP_PARAM_1); in xgbe_i2c_get_features()
358 if (netif_msg_probe(pdata)) in xgbe_i2c_get_features()
359 dev_dbg(pdata->dev, "I2C features: %s=%u, %s=%u, %s=%u\n", in xgbe_i2c_get_features()
365 static void xgbe_i2c_set_target(struct xgbe_prv_data *pdata, unsigned int addr) in xgbe_i2c_set_target() argument
367 XI2C_IOWRITE(pdata, IC_TAR, addr); in xgbe_i2c_set_target()
370 static irqreturn_t xgbe_i2c_combined_isr(struct xgbe_prv_data *pdata) in xgbe_i2c_combined_isr() argument
372 xgbe_i2c_isr_task(&pdata->tasklet_i2c); in xgbe_i2c_combined_isr()
377 static int xgbe_i2c_xfer(struct xgbe_prv_data *pdata, struct xgbe_i2c_op *op) in xgbe_i2c_xfer() argument
379 struct xgbe_i2c_op_state *state = &pdata->i2c.op_state; in xgbe_i2c_xfer()
382 mutex_lock(&pdata->i2c_mutex); in xgbe_i2c_xfer()
384 reinit_completion(&pdata->i2c_complete); in xgbe_i2c_xfer()
386 ret = xgbe_i2c_disable(pdata); in xgbe_i2c_xfer()
388 netdev_err(pdata->netdev, "failed to disable i2c master\n"); in xgbe_i2c_xfer()
392 xgbe_i2c_set_target(pdata, op->target); in xgbe_i2c_xfer()
401 xgbe_i2c_clear_all_interrupts(pdata); in xgbe_i2c_xfer()
402 ret = xgbe_i2c_enable(pdata); in xgbe_i2c_xfer()
404 netdev_err(pdata->netdev, "failed to enable i2c master\n"); in xgbe_i2c_xfer()
411 xgbe_i2c_enable_interrupts(pdata); in xgbe_i2c_xfer()
413 if (!wait_for_completion_timeout(&pdata->i2c_complete, HZ)) { in xgbe_i2c_xfer()
414 netdev_err(pdata->netdev, "i2c operation timed out\n"); in xgbe_i2c_xfer()
428 xgbe_i2c_disable_interrupts(pdata); in xgbe_i2c_xfer()
429 xgbe_i2c_disable(pdata); in xgbe_i2c_xfer()
432 mutex_unlock(&pdata->i2c_mutex); in xgbe_i2c_xfer()
437 static void xgbe_i2c_stop(struct xgbe_prv_data *pdata) in xgbe_i2c_stop() argument
439 if (!pdata->i2c.started) in xgbe_i2c_stop()
442 netif_dbg(pdata, link, pdata->netdev, "stopping I2C\n"); in xgbe_i2c_stop()
444 pdata->i2c.started = 0; in xgbe_i2c_stop()
446 xgbe_i2c_disable_interrupts(pdata); in xgbe_i2c_stop()
447 xgbe_i2c_disable(pdata); in xgbe_i2c_stop()
448 xgbe_i2c_clear_all_interrupts(pdata); in xgbe_i2c_stop()
450 if (pdata->dev_irq != pdata->i2c_irq) { in xgbe_i2c_stop()
451 devm_free_irq(pdata->dev, pdata->i2c_irq, pdata); in xgbe_i2c_stop()
452 tasklet_kill(&pdata->tasklet_i2c); in xgbe_i2c_stop()
456 static int xgbe_i2c_start(struct xgbe_prv_data *pdata) in xgbe_i2c_start() argument
460 if (pdata->i2c.started) in xgbe_i2c_start()
463 netif_dbg(pdata, link, pdata->netdev, "starting I2C\n"); in xgbe_i2c_start()
466 if (pdata->dev_irq != pdata->i2c_irq) { in xgbe_i2c_start()
467 tasklet_setup(&pdata->tasklet_i2c, xgbe_i2c_isr_task); in xgbe_i2c_start()
469 ret = devm_request_irq(pdata->dev, pdata->i2c_irq, in xgbe_i2c_start()
470 xgbe_i2c_isr, 0, pdata->i2c_name, in xgbe_i2c_start()
471 pdata); in xgbe_i2c_start()
473 netdev_err(pdata->netdev, "i2c irq request failed\n"); in xgbe_i2c_start()
478 pdata->i2c.started = 1; in xgbe_i2c_start()
483 static int xgbe_i2c_init(struct xgbe_prv_data *pdata) in xgbe_i2c_init() argument
487 xgbe_i2c_disable_interrupts(pdata); in xgbe_i2c_init()
489 ret = xgbe_i2c_disable(pdata); in xgbe_i2c_init()
491 dev_err(pdata->dev, "failed to disable i2c master\n"); in xgbe_i2c_init()
495 xgbe_i2c_get_features(pdata); in xgbe_i2c_init()
497 xgbe_i2c_set_mode(pdata); in xgbe_i2c_init()
499 xgbe_i2c_clear_all_interrupts(pdata); in xgbe_i2c_init()