Lines Matching refs:pdata

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