Lines Matching refs:priv
76 static inline void em_clear_set_bit(struct em_i2c_device *priv, u8 clear, u8 set, u8 reg) in em_clear_set_bit() argument
78 writeb((readb(priv->base + reg) & ~clear) | set, priv->base + reg); in em_clear_set_bit()
81 static int em_i2c_wait_for_event(struct em_i2c_device *priv) in em_i2c_wait_for_event() argument
86 reinit_completion(&priv->msg_done); in em_i2c_wait_for_event()
88 time_left = wait_for_completion_timeout(&priv->msg_done, priv->adap.timeout); in em_i2c_wait_for_event()
93 status = readb(priv->base + I2C_OFS_IICSE0); in em_i2c_wait_for_event()
97 static void em_i2c_stop(struct em_i2c_device *priv) in em_i2c_stop() argument
100 em_clear_set_bit(priv, 0, I2C_BIT_SPT0 | I2C_BIT_SPIE0, I2C_OFS_IICC0); in em_i2c_stop()
103 em_i2c_wait_for_event(priv); in em_i2c_stop()
108 struct em_i2c_device *priv = i2c_get_adapdata(adap); in em_i2c_reset() local
112 if (readb(priv->base + I2C_OFS_IICACT0) & I2C_BIT_IICE0) { in em_i2c_reset()
114 writeb(0, priv->base + I2C_OFS_IICACT0); in em_i2c_reset()
117 while (readb(priv->base + I2C_OFS_IICACT0) == 1 && retr) in em_i2c_reset()
123 writeb(I2C_BIT_DFC0, priv->base + I2C_OFS_IICCL0); in em_i2c_reset()
126 writeb(I2C_BIT_STCEN | I2C_BIT_IICRSV, priv->base + I2C_OFS_IICF0); in em_i2c_reset()
129 writeb(I2C_BIT_WTIM0, priv->base + I2C_OFS_IICC0); in em_i2c_reset()
132 writeb(I2C_BIT_IICE0, priv->base + I2C_OFS_IICACT0); in em_i2c_reset()
135 while (readb(priv->base + I2C_OFS_IICACT0) == 0 && retr) in em_i2c_reset()
143 struct em_i2c_device *priv = i2c_get_adapdata(adap); in __em_i2c_xfer() local
147 em_clear_set_bit(priv, 0, I2C_BIT_ACKE0 | I2C_BIT_WTIM0, I2C_OFS_IICC0); in __em_i2c_xfer()
148 em_clear_set_bit(priv, 0, I2C_BIT_STT0, I2C_OFS_IICC0); in __em_i2c_xfer()
151 writeb((msg->addr << 1) | read, priv->base + I2C_OFS_IIC0); in __em_i2c_xfer()
154 status = em_i2c_wait_for_event(priv); in __em_i2c_xfer()
160 em_i2c_stop(priv); in __em_i2c_xfer()
167 em_clear_set_bit(priv, I2C_BIT_WTIM0, I2C_BIT_ACKE0, I2C_OFS_IICC0); in __em_i2c_xfer()
168 em_clear_set_bit(priv, I2C_BIT_WTIM0, I2C_BIT_WREL0, I2C_OFS_IICC0); in __em_i2c_xfer()
171 status = em_i2c_wait_for_event(priv); in __em_i2c_xfer()
179 msg->buf[count] = readb(priv->base + I2C_OFS_IIC0); in __em_i2c_xfer()
180 em_clear_set_bit(priv, 0, I2C_BIT_WREL0, I2C_OFS_IICC0); in __em_i2c_xfer()
185 em_i2c_stop(priv); in __em_i2c_xfer()
190 writeb(msg->buf[count], priv->base + I2C_OFS_IIC0); in __em_i2c_xfer()
194 status = em_i2c_wait_for_event(priv); in __em_i2c_xfer()
200 em_i2c_stop(priv); in __em_i2c_xfer()
213 struct em_i2c_device *priv = i2c_get_adapdata(adap); in em_i2c_xfer() local
216 if (readb(priv->base + I2C_OFS_IICF0) & I2C_BIT_IICBSY) in em_i2c_xfer()
231 struct em_i2c_device *priv = dev_id; in em_i2c_irq_handler() local
233 complete(&priv->msg_done); in em_i2c_irq_handler()
249 struct em_i2c_device *priv; in em_i2c_probe() local
253 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in em_i2c_probe()
254 if (!priv) in em_i2c_probe()
258 priv->base = devm_ioremap_resource(&pdev->dev, r); in em_i2c_probe()
259 if (IS_ERR(priv->base)) in em_i2c_probe()
260 return PTR_ERR(priv->base); in em_i2c_probe()
262 strlcpy(priv->adap.name, "EMEV2 I2C", sizeof(priv->adap.name)); in em_i2c_probe()
264 priv->sclk = devm_clk_get(&pdev->dev, "sclk"); in em_i2c_probe()
265 if (IS_ERR(priv->sclk)) in em_i2c_probe()
266 return PTR_ERR(priv->sclk); in em_i2c_probe()
268 clk_prepare_enable(priv->sclk); in em_i2c_probe()
270 priv->adap.timeout = msecs_to_jiffies(100); in em_i2c_probe()
271 priv->adap.retries = 5; in em_i2c_probe()
272 priv->adap.dev.parent = &pdev->dev; in em_i2c_probe()
273 priv->adap.algo = &em_i2c_algo; in em_i2c_probe()
274 priv->adap.owner = THIS_MODULE; in em_i2c_probe()
275 priv->adap.dev.of_node = pdev->dev.of_node; in em_i2c_probe()
277 init_completion(&priv->msg_done); in em_i2c_probe()
279 platform_set_drvdata(pdev, priv); in em_i2c_probe()
280 i2c_set_adapdata(&priv->adap, priv); in em_i2c_probe()
282 em_i2c_reset(&priv->adap); in em_i2c_probe()
286 "em_i2c", priv); in em_i2c_probe()
290 ret = i2c_add_adapter(&priv->adap); in em_i2c_probe()
295 dev_info(&pdev->dev, "Added i2c controller %d, irq %d\n", priv->adap.nr, irq); in em_i2c_probe()
300 clk_disable_unprepare(priv->sclk); in em_i2c_probe()
306 struct em_i2c_device *priv = platform_get_drvdata(dev); in em_i2c_remove() local
308 i2c_del_adapter(&priv->adap); in em_i2c_remove()
309 clk_disable_unprepare(priv->sclk); in em_i2c_remove()