• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/i2c/busses/

Lines Matching refs:alg_data

54 static inline void i2c_pnx_arm_timer(struct i2c_pnx_algo_data *alg_data)
56 struct timer_list *timer = &alg_data->mif.timer;
64 dev_dbg(&alg_data->adapter.dev, "Timer armed at %lu plus %lu jiffies.\n",
68 timer->data = (unsigned long)&alg_data;
81 struct i2c_pnx_algo_data *alg_data)
83 dev_dbg(&alg_data->adapter.dev, "%s(): addr 0x%x mode %d\n", __func__,
84 slave_addr, alg_data->mif.mode);
88 dev_err(&alg_data->adapter.dev,
90 alg_data->adapter.name, slave_addr);
95 if (wait_timeout(I2C_PNX_TIMEOUT, alg_data)) {
97 dev_err(&alg_data->adapter.dev,
99 alg_data->adapter.name, slave_addr,
100 ioread32(I2C_REG_CTL(alg_data)),
101 ioread32(I2C_REG_STS(alg_data)));
103 } else if (ioread32(I2C_REG_STS(alg_data)) & mstatus_afi) {
105 dev_err(&alg_data->adapter.dev,
107 alg_data->adapter.name, slave_addr);
115 iowrite32(ioread32(I2C_REG_STS(alg_data)) | mstatus_tdi | mstatus_afi,
116 I2C_REG_STS(alg_data));
118 dev_dbg(&alg_data->adapter.dev, "%s(): sending %#x\n", __func__,
119 (slave_addr << 1) | start_bit | alg_data->mif.mode);
122 iowrite32((slave_addr << 1) | start_bit | alg_data->mif.mode,
123 I2C_REG_TX(alg_data));
125 dev_dbg(&alg_data->adapter.dev, "%s(): exit\n", __func__);
136 static void i2c_pnx_stop(struct i2c_pnx_algo_data *alg_data)
141 dev_dbg(&alg_data->adapter.dev, "%s(): entering: stat = %04x.\n",
142 __func__, ioread32(I2C_REG_STS(alg_data)));
145 iowrite32(0xff | stop_bit, I2C_REG_TX(alg_data));
149 (ioread32(I2C_REG_STS(alg_data)) & mstatus_active)) {
155 dev_dbg(&alg_data->adapter.dev, "%s(): exiting: stat = %04x.\n",
156 __func__, ioread32(I2C_REG_STS(alg_data)));
165 static int i2c_pnx_master_xmit(struct i2c_pnx_algo_data *alg_data)
169 dev_dbg(&alg_data->adapter.dev, "%s(): entering: stat = %04x.\n",
170 __func__, ioread32(I2C_REG_STS(alg_data)));
172 if (alg_data->mif.len > 0) {
174 val = *alg_data->mif.buf++;
176 if (alg_data->mif.len == 1)
179 alg_data->mif.len--;
180 iowrite32(val, I2C_REG_TX(alg_data));
182 dev_dbg(&alg_data->adapter.dev, "%s(): xmit %#x [%d]\n",
183 __func__, val, alg_data->mif.len + 1);
185 if (alg_data->mif.len == 0) {
186 if (alg_data->last) {
188 if (wait_timeout(I2C_PNX_TIMEOUT, alg_data))
189 dev_err(&alg_data->adapter.dev,
193 iowrite32(ioread32(I2C_REG_CTL(alg_data)) &
195 I2C_REG_CTL(alg_data));
197 del_timer_sync(&alg_data->mif.timer);
199 dev_dbg(&alg_data->adapter.dev,
203 complete(&alg_data->mif.complete);
205 } else if (alg_data->mif.len == 0) {
207 i2c_pnx_stop(alg_data);
210 iowrite32(ioread32(I2C_REG_CTL(alg_data)) &
212 I2C_REG_CTL(alg_data));
215 del_timer_sync(&alg_data->mif.timer);
216 dev_dbg(&alg_data->adapter.dev,
220 complete(&alg_data->mif.complete);
223 dev_dbg(&alg_data->adapter.dev, "%s(): exiting: stat = %04x.\n",
224 __func__, ioread32(I2C_REG_STS(alg_data)));
235 static int i2c_pnx_master_rcv(struct i2c_pnx_algo_data *alg_data)
240 dev_dbg(&alg_data->adapter.dev, "%s(): entering: stat = %04x.\n",
241 __func__, ioread32(I2C_REG_STS(alg_data)));
246 if (ioread32(I2C_REG_STS(alg_data)) & mstatus_rfe) {
247 dev_dbg(&alg_data->adapter.dev,
251 if (alg_data->mif.len == 1) {
259 ctl = ioread32(I2C_REG_CTL(alg_data));
262 iowrite32(ctl, I2C_REG_CTL(alg_data));
270 iowrite32(val, I2C_REG_TX(alg_data));
276 if (alg_data->mif.len > 0) {
277 val = ioread32(I2C_REG_RX(alg_data));
278 *alg_data->mif.buf++ = (u8) (val & 0xff);
279 dev_dbg(&alg_data->adapter.dev, "%s(): rcv 0x%x [%d]\n",
280 __func__, val, alg_data->mif.len);
282 alg_data->mif.len--;
283 if (alg_data->mif.len == 0) {
284 if (alg_data->last)
286 if (wait_timeout(I2C_PNX_TIMEOUT, alg_data))
287 dev_err(&alg_data->adapter.dev,
291 ctl = ioread32(I2C_REG_CTL(alg_data));
294 iowrite32(ctl, I2C_REG_CTL(alg_data));
297 del_timer_sync(&alg_data->mif.timer);
298 complete(&alg_data->mif.complete);
302 dev_dbg(&alg_data->adapter.dev, "%s(): exiting: stat = %04x.\n",
303 __func__, ioread32(I2C_REG_STS(alg_data)));
310 struct i2c_pnx_algo_data *alg_data = dev_id;
313 dev_dbg(&alg_data->adapter.dev,
316 ioread32(I2C_REG_STS(alg_data)),
317 ioread32(I2C_REG_CTL(alg_data)),
318 alg_data->mif.mode);
319 stat = ioread32(I2C_REG_STS(alg_data));
324 alg_data->mif.ret = -EIO;
327 ctl = ioread32(I2C_REG_CTL(alg_data));
330 iowrite32(ctl, I2C_REG_CTL(alg_data));
333 del_timer_sync(&alg_data->mif.timer);
334 complete(&alg_data->mif.complete);
337 dev_dbg(&alg_data->adapter.dev,
340 i2c_pnx_stop(alg_data);
343 ctl = ioread32(I2C_REG_CTL(alg_data));
346 iowrite32(ctl, I2C_REG_CTL(alg_data));
349 alg_data->mif.ret = -EIO;
352 del_timer_sync(&alg_data->mif.timer);
353 complete(&alg_data->mif.complete);
365 if (alg_data->mif.mode == I2C_SMBUS_WRITE) {
366 i2c_pnx_master_xmit(alg_data);
367 } else if (alg_data->mif.mode == I2C_SMBUS_READ) {
368 i2c_pnx_master_rcv(alg_data);
374 stat = ioread32(I2C_REG_STS(alg_data));
375 iowrite32(stat | mstatus_tdi | mstatus_afi, I2C_REG_STS(alg_data));
377 dev_dbg(&alg_data->adapter.dev,
379 __func__, ioread32(I2C_REG_STS(alg_data)),
380 ioread32(I2C_REG_CTL(alg_data)));
387 struct i2c_pnx_algo_data *alg_data = (struct i2c_pnx_algo_data *)data;
390 dev_err(&alg_data->adapter.dev,
392 ioread32(I2C_REG_STS(alg_data)),
393 ioread32(I2C_REG_CTL(alg_data)));
396 ctl = ioread32(I2C_REG_CTL(alg_data));
398 iowrite32(ctl, I2C_REG_CTL(alg_data));
401 iowrite32(ctl, I2C_REG_CTL(alg_data));
402 wait_reset(I2C_PNX_TIMEOUT, alg_data);
403 alg_data->mif.ret = -EIO;
404 complete(&alg_data->mif.complete);
407 static inline void bus_reset_if_active(struct i2c_pnx_algo_data *alg_data)
411 if ((stat = ioread32(I2C_REG_STS(alg_data))) & mstatus_active) {
412 dev_err(&alg_data->adapter.dev,
414 alg_data->adapter.name);
415 iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_reset,
416 I2C_REG_CTL(alg_data));
417 wait_reset(I2C_PNX_TIMEOUT, alg_data);
422 iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_reset,
423 I2C_REG_CTL(alg_data));
424 wait_reset(I2C_PNX_TIMEOUT, alg_data);
426 iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_reset,
427 I2C_REG_CTL(alg_data));
428 wait_reset(I2C_PNX_TIMEOUT, alg_data);
445 struct i2c_pnx_algo_data *alg_data = adap->algo_data;
446 u32 stat = ioread32(I2C_REG_STS(alg_data));
448 dev_dbg(&alg_data->adapter.dev,
450 __func__, num, ioread32(I2C_REG_STS(alg_data)));
452 bus_reset_if_active(alg_data);
462 dev_err(&alg_data->adapter.dev,
464 alg_data->adapter.name);
469 alg_data->mif.buf = pmsg->buf;
470 alg_data->mif.len = pmsg->len;
471 alg_data->mif.mode = (pmsg->flags & I2C_M_RD) ?
473 alg_data->mif.ret = 0;
474 alg_data->last = (i == num - 1);
476 dev_dbg(&alg_data->adapter.dev, "%s(): mode %d, %d bytes\n",
477 __func__, alg_data->mif.mode, alg_data->mif.len);
479 i2c_pnx_arm_timer(alg_data);
482 init_completion(&alg_data->mif.complete);
485 iowrite32(ioread32(I2C_REG_CTL(alg_data)) | mcntrl_afie |
487 I2C_REG_CTL(alg_data));
490 rc = i2c_pnx_start(addr, alg_data);
495 wait_for_completion(&alg_data->mif.complete);
497 if (!(rc = alg_data->mif.ret))
499 dev_dbg(&alg_data->adapter.dev,
504 if ((stat = ioread32(I2C_REG_STS(alg_data))) & mstatus_tdi) {
505 dev_dbg(&alg_data->adapter.dev,
507 alg_data->adapter.name);
508 iowrite32(stat, I2C_REG_STS(alg_data));
510 if ((stat = ioread32(I2C_REG_STS(alg_data))) & mstatus_afi) {
511 dev_dbg(&alg_data->adapter.dev,
513 alg_data->adapter.name);
514 iowrite32(stat, I2C_REG_STS(alg_data));
518 bus_reset_if_active(alg_data);
521 alg_data->mif.buf = NULL;
522 alg_data->mif.len = 0;
524 dev_dbg(&alg_data->adapter.dev, "%s(): exiting, stat = %x\n",
525 __func__, ioread32(I2C_REG_STS(alg_data)));
547 struct i2c_pnx_algo_data *alg_data = platform_get_drvdata(pdev);
549 clk_enable(alg_data->clk);
556 struct i2c_pnx_algo_data *alg_data = platform_get_drvdata(pdev);
558 return clk_enable(alg_data->clk);
569 struct i2c_pnx_algo_data *alg_data;
580 alg_data = kzalloc(sizeof(*alg_data), GFP_KERNEL);
581 if (!alg_data) {
586 platform_set_drvdata(pdev, alg_data);
588 strlcpy(alg_data->adapter.name, i2c_pnx->name,
589 sizeof(alg_data->adapter.name));
590 alg_data->adapter.dev.parent = &pdev->dev;
591 alg_data->adapter.algo = &pnx_algorithm;
592 alg_data->adapter.algo_data = alg_data;
593 alg_data->adapter.nr = pdev->id;
594 alg_data->i2c_pnx = i2c_pnx;
596 alg_data->clk = clk_get(&pdev->dev, NULL);
597 if (IS_ERR(alg_data->clk)) {
598 ret = PTR_ERR(alg_data->clk);
602 init_timer(&alg_data->mif.timer);
603 alg_data->mif.timer.function = i2c_pnx_timeout;
604 alg_data->mif.timer.data = (unsigned long)alg_data;
616 alg_data->ioaddr = ioremap(i2c_pnx->base, I2C_PNX_REGION_SIZE);
617 if (!alg_data->ioaddr) {
623 ret = clk_enable(alg_data->clk);
627 freq = clk_get_rate(alg_data->clk);
643 iowrite32(tmp, I2C_REG_CKH(alg_data));
644 iowrite32(tmp, I2C_REG_CKL(alg_data));
646 iowrite32(mcntrl_reset, I2C_REG_CTL(alg_data));
647 if (wait_reset(I2C_PNX_TIMEOUT, alg_data)) {
651 init_completion(&alg_data->mif.complete);
654 0, pdev->name, alg_data);
659 ret = i2c_add_numbered_adapter(&alg_data->adapter);
666 alg_data->adapter.name, i2c_pnx->base, i2c_pnx->irq);
671 free_irq(i2c_pnx->irq, alg_data);
673 clk_disable(alg_data->clk);
675 iounmap(alg_data->ioaddr);
679 clk_put(alg_data->clk);
681 kfree(alg_data);
690 struct i2c_pnx_algo_data *alg_data = platform_get_drvdata(pdev);
691 struct i2c_pnx_data *i2c_pnx = alg_data->i2c_pnx;
693 free_irq(i2c_pnx->irq, alg_data);
694 i2c_del_adapter(&alg_data->adapter);
695 clk_disable(alg_data->clk);
696 iounmap(alg_data->ioaddr);
698 clk_put(alg_data->clk);
699 kfree(alg_data);