Lines Matching refs:i2c

14 #include "i2c-viai2c-common.h"
42 static int wmt_i2c_reset_hardware(struct viai2c *i2c)
46 err = clk_prepare_enable(i2c->clk);
48 return dev_err_probe(i2c->dev, err, "failed to enable clock\n");
50 err = clk_set_rate(i2c->clk, 20000000);
52 clk_disable_unprepare(i2c->clk);
53 return dev_err_probe(i2c->dev, err, "failed to set clock = 20Mhz\n");
56 writew(0, i2c->base + VIAI2C_REG_CR);
57 writew(MCR_APB_166M, i2c->base + VIAI2C_REG_MCR);
58 writew(VIAI2C_ISR_MASK_ALL, i2c->base + VIAI2C_REG_ISR);
59 writew(VIAI2C_IMR_ENABLE_ALL, i2c->base + VIAI2C_REG_IMR);
60 writew(VIAI2C_CR_ENABLE, i2c->base + VIAI2C_REG_CR);
61 readw(i2c->base + VIAI2C_REG_CSR); /* read clear */
62 writew(VIAI2C_ISR_MASK_ALL, i2c->base + VIAI2C_REG_ISR);
64 if (i2c->tcr == VIAI2C_TCR_FAST)
65 writew(SCL_TIMEOUT(128) | TR_HS, i2c->base + VIAI2C_REG_TR);
67 writew(SCL_TIMEOUT(128) | TR_STD, i2c->base + VIAI2C_REG_TR);
74 struct viai2c *i2c = data;
78 status = readw(i2c->base + VIAI2C_REG_ISR);
79 writew(status, i2c->base + VIAI2C_REG_ISR);
81 i2c->ret = 0;
83 i2c->ret = -EIO;
86 i2c->ret = -ETIMEDOUT;
88 if (!i2c->ret)
89 i2c->ret = viai2c_irq_xfer(i2c);
92 if (i2c->ret)
93 complete(&i2c->complete);
101 struct viai2c *i2c;
106 err = viai2c_init(pdev, &i2c, VIAI2C_PLAT_WMT);
110 i2c->irq = platform_get_irq(pdev, 0);
111 if (i2c->irq < 0)
112 return i2c->irq;
114 err = devm_request_irq(&pdev->dev, i2c->irq, wmt_i2c_isr,
115 0, pdev->name, i2c);
118 "failed to request irq %i\n", i2c->irq);
120 i2c->clk = of_clk_get(np, 0);
121 if (IS_ERR(i2c->clk))
122 return dev_err_probe(&pdev->dev, PTR_ERR(i2c->clk),
127 i2c->tcr = VIAI2C_TCR_FAST;
129 adap = &i2c->adapter;
130 i2c_set_adapdata(adap, i2c);
137 err = wmt_i2c_reset_hardware(i2c);
144 clk_disable_unprepare(i2c->clk);
151 struct viai2c *i2c = platform_get_drvdata(pdev);
154 writew(0, i2c->base + VIAI2C_REG_IMR);
155 clk_disable_unprepare(i2c->clk);
156 i2c_del_adapter(&i2c->adapter);
160 { .compatible = "wm,wm8505-i2c" },
168 .name = "wmt-i2c",