drivers/clk/tegra/clk-dfll.c
1819
struct device *i2c_dev;
drivers/clk/tegra/clk-dfll.c
1828
i2c_dev = regmap_get_device(regmap);
drivers/clk/tegra/clk-dfll.c
1829
i2c_client = to_i2c_client(i2c_dev);
drivers/gpu/drm/gma500/oaktrail.h
217
struct hdmi_i2c_dev *i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
103
i2c_dev->status = I2C_STAT_INIT;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
104
i2c_dev->msg = pmsg;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
105
i2c_dev->buf_offset = 0;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
106
reinit_completion(&i2c_dev->complete);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
113
while (i2c_dev->status != I2C_TRANSACTION_DONE) {
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
114
ret = wait_for_completion_interruptible_timeout(&i2c_dev->complete,
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
138
struct hdmi_i2c_dev *i2c_dev = hdmi_dev->i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
141
mutex_lock(&i2c_dev->i2c_lock);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
163
mutex_unlock(&i2c_dev->i2c_lock);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
190
struct hdmi_i2c_dev *i2c_dev = hdmi_dev->i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
191
struct i2c_msg *msg = i2c_dev->msg;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
196
offset = i2c_dev->buf_offset;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
201
i2c_dev->buf_offset += (0x10 * 4);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
213
i2c_dev->status = I2C_READ_DONE;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
219
struct hdmi_i2c_dev *i2c_dev = hdmi_dev->i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
232
i2c_dev->status = I2C_TRANSACTION_DONE;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
239
struct hdmi_i2c_dev *i2c_dev = hdmi_dev->i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
255
complete(&i2c_dev->complete);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
289
struct hdmi_i2c_dev *i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
294
i2c_dev = kzalloc_obj(struct hdmi_i2c_dev);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
295
if (!i2c_dev)
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
298
i2c_dev->adap = &oaktrail_hdmi_i2c_adapter;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
299
i2c_dev->status = I2C_STAT_INIT;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
300
init_completion(&i2c_dev->complete);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
301
mutex_init(&i2c_dev->i2c_lock);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
303
hdmi_dev->i2c_dev = i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
328
kfree(i2c_dev);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
336
struct hdmi_i2c_dev *i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
341
i2c_dev = hdmi_dev->i2c_dev;
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
342
kfree(i2c_dev);
drivers/gpu/drm/gma500/oaktrail_hdmi_i2c.c
99
struct hdmi_i2c_dev *i2c_dev = hdmi_dev->i2c_dev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
102
time_left = wait_for_completion_timeout(&i2c_dev->cmd_complete,
drivers/i2c/busses/i2c-amd-mp2-plat.c
103
i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-amd-mp2-plat.c
123
static int i2c_amd_enable_set(struct amd_i2c_dev *i2c_dev, bool enable)
drivers/i2c/busses/i2c-amd-mp2-plat.c
125
struct amd_i2c_common *i2c_common = &i2c_dev->common;
drivers/i2c/busses/i2c-amd-mp2-plat.c
127
i2c_amd_start_cmd(i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
130
return i2c_amd_check_cmd_completion(i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
133
static int i2c_amd_xfer_msg(struct amd_i2c_dev *i2c_dev, struct i2c_msg *pmsg)
drivers/i2c/busses/i2c-amd-mp2-plat.c
135
struct amd_i2c_common *i2c_common = &i2c_dev->common;
drivers/i2c/busses/i2c-amd-mp2-plat.c
137
i2c_amd_start_cmd(i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
149
return i2c_amd_check_cmd_completion(i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
154
struct amd_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-amd-mp2-plat.c
160
if (unlikely(!i2c_dev->common.mp2_dev))
drivers/i2c/busses/i2c-amd-mp2-plat.c
163
amd_mp2_pm_runtime_get(i2c_dev->common.mp2_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
167
err = i2c_amd_xfer_msg(i2c_dev, pmsg);
drivers/i2c/busses/i2c-amd-mp2-plat.c
172
amd_mp2_pm_runtime_put(i2c_dev->common.mp2_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
189
struct amd_i2c_dev *i2c_dev = amd_i2c_dev_common(i2c_common);
drivers/i2c/busses/i2c-amd-mp2-plat.c
191
i2c_amd_enable_set(i2c_dev, false);
drivers/i2c/busses/i2c-amd-mp2-plat.c
197
struct amd_i2c_dev *i2c_dev = amd_i2c_dev_common(i2c_common);
drivers/i2c/busses/i2c-amd-mp2-plat.c
199
return i2c_amd_enable_set(i2c_dev, true);
drivers/i2c/busses/i2c-amd-mp2-plat.c
249
struct amd_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
269
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-amd-mp2-plat.c
270
if (!i2c_dev)
drivers/i2c/busses/i2c-amd-mp2-plat.c
273
i2c_dev->common.bus_id = uid;
drivers/i2c/busses/i2c-amd-mp2-plat.c
274
i2c_dev->common.mp2_dev = mp2_dev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
275
i2c_dev->pdev = pdev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
276
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
278
i2c_dev->common.cmd_completion = &i2c_amd_cmd_completion;
drivers/i2c/busses/i2c-amd-mp2-plat.c
280
i2c_dev->common.suspend = &i2c_amd_suspend;
drivers/i2c/busses/i2c-amd-mp2-plat.c
281
i2c_dev->common.resume = &i2c_amd_resume;
drivers/i2c/busses/i2c-amd-mp2-plat.c
287
i2c_dev->common.reqcmd = i2c_none;
drivers/i2c/busses/i2c-amd-mp2-plat.c
288
if (amd_mp2_register_cb(&i2c_dev->common))
drivers/i2c/busses/i2c-amd-mp2-plat.c
290
device_link_add(&i2c_dev->pdev->dev, &mp2_dev->pci_dev->dev,
drivers/i2c/busses/i2c-amd-mp2-plat.c
293
i2c_dev->common.i2c_speed = i2c_amd_get_bus_speed(pdev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
296
i2c_dev->adap.owner = THIS_MODULE;
drivers/i2c/busses/i2c-amd-mp2-plat.c
297
i2c_dev->adap.algo = &i2c_amd_algorithm;
drivers/i2c/busses/i2c-amd-mp2-plat.c
298
i2c_dev->adap.quirks = &amd_i2c_dev_quirks;
drivers/i2c/busses/i2c-amd-mp2-plat.c
299
i2c_dev->adap.dev.parent = &pdev->dev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
300
i2c_dev->adap.algo_data = i2c_dev;
drivers/i2c/busses/i2c-amd-mp2-plat.c
301
i2c_dev->adap.timeout = AMD_I2C_TIMEOUT;
drivers/i2c/busses/i2c-amd-mp2-plat.c
302
ACPI_COMPANION_SET(&i2c_dev->adap.dev, ACPI_COMPANION(&pdev->dev));
drivers/i2c/busses/i2c-amd-mp2-plat.c
303
i2c_dev->adap.dev.of_node = pdev->dev.of_node;
drivers/i2c/busses/i2c-amd-mp2-plat.c
304
snprintf(i2c_dev->adap.name, sizeof(i2c_dev->adap.name),
drivers/i2c/busses/i2c-amd-mp2-plat.c
305
"AMD MP2 i2c bus %u", i2c_dev->common.bus_id);
drivers/i2c/busses/i2c-amd-mp2-plat.c
306
i2c_set_adapdata(&i2c_dev->adap, i2c_dev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
308
init_completion(&i2c_dev->cmd_complete);
drivers/i2c/busses/i2c-amd-mp2-plat.c
311
if (i2c_amd_enable_set(i2c_dev, true))
drivers/i2c/busses/i2c-amd-mp2-plat.c
315
ret = i2c_add_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-amd-mp2-plat.c
327
struct amd_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-amd-mp2-plat.c
328
struct amd_i2c_common *i2c_common = &i2c_dev->common;
drivers/i2c/busses/i2c-amd-mp2-plat.c
330
i2c_lock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
drivers/i2c/busses/i2c-amd-mp2-plat.c
332
i2c_amd_enable_set(i2c_dev, false);
drivers/i2c/busses/i2c-amd-mp2-plat.c
336
i2c_unlock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
drivers/i2c/busses/i2c-amd-mp2-plat.c
338
i2c_del_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-amd-mp2-plat.c
44
struct amd_i2c_dev *i2c_dev = amd_i2c_dev_common(i2c_common);
drivers/i2c/busses/i2c-amd-mp2-plat.c
55
dev_err(&i2c_dev->pdev->dev,
drivers/i2c/busses/i2c-amd-mp2-plat.c
77
static void i2c_amd_start_cmd(struct amd_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-amd-mp2-plat.c
79
struct amd_i2c_common *i2c_common = &i2c_dev->common;
drivers/i2c/busses/i2c-amd-mp2-plat.c
81
reinit_completion(&i2c_dev->cmd_complete);
drivers/i2c/busses/i2c-amd-mp2-plat.c
87
struct amd_i2c_dev *i2c_dev = amd_i2c_dev_common(i2c_common);
drivers/i2c/busses/i2c-amd-mp2-plat.c
91
dev_dbg(&i2c_dev->pdev->dev, "readdata:%*ph\n", event->r.length,
drivers/i2c/busses/i2c-amd-mp2-plat.c
94
complete(&i2c_dev->cmd_complete);
drivers/i2c/busses/i2c-amd-mp2-plat.c
97
static int i2c_amd_check_cmd_completion(struct amd_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-amd-mp2-plat.c
99
struct amd_i2c_common *i2c_common = &i2c_dev->common;
drivers/i2c/busses/i2c-bcm2835.c
119
bcm2835_i2c_writel(div->i2c_dev, BCM2835_I2C_DIV, divider);
drivers/i2c/busses/i2c-bcm2835.c
134
bcm2835_i2c_writel(div->i2c_dev, BCM2835_I2C_DEL,
drivers/i2c/busses/i2c-bcm2835.c
154
u32 divider = bcm2835_i2c_readl(div->i2c_dev, BCM2835_I2C_DIV);
drivers/i2c/busses/i2c-bcm2835.c
167
struct bcm2835_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
189
priv->i2c_dev = i2c_dev;
drivers/i2c/busses/i2c-bcm2835.c
195
static void bcm2835_fill_txfifo(struct bcm2835_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
199
while (i2c_dev->msg_buf_remaining) {
drivers/i2c/busses/i2c-bcm2835.c
200
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
drivers/i2c/busses/i2c-bcm2835.c
203
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_FIFO,
drivers/i2c/busses/i2c-bcm2835.c
204
*i2c_dev->msg_buf);
drivers/i2c/busses/i2c-bcm2835.c
205
i2c_dev->msg_buf++;
drivers/i2c/busses/i2c-bcm2835.c
206
i2c_dev->msg_buf_remaining--;
drivers/i2c/busses/i2c-bcm2835.c
210
static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
214
while (i2c_dev->msg_buf_remaining) {
drivers/i2c/busses/i2c-bcm2835.c
215
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
drivers/i2c/busses/i2c-bcm2835.c
218
*i2c_dev->msg_buf = bcm2835_i2c_readl(i2c_dev,
drivers/i2c/busses/i2c-bcm2835.c
220
i2c_dev->msg_buf++;
drivers/i2c/busses/i2c-bcm2835.c
221
i2c_dev->msg_buf_remaining--;
drivers/i2c/busses/i2c-bcm2835.c
238
static void bcm2835_i2c_start_transfer(struct bcm2835_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
241
struct i2c_msg *msg = i2c_dev->curr_msg;
drivers/i2c/busses/i2c-bcm2835.c
242
bool last_msg = (i2c_dev->num_msgs == 1);
drivers/i2c/busses/i2c-bcm2835.c
244
if (!i2c_dev->num_msgs)
drivers/i2c/busses/i2c-bcm2835.c
247
i2c_dev->num_msgs--;
drivers/i2c/busses/i2c-bcm2835.c
248
i2c_dev->msg_buf = msg->buf;
drivers/i2c/busses/i2c-bcm2835.c
249
i2c_dev->msg_buf_remaining = msg->len;
drivers/i2c/busses/i2c-bcm2835.c
259
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr);
drivers/i2c/busses/i2c-bcm2835.c
260
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len);
drivers/i2c/busses/i2c-bcm2835.c
261
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c);
drivers/i2c/busses/i2c-bcm2835.c
264
static void bcm2835_i2c_finish_transfer(struct bcm2835_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
266
i2c_dev->curr_msg = NULL;
drivers/i2c/busses/i2c-bcm2835.c
267
i2c_dev->num_msgs = 0;
drivers/i2c/busses/i2c-bcm2835.c
269
i2c_dev->msg_buf = NULL;
drivers/i2c/busses/i2c-bcm2835.c
270
i2c_dev->msg_buf_remaining = 0;
drivers/i2c/busses/i2c-bcm2835.c
284
struct bcm2835_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-bcm2835.c
287
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
drivers/i2c/busses/i2c-bcm2835.c
291
i2c_dev->msg_err = err;
drivers/i2c/busses/i2c-bcm2835.c
296
if (!i2c_dev->curr_msg) {
drivers/i2c/busses/i2c-bcm2835.c
297
dev_err(i2c_dev->dev, "Got unexpected interrupt (from firmware?)\n");
drivers/i2c/busses/i2c-bcm2835.c
298
} else if (i2c_dev->curr_msg->flags & I2C_M_RD) {
drivers/i2c/busses/i2c-bcm2835.c
299
bcm2835_drain_rxfifo(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
300
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
drivers/i2c/busses/i2c-bcm2835.c
303
if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining)
drivers/i2c/busses/i2c-bcm2835.c
304
i2c_dev->msg_err = BCM2835_I2C_S_LEN;
drivers/i2c/busses/i2c-bcm2835.c
306
i2c_dev->msg_err = 0;
drivers/i2c/busses/i2c-bcm2835.c
311
if (!i2c_dev->msg_buf_remaining) {
drivers/i2c/busses/i2c-bcm2835.c
312
i2c_dev->msg_err = val | BCM2835_I2C_S_LEN;
drivers/i2c/busses/i2c-bcm2835.c
316
bcm2835_fill_txfifo(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
318
if (i2c_dev->num_msgs && !i2c_dev->msg_buf_remaining) {
drivers/i2c/busses/i2c-bcm2835.c
319
i2c_dev->curr_msg++;
drivers/i2c/busses/i2c-bcm2835.c
320
bcm2835_i2c_start_transfer(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
327
if (!i2c_dev->msg_buf_remaining) {
drivers/i2c/busses/i2c-bcm2835.c
328
i2c_dev->msg_err = val | BCM2835_I2C_S_LEN;
drivers/i2c/busses/i2c-bcm2835.c
332
bcm2835_drain_rxfifo(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
339
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR);
drivers/i2c/busses/i2c-bcm2835.c
340
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, BCM2835_I2C_S_CLKT |
drivers/i2c/busses/i2c-bcm2835.c
342
complete(&i2c_dev->completion);
drivers/i2c/busses/i2c-bcm2835.c
350
struct bcm2835_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-bcm2835.c
356
dev_warn_once(i2c_dev->dev,
drivers/i2c/busses/i2c-bcm2835.c
361
i2c_dev->curr_msg = msgs;
drivers/i2c/busses/i2c-bcm2835.c
362
i2c_dev->num_msgs = num;
drivers/i2c/busses/i2c-bcm2835.c
363
reinit_completion(&i2c_dev->completion);
drivers/i2c/busses/i2c-bcm2835.c
365
bcm2835_i2c_start_transfer(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
367
time_left = wait_for_completion_timeout(&i2c_dev->completion,
drivers/i2c/busses/i2c-bcm2835.c
370
bcm2835_i2c_finish_transfer(i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
373
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C,
drivers/i2c/busses/i2c-bcm2835.c
378
if (!i2c_dev->msg_err)
drivers/i2c/busses/i2c-bcm2835.c
381
dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err);
drivers/i2c/busses/i2c-bcm2835.c
383
if (i2c_dev->msg_err & BCM2835_I2C_S_ERR)
drivers/i2c/busses/i2c-bcm2835.c
410
struct bcm2835_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-bcm2835.c
416
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-bcm2835.c
417
if (!i2c_dev)
drivers/i2c/busses/i2c-bcm2835.c
419
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
420
i2c_dev->dev = &pdev->dev;
drivers/i2c/busses/i2c-bcm2835.c
421
init_completion(&i2c_dev->completion);
drivers/i2c/busses/i2c-bcm2835.c
423
i2c_dev->regs = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
drivers/i2c/busses/i2c-bcm2835.c
424
if (IS_ERR(i2c_dev->regs))
drivers/i2c/busses/i2c-bcm2835.c
425
return PTR_ERR(i2c_dev->regs);
drivers/i2c/busses/i2c-bcm2835.c
432
i2c_dev->bus_clk = bcm2835_i2c_register_div(&pdev->dev, mclk, i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
434
if (IS_ERR(i2c_dev->bus_clk))
drivers/i2c/busses/i2c-bcm2835.c
435
return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->bus_clk),
drivers/i2c/busses/i2c-bcm2835.c
446
ret = clk_set_rate_exclusive(i2c_dev->bus_clk, bus_clk_rate);
drivers/i2c/busses/i2c-bcm2835.c
451
ret = clk_prepare_enable(i2c_dev->bus_clk);
drivers/i2c/busses/i2c-bcm2835.c
457
i2c_dev->irq = platform_get_irq(pdev, 0);
drivers/i2c/busses/i2c-bcm2835.c
458
if (i2c_dev->irq < 0) {
drivers/i2c/busses/i2c-bcm2835.c
459
ret = i2c_dev->irq;
drivers/i2c/busses/i2c-bcm2835.c
463
ret = request_irq(i2c_dev->irq, bcm2835_i2c_isr, IRQF_SHARED,
drivers/i2c/busses/i2c-bcm2835.c
464
dev_name(&pdev->dev), i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
470
adap = &i2c_dev->adapter;
drivers/i2c/busses/i2c-bcm2835.c
471
i2c_set_adapdata(adap, i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
486
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_CLKT, 0);
drivers/i2c/busses/i2c-bcm2835.c
487
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, 0);
drivers/i2c/busses/i2c-bcm2835.c
496
free_irq(i2c_dev->irq, i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
498
clk_disable_unprepare(i2c_dev->bus_clk);
drivers/i2c/busses/i2c-bcm2835.c
500
clk_rate_exclusive_put(i2c_dev->bus_clk);
drivers/i2c/busses/i2c-bcm2835.c
507
struct bcm2835_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-bcm2835.c
509
clk_rate_exclusive_put(i2c_dev->bus_clk);
drivers/i2c/busses/i2c-bcm2835.c
510
clk_disable_unprepare(i2c_dev->bus_clk);
drivers/i2c/busses/i2c-bcm2835.c
512
free_irq(i2c_dev->irq, i2c_dev);
drivers/i2c/busses/i2c-bcm2835.c
513
i2c_del_adapter(&i2c_dev->adapter);
drivers/i2c/busses/i2c-bcm2835.c
73
static inline void bcm2835_i2c_writel(struct bcm2835_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-bcm2835.c
76
writel(val, i2c_dev->regs + reg);
drivers/i2c/busses/i2c-bcm2835.c
79
static inline u32 bcm2835_i2c_readl(struct bcm2835_i2c_dev *i2c_dev, u32 reg)
drivers/i2c/busses/i2c-bcm2835.c
81
return readl(i2c_dev->regs + reg);
drivers/i2c/busses/i2c-bcm2835.c
87
struct bcm2835_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-brcmstb.c
712
struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-brcmstb.c
714
i2c_mark_adapter_suspended(&i2c_dev->adapter);
drivers/i2c/busses/i2c-brcmstb.c
720
struct brcmstb_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-brcmstb.c
722
brcmstb_i2c_set_bsc_reg_defaults(i2c_dev);
drivers/i2c/busses/i2c-brcmstb.c
723
i2c_mark_adapter_resumed(&i2c_dev->adapter);
drivers/i2c/busses/i2c-davinci.c
143
static inline void davinci_i2c_write_reg(struct davinci_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-davinci.c
146
writew_relaxed(val, i2c_dev->base + reg);
drivers/i2c/busses/i2c-davinci.c
149
static inline u16 davinci_i2c_read_reg(struct davinci_i2c_dev *i2c_dev, int reg)
drivers/i2c/busses/i2c-davinci.c
151
return readw_relaxed(i2c_dev->base + reg);
drivers/i2c/busses/i2c-davinci.c
154
static inline void davinci_i2c_reset_ctrl(struct davinci_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-davinci.c
159
w = davinci_i2c_read_reg(i2c_dev, DAVINCI_I2C_MDR_REG);
drivers/i2c/busses/i2c-davinci.c
165
davinci_i2c_write_reg(i2c_dev, DAVINCI_I2C_MDR_REG, w);
drivers/i2c/busses/i2c-davinci.c
860
struct davinci_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-davinci.c
863
davinci_i2c_reset_ctrl(i2c_dev, 0);
drivers/i2c/busses/i2c-davinci.c
870
struct davinci_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-davinci.c
873
davinci_i2c_reset_ctrl(i2c_dev, 1);
drivers/i2c/busses/i2c-designware-amdisp.c
19
static void amd_isp_dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-designware-amdisp.c
21
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-designware-amdisp.c
24
static inline u32 amd_isp_dw_i2c_get_clk_rate(struct dw_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-owl.c
121
static void owl_i2c_reset(struct owl_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-owl.c
123
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL,
drivers/i2c/busses/i2c-owl.c
126
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL,
drivers/i2c/busses/i2c-owl.c
130
writel(0, i2c_dev->base + OWL_I2C_REG_STAT);
drivers/i2c/busses/i2c-owl.c
133
static int owl_i2c_reset_fifo(struct owl_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-owl.c
138
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_FIFOCTL,
drivers/i2c/busses/i2c-owl.c
144
val = readl(i2c_dev->base + OWL_I2C_REG_FIFOCTL);
drivers/i2c/busses/i2c-owl.c
151
dev_err(&i2c_dev->adap.dev, "FIFO reset timeout\n");
drivers/i2c/busses/i2c-owl.c
158
static void owl_i2c_set_freq(struct owl_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-owl.c
162
val = DIV_ROUND_UP(i2c_dev->clk_rate, i2c_dev->bus_freq * 16);
drivers/i2c/busses/i2c-owl.c
165
writel(OWL_I2C_DIV_FACTOR(val), i2c_dev->base + OWL_I2C_REG_CLKDIV);
drivers/i2c/busses/i2c-owl.c
168
static void owl_i2c_xfer_data(struct owl_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-owl.c
170
struct i2c_msg *msg = i2c_dev->msg;
drivers/i2c/busses/i2c-owl.c
173
i2c_dev->err = 0;
drivers/i2c/busses/i2c-owl.c
176
fifostat = readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT);
drivers/i2c/busses/i2c-owl.c
178
i2c_dev->err = -ENXIO;
drivers/i2c/busses/i2c-owl.c
180
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_FIFOSTAT,
drivers/i2c/busses/i2c-owl.c
186
stat = readl(i2c_dev->base + OWL_I2C_REG_STAT);
drivers/i2c/busses/i2c-owl.c
188
i2c_dev->err = -EIO;
drivers/i2c/busses/i2c-owl.c
190
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_STAT,
drivers/i2c/busses/i2c-owl.c
197
while ((readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT) &
drivers/i2c/busses/i2c-owl.c
198
OWL_I2C_FIFOSTAT_RFE) && i2c_dev->msg_ptr < msg->len) {
drivers/i2c/busses/i2c-owl.c
199
msg->buf[i2c_dev->msg_ptr++] = readl(i2c_dev->base +
drivers/i2c/busses/i2c-owl.c
204
while (!(readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT) &
drivers/i2c/busses/i2c-owl.c
205
OWL_I2C_FIFOSTAT_TFF) && i2c_dev->msg_ptr < msg->len) {
drivers/i2c/busses/i2c-owl.c
206
writel(msg->buf[i2c_dev->msg_ptr++],
drivers/i2c/busses/i2c-owl.c
207
i2c_dev->base + OWL_I2C_REG_TXDAT);
drivers/i2c/busses/i2c-owl.c
214
struct owl_i2c_dev *i2c_dev = _dev;
drivers/i2c/busses/i2c-owl.c
216
spin_lock(&i2c_dev->lock);
drivers/i2c/busses/i2c-owl.c
218
owl_i2c_xfer_data(i2c_dev);
drivers/i2c/busses/i2c-owl.c
221
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_STAT,
drivers/i2c/busses/i2c-owl.c
224
complete_all(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-owl.c
225
spin_unlock(&i2c_dev->lock);
drivers/i2c/busses/i2c-owl.c
237
struct owl_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-owl.c
242
while (readl(i2c_dev->base + OWL_I2C_REG_STAT) & OWL_I2C_STAT_BBB) {
drivers/i2c/busses/i2c-owl.c
255
struct owl_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-owl.c
262
spin_lock_irqsave(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
265
owl_i2c_reset(i2c_dev);
drivers/i2c/busses/i2c-owl.c
268
owl_i2c_set_freq(i2c_dev);
drivers/i2c/busses/i2c-owl.c
274
spin_unlock_irqrestore(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
277
ret = owl_i2c_reset_fifo(i2c_dev);
drivers/i2c/busses/i2c-owl.c
286
spin_lock_irqsave(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
289
val = readl(i2c_dev->base + OWL_I2C_REG_STAT);
drivers/i2c/busses/i2c-owl.c
292
writel(val, i2c_dev->base + OWL_I2C_REG_STAT);
drivers/i2c/busses/i2c-owl.c
298
reinit_completion(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-owl.c
301
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL,
drivers/i2c/busses/i2c-owl.c
319
writel(addr, i2c_dev->base + OWL_I2C_REG_TXDAT);
drivers/i2c/busses/i2c-owl.c
324
i2c_dev->base + OWL_I2C_REG_TXDAT);
drivers/i2c/busses/i2c-owl.c
333
i2c_dev->msg = msg;
drivers/i2c/busses/i2c-owl.c
334
i2c_dev->msg_ptr = 0;
drivers/i2c/busses/i2c-owl.c
337
writel(msg->len, i2c_dev->base + OWL_I2C_REG_DATCNT);
drivers/i2c/busses/i2c-owl.c
340
writel(addr, i2c_dev->base + OWL_I2C_REG_TXDAT);
drivers/i2c/busses/i2c-owl.c
346
if (readl(i2c_dev->base + OWL_I2C_REG_FIFOSTAT) &
drivers/i2c/busses/i2c-owl.c
351
i2c_dev->base + OWL_I2C_REG_TXDAT);
drivers/i2c/busses/i2c-owl.c
354
i2c_dev->msg_ptr = idx;
drivers/i2c/busses/i2c-owl.c
359
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_FIFOCTL,
drivers/i2c/busses/i2c-owl.c
362
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_FIFOCTL,
drivers/i2c/busses/i2c-owl.c
366
writel(i2c_cmd, i2c_dev->base + OWL_I2C_REG_CMD);
drivers/i2c/busses/i2c-owl.c
368
spin_unlock_irqrestore(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
372
ret = readl_poll_timeout_atomic(i2c_dev->base + OWL_I2C_REG_FIFOSTAT,
drivers/i2c/busses/i2c-owl.c
377
time_left = wait_for_completion_timeout(&i2c_dev->msg_complete,
drivers/i2c/busses/i2c-owl.c
383
spin_lock_irqsave(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
388
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL,
drivers/i2c/busses/i2c-owl.c
395
owl_i2c_xfer_data(i2c_dev);
drivers/i2c/busses/i2c-owl.c
397
ret = i2c_dev->err < 0 ? i2c_dev->err : num;
drivers/i2c/busses/i2c-owl.c
400
spin_unlock_irqrestore(&i2c_dev->lock, flags);
drivers/i2c/busses/i2c-owl.c
404
owl_i2c_update_reg(i2c_dev->base + OWL_I2C_REG_CTL,
drivers/i2c/busses/i2c-owl.c
439
struct owl_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-owl.c
442
i2c_dev = devm_kzalloc(dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-owl.c
443
if (!i2c_dev)
drivers/i2c/busses/i2c-owl.c
446
i2c_dev->base = devm_platform_ioremap_resource(pdev, 0);
drivers/i2c/busses/i2c-owl.c
447
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-owl.c
448
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-owl.c
455
&i2c_dev->bus_freq))
drivers/i2c/busses/i2c-owl.c
456
i2c_dev->bus_freq = I2C_MAX_STANDARD_MODE_FREQ;
drivers/i2c/busses/i2c-owl.c
459
if (i2c_dev->bus_freq != I2C_MAX_STANDARD_MODE_FREQ &&
drivers/i2c/busses/i2c-owl.c
460
i2c_dev->bus_freq != I2C_MAX_FAST_MODE_FREQ) {
drivers/i2c/busses/i2c-owl.c
461
dev_err(dev, "invalid clock-frequency %d\n", i2c_dev->bus_freq);
drivers/i2c/busses/i2c-owl.c
465
i2c_dev->clk = devm_clk_get_enabled(dev, NULL);
drivers/i2c/busses/i2c-owl.c
466
if (IS_ERR(i2c_dev->clk)) {
drivers/i2c/busses/i2c-owl.c
468
return PTR_ERR(i2c_dev->clk);
drivers/i2c/busses/i2c-owl.c
471
i2c_dev->clk_rate = clk_get_rate(i2c_dev->clk);
drivers/i2c/busses/i2c-owl.c
472
if (!i2c_dev->clk_rate) {
drivers/i2c/busses/i2c-owl.c
477
init_completion(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-owl.c
478
spin_lock_init(&i2c_dev->lock);
drivers/i2c/busses/i2c-owl.c
479
i2c_dev->adap.owner = THIS_MODULE;
drivers/i2c/busses/i2c-owl.c
480
i2c_dev->adap.algo = &owl_i2c_algorithm;
drivers/i2c/busses/i2c-owl.c
481
i2c_dev->adap.timeout = OWL_I2C_TIMEOUT;
drivers/i2c/busses/i2c-owl.c
482
i2c_dev->adap.quirks = &owl_i2c_quirks;
drivers/i2c/busses/i2c-owl.c
483
i2c_dev->adap.dev.parent = dev;
drivers/i2c/busses/i2c-owl.c
484
i2c_dev->adap.dev.of_node = dev->of_node;
drivers/i2c/busses/i2c-owl.c
485
snprintf(i2c_dev->adap.name, sizeof(i2c_dev->adap.name),
drivers/i2c/busses/i2c-owl.c
487
i2c_set_adapdata(&i2c_dev->adap, i2c_dev);
drivers/i2c/busses/i2c-owl.c
489
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-owl.c
492
i2c_dev);
drivers/i2c/busses/i2c-owl.c
498
return i2c_add_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-sprd.c
100
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
103
writel(tmp & ~STP_EN, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
105
writel(tmp | STP_EN, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
108
static void sprd_i2c_clear_start(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
110
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
112
writel(tmp & ~I2C_START, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
115
static void sprd_i2c_clear_ack(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
117
u32 tmp = readl(i2c_dev->base + I2C_STATUS);
drivers/i2c/busses/i2c-sprd.c
119
writel(tmp & ~I2C_RX_ACK, i2c_dev->base + I2C_STATUS);
drivers/i2c/busses/i2c-sprd.c
122
static void sprd_i2c_clear_irq(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
124
u32 tmp = readl(i2c_dev->base + I2C_STATUS);
drivers/i2c/busses/i2c-sprd.c
126
writel(tmp & ~I2C_INT, i2c_dev->base + I2C_STATUS);
drivers/i2c/busses/i2c-sprd.c
129
static void sprd_i2c_reset_fifo(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
131
writel(I2C_RST, i2c_dev->base + ADDR_RST);
drivers/i2c/busses/i2c-sprd.c
134
static void sprd_i2c_set_devaddr(struct sprd_i2c *i2c_dev, struct i2c_msg *m)
drivers/i2c/busses/i2c-sprd.c
136
writel(m->addr << 1, i2c_dev->base + I2C_ADDR_CFG);
drivers/i2c/busses/i2c-sprd.c
139
static void sprd_i2c_write_bytes(struct sprd_i2c *i2c_dev, u8 *buf, u32 len)
drivers/i2c/busses/i2c-sprd.c
144
writeb(buf[i], i2c_dev->base + I2C_TX);
drivers/i2c/busses/i2c-sprd.c
147
static void sprd_i2c_read_bytes(struct sprd_i2c *i2c_dev, u8 *buf, u32 len)
drivers/i2c/busses/i2c-sprd.c
152
buf[i] = readb(i2c_dev->base + I2C_RX);
drivers/i2c/busses/i2c-sprd.c
155
static void sprd_i2c_set_full_thld(struct sprd_i2c *i2c_dev, u32 full_thld)
drivers/i2c/busses/i2c-sprd.c
157
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
161
writel(tmp, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
164
static void sprd_i2c_set_empty_thld(struct sprd_i2c *i2c_dev, u32 empty_thld)
drivers/i2c/busses/i2c-sprd.c
166
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
170
writel(tmp, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
173
static void sprd_i2c_set_fifo_full_int(struct sprd_i2c *i2c_dev, int enable)
drivers/i2c/busses/i2c-sprd.c
175
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
182
writel(tmp, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
185
static void sprd_i2c_set_fifo_empty_int(struct sprd_i2c *i2c_dev, int enable)
drivers/i2c/busses/i2c-sprd.c
187
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
194
writel(tmp, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
197
static void sprd_i2c_opt_start(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
199
u32 tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
201
writel(tmp | I2C_START, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
204
static void sprd_i2c_opt_mode(struct sprd_i2c *i2c_dev, int rw)
drivers/i2c/busses/i2c-sprd.c
206
u32 cmd = readl(i2c_dev->base + I2C_CTL) & ~I2C_MODE;
drivers/i2c/busses/i2c-sprd.c
208
writel(cmd | rw << 3, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
211
static void sprd_i2c_data_transfer(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
213
u32 i2c_count = i2c_dev->count;
drivers/i2c/busses/i2c-sprd.c
215
struct i2c_msg *msg = i2c_dev->msg;
drivers/i2c/busses/i2c-sprd.c
218
sprd_i2c_read_bytes(i2c_dev, i2c_dev->buf, I2C_FIFO_FULL_THLD);
drivers/i2c/busses/i2c-sprd.c
219
i2c_dev->count -= I2C_FIFO_FULL_THLD;
drivers/i2c/busses/i2c-sprd.c
220
i2c_dev->buf += I2C_FIFO_FULL_THLD;
drivers/i2c/busses/i2c-sprd.c
227
if (i2c_dev->count >= I2C_FIFO_FULL_THLD)
drivers/i2c/busses/i2c-sprd.c
228
sprd_i2c_set_fifo_full_int(i2c_dev, 1);
drivers/i2c/busses/i2c-sprd.c
230
sprd_i2c_write_bytes(i2c_dev, i2c_dev->buf, need_tran);
drivers/i2c/busses/i2c-sprd.c
231
i2c_dev->buf += need_tran;
drivers/i2c/busses/i2c-sprd.c
232
i2c_dev->count -= need_tran;
drivers/i2c/busses/i2c-sprd.c
240
sprd_i2c_set_fifo_empty_int(i2c_dev, 1);
drivers/i2c/busses/i2c-sprd.c
247
struct sprd_i2c *i2c_dev = i2c_adap->algo_data;
drivers/i2c/busses/i2c-sprd.c
250
i2c_dev->msg = msg;
drivers/i2c/busses/i2c-sprd.c
251
i2c_dev->buf = msg->buf;
drivers/i2c/busses/i2c-sprd.c
252
i2c_dev->count = msg->len;
drivers/i2c/busses/i2c-sprd.c
254
reinit_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-sprd.c
255
sprd_i2c_reset_fifo(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
256
sprd_i2c_set_devaddr(i2c_dev, msg);
drivers/i2c/busses/i2c-sprd.c
257
sprd_i2c_set_count(i2c_dev, msg->len);
drivers/i2c/busses/i2c-sprd.c
260
sprd_i2c_opt_mode(i2c_dev, 1);
drivers/i2c/busses/i2c-sprd.c
261
sprd_i2c_send_stop(i2c_dev, 1);
drivers/i2c/busses/i2c-sprd.c
263
sprd_i2c_opt_mode(i2c_dev, 0);
drivers/i2c/busses/i2c-sprd.c
264
sprd_i2c_send_stop(i2c_dev, !!is_last_msg);
drivers/i2c/busses/i2c-sprd.c
272
sprd_i2c_set_fifo_full_int(i2c_dev, 1);
drivers/i2c/busses/i2c-sprd.c
274
sprd_i2c_data_transfer(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
276
sprd_i2c_opt_start(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
278
time_left = wait_for_completion_timeout(&i2c_dev->complete,
drivers/i2c/busses/i2c-sprd.c
283
return i2c_dev->err;
drivers/i2c/busses/i2c-sprd.c
289
struct sprd_i2c *i2c_dev = i2c_adap->algo_data;
drivers/i2c/busses/i2c-sprd.c
292
ret = pm_runtime_resume_and_get(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
305
pm_runtime_put_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
320
static void sprd_i2c_set_clk(struct sprd_i2c *i2c_dev, u32 freq)
drivers/i2c/busses/i2c-sprd.c
322
u32 apb_clk = i2c_dev->src_clk;
drivers/i2c/busses/i2c-sprd.c
340
writel(div0, i2c_dev->base + ADDR_DVD0);
drivers/i2c/busses/i2c-sprd.c
341
writel(div1, i2c_dev->base + ADDR_DVD1);
drivers/i2c/busses/i2c-sprd.c
345
writel((6 * apb_clk) / 10000000, i2c_dev->base + ADDR_STA0_DVD);
drivers/i2c/busses/i2c-sprd.c
347
writel((4 * apb_clk) / 1000000, i2c_dev->base + ADDR_STA0_DVD);
drivers/i2c/busses/i2c-sprd.c
350
static void sprd_i2c_enable(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
354
writel(tmp, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
356
sprd_i2c_set_full_thld(i2c_dev, I2C_FIFO_FULL_THLD);
drivers/i2c/busses/i2c-sprd.c
357
sprd_i2c_set_empty_thld(i2c_dev, I2C_FIFO_EMPTY_THLD);
drivers/i2c/busses/i2c-sprd.c
359
sprd_i2c_set_clk(i2c_dev, i2c_dev->bus_freq);
drivers/i2c/busses/i2c-sprd.c
360
sprd_i2c_reset_fifo(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
361
sprd_i2c_clear_irq(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
363
tmp = readl(i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
364
writel(tmp | I2C_EN | I2C_INT_EN, i2c_dev->base + I2C_CTL);
drivers/i2c/busses/i2c-sprd.c
369
struct sprd_i2c *i2c_dev = dev_id;
drivers/i2c/busses/i2c-sprd.c
370
struct i2c_msg *msg = i2c_dev->msg;
drivers/i2c/busses/i2c-sprd.c
371
bool ack = !(readl(i2c_dev->base + I2C_STATUS) & I2C_RX_ACK);
drivers/i2c/busses/i2c-sprd.c
375
i2c_tran = i2c_dev->count >= I2C_FIFO_FULL_THLD;
drivers/i2c/busses/i2c-sprd.c
377
i2c_tran = i2c_dev->count;
drivers/i2c/busses/i2c-sprd.c
388
sprd_i2c_data_transfer(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
392
i2c_dev->err = 0;
drivers/i2c/busses/i2c-sprd.c
399
i2c_dev->err = -EIO;
drivers/i2c/busses/i2c-sprd.c
400
else if (msg->flags & I2C_M_RD && i2c_dev->count)
drivers/i2c/busses/i2c-sprd.c
401
sprd_i2c_read_bytes(i2c_dev, i2c_dev->buf, i2c_dev->count);
drivers/i2c/busses/i2c-sprd.c
404
sprd_i2c_clear_ack(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
405
sprd_i2c_clear_start(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
406
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-sprd.c
413
struct sprd_i2c *i2c_dev = dev_id;
drivers/i2c/busses/i2c-sprd.c
414
struct i2c_msg *msg = i2c_dev->msg;
drivers/i2c/busses/i2c-sprd.c
415
bool ack = !(readl(i2c_dev->base + I2C_STATUS) & I2C_RX_ACK);
drivers/i2c/busses/i2c-sprd.c
419
i2c_tran = i2c_dev->count >= I2C_FIFO_FULL_THLD;
drivers/i2c/busses/i2c-sprd.c
421
i2c_tran = i2c_dev->count;
drivers/i2c/busses/i2c-sprd.c
435
sprd_i2c_clear_start(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
436
sprd_i2c_clear_irq(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
439
sprd_i2c_set_fifo_empty_int(i2c_dev, 0);
drivers/i2c/busses/i2c-sprd.c
440
sprd_i2c_set_fifo_full_int(i2c_dev, 0);
drivers/i2c/busses/i2c-sprd.c
445
static int sprd_i2c_clk_init(struct sprd_i2c *i2c_dev)
drivers/i2c/busses/i2c-sprd.c
449
clk_i2c = devm_clk_get(i2c_dev->dev, "i2c");
drivers/i2c/busses/i2c-sprd.c
451
dev_warn(i2c_dev->dev, "i2c%d can't get the i2c clock\n",
drivers/i2c/busses/i2c-sprd.c
452
i2c_dev->adap.nr);
drivers/i2c/busses/i2c-sprd.c
456
clk_parent = devm_clk_get(i2c_dev->dev, "source");
drivers/i2c/busses/i2c-sprd.c
458
dev_warn(i2c_dev->dev, "i2c%d can't get the source clock\n",
drivers/i2c/busses/i2c-sprd.c
459
i2c_dev->adap.nr);
drivers/i2c/busses/i2c-sprd.c
464
i2c_dev->src_clk = clk_get_rate(clk_i2c);
drivers/i2c/busses/i2c-sprd.c
466
i2c_dev->src_clk = 26000000;
drivers/i2c/busses/i2c-sprd.c
468
dev_dbg(i2c_dev->dev, "i2c%d set source clock is %d\n",
drivers/i2c/busses/i2c-sprd.c
469
i2c_dev->adap.nr, i2c_dev->src_clk);
drivers/i2c/busses/i2c-sprd.c
471
i2c_dev->clk = devm_clk_get(i2c_dev->dev, "enable");
drivers/i2c/busses/i2c-sprd.c
472
if (IS_ERR(i2c_dev->clk))
drivers/i2c/busses/i2c-sprd.c
473
return dev_err_probe(i2c_dev->dev, PTR_ERR(i2c_dev->clk),
drivers/i2c/busses/i2c-sprd.c
475
i2c_dev->adap.nr);
drivers/i2c/busses/i2c-sprd.c
483
struct sprd_i2c *i2c_dev;
drivers/i2c/busses/i2c-sprd.c
489
i2c_dev = devm_kzalloc(dev, sizeof(struct sprd_i2c), GFP_KERNEL);
drivers/i2c/busses/i2c-sprd.c
490
if (!i2c_dev)
drivers/i2c/busses/i2c-sprd.c
493
i2c_dev->base = devm_platform_ioremap_resource(pdev, 0);
drivers/i2c/busses/i2c-sprd.c
494
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-sprd.c
495
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-sprd.c
497
i2c_dev->irq = platform_get_irq(pdev, 0);
drivers/i2c/busses/i2c-sprd.c
498
if (i2c_dev->irq < 0)
drivers/i2c/busses/i2c-sprd.c
499
return i2c_dev->irq;
drivers/i2c/busses/i2c-sprd.c
501
i2c_set_adapdata(&i2c_dev->adap, i2c_dev);
drivers/i2c/busses/i2c-sprd.c
502
init_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-sprd.c
503
snprintf(i2c_dev->adap.name, sizeof(i2c_dev->adap.name),
drivers/i2c/busses/i2c-sprd.c
506
i2c_dev->bus_freq = I2C_MAX_STANDARD_MODE_FREQ;
drivers/i2c/busses/i2c-sprd.c
507
i2c_dev->adap.owner = THIS_MODULE;
drivers/i2c/busses/i2c-sprd.c
508
i2c_dev->dev = dev;
drivers/i2c/busses/i2c-sprd.c
509
i2c_dev->adap.retries = 3;
drivers/i2c/busses/i2c-sprd.c
510
i2c_dev->adap.algo = &sprd_i2c_algo;
drivers/i2c/busses/i2c-sprd.c
511
i2c_dev->adap.algo_data = i2c_dev;
drivers/i2c/busses/i2c-sprd.c
512
i2c_dev->adap.dev.parent = dev;
drivers/i2c/busses/i2c-sprd.c
513
i2c_dev->adap.nr = pdev->id;
drivers/i2c/busses/i2c-sprd.c
514
i2c_dev->adap.dev.of_node = dev->of_node;
drivers/i2c/busses/i2c-sprd.c
517
i2c_dev->bus_freq = prop;
drivers/i2c/busses/i2c-sprd.c
520
if (i2c_dev->bus_freq != I2C_MAX_STANDARD_MODE_FREQ &&
drivers/i2c/busses/i2c-sprd.c
521
i2c_dev->bus_freq != I2C_MAX_FAST_MODE_FREQ)
drivers/i2c/busses/i2c-sprd.c
524
ret = sprd_i2c_clk_init(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
528
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-sprd.c
530
ret = clk_prepare_enable(i2c_dev->clk);
drivers/i2c/busses/i2c-sprd.c
534
sprd_i2c_enable(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
536
pm_runtime_set_autosuspend_delay(i2c_dev->dev, SPRD_I2C_PM_TIMEOUT);
drivers/i2c/busses/i2c-sprd.c
537
pm_runtime_use_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
538
pm_runtime_set_active(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
539
pm_runtime_enable(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
541
ret = pm_runtime_get_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
545
ret = devm_request_threaded_irq(dev, i2c_dev->irq,
drivers/i2c/busses/i2c-sprd.c
548
pdev->name, i2c_dev);
drivers/i2c/busses/i2c-sprd.c
550
dev_err_probe(&pdev->dev, ret, "failed to request irq %d\n", i2c_dev->irq);
drivers/i2c/busses/i2c-sprd.c
554
ret = i2c_add_numbered_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-sprd.c
560
pm_runtime_put_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
564
pm_runtime_put_noidle(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
565
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
566
clk_disable_unprepare(i2c_dev->clk);
drivers/i2c/busses/i2c-sprd.c
572
struct sprd_i2c *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-sprd.c
575
ret = pm_runtime_get_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
579
i2c_del_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-sprd.c
582
clk_disable_unprepare(i2c_dev->clk);
drivers/i2c/busses/i2c-sprd.c
584
pm_runtime_put_noidle(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
585
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-sprd.c
590
struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-sprd.c
592
i2c_mark_adapter_suspended(&i2c_dev->adap);
drivers/i2c/busses/i2c-sprd.c
598
struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-sprd.c
600
i2c_mark_adapter_resumed(&i2c_dev->adap);
drivers/i2c/busses/i2c-sprd.c
606
struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-sprd.c
608
clk_disable_unprepare(i2c_dev->clk);
drivers/i2c/busses/i2c-sprd.c
615
struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-sprd.c
618
ret = clk_prepare_enable(i2c_dev->clk);
drivers/i2c/busses/i2c-sprd.c
622
sprd_i2c_enable(i2c_dev);
drivers/i2c/busses/i2c-sprd.c
93
static void sprd_i2c_set_count(struct sprd_i2c *i2c_dev, u32 count)
drivers/i2c/busses/i2c-sprd.c
95
writel(count, i2c_dev->base + I2C_COUNT);
drivers/i2c/busses/i2c-sprd.c
98
static void sprd_i2c_send_stop(struct sprd_i2c *i2c_dev, int stop)
drivers/i2c/busses/i2c-st.c
237
static void st_i2c_flush_rx_fifo(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
246
if (readl_relaxed(i2c_dev->base + SSC_STA) & SSC_STA_RIR)
drivers/i2c/busses/i2c-st.c
249
count = readl_relaxed(i2c_dev->base + SSC_RX_FSTAT) &
drivers/i2c/busses/i2c-st.c
253
readl_relaxed(i2c_dev->base + SSC_RBUF);
drivers/i2c/busses/i2c-st.c
256
static void st_i2c_soft_reset(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
262
st_i2c_flush_rx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
264
st_i2c_set_bits(i2c_dev->base + SSC_CTL, SSC_CTL_SR);
drivers/i2c/busses/i2c-st.c
265
st_i2c_clr_bits(i2c_dev->base + SSC_CTL, SSC_CTL_SR);
drivers/i2c/busses/i2c-st.c
272
static void st_i2c_hw_config(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
276
struct st_i2c_timings *t = &i2c_timings[i2c_dev->mode];
drivers/i2c/busses/i2c-st.c
278
st_i2c_soft_reset(i2c_dev);
drivers/i2c/busses/i2c-st.c
282
writel_relaxed(val, i2c_dev->base + SSC_CLR);
drivers/i2c/busses/i2c-st.c
286
writel_relaxed(val, i2c_dev->base + SSC_CTL);
drivers/i2c/busses/i2c-st.c
288
rate = clk_get_rate(i2c_dev->clk);
drivers/i2c/busses/i2c-st.c
293
writel_relaxed(val, i2c_dev->base + SSC_BRG);
drivers/i2c/busses/i2c-st.c
296
writel_relaxed(1, i2c_dev->base + SSC_PRE_SCALER_BRG);
drivers/i2c/busses/i2c-st.c
299
writel_relaxed(SSC_I2C_I2CM, i2c_dev->base + SSC_I2C);
drivers/i2c/busses/i2c-st.c
303
writel_relaxed(val, i2c_dev->base + SSC_REP_START_HOLD);
drivers/i2c/busses/i2c-st.c
307
writel_relaxed(val, i2c_dev->base + SSC_REP_START_SETUP);
drivers/i2c/busses/i2c-st.c
311
writel_relaxed(val, i2c_dev->base + SSC_START_HOLD);
drivers/i2c/busses/i2c-st.c
315
writel_relaxed(val, i2c_dev->base + SSC_DATA_SETUP);
drivers/i2c/busses/i2c-st.c
319
writel_relaxed(val, i2c_dev->base + SSC_STOP_SETUP);
drivers/i2c/busses/i2c-st.c
323
writel_relaxed(val, i2c_dev->base + SSC_BUS_FREE);
drivers/i2c/busses/i2c-st.c
327
writel_relaxed(val, i2c_dev->base + SSC_PRSCALER);
drivers/i2c/busses/i2c-st.c
328
writel_relaxed(val, i2c_dev->base + SSC_PRSCALER_DATAOUT);
drivers/i2c/busses/i2c-st.c
331
val = i2c_dev->scl_min_width_us * rate / 100000000;
drivers/i2c/busses/i2c-st.c
332
writel_relaxed(val, i2c_dev->base + SSC_NOISE_SUPP_WIDTH);
drivers/i2c/busses/i2c-st.c
335
val = i2c_dev->sda_min_width_us * rate / 100000000;
drivers/i2c/busses/i2c-st.c
336
writel_relaxed(val, i2c_dev->base + SSC_NOISE_SUPP_WIDTH_DATAOUT);
drivers/i2c/busses/i2c-st.c
341
struct st_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-st.c
344
dev_dbg(i2c_dev->dev, "Trying to recover bus\n");
drivers/i2c/busses/i2c-st.c
354
writel_relaxed(0, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
356
st_i2c_hw_config(i2c_dev);
drivers/i2c/busses/i2c-st.c
359
st_i2c_set_bits(i2c_dev->base + SSC_CTL, ctl);
drivers/i2c/busses/i2c-st.c
361
st_i2c_clr_bits(i2c_dev->base + SSC_I2C, SSC_I2C_I2CM);
drivers/i2c/busses/i2c-st.c
364
writel_relaxed(0, i2c_dev->base + SSC_TBUF);
drivers/i2c/busses/i2c-st.c
366
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_I2CM);
drivers/i2c/busses/i2c-st.c
371
static int st_i2c_wait_free_bus(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
377
sta = readl_relaxed(i2c_dev->base + SSC_STA);
drivers/i2c/busses/i2c-st.c
384
dev_err(i2c_dev->dev, "bus not free (status = 0x%08x)\n", sta);
drivers/i2c/busses/i2c-st.c
386
ret = i2c_recover_bus(&i2c_dev->adap);
drivers/i2c/busses/i2c-st.c
388
dev_err(i2c_dev->dev, "Failed to recover the bus (%d)\n", ret);
drivers/i2c/busses/i2c-st.c
400
static inline void st_i2c_write_tx_fifo(struct st_i2c_dev *i2c_dev, u8 byte)
drivers/i2c/busses/i2c-st.c
404
writel_relaxed(tbuf | 1, i2c_dev->base + SSC_TBUF);
drivers/i2c/busses/i2c-st.c
414
static void st_i2c_wr_fill_tx_fifo(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
416
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
420
sta = readl_relaxed(i2c_dev->base + SSC_STA);
drivers/i2c/busses/i2c-st.c
424
tx_fstat = readl_relaxed(i2c_dev->base + SSC_TX_FSTAT);
drivers/i2c/busses/i2c-st.c
429
st_i2c_write_tx_fifo(i2c_dev, *c->buf);
drivers/i2c/busses/i2c-st.c
440
static void st_i2c_rd_fill_tx_fifo(struct st_i2c_dev *i2c_dev, u32 max)
drivers/i2c/busses/i2c-st.c
442
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
446
sta = readl_relaxed(i2c_dev->base + SSC_STA);
drivers/i2c/busses/i2c-st.c
450
tx_fstat = readl_relaxed(i2c_dev->base + SSC_TX_FSTAT);
drivers/i2c/busses/i2c-st.c
455
st_i2c_write_tx_fifo(i2c_dev, 0xff);
drivers/i2c/busses/i2c-st.c
458
static void st_i2c_read_rx_fifo(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
460
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
464
sta = readl_relaxed(i2c_dev->base + SSC_STA);
drivers/i2c/busses/i2c-st.c
468
i = readl_relaxed(i2c_dev->base + SSC_RX_FSTAT);
drivers/i2c/busses/i2c-st.c
473
rbuf = readl_relaxed(i2c_dev->base + SSC_RBUF) >> 1;
drivers/i2c/busses/i2c-st.c
478
dev_err(i2c_dev->dev, "Unexpected %d bytes in rx fifo\n", i);
drivers/i2c/busses/i2c-st.c
479
st_i2c_flush_rx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
487
static void st_i2c_terminate_xfer(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
489
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
491
st_i2c_clr_bits(i2c_dev->base + SSC_IEN, SSC_IEN_TEEN);
drivers/i2c/busses/i2c-st.c
492
st_i2c_clr_bits(i2c_dev->base + SSC_I2C, SSC_I2C_STRTG);
drivers/i2c/busses/i2c-st.c
495
st_i2c_set_bits(i2c_dev->base + SSC_IEN, SSC_IEN_STOPEN);
drivers/i2c/busses/i2c-st.c
496
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_STOPG);
drivers/i2c/busses/i2c-st.c
498
st_i2c_set_bits(i2c_dev->base + SSC_IEN, SSC_IEN_REPSTRTEN);
drivers/i2c/busses/i2c-st.c
499
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_REPSTRTG);
drivers/i2c/busses/i2c-st.c
507
static void st_i2c_handle_write(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
509
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
511
st_i2c_flush_rx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
515
st_i2c_terminate_xfer(i2c_dev);
drivers/i2c/busses/i2c-st.c
517
st_i2c_wr_fill_tx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
524
static void st_i2c_handle_read(struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
526
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
531
readl_relaxed(i2c_dev->base + SSC_RBUF);
drivers/i2c/busses/i2c-st.c
532
st_i2c_clr_bits(i2c_dev->base + SSC_I2C, SSC_I2C_TXENB);
drivers/i2c/busses/i2c-st.c
534
st_i2c_read_rx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
539
st_i2c_terminate_xfer(i2c_dev);
drivers/i2c/busses/i2c-st.c
542
st_i2c_clr_bits(i2c_dev->base + SSC_I2C, SSC_I2C_ACKG);
drivers/i2c/busses/i2c-st.c
546
writel_relaxed(ien, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
548
st_i2c_rd_fill_tx_fifo(i2c_dev, c->count);
drivers/i2c/busses/i2c-st.c
550
st_i2c_rd_fill_tx_fifo(i2c_dev, c->count - 1);
drivers/i2c/busses/i2c-st.c
561
struct st_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-st.c
562
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
566
ien = readl_relaxed(i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
567
sta = readl_relaxed(i2c_dev->base + SSC_STA);
drivers/i2c/busses/i2c-st.c
572
dev_dbg(i2c_dev->dev, "spurious it (sta=0x%04x, ien=0x%04x)\n",
drivers/i2c/busses/i2c-st.c
580
st_i2c_handle_read(i2c_dev);
drivers/i2c/busses/i2c-st.c
582
st_i2c_handle_write(i2c_dev);
drivers/i2c/busses/i2c-st.c
587
writel_relaxed(0, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
588
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-st.c
592
writel_relaxed(SSC_CLR_NACK, i2c_dev->base + SSC_CLR);
drivers/i2c/busses/i2c-st.c
596
st_i2c_handle_read(i2c_dev);
drivers/i2c/busses/i2c-st.c
601
writel_relaxed(it, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
603
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_STOPG);
drivers/i2c/busses/i2c-st.c
608
writel_relaxed(SSC_CLR_SSCARBL, i2c_dev->base + SSC_CLR);
drivers/i2c/busses/i2c-st.c
611
writel_relaxed(it, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
613
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_STOPG);
drivers/i2c/busses/i2c-st.c
618
dev_err(i2c_dev->dev,
drivers/i2c/busses/i2c-st.c
627
readl(i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
639
static int st_i2c_xfer_msg(struct st_i2c_dev *i2c_dev, struct i2c_msg *msg,
drivers/i2c/busses/i2c-st.c
642
struct st_i2c_client *c = &i2c_dev->client;
drivers/i2c/busses/i2c-st.c
654
reinit_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-st.c
657
st_i2c_set_bits(i2c_dev->base + SSC_CTL, ctl);
drivers/i2c/busses/i2c-st.c
662
st_i2c_set_bits(i2c_dev->base + SSC_I2C, i2c);
drivers/i2c/busses/i2c-st.c
665
st_i2c_write_tx_fifo(i2c_dev, c->addr);
drivers/i2c/busses/i2c-st.c
669
st_i2c_wr_fill_tx_fifo(i2c_dev);
drivers/i2c/busses/i2c-st.c
672
writel_relaxed(it, i2c_dev->base + SSC_IEN);
drivers/i2c/busses/i2c-st.c
675
ret = st_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-st.c
679
st_i2c_set_bits(i2c_dev->base + SSC_I2C, SSC_I2C_STRTG);
drivers/i2c/busses/i2c-st.c
682
time_left = wait_for_completion_timeout(&i2c_dev->complete,
drivers/i2c/busses/i2c-st.c
683
i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-st.c
690
st_i2c_clr_bits(i2c_dev->base + SSC_I2C, i2c);
drivers/i2c/busses/i2c-st.c
693
i2c_dev->base + SSC_CLR);
drivers/i2c/busses/i2c-st.c
707
struct st_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-st.c
710
i2c_dev->busy = true;
drivers/i2c/busses/i2c-st.c
712
ret = clk_prepare_enable(i2c_dev->clk);
drivers/i2c/busses/i2c-st.c
714
dev_err(i2c_dev->dev, "Failed to prepare_enable clock\n");
drivers/i2c/busses/i2c-st.c
718
pinctrl_pm_select_default_state(i2c_dev->dev);
drivers/i2c/busses/i2c-st.c
720
st_i2c_hw_config(i2c_dev);
drivers/i2c/busses/i2c-st.c
723
ret = st_i2c_xfer_msg(i2c_dev, &msgs[i], i == 0, i == num - 1);
drivers/i2c/busses/i2c-st.c
725
pinctrl_pm_select_idle_state(i2c_dev->dev);
drivers/i2c/busses/i2c-st.c
727
clk_disable_unprepare(i2c_dev->clk);
drivers/i2c/busses/i2c-st.c
729
i2c_dev->busy = false;
drivers/i2c/busses/i2c-st.c
736
struct st_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-st.c
738
if (i2c_dev->busy)
drivers/i2c/busses/i2c-st.c
772
struct st_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-st.c
777
&i2c_dev->scl_min_width_us);
drivers/i2c/busses/i2c-st.c
779
return dev_err_probe(i2c_dev->dev, ret,
drivers/i2c/busses/i2c-st.c
783
&i2c_dev->sda_min_width_us);
drivers/i2c/busses/i2c-st.c
785
return dev_err_probe(i2c_dev->dev, ret,
drivers/i2c/busses/i2c-st.c
794
struct st_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-st.c
800
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-st.c
801
if (!i2c_dev)
drivers/i2c/busses/i2c-st.c
804
i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
drivers/i2c/busses/i2c-st.c
805
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-st.c
806
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-st.c
808
i2c_dev->irq = irq_of_parse_and_map(np, 0);
drivers/i2c/busses/i2c-st.c
809
if (!i2c_dev->irq)
drivers/i2c/busses/i2c-st.c
812
i2c_dev->clk = of_clk_get_by_name(np, "ssc");
drivers/i2c/busses/i2c-st.c
813
if (IS_ERR(i2c_dev->clk))
drivers/i2c/busses/i2c-st.c
814
return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->clk),
drivers/i2c/busses/i2c-st.c
817
i2c_dev->mode = I2C_MODE_STANDARD;
drivers/i2c/busses/i2c-st.c
820
i2c_dev->mode = I2C_MODE_FAST;
drivers/i2c/busses/i2c-st.c
822
i2c_dev->dev = &pdev->dev;
drivers/i2c/busses/i2c-st.c
824
ret = devm_request_threaded_irq(&pdev->dev, i2c_dev->irq,
drivers/i2c/busses/i2c-st.c
826
IRQF_ONESHOT, pdev->name, i2c_dev);
drivers/i2c/busses/i2c-st.c
829
"Failed to request irq %i\n", i2c_dev->irq);
drivers/i2c/busses/i2c-st.c
831
pinctrl_pm_select_default_state(i2c_dev->dev);
drivers/i2c/busses/i2c-st.c
833
pinctrl_pm_select_idle_state(i2c_dev->dev);
drivers/i2c/busses/i2c-st.c
835
ret = st_i2c_of_get_deglitch(np, i2c_dev);
drivers/i2c/busses/i2c-st.c
839
adap = &i2c_dev->adap;
drivers/i2c/busses/i2c-st.c
840
i2c_set_adapdata(adap, i2c_dev);
drivers/i2c/busses/i2c-st.c
850
init_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-st.c
856
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-st.c
858
dev_info(i2c_dev->dev, "%s initialized\n", adap->name);
drivers/i2c/busses/i2c-st.c
865
struct st_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-st.c
867
i2c_del_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f4.c
144
static void stm32f4_i2c_disable_irq(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
146
void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
drivers/i2c/busses/i2c-stm32f4.c
151
static int stm32f4_i2c_set_periph_clk_freq(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
156
i2c_dev->parent_rate = clk_get_rate(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f4.c
157
freq = DIV_ROUND_UP(i2c_dev->parent_rate, HZ_TO_MHZ);
drivers/i2c/busses/i2c-stm32f4.c
159
if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
drivers/i2c/busses/i2c-stm32f4.c
167
return dev_err_probe(i2c_dev->dev, -EINVAL,
drivers/i2c/busses/i2c-stm32f4.c
177
return dev_err_probe(i2c_dev->dev, -EINVAL,
drivers/i2c/busses/i2c-stm32f4.c
182
writel_relaxed(cr2, i2c_dev->base + STM32F4_I2C_CR2);
drivers/i2c/busses/i2c-stm32f4.c
187
static void stm32f4_i2c_set_rise_time(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
189
u32 freq = DIV_ROUND_UP(i2c_dev->parent_rate, HZ_TO_MHZ);
drivers/i2c/busses/i2c-stm32f4.c
212
if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD)
drivers/i2c/busses/i2c-stm32f4.c
218
i2c_dev->base + STM32F4_I2C_TRISE);
drivers/i2c/busses/i2c-stm32f4.c
221
static void stm32f4_i2c_set_speed_mode(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
226
if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
drivers/i2c/busses/i2c-stm32f4.c
242
val = i2c_dev->parent_rate / (I2C_MAX_STANDARD_MODE_FREQ * 2);
drivers/i2c/busses/i2c-stm32f4.c
262
val = DIV_ROUND_UP(i2c_dev->parent_rate, I2C_MAX_FAST_MODE_FREQ * 3);
drivers/i2c/busses/i2c-stm32f4.c
269
writel_relaxed(ccr, i2c_dev->base + STM32F4_I2C_CCR);
drivers/i2c/busses/i2c-stm32f4.c
276
static int stm32f4_i2c_hw_config(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
280
ret = stm32f4_i2c_set_periph_clk_freq(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
284
stm32f4_i2c_set_rise_time(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
286
stm32f4_i2c_set_speed_mode(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
289
writel_relaxed(STM32F4_I2C_CR1_PE, i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
294
static int stm32f4_i2c_wait_free_bus(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
299
ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F4_I2C_SR2,
drivers/i2c/busses/i2c-stm32f4.c
304
dev_dbg(i2c_dev->dev, "bus not free\n");
drivers/i2c/busses/i2c-stm32f4.c
316
static void stm32f4_i2c_write_byte(struct stm32f4_i2c_dev *i2c_dev, u8 byte)
drivers/i2c/busses/i2c-stm32f4.c
318
writel_relaxed(byte, i2c_dev->base + STM32F4_I2C_DR);
drivers/i2c/busses/i2c-stm32f4.c
327
static void stm32f4_i2c_write_msg(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
329
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
331
stm32f4_i2c_write_byte(i2c_dev, *msg->buf++);
drivers/i2c/busses/i2c-stm32f4.c
335
static void stm32f4_i2c_read_msg(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
337
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
340
rbuf = readl_relaxed(i2c_dev->base + STM32F4_I2C_DR);
drivers/i2c/busses/i2c-stm32f4.c
345
static void stm32f4_i2c_terminate_xfer(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
347
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
350
stm32f4_i2c_disable_irq(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
352
reg = i2c_dev->base + STM32F4_I2C_CR1;
drivers/i2c/busses/i2c-stm32f4.c
358
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
365
static void stm32f4_i2c_handle_write(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
367
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
368
void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
drivers/i2c/busses/i2c-stm32f4.c
371
stm32f4_i2c_write_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
380
stm32f4_i2c_terminate_xfer(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
390
static void stm32f4_i2c_handle_read(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
392
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
393
void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
drivers/i2c/busses/i2c-stm32f4.c
397
stm32f4_i2c_disable_irq(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
398
stm32f4_i2c_read_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
399
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
418
stm32f4_i2c_read_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
430
static void stm32f4_i2c_handle_rx_done(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
432
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
447
reg = i2c_dev->base + STM32F4_I2C_CR1;
drivers/i2c/busses/i2c-stm32f4.c
454
stm32f4_i2c_read_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
456
reg = i2c_dev->base + STM32F4_I2C_CR2;
drivers/i2c/busses/i2c-stm32f4.c
460
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
468
reg = i2c_dev->base + STM32F4_I2C_CR1;
drivers/i2c/busses/i2c-stm32f4.c
470
stm32f4_i2c_read_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
473
stm32f4_i2c_read_msg(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
482
static void stm32f4_i2c_handle_rx_addr(struct stm32f4_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
484
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
489
stm32f4_i2c_terminate_xfer(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
492
readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
drivers/i2c/busses/i2c-stm32f4.c
502
cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
504
writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
506
readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
drivers/i2c/busses/i2c-stm32f4.c
512
writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
522
cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
525
writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
527
readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
drivers/i2c/busses/i2c-stm32f4.c
537
cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
540
writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
drivers/i2c/busses/i2c-stm32f4.c
542
readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
drivers/i2c/busses/i2c-stm32f4.c
554
struct stm32f4_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-stm32f4.c
555
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
559
cr2 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR2);
drivers/i2c/busses/i2c-stm32f4.c
566
status = readl_relaxed(i2c_dev->base + STM32F4_I2C_SR1);
drivers/i2c/busses/i2c-stm32f4.c
569
dev_dbg(i2c_dev->dev,
drivers/i2c/busses/i2c-stm32f4.c
577
stm32f4_i2c_write_byte(i2c_dev, msg->addr);
drivers/i2c/busses/i2c-stm32f4.c
582
stm32f4_i2c_handle_rx_addr(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
584
readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
drivers/i2c/busses/i2c-stm32f4.c
591
writel_relaxed(cr2, i2c_dev->base + STM32F4_I2C_CR2);
drivers/i2c/busses/i2c-stm32f4.c
596
stm32f4_i2c_handle_write(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
600
stm32f4_i2c_handle_read(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
611
stm32f4_i2c_handle_rx_done(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
613
stm32f4_i2c_handle_write(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
626
struct stm32f4_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-stm32f4.c
627
struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
631
status = readl_relaxed(i2c_dev->base + STM32F4_I2C_SR1);
drivers/i2c/busses/i2c-stm32f4.c
636
writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
drivers/i2c/busses/i2c-stm32f4.c
646
reg = i2c_dev->base + STM32F4_I2C_CR1;
drivers/i2c/busses/i2c-stm32f4.c
650
writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
drivers/i2c/busses/i2c-stm32f4.c
657
writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
drivers/i2c/busses/i2c-stm32f4.c
661
stm32f4_i2c_disable_irq(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
662
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
674
static int stm32f4_i2c_xfer_msg(struct stm32f4_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f4.c
678
struct stm32f4_i2c_msg *f4_msg = &i2c_dev->msg;
drivers/i2c/busses/i2c-stm32f4.c
679
void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR1;
drivers/i2c/busses/i2c-stm32f4.c
690
reinit_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
694
stm32f4_i2c_set_bits(i2c_dev->base + STM32F4_I2C_CR2, mask);
drivers/i2c/busses/i2c-stm32f4.c
697
ret = stm32f4_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
705
time_left = wait_for_completion_timeout(&i2c_dev->complete,
drivers/i2c/busses/i2c-stm32f4.c
706
i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-stm32f4.c
724
struct stm32f4_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-stm32f4.c
727
ret = clk_enable(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f4.c
729
dev_err(i2c_dev->dev, "Failed to enable clock\n");
drivers/i2c/busses/i2c-stm32f4.c
734
ret = stm32f4_i2c_xfer_msg(i2c_dev, &msgs[i], i == 0,
drivers/i2c/busses/i2c-stm32f4.c
737
clk_disable(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f4.c
755
struct stm32f4_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-stm32f4.c
762
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-stm32f4.c
763
if (!i2c_dev)
drivers/i2c/busses/i2c-stm32f4.c
766
i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
drivers/i2c/busses/i2c-stm32f4.c
767
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-stm32f4.c
768
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-stm32f4.c
780
i2c_dev->clk = devm_clk_get_enabled(&pdev->dev, NULL);
drivers/i2c/busses/i2c-stm32f4.c
781
if (IS_ERR(i2c_dev->clk))
drivers/i2c/busses/i2c-stm32f4.c
782
return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->clk),
drivers/i2c/busses/i2c-stm32f4.c
794
i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
drivers/i2c/busses/i2c-stm32f4.c
797
i2c_dev->speed = STM32_I2C_SPEED_FAST;
drivers/i2c/busses/i2c-stm32f4.c
799
i2c_dev->dev = &pdev->dev;
drivers/i2c/busses/i2c-stm32f4.c
802
pdev->name, i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
808
pdev->name, i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
813
ret = stm32f4_i2c_hw_config(i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
817
adap = &i2c_dev->adap;
drivers/i2c/busses/i2c-stm32f4.c
818
i2c_set_adapdata(adap, i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
827
init_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f4.c
833
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-stm32f4.c
835
clk_disable(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f4.c
837
dev_info(i2c_dev->dev, "STM32F4 I2C driver registered\n");
drivers/i2c/busses/i2c-stm32f4.c
844
struct stm32f4_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-stm32f4.c
846
i2c_del_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
1103
i2c_dev->use_dma = false;
drivers/i2c/busses/i2c-stm32f7.c
1104
if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
drivers/i2c/busses/i2c-stm32f7.c
1105
ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
drivers/i2c/busses/i2c-stm32f7.c
1109
i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1111
i2c_dev->use_dma = true;
drivers/i2c/busses/i2c-stm32f7.c
1113
dev_warn(i2c_dev->dev, "can't use DMA\n");
drivers/i2c/busses/i2c-stm32f7.c
1116
if (!i2c_dev->use_dma) {
drivers/i2c/busses/i2c-stm32f7.c
1131
i2c_dev->master_mode = true;
drivers/i2c/busses/i2c-stm32f7.c
1140
static void stm32f7_i2c_smbus_rep_start(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1142
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1143
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1195
i2c_dev->use_dma = false;
drivers/i2c/busses/i2c-stm32f7.c
1196
if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN &&
drivers/i2c/busses/i2c-stm32f7.c
1199
ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
drivers/i2c/busses/i2c-stm32f7.c
1203
i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1206
i2c_dev->use_dma = true;
drivers/i2c/busses/i2c-stm32f7.c
1208
dev_warn(i2c_dev->dev, "can't use DMA\n");
drivers/i2c/busses/i2c-stm32f7.c
1211
if (!i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1224
static int stm32f7_i2c_smbus_check_pec(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1226
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1229
internal_pec = readl_relaxed(i2c_dev->base + STM32F7_I2C_PECR);
drivers/i2c/busses/i2c-stm32f7.c
1246
dev_err(i2c_dev->dev, "Unsupported smbus protocol for PEC\n");
drivers/i2c/busses/i2c-stm32f7.c
1251
dev_err(i2c_dev->dev, "Bad PEC 0x%02x vs. 0x%02x\n",
drivers/i2c/busses/i2c-stm32f7.c
1285
static void stm32f7_i2c_slave_start(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1287
struct i2c_client *slave = i2c_dev->slave_running;
drivers/i2c/busses/i2c-stm32f7.c
1288
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1292
if (i2c_dev->slave_dir) {
drivers/i2c/busses/i2c-stm32f7.c
1333
static void stm32f7_i2c_slave_addr(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1335
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1339
isr = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1344
if (stm32f7_i2c_is_addr_match(i2c_dev->slave[i], addcode)) {
drivers/i2c/busses/i2c-stm32f7.c
1345
i2c_dev->slave_running = i2c_dev->slave[i];
drivers/i2c/busses/i2c-stm32f7.c
1346
i2c_dev->slave_dir = dir;
drivers/i2c/busses/i2c-stm32f7.c
1349
stm32f7_i2c_slave_start(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1359
static int stm32f7_i2c_get_slave_id(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
1365
if (i2c_dev->slave[i] == slave) {
drivers/i2c/busses/i2c-stm32f7.c
1371
dev_err(i2c_dev->dev, "Slave 0x%x not registered\n", slave->addr);
drivers/i2c/busses/i2c-stm32f7.c
1376
static int stm32f7_i2c_get_free_slave_id(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
1379
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
1387
if (i2c_dev->smbus_mode && (slave->addr == 0x08)) {
drivers/i2c/busses/i2c-stm32f7.c
1388
if (i2c_dev->slave[STM32F7_SLAVE_HOSTNOTIFY])
drivers/i2c/busses/i2c-stm32f7.c
1398
if (!i2c_dev->slave[i]) {
drivers/i2c/busses/i2c-stm32f7.c
1410
static bool stm32f7_i2c_is_slave_registered(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1415
if (i2c_dev->slave[i])
drivers/i2c/busses/i2c-stm32f7.c
1422
static bool stm32f7_i2c_is_slave_busy(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1428
if (i2c_dev->slave[i])
drivers/i2c/busses/i2c-stm32f7.c
1435
static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev, u32 status)
drivers/i2c/busses/i2c-stm32f7.c
1437
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1444
i2c_slave_event(i2c_dev->slave_running,
drivers/i2c/busses/i2c-stm32f7.c
1458
val = readb_relaxed(i2c_dev->base + STM32F7_I2C_RXDR);
drivers/i2c/busses/i2c-stm32f7.c
1459
ret = i2c_slave_event(i2c_dev->slave_running,
drivers/i2c/busses/i2c-stm32f7.c
1463
cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
1465
writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
1474
dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
drivers/i2c/busses/i2c-stm32f7.c
1481
stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_XFER_IRQ_MASK);
drivers/i2c/busses/i2c-stm32f7.c
1483
if (i2c_dev->slave_dir) {
drivers/i2c/busses/i2c-stm32f7.c
1496
i2c_slave_event(i2c_dev->slave_running, I2C_SLAVE_STOP, &val);
drivers/i2c/busses/i2c-stm32f7.c
1498
i2c_dev->slave_running = NULL;
drivers/i2c/busses/i2c-stm32f7.c
1503
stm32f7_i2c_slave_addr(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1508
static irqreturn_t stm32f7_i2c_handle_isr_errs(struct stm32f7_i2c_dev *i2c_dev, u32 status)
drivers/i2c/busses/i2c-stm32f7.c
1510
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1512
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1513
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
1519
stm32f7_i2c_release_bus(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
1539
i2c_handle_smbus_alert(i2c_dev->alert->ara);
drivers/i2c/busses/i2c-stm32f7.c
1543
if (!i2c_dev->slave_running) {
drivers/i2c/busses/i2c-stm32f7.c
1546
if (stm32f7_i2c_is_slave_registered(i2c_dev))
drivers/i2c/busses/i2c-stm32f7.c
1550
stm32f7_i2c_disable_irq(i2c_dev, mask);
drivers/i2c/busses/i2c-stm32f7.c
1554
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1555
stm32f7_i2c_dma_callback(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1557
i2c_dev->master_mode = false;
drivers/i2c/busses/i2c-stm32f7.c
1558
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f7.c
1567
struct stm32f7_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-stm32f7.c
1570
status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1576
if (!i2c_dev->master_mode ||
drivers/i2c/busses/i2c-stm32f7.c
1577
(i2c_dev->setup.single_it_line && (status & STM32F7_ERR_EVENTS)))
drivers/i2c/busses/i2c-stm32f7.c
1582
stm32f7_i2c_write_tx_data(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1586
stm32f7_i2c_read_rx_data(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1599
struct stm32f7_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-stm32f7.c
1600
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1601
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1605
status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1607
if (!i2c_dev->master_mode)
drivers/i2c/busses/i2c-stm32f7.c
1608
return stm32f7_i2c_slave_isr_event(i2c_dev, status);
drivers/i2c/busses/i2c-stm32f7.c
1611
if (i2c_dev->setup.single_it_line && (status & STM32F7_ERR_EVENTS))
drivers/i2c/busses/i2c-stm32f7.c
1612
return stm32f7_i2c_handle_isr_errs(i2c_dev, status);
drivers/i2c/busses/i2c-stm32f7.c
1616
dev_dbg(i2c_dev->dev, "<%s>: Receive NACK (addr %x)\n",
drivers/i2c/busses/i2c-stm32f7.c
1619
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1620
stm32f7_i2c_dma_callback(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1626
stm32f7_i2c_smbus_reload(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1628
stm32f7_i2c_reload(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1634
if (i2c_dev->use_dma && !f7_msg->result) {
drivers/i2c/busses/i2c-stm32f7.c
1635
ret = wait_for_completion_timeout(&i2c_dev->dma->dma_complete, HZ);
drivers/i2c/busses/i2c-stm32f7.c
1637
dev_dbg(i2c_dev->dev, "<%s>: Timed out\n", __func__);
drivers/i2c/busses/i2c-stm32f7.c
1638
stm32f7_i2c_dma_callback(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1646
stm32f7_i2c_smbus_rep_start(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1648
i2c_dev->msg_id++;
drivers/i2c/busses/i2c-stm32f7.c
1649
i2c_dev->msg++;
drivers/i2c/busses/i2c-stm32f7.c
1650
stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
drivers/i2c/busses/i2c-stm32f7.c
1657
if (stm32f7_i2c_is_slave_registered(i2c_dev))
drivers/i2c/busses/i2c-stm32f7.c
1661
stm32f7_i2c_disable_irq(i2c_dev, mask);
drivers/i2c/busses/i2c-stm32f7.c
1666
i2c_dev->master_mode = false;
drivers/i2c/busses/i2c-stm32f7.c
1667
complete(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f7.c
1675
struct stm32f7_i2c_dev *i2c_dev = data;
drivers/i2c/busses/i2c-stm32f7.c
1678
status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1680
return stm32f7_i2c_handle_isr_errs(i2c_dev, status);
drivers/i2c/busses/i2c-stm32f7.c
1683
static int stm32f7_i2c_wait_polling(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
1685
ktime_t timeout = ktime_add_ms(ktime_get(), i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-stm32f7.c
1689
stm32f7_i2c_isr_event(0, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1691
if (completion_done(&i2c_dev->complete))
drivers/i2c/busses/i2c-stm32f7.c
1701
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-stm32f7.c
1702
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1703
struct stm32_i2c_dma *dma = i2c_dev->dma;
drivers/i2c/busses/i2c-stm32f7.c
1707
i2c_dev->msg = msgs;
drivers/i2c/busses/i2c-stm32f7.c
1708
i2c_dev->msg_num = num;
drivers/i2c/busses/i2c-stm32f7.c
1709
i2c_dev->msg_id = 0;
drivers/i2c/busses/i2c-stm32f7.c
1712
ret = pm_runtime_resume_and_get(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
1716
ret = stm32f7_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1720
reinit_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f7.c
1722
stm32f7_i2c_xfer_msg(i2c_dev, msgs);
drivers/i2c/busses/i2c-stm32f7.c
1724
if (!i2c_dev->atomic)
drivers/i2c/busses/i2c-stm32f7.c
1725
time_left = wait_for_completion_timeout(&i2c_dev->complete,
drivers/i2c/busses/i2c-stm32f7.c
1726
i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-stm32f7.c
1728
time_left = stm32f7_i2c_wait_polling(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1732
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1741
i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1746
dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
drivers/i2c/busses/i2c-stm32f7.c
1747
i2c_dev->msg->addr);
drivers/i2c/busses/i2c-stm32f7.c
1748
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1750
stm32f7_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1755
pm_runtime_put_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
1763
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-stm32f7.c
1765
i2c_dev->atomic = false;
drivers/i2c/busses/i2c-stm32f7.c
1772
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-stm32f7.c
1774
i2c_dev->atomic = true;
drivers/i2c/busses/i2c-stm32f7.c
1783
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adapter);
drivers/i2c/busses/i2c-stm32f7.c
1784
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
1785
struct stm32_i2c_dma *dma = i2c_dev->dma;
drivers/i2c/busses/i2c-stm32f7.c
1786
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
1799
ret = stm32f7_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1803
ret = stm32f7_i2c_smbus_xfer_msg(i2c_dev, flags, command, data);
drivers/i2c/busses/i2c-stm32f7.c
1807
time_left = wait_for_completion_timeout(&i2c_dev->complete,
drivers/i2c/busses/i2c-stm32f7.c
1808
i2c_dev->adap.timeout);
drivers/i2c/busses/i2c-stm32f7.c
1811
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1820
i2c_dev->base + STM32F7_I2C_ISR);
drivers/i2c/busses/i2c-stm32f7.c
1826
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
1828
stm32f7_i2c_wait_free_bus(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1835
ret = stm32f7_i2c_smbus_check_pec(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
1867
static void stm32f7_i2c_enable_wakeup(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
1870
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1873
if (!i2c_dev->wakeup_src)
drivers/i2c/busses/i2c-stm32f7.c
1877
device_set_wakeup_enable(i2c_dev->dev, true);
drivers/i2c/busses/i2c-stm32f7.c
1880
device_set_wakeup_enable(i2c_dev->dev, false);
drivers/i2c/busses/i2c-stm32f7.c
1887
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
drivers/i2c/busses/i2c-stm32f7.c
1888
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1889
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
1898
if (stm32f7_i2c_is_slave_busy(i2c_dev)) {
drivers/i2c/busses/i2c-stm32f7.c
1903
ret = stm32f7_i2c_get_free_slave_id(i2c_dev, slave, &id);
drivers/i2c/busses/i2c-stm32f7.c
1911
if (!stm32f7_i2c_is_slave_registered(i2c_dev))
drivers/i2c/busses/i2c-stm32f7.c
1912
stm32f7_i2c_enable_wakeup(i2c_dev, true);
drivers/i2c/busses/i2c-stm32f7.c
1917
i2c_dev->slave[id] = slave;
drivers/i2c/busses/i2c-stm32f7.c
1922
oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
drivers/i2c/busses/i2c-stm32f7.c
1931
i2c_dev->slave[id] = slave;
drivers/i2c/busses/i2c-stm32f7.c
1932
writel_relaxed(oar1, i2c_dev->base + STM32F7_I2C_OAR1);
drivers/i2c/busses/i2c-stm32f7.c
1937
oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
drivers/i2c/busses/i2c-stm32f7.c
1946
i2c_dev->slave[id] = slave;
drivers/i2c/busses/i2c-stm32f7.c
1947
writel_relaxed(oar2, i2c_dev->base + STM32F7_I2C_OAR2);
drivers/i2c/busses/i2c-stm32f7.c
1966
if (!stm32f7_i2c_is_slave_registered(i2c_dev))
drivers/i2c/busses/i2c-stm32f7.c
1967
stm32f7_i2c_enable_wakeup(i2c_dev, false);
drivers/i2c/busses/i2c-stm32f7.c
1976
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
drivers/i2c/busses/i2c-stm32f7.c
1977
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
1981
ret = stm32f7_i2c_get_slave_id(i2c_dev, slave, &id);
drivers/i2c/busses/i2c-stm32f7.c
1985
WARN_ON(!i2c_dev->slave[id]);
drivers/i2c/busses/i2c-stm32f7.c
1987
ret = pm_runtime_resume_and_get(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
1999
i2c_dev->slave[id] = NULL;
drivers/i2c/busses/i2c-stm32f7.c
2001
if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
drivers/i2c/busses/i2c-stm32f7.c
2002
stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
drivers/i2c/busses/i2c-stm32f7.c
2003
stm32f7_i2c_enable_wakeup(i2c_dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2006
pm_runtime_put_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2011
static int stm32f7_i2c_write_fm_plus_bits(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
2016
if (i2c_dev->bus_rate <= I2C_MAX_FAST_MODE_FREQ ||
drivers/i2c/busses/i2c-stm32f7.c
2017
(!i2c_dev->setup.fmp_cr1_bit && IS_ERR_OR_NULL(i2c_dev->regmap)))
drivers/i2c/busses/i2c-stm32f7.c
2021
if (i2c_dev->setup.fmp_cr1_bit) {
drivers/i2c/busses/i2c-stm32f7.c
2023
stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1, STM32_I2C_CR1_FMP);
drivers/i2c/busses/i2c-stm32f7.c
2025
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, STM32_I2C_CR1_FMP);
drivers/i2c/busses/i2c-stm32f7.c
2027
if (i2c_dev->fmp_sreg == i2c_dev->fmp_creg)
drivers/i2c/busses/i2c-stm32f7.c
2028
ret = regmap_update_bits(i2c_dev->regmap, i2c_dev->fmp_sreg,
drivers/i2c/busses/i2c-stm32f7.c
2029
i2c_dev->fmp_mask, enable ? i2c_dev->fmp_mask : 0);
drivers/i2c/busses/i2c-stm32f7.c
2031
ret = regmap_write(i2c_dev->regmap,
drivers/i2c/busses/i2c-stm32f7.c
2032
enable ? i2c_dev->fmp_sreg : i2c_dev->fmp_creg,
drivers/i2c/busses/i2c-stm32f7.c
2033
i2c_dev->fmp_mask);
drivers/i2c/busses/i2c-stm32f7.c
2040
struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2045
i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp");
drivers/i2c/busses/i2c-stm32f7.c
2046
if (IS_ERR(i2c_dev->regmap))
drivers/i2c/busses/i2c-stm32f7.c
2051
&i2c_dev->fmp_sreg);
drivers/i2c/busses/i2c-stm32f7.c
2055
i2c_dev->fmp_creg = i2c_dev->fmp_sreg +
drivers/i2c/busses/i2c-stm32f7.c
2056
i2c_dev->setup.fmp_clr_offset;
drivers/i2c/busses/i2c-stm32f7.c
2059
&i2c_dev->fmp_mask);
drivers/i2c/busses/i2c-stm32f7.c
2062
static int stm32f7_i2c_enable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2064
struct i2c_adapter *adap = &i2c_dev->adap;
drivers/i2c/busses/i2c-stm32f7.c
2065
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
2072
i2c_dev->host_notify_client = client;
drivers/i2c/busses/i2c-stm32f7.c
2080
static void stm32f7_i2c_disable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2082
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
2084
if (i2c_dev->host_notify_client) {
drivers/i2c/busses/i2c-stm32f7.c
2088
i2c_free_slave_host_notify_device(i2c_dev->host_notify_client);
drivers/i2c/busses/i2c-stm32f7.c
2092
static int stm32f7_i2c_enable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2095
struct i2c_adapter *adap = &i2c_dev->adap;
drivers/i2c/busses/i2c-stm32f7.c
2096
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
2097
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
2107
i2c_dev->alert = alert;
drivers/i2c/busses/i2c-stm32f7.c
2115
static void stm32f7_i2c_disable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2117
struct stm32f7_i2c_alert *alert = i2c_dev->alert;
drivers/i2c/busses/i2c-stm32f7.c
2118
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
2130
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-stm32f7.c
2139
if (i2c_dev->smbus_mode)
drivers/i2c/busses/i2c-stm32f7.c
2156
struct stm32f7_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-stm32f7.c
2164
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-stm32f7.c
2165
if (!i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2171
i2c_dev->setup = *setup;
drivers/i2c/busses/i2c-stm32f7.c
2173
i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
drivers/i2c/busses/i2c-stm32f7.c
2174
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-stm32f7.c
2175
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-stm32f7.c
2182
i2c_dev->wakeup_src = of_property_read_bool(pdev->dev.of_node,
drivers/i2c/busses/i2c-stm32f7.c
2185
i2c_dev->clk = devm_clk_get_enabled(&pdev->dev, NULL);
drivers/i2c/busses/i2c-stm32f7.c
2186
if (IS_ERR(i2c_dev->clk))
drivers/i2c/busses/i2c-stm32f7.c
2187
return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->clk),
drivers/i2c/busses/i2c-stm32f7.c
2199
i2c_dev->dev = &pdev->dev;
drivers/i2c/busses/i2c-stm32f7.c
2205
pdev->name, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2209
if (!i2c_dev->setup.single_it_line) {
drivers/i2c/busses/i2c-stm32f7.c
2218
pdev->name, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2223
ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup);
drivers/i2c/busses/i2c-stm32f7.c
2228
if (i2c_dev->bus_rate > I2C_MAX_FAST_MODE_FREQ) {
drivers/i2c/busses/i2c-stm32f7.c
2229
if (!i2c_dev->setup.fmp_cr1_bit) {
drivers/i2c/busses/i2c-stm32f7.c
2230
ret = stm32f7_i2c_setup_fm_plus_bits(pdev, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2235
ret = stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
drivers/i2c/busses/i2c-stm32f7.c
2240
adap = &i2c_dev->adap;
drivers/i2c/busses/i2c-stm32f7.c
2241
i2c_set_adapdata(adap, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2251
init_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-stm32f7.c
2254
i2c_dev->dma = stm32_i2c_dma_request(i2c_dev->dev, phy_addr,
drivers/i2c/busses/i2c-stm32f7.c
2257
if (IS_ERR(i2c_dev->dma)) {
drivers/i2c/busses/i2c-stm32f7.c
2258
ret = PTR_ERR(i2c_dev->dma);
drivers/i2c/busses/i2c-stm32f7.c
2262
dev_dbg(i2c_dev->dev, "No DMA option: fallback using interrupts\n");
drivers/i2c/busses/i2c-stm32f7.c
2263
i2c_dev->dma = NULL;
drivers/i2c/busses/i2c-stm32f7.c
2266
if (i2c_dev->wakeup_src) {
drivers/i2c/busses/i2c-stm32f7.c
2267
device_set_wakeup_capable(i2c_dev->dev, true);
drivers/i2c/busses/i2c-stm32f7.c
2269
ret = dev_pm_set_wake_irq(i2c_dev->dev, irq_event);
drivers/i2c/busses/i2c-stm32f7.c
2271
dev_err_probe(i2c_dev->dev, ret, "Failed to set wake up irq\n");
drivers/i2c/busses/i2c-stm32f7.c
2276
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2278
pm_runtime_set_autosuspend_delay(i2c_dev->dev,
drivers/i2c/busses/i2c-stm32f7.c
2280
pm_runtime_use_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2281
pm_runtime_set_active(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2282
pm_runtime_enable(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2286
stm32f7_i2c_hw_config(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2288
i2c_dev->smbus_mode = of_property_read_bool(pdev->dev.of_node, "smbus");
drivers/i2c/busses/i2c-stm32f7.c
2294
if (i2c_dev->smbus_mode) {
drivers/i2c/busses/i2c-stm32f7.c
2295
ret = stm32f7_i2c_enable_smbus_host(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2297
dev_err_probe(i2c_dev->dev, ret,
drivers/i2c/busses/i2c-stm32f7.c
2304
ret = stm32f7_i2c_enable_smbus_alert(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2306
dev_err_probe(i2c_dev->dev, ret,
drivers/i2c/busses/i2c-stm32f7.c
2312
dev_info(i2c_dev->dev, "STM32F7 I2C-%d bus adapter\n", adap->nr);
drivers/i2c/busses/i2c-stm32f7.c
2314
pm_runtime_put_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2319
stm32f7_i2c_disable_smbus_host(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2325
pm_runtime_put_noidle(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2326
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2327
pm_runtime_set_suspended(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2328
pm_runtime_dont_use_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2330
if (i2c_dev->wakeup_src)
drivers/i2c/busses/i2c-stm32f7.c
2331
dev_pm_clear_wake_irq(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2334
if (i2c_dev->wakeup_src)
drivers/i2c/busses/i2c-stm32f7.c
2335
device_set_wakeup_capable(i2c_dev->dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2337
if (i2c_dev->dma) {
drivers/i2c/busses/i2c-stm32f7.c
2338
stm32_i2c_dma_free(i2c_dev->dma);
drivers/i2c/busses/i2c-stm32f7.c
2339
i2c_dev->dma = NULL;
drivers/i2c/busses/i2c-stm32f7.c
2343
stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2350
struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-stm32f7.c
2352
stm32f7_i2c_disable_smbus_alert(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2353
stm32f7_i2c_disable_smbus_host(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2355
i2c_del_adapter(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
2356
pm_runtime_get_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2358
if (i2c_dev->wakeup_src) {
drivers/i2c/busses/i2c-stm32f7.c
2359
dev_pm_clear_wake_irq(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2364
device_init_wakeup(i2c_dev->dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2367
pm_runtime_put_noidle(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2368
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2369
pm_runtime_set_suspended(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2370
pm_runtime_dont_use_autosuspend(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2372
if (i2c_dev->dma) {
drivers/i2c/busses/i2c-stm32f7.c
2373
stm32_i2c_dma_free(i2c_dev->dma);
drivers/i2c/busses/i2c-stm32f7.c
2374
i2c_dev->dma = NULL;
drivers/i2c/busses/i2c-stm32f7.c
2377
stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2382
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-stm32f7.c
2384
if (!stm32f7_i2c_is_slave_registered(i2c_dev))
drivers/i2c/busses/i2c-stm32f7.c
2385
clk_disable(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f7.c
2392
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-stm32f7.c
2395
if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
drivers/i2c/busses/i2c-stm32f7.c
2396
ret = clk_enable(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f7.c
2406
static int __maybe_unused stm32f7_i2c_regs_backup(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2409
struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
drivers/i2c/busses/i2c-stm32f7.c
2411
ret = pm_runtime_resume_and_get(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2415
backup_regs->cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
drivers/i2c/busses/i2c-stm32f7.c
2416
backup_regs->cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
2417
backup_regs->oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
drivers/i2c/busses/i2c-stm32f7.c
2418
backup_regs->oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
drivers/i2c/busses/i2c-stm32f7.c
2419
backup_regs->tmgr = readl_relaxed(i2c_dev->base + STM32F7_I2C_TIMINGR);
drivers/i2c/busses/i2c-stm32f7.c
2420
stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
drivers/i2c/busses/i2c-stm32f7.c
2422
pm_runtime_put_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2427
static int __maybe_unused stm32f7_i2c_regs_restore(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
2431
struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
drivers/i2c/busses/i2c-stm32f7.c
2433
ret = pm_runtime_resume_and_get(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2437
cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
drivers/i2c/busses/i2c-stm32f7.c
2439
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
2442
writel_relaxed(backup_regs->tmgr, i2c_dev->base + STM32F7_I2C_TIMINGR);
drivers/i2c/busses/i2c-stm32f7.c
2444
i2c_dev->base + STM32F7_I2C_CR1);
drivers/i2c/busses/i2c-stm32f7.c
2446
stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
2448
writel_relaxed(backup_regs->cr2, i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
2449
writel_relaxed(backup_regs->oar1, i2c_dev->base + STM32F7_I2C_OAR1);
drivers/i2c/busses/i2c-stm32f7.c
2450
writel_relaxed(backup_regs->oar2, i2c_dev->base + STM32F7_I2C_OAR2);
drivers/i2c/busses/i2c-stm32f7.c
2451
stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
drivers/i2c/busses/i2c-stm32f7.c
2453
pm_runtime_put_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-stm32f7.c
2460
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-stm32f7.c
2463
i2c_mark_adapter_suspended(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
2466
ret = stm32f7_i2c_regs_backup(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2468
i2c_mark_adapter_resumed(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
2481
struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-stm32f7.c
2490
ret = stm32f7_i2c_regs_restore(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
2495
i2c_mark_adapter_resumed(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
444
static void stm32f7_i2c_disable_irq(struct stm32f7_i2c_dev *i2c_dev, u32 mask)
drivers/i2c/busses/i2c-stm32f7.c
446
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, mask);
drivers/i2c/busses/i2c-stm32f7.c
461
static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
490
return dev_err_probe(i2c_dev->dev, -EINVAL, "speed out of bound {%d}\n",
drivers/i2c/busses/i2c-stm32f7.c
495
return dev_err_probe(i2c_dev->dev, -EINVAL,
drivers/i2c/busses/i2c-stm32f7.c
500
i2c_dev->dnf = DIV_ROUND_CLOSEST(i2c_dev->dnf_dt, i2cclk);
drivers/i2c/busses/i2c-stm32f7.c
501
if (i2c_dev->dnf > STM32F7_I2C_DNF_MAX)
drivers/i2c/busses/i2c-stm32f7.c
502
return dev_err_probe(i2c_dev->dev, -EINVAL,
drivers/i2c/busses/i2c-stm32f7.c
503
"DNF out of bound %d/%d\n", i2c_dev->dnf * i2cclk,
drivers/i2c/busses/i2c-stm32f7.c
508
(i2c_dev->analog_filter ?
drivers/i2c/busses/i2c-stm32f7.c
511
(i2c_dev->analog_filter ?
drivers/i2c/busses/i2c-stm32f7.c
513
dnf_delay = i2c_dev->dnf * i2cclk;
drivers/i2c/busses/i2c-stm32f7.c
516
af_delay_min - (i2c_dev->dnf + 3) * i2cclk;
drivers/i2c/busses/i2c-stm32f7.c
519
af_delay_max - (i2c_dev->dnf + 4) * i2cclk;
drivers/i2c/busses/i2c-stm32f7.c
528
dev_dbg(i2c_dev->dev, "SDADEL(min/max): %i/%i, SCLDEL(Min): %i\n",
drivers/i2c/busses/i2c-stm32f7.c
569
ret = dev_err_probe(i2c_dev->dev, -EPERM, "no Prescaler solution\n");
drivers/i2c/busses/i2c-stm32f7.c
625
ret = dev_err_probe(i2c_dev->dev, -EPERM, "no solution at all\n");
drivers/i2c/busses/i2c-stm32f7.c
635
dev_dbg(i2c_dev->dev,
drivers/i2c/busses/i2c-stm32f7.c
662
static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
669
t->scl_rise_ns = i2c_dev->setup.rise_time;
drivers/i2c/busses/i2c-stm32f7.c
670
t->scl_fall_ns = i2c_dev->setup.fall_time;
drivers/i2c/busses/i2c-stm32f7.c
672
i2c_parse_fw_timings(i2c_dev->dev, t, false);
drivers/i2c/busses/i2c-stm32f7.c
675
return dev_err_probe(i2c_dev->dev, -EINVAL, "Invalid bus speed (%i>%i)\n",
drivers/i2c/busses/i2c-stm32f7.c
679
i2c_dev->setup.rise_time = t->scl_rise_ns;
drivers/i2c/busses/i2c-stm32f7.c
680
i2c_dev->setup.fall_time = t->scl_fall_ns;
drivers/i2c/busses/i2c-stm32f7.c
681
i2c_dev->dnf_dt = t->digital_filter_width_ns;
drivers/i2c/busses/i2c-stm32f7.c
682
setup->clock_src = clk_get_rate(i2c_dev->clk);
drivers/i2c/busses/i2c-stm32f7.c
685
return dev_err_probe(i2c_dev->dev, -EINVAL, "clock rate is 0\n");
drivers/i2c/busses/i2c-stm32f7.c
687
if (!of_property_read_bool(i2c_dev->dev->of_node, "i2c-digital-filter"))
drivers/i2c/busses/i2c-stm32f7.c
688
i2c_dev->dnf_dt = STM32F7_I2C_DNF_DEFAULT;
drivers/i2c/busses/i2c-stm32f7.c
690
i2c_dev->analog_filter = of_property_read_bool(i2c_dev->dev->of_node,
drivers/i2c/busses/i2c-stm32f7.c
694
ret = stm32f7_i2c_compute_timing(i2c_dev, setup,
drivers/i2c/busses/i2c-stm32f7.c
695
&i2c_dev->timing);
drivers/i2c/busses/i2c-stm32f7.c
697
dev_err_probe(i2c_dev->dev, ret,
drivers/i2c/busses/i2c-stm32f7.c
703
dev_warn(i2c_dev->dev,
drivers/i2c/busses/i2c-stm32f7.c
710
return dev_err_probe(i2c_dev->dev, ret, "Impossible to compute I2C timings.\n");
drivers/i2c/busses/i2c-stm32f7.c
712
dev_dbg(i2c_dev->dev, "I2C Speed(%i), Clk Source(%i)\n",
drivers/i2c/busses/i2c-stm32f7.c
714
dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
drivers/i2c/busses/i2c-stm32f7.c
716
dev_dbg(i2c_dev->dev, "I2C Analog Filter(%s), DNF(%i)\n",
drivers/i2c/busses/i2c-stm32f7.c
717
str_on_off(i2c_dev->analog_filter), i2c_dev->dnf);
drivers/i2c/busses/i2c-stm32f7.c
719
i2c_dev->bus_rate = setup->speed_freq;
drivers/i2c/busses/i2c-stm32f7.c
724
static void stm32f7_i2c_disable_dma_req(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
726
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
734
struct stm32f7_i2c_dev *i2c_dev = arg;
drivers/i2c/busses/i2c-stm32f7.c
735
struct stm32_i2c_dma *dma = i2c_dev->dma;
drivers/i2c/busses/i2c-stm32f7.c
736
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
738
stm32f7_i2c_disable_dma_req(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
740
dma_unmap_single(i2c_dev->dev, dma->dma_buf, dma->dma_len,
drivers/i2c/busses/i2c-stm32f7.c
743
i2c_put_dma_safe_msg_buf(f7_msg->buf, i2c_dev->msg, true);
drivers/i2c/busses/i2c-stm32f7.c
747
static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
749
struct stm32f7_i2c_timings *t = &i2c_dev->timing;
drivers/i2c/busses/i2c-stm32f7.c
758
writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
drivers/i2c/busses/i2c-stm32f7.c
761
if (i2c_dev->analog_filter)
drivers/i2c/busses/i2c-stm32f7.c
762
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
765
stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
769
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
771
stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
772
STM32F7_I2C_CR1_DNF(i2c_dev->dnf));
drivers/i2c/busses/i2c-stm32f7.c
774
stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
778
static void stm32f7_i2c_write_tx_data(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
780
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
781
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
789
static void stm32f7_i2c_read_rx_data(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
791
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
792
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
803
static void stm32f7_i2c_reload(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
805
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
808
if (i2c_dev->use_dma)
drivers/i2c/busses/i2c-stm32f7.c
811
cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
821
writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
824
static void stm32f7_i2c_smbus_reload(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
826
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
834
stm32f7_i2c_read_rx_data(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
841
cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
844
writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
drivers/i2c/busses/i2c-stm32f7.c
849
struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
drivers/i2c/busses/i2c-stm32f7.c
851
stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
drivers/i2c/busses/i2c-stm32f7.c
854
stm32f7_i2c_hw_config(i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
857
static int stm32f7_i2c_wait_free_bus(struct stm32f7_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-stm32f7.c
862
ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F7_I2C_ISR,
drivers/i2c/busses/i2c-stm32f7.c
869
stm32f7_i2c_release_bus(&i2c_dev->adap);
drivers/i2c/busses/i2c-stm32f7.c
874
static void stm32f7_i2c_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
877
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
878
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
887
f7_msg->stop = (i2c_dev->msg_id >= i2c_dev->msg_num - 1);
drivers/i2c/busses/i2c-stm32f7.c
926
i2c_dev->use_dma = false;
drivers/i2c/busses/i2c-stm32f7.c
927
if (i2c_dev->dma && !i2c_dev->atomic) {
drivers/i2c/busses/i2c-stm32f7.c
931
ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
drivers/i2c/busses/i2c-stm32f7.c
935
i2c_dev);
drivers/i2c/busses/i2c-stm32f7.c
937
dev_warn(i2c_dev->dev, "can't use DMA\n");
drivers/i2c/busses/i2c-stm32f7.c
941
i2c_dev->use_dma = true;
drivers/i2c/busses/i2c-stm32f7.c
946
if (!i2c_dev->use_dma) {
drivers/i2c/busses/i2c-stm32f7.c
958
if (i2c_dev->atomic)
drivers/i2c/busses/i2c-stm32f7.c
964
i2c_dev->master_mode = true;
drivers/i2c/busses/i2c-stm32f7.c
971
static int stm32f7_i2c_smbus_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-stm32f7.c
975
struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
drivers/i2c/busses/i2c-stm32f7.c
976
struct device *dev = i2c_dev->dev;
drivers/i2c/busses/i2c-stm32f7.c
977
void __iomem *base = i2c_dev->base;
drivers/i2c/busses/i2c-stm32f7.c
982
reinit_completion(&i2c_dev->complete);
drivers/i2c/busses/i2c-tegra.c
1000
if (!IS_DVC(i2c_dev) && !IS_VI(i2c_dev)) {
drivers/i2c/busses/i2c-tegra.c
1001
u32 sl_cfg = i2c_readl(i2c_dev, i2c_dev->hw->regs->sl_cnfg);
drivers/i2c/busses/i2c-tegra.c
1004
i2c_writel(i2c_dev, sl_cfg, i2c_dev->hw->regs->sl_cnfg);
drivers/i2c/busses/i2c-tegra.c
1005
i2c_writel(i2c_dev, 0xfc, i2c_dev->hw->regs->sl_addr1);
drivers/i2c/busses/i2c-tegra.c
1006
i2c_writel(i2c_dev, 0x00, i2c_dev->hw->regs->sl_addr2);
drivers/i2c/busses/i2c-tegra.c
1009
err = tegra_i2c_flush_fifos(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1013
if (i2c_dev->multimaster_mode && i2c_dev->hw->has_slcg_override_reg)
drivers/i2c/busses/i2c-tegra.c
1014
i2c_writel(i2c_dev, I2C_MST_CORE_CLKEN_OVR, i2c_dev->hw->regs->clken_override);
drivers/i2c/busses/i2c-tegra.c
1016
err = tegra_i2c_wait_for_config_load(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1023
static int tegra_i2c_disable_packet_mode(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
1033
udelay(DIV_ROUND_UP(2 * 1000000, i2c_dev->timings.bus_freq_hz));
drivers/i2c/busses/i2c-tegra.c
1035
cnfg = i2c_readl(i2c_dev, i2c_dev->hw->regs->cnfg);
drivers/i2c/busses/i2c-tegra.c
1037
i2c_writel(i2c_dev, cnfg & ~I2C_CNFG_PACKET_MODE_EN, i2c_dev->hw->regs->cnfg);
drivers/i2c/busses/i2c-tegra.c
1039
return tegra_i2c_wait_for_config_load(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1042
static int tegra_i2c_empty_rx_fifo(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
1044
size_t buf_remaining = i2c_dev->msg_buf_remaining;
drivers/i2c/busses/i2c-tegra.c
1046
u8 *buf = i2c_dev->msg_buf;
drivers/i2c/busses/i2c-tegra.c
1053
if (WARN_ON_ONCE(!(i2c_dev->msg_buf_remaining)))
drivers/i2c/busses/i2c-tegra.c
1056
if (i2c_dev->hw->has_mst_fifo) {
drivers/i2c/busses/i2c-tegra.c
1057
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->mst_fifo_status);
drivers/i2c/busses/i2c-tegra.c
1060
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->fifo_status);
drivers/i2c/busses/i2c-tegra.c
1069
i2c_readsl(i2c_dev, buf, i2c_dev->hw->regs->rx_fifo, words_to_transfer);
drivers/i2c/busses/i2c-tegra.c
1085
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->rx_fifo);
drivers/i2c/busses/i2c-tegra.c
1096
i2c_dev->msg_buf_remaining = buf_remaining;
drivers/i2c/busses/i2c-tegra.c
1097
i2c_dev->msg_buf = buf;
drivers/i2c/busses/i2c-tegra.c
1102
static int tegra_i2c_fill_tx_fifo(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
1104
size_t buf_remaining = i2c_dev->msg_buf_remaining;
drivers/i2c/busses/i2c-tegra.c
1106
u8 *buf = i2c_dev->msg_buf;
drivers/i2c/busses/i2c-tegra.c
1109
if (i2c_dev->hw->has_mst_fifo) {
drivers/i2c/busses/i2c-tegra.c
1110
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->mst_fifo_status);
drivers/i2c/busses/i2c-tegra.c
1113
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->fifo_status);
drivers/i2c/busses/i2c-tegra.c
1140
i2c_dev->msg_buf_remaining = buf_remaining;
drivers/i2c/busses/i2c-tegra.c
1141
i2c_dev->msg_buf = buf + words_to_transfer * BYTES_PER_FIFO_WORD;
drivers/i2c/busses/i2c-tegra.c
1143
if (IS_VI(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
1144
i2c_writesl_vi(i2c_dev, buf, i2c_dev->hw->regs->tx_fifo, words_to_transfer);
drivers/i2c/busses/i2c-tegra.c
1146
i2c_writesl(i2c_dev, buf, i2c_dev->hw->regs->tx_fifo, words_to_transfer);
drivers/i2c/busses/i2c-tegra.c
1165
i2c_dev->msg_buf_remaining = 0;
drivers/i2c/busses/i2c-tegra.c
1166
i2c_dev->msg_buf = NULL;
drivers/i2c/busses/i2c-tegra.c
1168
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->tx_fifo);
drivers/i2c/busses/i2c-tegra.c
1177
struct tegra_i2c_dev *i2c_dev = dev_id;
drivers/i2c/busses/i2c-tegra.c
1180
status = i2c_readl(i2c_dev, i2c_dev->hw->regs->int_status);
drivers/i2c/busses/i2c-tegra.c
1183
dev_warn(i2c_dev->dev, "IRQ status 0 %08x %08x %08x\n",
drivers/i2c/busses/i2c-tegra.c
1184
i2c_readl(i2c_dev, i2c_dev->hw->regs->packet_transfer_status),
drivers/i2c/busses/i2c-tegra.c
1185
i2c_readl(i2c_dev, i2c_dev->hw->regs->status),
drivers/i2c/busses/i2c-tegra.c
1186
i2c_readl(i2c_dev, i2c_dev->hw->regs->cnfg));
drivers/i2c/busses/i2c-tegra.c
1187
i2c_dev->msg_err |= I2C_ERR_UNKNOWN_INTERRUPT;
drivers/i2c/busses/i2c-tegra.c
1192
tegra_i2c_disable_packet_mode(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1194
i2c_dev->msg_err |= I2C_ERR_NO_ACK;
drivers/i2c/busses/i2c-tegra.c
1196
i2c_dev->msg_err |= I2C_ERR_ARBITRATION_LOST;
drivers/i2c/busses/i2c-tegra.c
1204
if (i2c_dev->hw->supports_bus_clear && (status & I2C_INT_BUS_CLR_DONE))
drivers/i2c/busses/i2c-tegra.c
1207
if (!i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1208
if (i2c_dev->msg_read && (status & I2C_INT_RX_FIFO_DATA_REQ)) {
drivers/i2c/busses/i2c-tegra.c
1209
if (tegra_i2c_empty_rx_fifo(i2c_dev)) {
drivers/i2c/busses/i2c-tegra.c
1215
i2c_dev->msg_err |= I2C_ERR_RX_BUFFER_OVERFLOW;
drivers/i2c/busses/i2c-tegra.c
1220
if (!i2c_dev->msg_read && (status & I2C_INT_TX_FIFO_DATA_REQ)) {
drivers/i2c/busses/i2c-tegra.c
1221
if (i2c_dev->msg_buf_remaining)
drivers/i2c/busses/i2c-tegra.c
1222
tegra_i2c_fill_tx_fifo(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1224
tegra_i2c_mask_irq(i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1229
i2c_writel(i2c_dev, status, i2c_dev->hw->regs->int_status);
drivers/i2c/busses/i2c-tegra.c
1230
if (IS_DVC(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
1231
dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS);
drivers/i2c/busses/i2c-tegra.c
1242
if (i2c_dev->dma_mode)
drivers/i2c/busses/i2c-tegra.c
1243
i2c_dev->msg_buf_remaining = 0;
drivers/i2c/busses/i2c-tegra.c
1248
if (WARN_ON_ONCE(i2c_dev->msg_buf_remaining)) {
drivers/i2c/busses/i2c-tegra.c
1249
i2c_dev->msg_err |= I2C_ERR_UNKNOWN_INTERRUPT;
drivers/i2c/busses/i2c-tegra.c
1252
complete(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-tegra.c
1257
tegra_i2c_mask_irq(i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1264
if (i2c_dev->hw->supports_bus_clear)
drivers/i2c/busses/i2c-tegra.c
1265
tegra_i2c_mask_irq(i2c_dev, I2C_INT_BUS_CLR_DONE);
drivers/i2c/busses/i2c-tegra.c
1267
i2c_writel(i2c_dev, status, i2c_dev->hw->regs->int_status);
drivers/i2c/busses/i2c-tegra.c
1269
if (IS_DVC(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
1270
dvc_writel(i2c_dev, DVC_STATUS_I2C_DONE_INTR, DVC_STATUS);
drivers/i2c/busses/i2c-tegra.c
1272
if (i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1273
dmaengine_terminate_async(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
1274
complete(&i2c_dev->dma_complete);
drivers/i2c/busses/i2c-tegra.c
1277
complete(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-tegra.c
1282
static void tegra_i2c_config_fifo_trig(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1289
if (i2c_dev->hw->has_mst_fifo)
drivers/i2c/busses/i2c-tegra.c
1290
reg = i2c_dev->hw->regs->mst_fifo_control;
drivers/i2c/busses/i2c-tegra.c
1292
reg = i2c_dev->hw->regs->fifo_control;
drivers/i2c/busses/i2c-tegra.c
1294
if (i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1302
if (i2c_dev->msg_read) {
drivers/i2c/busses/i2c-tegra.c
1303
reg_offset = i2c_dev->hw->regs->rx_fifo;
drivers/i2c/busses/i2c-tegra.c
1305
slv_config.src_addr = i2c_dev->base_phys + reg_offset;
drivers/i2c/busses/i2c-tegra.c
1309
if (i2c_dev->hw->has_mst_fifo)
drivers/i2c/busses/i2c-tegra.c
1314
reg_offset = i2c_dev->hw->regs->tx_fifo;
drivers/i2c/busses/i2c-tegra.c
1316
slv_config.dst_addr = i2c_dev->base_phys + reg_offset;
drivers/i2c/busses/i2c-tegra.c
1320
if (i2c_dev->hw->has_mst_fifo)
drivers/i2c/busses/i2c-tegra.c
1327
err = dmaengine_slave_config(i2c_dev->dma_chan, &slv_config);
drivers/i2c/busses/i2c-tegra.c
1329
dev_err(i2c_dev->dev, "DMA config failed: %d\n", err);
drivers/i2c/busses/i2c-tegra.c
1330
dev_err(i2c_dev->dev, "falling back to PIO\n");
drivers/i2c/busses/i2c-tegra.c
1332
tegra_i2c_release_dma(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1333
i2c_dev->dma_mode = false;
drivers/i2c/busses/i2c-tegra.c
1339
if (i2c_dev->hw->has_mst_fifo)
drivers/i2c/busses/i2c-tegra.c
1346
i2c_writel(i2c_dev, val, reg);
drivers/i2c/busses/i2c-tegra.c
1349
static unsigned long tegra_i2c_poll_completion(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1357
u32 status = i2c_readl(i2c_dev, i2c_dev->hw->regs->int_status);
drivers/i2c/busses/i2c-tegra.c
1360
tegra_i2c_isr(i2c_dev->irq, i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1375
static unsigned long tegra_i2c_wait_completion(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1381
if (i2c_dev->atomic_mode) {
drivers/i2c/busses/i2c-tegra.c
1382
ret = tegra_i2c_poll_completion(i2c_dev, complete, timeout_ms);
drivers/i2c/busses/i2c-tegra.c
1384
enable_irq(i2c_dev->irq);
drivers/i2c/busses/i2c-tegra.c
1387
disable_irq(i2c_dev->irq);
drivers/i2c/busses/i2c-tegra.c
1400
ret = tegra_i2c_poll_completion(i2c_dev, complete, 0);
drivers/i2c/busses/i2c-tegra.c
1408
struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-tegra.c
1412
reinit_completion(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-tegra.c
1416
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->bus_clear_cnfg);
drivers/i2c/busses/i2c-tegra.c
1418
err = tegra_i2c_wait_for_config_load(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1423
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->bus_clear_cnfg);
drivers/i2c/busses/i2c-tegra.c
1424
tegra_i2c_unmask_irq(i2c_dev, I2C_INT_BUS_CLR_DONE);
drivers/i2c/busses/i2c-tegra.c
1426
time_left = tegra_i2c_wait_completion(i2c_dev, &i2c_dev->msg_complete, 50);
drivers/i2c/busses/i2c-tegra.c
1427
tegra_i2c_mask_irq(i2c_dev, I2C_INT_BUS_CLR_DONE);
drivers/i2c/busses/i2c-tegra.c
1430
dev_err(i2c_dev->dev, "failed to clear bus\n");
drivers/i2c/busses/i2c-tegra.c
1434
val = i2c_readl(i2c_dev, i2c_dev->hw->regs->bus_clear_status);
drivers/i2c/busses/i2c-tegra.c
1436
dev_err(i2c_dev->dev, "un-recovered arbitration lost\n");
drivers/i2c/busses/i2c-tegra.c
1443
static void tegra_i2c_push_packet_header(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1447
u32 *dma_buf = i2c_dev->dma_buf;
drivers/i2c/busses/i2c-tegra.c
1453
FIELD_PREP(PACKET_HEADER0_CONT_ID, i2c_dev->cont_id) |
drivers/i2c/busses/i2c-tegra.c
1456
if (i2c_dev->dma_mode && !i2c_dev->msg_read)
drivers/i2c/busses/i2c-tegra.c
1459
i2c_writel(i2c_dev, packet_header, i2c_dev->hw->regs->tx_fifo);
drivers/i2c/busses/i2c-tegra.c
1461
packet_header = i2c_dev->msg_len - 1;
drivers/i2c/busses/i2c-tegra.c
1463
if (i2c_dev->dma_mode && !i2c_dev->msg_read)
drivers/i2c/busses/i2c-tegra.c
1466
i2c_writel(i2c_dev, packet_header, i2c_dev->hw->regs->tx_fifo);
drivers/i2c/busses/i2c-tegra.c
1488
if (i2c_dev->timings.bus_freq_hz > I2C_MAX_FAST_MODE_PLUS_FREQ)
drivers/i2c/busses/i2c-tegra.c
1491
if (i2c_dev->dma_mode && !i2c_dev->msg_read)
drivers/i2c/busses/i2c-tegra.c
1494
i2c_writel(i2c_dev, packet_header, i2c_dev->hw->regs->tx_fifo);
drivers/i2c/busses/i2c-tegra.c
1497
static int tegra_i2c_error_recover(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1500
if (i2c_dev->msg_err == I2C_ERR_NONE)
drivers/i2c/busses/i2c-tegra.c
1503
tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1506
if (i2c_dev->msg_err == I2C_ERR_ARBITRATION_LOST) {
drivers/i2c/busses/i2c-tegra.c
1507
if (!i2c_dev->multimaster_mode)
drivers/i2c/busses/i2c-tegra.c
1508
return i2c_recover_bus(&i2c_dev->adapter);
drivers/i2c/busses/i2c-tegra.c
1513
if (i2c_dev->msg_err == I2C_ERR_NO_ACK) {
drivers/i2c/busses/i2c-tegra.c
1523
static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1532
err = tegra_i2c_flush_fifos(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1536
i2c_dev->msg_buf = msg->buf;
drivers/i2c/busses/i2c-tegra.c
1537
i2c_dev->msg_len = msg->len;
drivers/i2c/busses/i2c-tegra.c
1539
i2c_dev->msg_err = I2C_ERR_NONE;
drivers/i2c/busses/i2c-tegra.c
1540
i2c_dev->msg_read = !!(msg->flags & I2C_M_RD);
drivers/i2c/busses/i2c-tegra.c
1541
reinit_completion(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-tegra.c
1550
i2c_dev->msg_len = 1;
drivers/i2c/busses/i2c-tegra.c
1552
i2c_dev->msg_buf += 1;
drivers/i2c/busses/i2c-tegra.c
1553
i2c_dev->msg_len -= 1;
drivers/i2c/busses/i2c-tegra.c
1557
i2c_dev->msg_buf_remaining = i2c_dev->msg_len;
drivers/i2c/busses/i2c-tegra.c
1559
if (i2c_dev->msg_read)
drivers/i2c/busses/i2c-tegra.c
1560
xfer_size = i2c_dev->msg_len;
drivers/i2c/busses/i2c-tegra.c
1562
xfer_size = i2c_dev->msg_len + I2C_PACKET_HEADER_SIZE;
drivers/i2c/busses/i2c-tegra.c
1566
i2c_dev->dma_mode = xfer_size > I2C_PIO_MODE_PREFERRED_LEN &&
drivers/i2c/busses/i2c-tegra.c
1567
i2c_dev->dma_buf && !i2c_dev->atomic_mode;
drivers/i2c/busses/i2c-tegra.c
1569
tegra_i2c_config_fifo_trig(i2c_dev, xfer_size);
drivers/i2c/busses/i2c-tegra.c
1576
i2c_dev->timings.bus_freq_hz);
drivers/i2c/busses/i2c-tegra.c
1579
tegra_i2c_unmask_irq(i2c_dev, int_mask);
drivers/i2c/busses/i2c-tegra.c
1581
if (i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1582
if (i2c_dev->msg_read) {
drivers/i2c/busses/i2c-tegra.c
1583
err = tegra_i2c_dma_submit(i2c_dev, xfer_size);
drivers/i2c/busses/i2c-tegra.c
1589
tegra_i2c_push_packet_header(i2c_dev, msg, end_state);
drivers/i2c/busses/i2c-tegra.c
1591
if (!i2c_dev->msg_read) {
drivers/i2c/busses/i2c-tegra.c
1592
if (i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1593
memcpy(i2c_dev->dma_buf + I2C_PACKET_HEADER_SIZE,
drivers/i2c/busses/i2c-tegra.c
1594
msg->buf, i2c_dev->msg_len);
drivers/i2c/busses/i2c-tegra.c
1595
err = tegra_i2c_dma_submit(i2c_dev, xfer_size);
drivers/i2c/busses/i2c-tegra.c
1599
tegra_i2c_fill_tx_fifo(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1603
if (i2c_dev->hw->has_per_pkt_xfer_complete_irq)
drivers/i2c/busses/i2c-tegra.c
1606
if (!i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1609
else if (i2c_dev->msg_buf_remaining)
drivers/i2c/busses/i2c-tegra.c
1613
tegra_i2c_unmask_irq(i2c_dev, int_mask);
drivers/i2c/busses/i2c-tegra.c
1614
dev_dbg(i2c_dev->dev, "unmasked IRQ: %02x\n",
drivers/i2c/busses/i2c-tegra.c
1615
i2c_readl(i2c_dev, i2c_dev->hw->regs->int_mask));
drivers/i2c/busses/i2c-tegra.c
1617
if (i2c_dev->dma_mode) {
drivers/i2c/busses/i2c-tegra.c
1618
time_left = tegra_i2c_wait_completion(i2c_dev,
drivers/i2c/busses/i2c-tegra.c
1619
&i2c_dev->dma_complete,
drivers/i2c/busses/i2c-tegra.c
1627
dmaengine_synchronize(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
1628
dmaengine_terminate_sync(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
1630
if (!time_left && !completion_done(&i2c_dev->dma_complete)) {
drivers/i2c/busses/i2c-tegra.c
1631
tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1635
if (i2c_dev->msg_read && i2c_dev->msg_err == I2C_ERR_NONE)
drivers/i2c/busses/i2c-tegra.c
1636
memcpy(i2c_dev->msg_buf, i2c_dev->dma_buf, i2c_dev->msg_len);
drivers/i2c/busses/i2c-tegra.c
1639
time_left = tegra_i2c_wait_completion(i2c_dev, &i2c_dev->msg_complete,
drivers/i2c/busses/i2c-tegra.c
1642
tegra_i2c_mask_irq(i2c_dev, int_mask);
drivers/i2c/busses/i2c-tegra.c
1645
tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1649
dev_dbg(i2c_dev->dev, "transfer complete: %lu %d %d\n",
drivers/i2c/busses/i2c-tegra.c
1650
time_left, completion_done(&i2c_dev->msg_complete),
drivers/i2c/busses/i2c-tegra.c
1651
i2c_dev->msg_err);
drivers/i2c/busses/i2c-tegra.c
1653
i2c_dev->dma_mode = false;
drivers/i2c/busses/i2c-tegra.c
1655
err = tegra_i2c_error_recover(i2c_dev, msg);
drivers/i2c/busses/i2c-tegra.c
1665
struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-tegra.c
1668
ret = pm_runtime_get_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
1670
dev_err(i2c_dev->dev, "runtime resume failed %d\n", ret);
drivers/i2c/busses/i2c-tegra.c
1671
pm_runtime_put_noidle(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
1675
ret = tegra_i2c_mutex_lock(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1677
pm_runtime_put(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
1693
ret = tegra_i2c_xfer_msg(i2c_dev, &msgs[i], MSG_END_CONTINUE);
drivers/i2c/busses/i2c-tegra.c
1703
dev_dbg(i2c_dev->dev, "reading %d bytes\n", msgs[i].len);
drivers/i2c/busses/i2c-tegra.c
1705
ret = tegra_i2c_xfer_msg(i2c_dev, &msgs[i], end_type);
drivers/i2c/busses/i2c-tegra.c
1710
tegra_i2c_mutex_unlock(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
1711
pm_runtime_put(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
1719
struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-tegra.c
1722
i2c_dev->atomic_mode = true;
drivers/i2c/busses/i2c-tegra.c
1724
i2c_dev->atomic_mode = false;
drivers/i2c/busses/i2c-tegra.c
1731
struct tegra_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
drivers/i2c/busses/i2c-tegra.c
1735
if (i2c_dev->hw->has_continue_xfer_support)
drivers/i2c/busses/i2c-tegra.c
2191
static void tegra_i2c_parse_dt(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
2195
i2c_parse_fw_timings(i2c_dev->dev, &i2c_dev->timings, true);
drivers/i2c/busses/i2c-tegra.c
2197
multi_mode = device_property_read_bool(i2c_dev->dev, "multi-master");
drivers/i2c/busses/i2c-tegra.c
2198
i2c_dev->multimaster_mode = multi_mode;
drivers/i2c/busses/i2c-tegra.c
2199
i2c_dev->is_mctp = device_property_present(i2c_dev->dev, "mctp-controller");
drivers/i2c/busses/i2c-tegra.c
2202
static int tegra_i2c_init_clocks(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
2206
if (ACPI_HANDLE(i2c_dev->dev))
drivers/i2c/busses/i2c-tegra.c
2209
i2c_dev->clocks[i2c_dev->nclocks++].id = "div-clk";
drivers/i2c/busses/i2c-tegra.c
2211
if (i2c_dev->hw == &tegra20_i2c_hw || i2c_dev->hw == &tegra30_i2c_hw)
drivers/i2c/busses/i2c-tegra.c
2212
i2c_dev->clocks[i2c_dev->nclocks++].id = "fast-clk";
drivers/i2c/busses/i2c-tegra.c
2214
if (IS_VI(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
2215
i2c_dev->clocks[i2c_dev->nclocks++].id = "slow";
drivers/i2c/busses/i2c-tegra.c
2217
err = devm_clk_bulk_get(i2c_dev->dev, i2c_dev->nclocks,
drivers/i2c/busses/i2c-tegra.c
2218
i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2222
err = clk_bulk_prepare(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2226
i2c_dev->div_clk = i2c_dev->clocks[0].clk;
drivers/i2c/busses/i2c-tegra.c
2228
if (!i2c_dev->multimaster_mode)
drivers/i2c/busses/i2c-tegra.c
2231
err = clk_enable(i2c_dev->div_clk);
drivers/i2c/busses/i2c-tegra.c
2233
dev_err_probe(i2c_dev->dev, err, "failed to enable div-clk\n");
drivers/i2c/busses/i2c-tegra.c
2240
clk_bulk_unprepare(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2245
static void tegra_i2c_release_clocks(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
2247
if (i2c_dev->multimaster_mode)
drivers/i2c/busses/i2c-tegra.c
2248
clk_disable(i2c_dev->div_clk);
drivers/i2c/busses/i2c-tegra.c
2250
clk_bulk_unprepare(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2253
static int tegra_i2c_init_hardware(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
2257
ret = pm_runtime_get_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2259
dev_err_probe(i2c_dev->dev, ret, "runtime resume failed\n");
drivers/i2c/busses/i2c-tegra.c
2261
ret = tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2263
pm_runtime_put_sync(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2270
struct tegra_i2c_dev *i2c_dev;
drivers/i2c/busses/i2c-tegra.c
2274
i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
drivers/i2c/busses/i2c-tegra.c
2275
if (!i2c_dev)
drivers/i2c/busses/i2c-tegra.c
2278
platform_set_drvdata(pdev, i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2280
init_completion(&i2c_dev->msg_complete);
drivers/i2c/busses/i2c-tegra.c
2281
init_completion(&i2c_dev->dma_complete);
drivers/i2c/busses/i2c-tegra.c
2283
i2c_dev->hw = device_get_match_data(&pdev->dev);
drivers/i2c/busses/i2c-tegra.c
2284
i2c_dev->cont_id = pdev->id;
drivers/i2c/busses/i2c-tegra.c
2285
i2c_dev->dev = &pdev->dev;
drivers/i2c/busses/i2c-tegra.c
2287
i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
drivers/i2c/busses/i2c-tegra.c
2288
if (IS_ERR(i2c_dev->base))
drivers/i2c/busses/i2c-tegra.c
2289
return PTR_ERR(i2c_dev->base);
drivers/i2c/busses/i2c-tegra.c
2291
i2c_dev->base_phys = res->start;
drivers/i2c/busses/i2c-tegra.c
2297
i2c_dev->irq = err;
drivers/i2c/busses/i2c-tegra.c
2300
irq_set_status_flags(i2c_dev->irq, IRQ_NOAUTOEN);
drivers/i2c/busses/i2c-tegra.c
2302
err = devm_request_threaded_irq(i2c_dev->dev, i2c_dev->irq,
drivers/i2c/busses/i2c-tegra.c
2305
dev_name(i2c_dev->dev), i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2309
tegra_i2c_parse_dt(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2311
err = tegra_i2c_init_clocks(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2315
err = tegra_i2c_init_dma(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2331
if (!IS_VI(i2c_dev) && !has_acpi_companion(i2c_dev->dev) && !i2c_dev->dev->pins)
drivers/i2c/busses/i2c-tegra.c
2332
pm_runtime_irq_safe(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2334
pm_runtime_enable(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2336
err = tegra_i2c_init_hardware(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2340
i2c_set_adapdata(&i2c_dev->adapter, i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2341
i2c_dev->adapter.dev.of_node = i2c_dev->dev->of_node;
drivers/i2c/busses/i2c-tegra.c
2342
i2c_dev->adapter.dev.parent = i2c_dev->dev;
drivers/i2c/busses/i2c-tegra.c
2343
i2c_dev->adapter.retries = 1;
drivers/i2c/busses/i2c-tegra.c
2344
i2c_dev->adapter.timeout = 6 * HZ;
drivers/i2c/busses/i2c-tegra.c
2345
i2c_dev->adapter.quirks = i2c_dev->hw->quirks;
drivers/i2c/busses/i2c-tegra.c
2346
i2c_dev->adapter.owner = THIS_MODULE;
drivers/i2c/busses/i2c-tegra.c
2347
i2c_dev->adapter.class = I2C_CLASS_DEPRECATED;
drivers/i2c/busses/i2c-tegra.c
2348
i2c_dev->adapter.algo = &tegra_i2c_algo;
drivers/i2c/busses/i2c-tegra.c
2349
i2c_dev->adapter.nr = pdev->id;
drivers/i2c/busses/i2c-tegra.c
2350
ACPI_COMPANION_SET(&i2c_dev->adapter.dev, ACPI_COMPANION(&pdev->dev));
drivers/i2c/busses/i2c-tegra.c
2352
if (i2c_dev->hw->supports_bus_clear)
drivers/i2c/busses/i2c-tegra.c
2353
i2c_dev->adapter.bus_recovery_info = &tegra_i2c_recovery_info;
drivers/i2c/busses/i2c-tegra.c
2355
strscpy(i2c_dev->adapter.name, dev_name(i2c_dev->dev),
drivers/i2c/busses/i2c-tegra.c
2356
sizeof(i2c_dev->adapter.name));
drivers/i2c/busses/i2c-tegra.c
2358
err = i2c_add_numbered_adapter(&i2c_dev->adapter);
drivers/i2c/busses/i2c-tegra.c
2365
pm_runtime_disable(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2367
tegra_i2c_release_dma(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2369
tegra_i2c_release_clocks(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2376
struct tegra_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
drivers/i2c/busses/i2c-tegra.c
2378
i2c_del_adapter(&i2c_dev->adapter);
drivers/i2c/busses/i2c-tegra.c
2379
pm_runtime_force_suspend(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
2381
tegra_i2c_release_dma(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2382
tegra_i2c_release_clocks(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2387
struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-tegra.c
2394
err = clk_bulk_enable(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2403
if (IS_VI(i2c_dev)) {
drivers/i2c/busses/i2c-tegra.c
2404
err = tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2412
clk_bulk_disable(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2419
struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-tegra.c
2421
clk_bulk_disable(i2c_dev->nclocks, i2c_dev->clocks);
drivers/i2c/busses/i2c-tegra.c
2437
struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-tegra.c
2439
i2c_mark_adapter_suspended(&i2c_dev->adapter);
drivers/i2c/busses/i2c-tegra.c
2450
struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev);
drivers/i2c/busses/i2c-tegra.c
2464
err = tegra_i2c_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
2468
i2c_mark_adapter_resumed(&i2c_dev->adapter);
drivers/i2c/busses/i2c-tegra.c
496
static void dvc_writel(struct tegra_i2c_dev *i2c_dev, u32 val,
drivers/i2c/busses/i2c-tegra.c
499
writel_relaxed(val, i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
502
static u32 dvc_readl(struct tegra_i2c_dev *i2c_dev, unsigned int reg)
drivers/i2c/busses/i2c-tegra.c
504
return readl_relaxed(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
507
static void i2c_writel(struct tegra_i2c_dev *i2c_dev, u32 val, unsigned int reg)
drivers/i2c/busses/i2c-tegra.c
509
writel_relaxed(val, i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
512
if (reg != i2c_dev->hw->regs->tx_fifo)
drivers/i2c/busses/i2c-tegra.c
513
readl_relaxed(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
514
else if (IS_VI(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
515
readl_relaxed(i2c_dev->base + i2c_dev->hw->regs->int_status);
drivers/i2c/busses/i2c-tegra.c
518
static u32 i2c_readl(struct tegra_i2c_dev *i2c_dev, unsigned int reg)
drivers/i2c/busses/i2c-tegra.c
520
return readl_relaxed(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
523
static void i2c_writesl(struct tegra_i2c_dev *i2c_dev, void *data,
drivers/i2c/busses/i2c-tegra.c
526
writesl(i2c_dev->base + reg, data, len);
drivers/i2c/busses/i2c-tegra.c
529
static void i2c_writesl_vi(struct tegra_i2c_dev *i2c_dev, void *data,
drivers/i2c/busses/i2c-tegra.c
541
i2c_writel(i2c_dev, *data32++, reg);
drivers/i2c/busses/i2c-tegra.c
544
static void i2c_readsl(struct tegra_i2c_dev *i2c_dev, void *data,
drivers/i2c/busses/i2c-tegra.c
547
readsl(i2c_dev->base + reg, data, len);
drivers/i2c/busses/i2c-tegra.c
550
static bool tegra_i2c_mutex_acquired(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
552
unsigned int reg = i2c_dev->hw->regs->sw_mutex;
drivers/i2c/busses/i2c-tegra.c
555
val = readl(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
561
static bool tegra_i2c_mutex_trylock(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
563
unsigned int reg = i2c_dev->hw->regs->sw_mutex;
drivers/i2c/busses/i2c-tegra.c
566
val = readl(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
572
writel(val, i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
574
return tegra_i2c_mutex_acquired(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
577
static int tegra_i2c_mutex_lock(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
582
if (!i2c_dev->hw->has_mutex)
drivers/i2c/busses/i2c-tegra.c
585
if (i2c_dev->atomic_mode)
drivers/i2c/busses/i2c-tegra.c
588
false, i2c_dev);
drivers/i2c/busses/i2c-tegra.c
591
I2C_SW_MUTEX_TIMEOUT_US, false, i2c_dev);
drivers/i2c/busses/i2c-tegra.c
594
dev_warn(i2c_dev->dev, "failed to acquire mutex\n");
drivers/i2c/busses/i2c-tegra.c
599
static void tegra_i2c_mutex_unlock(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
601
unsigned int reg = i2c_dev->hw->regs->sw_mutex;
drivers/i2c/busses/i2c-tegra.c
604
if (!i2c_dev->hw->has_mutex)
drivers/i2c/busses/i2c-tegra.c
607
val = readl(i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
614
writel(0, i2c_dev->base + reg);
drivers/i2c/busses/i2c-tegra.c
617
static void tegra_i2c_mask_irq(struct tegra_i2c_dev *i2c_dev, u32 mask)
drivers/i2c/busses/i2c-tegra.c
621
int_mask = i2c_readl(i2c_dev, i2c_dev->hw->regs->int_mask) & ~mask;
drivers/i2c/busses/i2c-tegra.c
622
i2c_writel(i2c_dev, int_mask, i2c_dev->hw->regs->int_mask);
drivers/i2c/busses/i2c-tegra.c
625
static void tegra_i2c_unmask_irq(struct tegra_i2c_dev *i2c_dev, u32 mask)
drivers/i2c/busses/i2c-tegra.c
629
int_mask = i2c_readl(i2c_dev, i2c_dev->hw->regs->int_mask) | mask;
drivers/i2c/busses/i2c-tegra.c
630
i2c_writel(i2c_dev, int_mask, i2c_dev->hw->regs->int_mask);
drivers/i2c/busses/i2c-tegra.c
635
struct tegra_i2c_dev *i2c_dev = args;
drivers/i2c/busses/i2c-tegra.c
637
complete(&i2c_dev->dma_complete);
drivers/i2c/busses/i2c-tegra.c
640
static int tegra_i2c_dma_submit(struct tegra_i2c_dev *i2c_dev, size_t len)
drivers/i2c/busses/i2c-tegra.c
645
dev_dbg(i2c_dev->dev, "starting DMA for length: %zu\n", len);
drivers/i2c/busses/i2c-tegra.c
647
reinit_completion(&i2c_dev->dma_complete);
drivers/i2c/busses/i2c-tegra.c
649
dir = i2c_dev->msg_read ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
drivers/i2c/busses/i2c-tegra.c
651
dma_desc = dmaengine_prep_slave_single(i2c_dev->dma_chan, i2c_dev->dma_phys,
drivers/i2c/busses/i2c-tegra.c
655
dev_err(i2c_dev->dev, "failed to get %s DMA descriptor\n",
drivers/i2c/busses/i2c-tegra.c
656
i2c_dev->msg_read ? "RX" : "TX");
drivers/i2c/busses/i2c-tegra.c
661
dma_desc->callback_param = i2c_dev;
drivers/i2c/busses/i2c-tegra.c
664
dma_async_issue_pending(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
669
static void tegra_i2c_release_dma(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
671
if (i2c_dev->dma_buf) {
drivers/i2c/busses/i2c-tegra.c
672
dma_free_coherent(i2c_dev->dma_dev, i2c_dev->dma_buf_size,
drivers/i2c/busses/i2c-tegra.c
673
i2c_dev->dma_buf, i2c_dev->dma_phys);
drivers/i2c/busses/i2c-tegra.c
674
i2c_dev->dma_buf = NULL;
drivers/i2c/busses/i2c-tegra.c
677
if (i2c_dev->dma_chan) {
drivers/i2c/busses/i2c-tegra.c
678
dma_release_channel(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
679
i2c_dev->dma_chan = NULL;
drivers/i2c/busses/i2c-tegra.c
683
static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
689
if (IS_VI(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
692
if (!of_property_present(i2c_dev->dev->of_node, "dmas")) {
drivers/i2c/busses/i2c-tegra.c
693
dev_dbg(i2c_dev->dev, "DMA not available, falling back to PIO\n");
drivers/i2c/busses/i2c-tegra.c
697
if (i2c_dev->hw->has_apb_dma) {
drivers/i2c/busses/i2c-tegra.c
699
dev_dbg(i2c_dev->dev, "APB DMA support not enabled\n");
drivers/i2c/busses/i2c-tegra.c
703
dev_dbg(i2c_dev->dev, "GPC DMA support not enabled\n");
drivers/i2c/busses/i2c-tegra.c
712
i2c_dev->dma_chan = dma_request_chan(i2c_dev->dev, "tx");
drivers/i2c/busses/i2c-tegra.c
713
if (IS_ERR(i2c_dev->dma_chan)) {
drivers/i2c/busses/i2c-tegra.c
714
err = PTR_ERR(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
715
i2c_dev->dma_chan = NULL;
drivers/i2c/busses/i2c-tegra.c
719
i2c_dev->dma_dev = dmaengine_get_dma_device(i2c_dev->dma_chan);
drivers/i2c/busses/i2c-tegra.c
720
i2c_dev->dma_buf_size = i2c_dev->hw->quirks->max_write_len +
drivers/i2c/busses/i2c-tegra.c
723
dma_buf = dma_alloc_coherent(i2c_dev->dma_dev, i2c_dev->dma_buf_size,
drivers/i2c/busses/i2c-tegra.c
726
err = dev_err_probe(i2c_dev->dev, -ENOMEM,
drivers/i2c/busses/i2c-tegra.c
731
i2c_dev->dma_buf = dma_buf;
drivers/i2c/busses/i2c-tegra.c
732
i2c_dev->dma_phys = dma_phys;
drivers/i2c/busses/i2c-tegra.c
737
tegra_i2c_release_dma(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
739
dev_err(i2c_dev->dev, "cannot use DMA, falling back to PIO\n");
drivers/i2c/busses/i2c-tegra.c
753
static void tegra_dvc_init(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
757
val = dvc_readl(i2c_dev, DVC_CTRL_REG3);
drivers/i2c/busses/i2c-tegra.c
760
dvc_writel(i2c_dev, val, DVC_CTRL_REG3);
drivers/i2c/busses/i2c-tegra.c
762
val = dvc_readl(i2c_dev, DVC_CTRL_REG1);
drivers/i2c/busses/i2c-tegra.c
764
dvc_writel(i2c_dev, val, DVC_CTRL_REG1);
drivers/i2c/busses/i2c-tegra.c
767
static void tegra_i2c_vi_init(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
773
i2c_writel(i2c_dev, value, i2c_dev->hw->regs->interface_timing_0);
drivers/i2c/busses/i2c-tegra.c
779
i2c_writel(i2c_dev, value, i2c_dev->hw->regs->interface_timing_1);
drivers/i2c/busses/i2c-tegra.c
783
i2c_writel(i2c_dev, value, i2c_dev->hw->regs->hs_interface_timing_0);
drivers/i2c/busses/i2c-tegra.c
788
i2c_writel(i2c_dev, value, i2c_dev->hw->regs->hs_interface_timing_1);
drivers/i2c/busses/i2c-tegra.c
791
i2c_writel(i2c_dev, value, i2c_dev->hw->regs->bus_clear_cnfg);
drivers/i2c/busses/i2c-tegra.c
793
i2c_writel(i2c_dev, 0x0, i2c_dev->hw->regs->tlow_sext);
drivers/i2c/busses/i2c-tegra.c
796
static int tegra_i2c_poll_register(struct tegra_i2c_dev *i2c_dev,
drivers/i2c/busses/i2c-tegra.c
800
void __iomem *addr = i2c_dev->base + reg;
drivers/i2c/busses/i2c-tegra.c
803
if (!i2c_dev->atomic_mode)
drivers/i2c/busses/i2c-tegra.c
811
static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
816
if (i2c_dev->hw->has_mst_fifo) {
drivers/i2c/busses/i2c-tegra.c
819
offset = i2c_dev->hw->regs->mst_fifo_control;
drivers/i2c/busses/i2c-tegra.c
823
offset = i2c_dev->hw->regs->fifo_control;
drivers/i2c/busses/i2c-tegra.c
826
val = i2c_readl(i2c_dev, offset);
drivers/i2c/busses/i2c-tegra.c
828
i2c_writel(i2c_dev, val, offset);
drivers/i2c/busses/i2c-tegra.c
830
err = tegra_i2c_poll_register(i2c_dev, offset, mask, 1000, 1000000);
drivers/i2c/busses/i2c-tegra.c
832
dev_err(i2c_dev->dev, "failed to flush FIFO\n");
drivers/i2c/busses/i2c-tegra.c
839
static int tegra_i2c_wait_for_config_load(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
843
if (!i2c_dev->hw->has_config_load_reg)
drivers/i2c/busses/i2c-tegra.c
846
i2c_writel(i2c_dev, I2C_MSTR_CONFIG_LOAD, i2c_dev->hw->regs->config_load);
drivers/i2c/busses/i2c-tegra.c
848
err = tegra_i2c_poll_register(i2c_dev, i2c_dev->hw->regs->config_load, 0xffffffff,
drivers/i2c/busses/i2c-tegra.c
851
dev_err(i2c_dev->dev, "failed to load config\n");
drivers/i2c/busses/i2c-tegra.c
858
static int tegra_i2c_master_reset(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
860
if (!i2c_dev->hw->has_mst_reset)
drivers/i2c/busses/i2c-tegra.c
869
i2c_writel(i2c_dev, 0x1, i2c_dev->hw->regs->master_reset_cntrl);
drivers/i2c/busses/i2c-tegra.c
872
i2c_writel(i2c_dev, 0x0, i2c_dev->hw->regs->master_reset_cntrl);
drivers/i2c/busses/i2c-tegra.c
878
static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
drivers/i2c/busses/i2c-tegra.c
882
struct i2c_timings *t = &i2c_dev->timings;
drivers/i2c/busses/i2c-tegra.c
891
err = device_reset(i2c_dev->dev);
drivers/i2c/busses/i2c-tegra.c
893
err = tegra_i2c_master_reset(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
905
if (IS_DVC(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
906
tegra_dvc_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
911
if (i2c_dev->hw->has_multi_master_mode)
drivers/i2c/busses/i2c-tegra.c
914
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->cnfg);
drivers/i2c/busses/i2c-tegra.c
915
i2c_writel(i2c_dev, 0, i2c_dev->hw->regs->int_mask);
drivers/i2c/busses/i2c-tegra.c
917
if (IS_VI(i2c_dev))
drivers/i2c/busses/i2c-tegra.c
918
tegra_i2c_vi_init(i2c_dev);
drivers/i2c/busses/i2c-tegra.c
921
if (i2c_dev->hw->has_fairarb_reg && !i2c_dev->is_mctp)
drivers/i2c/busses/i2c-tegra.c
922
i2c_writel(i2c_dev, 0, i2c_dev->hw->regs->fairness_arb);
drivers/i2c/busses/i2c-tegra.c
924
if (i2c_dev->hw->enable_hs_mode_support)
drivers/i2c/busses/i2c-tegra.c
933
tlow = i2c_dev->hw->tlow_std_mode;
drivers/i2c/busses/i2c-tegra.c
934
thigh = i2c_dev->hw->thigh_std_mode;
drivers/i2c/busses/i2c-tegra.c
935
tsu_thd = i2c_dev->hw->setup_hold_time_std_mode;
drivers/i2c/busses/i2c-tegra.c
936
non_hs_mode = i2c_dev->hw->clk_divisor_std_mode;
drivers/i2c/busses/i2c-tegra.c
938
tlow = i2c_dev->hw->tlow_fast_mode;
drivers/i2c/busses/i2c-tegra.c
939
thigh = i2c_dev->hw->thigh_fast_mode;
drivers/i2c/busses/i2c-tegra.c
940
tsu_thd = i2c_dev->hw->setup_hold_time_fast_mode;
drivers/i2c/busses/i2c-tegra.c
941
non_hs_mode = i2c_dev->hw->clk_divisor_fast_mode;
drivers/i2c/busses/i2c-tegra.c
943
tlow = i2c_dev->hw->tlow_fastplus_mode;
drivers/i2c/busses/i2c-tegra.c
944
thigh = i2c_dev->hw->thigh_fastplus_mode;
drivers/i2c/busses/i2c-tegra.c
945
tsu_thd = i2c_dev->hw->setup_hold_time_fastplus_mode;
drivers/i2c/busses/i2c-tegra.c
946
non_hs_mode = i2c_dev->hw->clk_divisor_fast_plus_mode;
drivers/i2c/busses/i2c-tegra.c
954
tlow = i2c_dev->hw->tlow_fast_mode;
drivers/i2c/busses/i2c-tegra.c
955
thigh = i2c_dev->hw->thigh_fast_mode;
drivers/i2c/busses/i2c-tegra.c
956
tsu_thd = i2c_dev->hw->setup_hold_time_fast_mode;
drivers/i2c/busses/i2c-tegra.c
957
non_hs_mode = i2c_dev->hw->clk_divisor_fast_mode;
drivers/i2c/busses/i2c-tegra.c
962
i2c_dev->hw->clk_divisor_hs_mode) |
drivers/i2c/busses/i2c-tegra.c
964
i2c_writel(i2c_dev, clk_divisor, i2c_dev->hw->regs->clk_divisor);
drivers/i2c/busses/i2c-tegra.c
966
if (i2c_dev->hw->has_interface_timing_reg) {
drivers/i2c/busses/i2c-tegra.c
969
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->interface_timing_0);
drivers/i2c/busses/i2c-tegra.c
976
if (i2c_dev->hw->has_interface_timing_reg && tsu_thd)
drivers/i2c/busses/i2c-tegra.c
977
i2c_writel(i2c_dev, tsu_thd, i2c_dev->hw->regs->interface_timing_1);
drivers/i2c/busses/i2c-tegra.c
980
if (i2c_dev->hw->enable_hs_mode_support) {
drivers/i2c/busses/i2c-tegra.c
981
tlow = i2c_dev->hw->tlow_hs_mode;
drivers/i2c/busses/i2c-tegra.c
982
thigh = i2c_dev->hw->thigh_hs_mode;
drivers/i2c/busses/i2c-tegra.c
983
tsu_thd = i2c_dev->hw->setup_hold_time_hs_mode;
drivers/i2c/busses/i2c-tegra.c
987
i2c_writel(i2c_dev, val, i2c_dev->hw->regs->hs_interface_timing_0);
drivers/i2c/busses/i2c-tegra.c
988
i2c_writel(i2c_dev, tsu_thd, i2c_dev->hw->regs->hs_interface_timing_1);
drivers/i2c/busses/i2c-tegra.c
993
err = clk_set_rate(i2c_dev->div_clk,
drivers/i2c/busses/i2c-tegra.c
996
dev_err(i2c_dev->dev, "failed to set div-clk rate: %d\n", err);
drivers/i2c/i2c-core-base.c
697
ATTRIBUTE_GROUPS(i2c_dev);
drivers/i2c/i2c-dev.c
101
struct i2c_dev *i2c_dev = i2c_dev_get_by_minor(MINOR(dev->devt));
drivers/i2c/i2c-dev.c
103
if (!i2c_dev)
drivers/i2c/i2c-dev.c
105
return sysfs_emit(buf, "%s\n", i2c_dev->adap->name);
drivers/i2c/i2c-dev.c
53
static struct i2c_dev *i2c_dev_get_by_minor(unsigned index)
drivers/i2c/i2c-dev.c
55
struct i2c_dev *i2c_dev;
drivers/i2c/i2c-dev.c
58
list_for_each_entry(i2c_dev, &i2c_dev_list, list) {
drivers/i2c/i2c-dev.c
59
if (i2c_dev->adap->nr == index)
drivers/i2c/i2c-dev.c
62
i2c_dev = NULL;
drivers/i2c/i2c-dev.c
65
return i2c_dev;
drivers/i2c/i2c-dev.c
658
struct i2c_dev *i2c_dev;
drivers/i2c/i2c-dev.c
660
i2c_dev = container_of(dev, struct i2c_dev, dev);
drivers/i2c/i2c-dev.c
661
kfree(i2c_dev);
drivers/i2c/i2c-dev.c
667
struct i2c_dev *i2c_dev;
drivers/i2c/i2c-dev.c
674
i2c_dev = get_free_i2c_dev(adap);
drivers/i2c/i2c-dev.c
675
if (IS_ERR(i2c_dev))
drivers/i2c/i2c-dev.c
678
cdev_init(&i2c_dev->cdev, &i2cdev_fops);
drivers/i2c/i2c-dev.c
679
i2c_dev->cdev.owner = THIS_MODULE;
drivers/i2c/i2c-dev.c
68
static struct i2c_dev *get_free_i2c_dev(struct i2c_adapter *adap)
drivers/i2c/i2c-dev.c
681
device_initialize(&i2c_dev->dev);
drivers/i2c/i2c-dev.c
682
i2c_dev->dev.devt = MKDEV(I2C_MAJOR, adap->nr);
drivers/i2c/i2c-dev.c
683
i2c_dev->dev.class = &i2c_dev_class;
drivers/i2c/i2c-dev.c
684
i2c_dev->dev.parent = &adap->dev;
drivers/i2c/i2c-dev.c
685
i2c_dev->dev.release = i2cdev_dev_release;
drivers/i2c/i2c-dev.c
687
res = dev_set_name(&i2c_dev->dev, "i2c-%d", adap->nr);
drivers/i2c/i2c-dev.c
691
res = cdev_device_add(&i2c_dev->cdev, &i2c_dev->dev);
drivers/i2c/i2c-dev.c
699
put_i2c_dev(i2c_dev, false);
drivers/i2c/i2c-dev.c
70
struct i2c_dev *i2c_dev;
drivers/i2c/i2c-dev.c
706
struct i2c_dev *i2c_dev;
drivers/i2c/i2c-dev.c
712
i2c_dev = i2c_dev_get_by_minor(adap->nr);
drivers/i2c/i2c-dev.c
713
if (!i2c_dev) /* attach_adapter must have failed */
drivers/i2c/i2c-dev.c
716
put_i2c_dev(i2c_dev, true);
drivers/i2c/i2c-dev.c
77
i2c_dev = kzalloc_obj(*i2c_dev);
drivers/i2c/i2c-dev.c
78
if (!i2c_dev)
drivers/i2c/i2c-dev.c
80
i2c_dev->adap = adap;
drivers/i2c/i2c-dev.c
83
list_add_tail(&i2c_dev->list, &i2c_dev_list);
drivers/i2c/i2c-dev.c
85
return i2c_dev;
drivers/i2c/i2c-dev.c
88
static void put_i2c_dev(struct i2c_dev *i2c_dev, bool del_cdev)
drivers/i2c/i2c-dev.c
91
list_del(&i2c_dev->list);
drivers/i2c/i2c-dev.c
94
cdev_device_del(&i2c_dev->cdev, &i2c_dev->dev);
drivers/i2c/i2c-dev.c
95
put_device(&i2c_dev->dev);
drivers/media/pci/bt8xx/bttv-input.c
369
struct i2c_client *i2c_dev;
drivers/media/pci/bt8xx/bttv-input.c
389
i2c_dev = i2c_new_client_device(&btv->c.i2c_adap, &info);
drivers/media/pci/bt8xx/bttv-input.c
399
i2c_dev = i2c_new_scanned_device(&btv->c.i2c_adap, &info, addr_list, NULL);
drivers/media/pci/bt8xx/bttv-input.c
401
if (IS_ERR(i2c_dev))
drivers/media/platform/marvell/cafe-driver.c
482
struct i2c_client *i2c_dev;
drivers/media/platform/marvell/cafe-driver.c
561
i2c_dev = i2c_new_client_device(cam->i2c_adapter, &ov7670_info);
drivers/media/platform/marvell/cafe-driver.c
562
if (IS_ERR(i2c_dev)) {
drivers/media/platform/marvell/cafe-driver.c
563
ret = PTR_ERR(i2c_dev);
drivers/media/usb/em28xx/em28xx-input.c
103
static int em28xx_get_key_em_haup(struct i2c_client *i2c_dev,
drivers/media/usb/em28xx/em28xx-input.c
110
size = i2c_master_recv(i2c_dev, buf, sizeof(buf));
drivers/media/usb/em28xx/em28xx-input.c
133
static int em28xx_get_key_pinnacle_usb_grey(struct i2c_client *i2c_dev,
drivers/media/usb/em28xx/em28xx-input.c
141
if (i2c_master_recv(i2c_dev, buf, 3) != 3)
drivers/media/usb/em28xx/em28xx-input.c
152
static int em28xx_get_key_winfast_usbii_deluxe(struct i2c_client *i2c_dev,
drivers/media/usb/em28xx/em28xx-input.c
160
.addr = i2c_dev->addr,
drivers/media/usb/em28xx/em28xx-input.c
164
.addr = i2c_dev->addr,
drivers/media/usb/em28xx/em28xx-input.c
172
if (i2c_transfer(i2c_dev->adapter, msg, 2) != 2)
drivers/media/usb/em28xx/em28xx-input.c
179
if (i2c_transfer(i2c_dev->adapter, msg, 2) != 2)
drivers/media/usb/em28xx/em28xx-input.c
72
static int em28xx_get_key_terratec(struct i2c_client *i2c_dev,
drivers/media/usb/em28xx/em28xx-input.c
79
rc = i2c_master_recv(i2c_dev, &b, 1);
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
476
struct platform_device *i2c_dev;
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
496
i2c_dev = platform_device_register_full(&info);
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
497
if (IS_ERR(i2c_dev))
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
498
return PTR_ERR(i2c_dev);
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
500
txgbe->i2c_dev = i2c_dev;
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
637
platform_device_unregister(txgbe->i2c_dev);
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
672
platform_device_unregister(txgbe->i2c_dev);
drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
465
struct platform_device *i2c_dev;
drivers/nfc/fdp/fdp.c
163
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
270
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
327
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
393
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
460
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
530
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
594
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
607
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
620
struct device *dev = &info->phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.c
704
struct device *dev = &phy->i2c_dev->dev;
drivers/nfc/fdp/fdp.h
15
struct i2c_client *i2c_dev;
drivers/nfc/fdp/i2c.c
134
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/fdp/i2c.c
201
if (!phy || irq != phy->i2c_dev->irq) {
drivers/nfc/fdp/i2c.c
302
phy->i2c_dev = client;
drivers/nfc/fdp/i2c.c
90
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/microread/i2c.c
106
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/microread/i2c.c
143
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/microread/i2c.c
203
if (!phy || irq != phy->i2c_dev->irq) {
drivers/nfc/microread/i2c.c
244
phy->i2c_dev = client;
drivers/nfc/microread/i2c.c
38
struct i2c_client *i2c_dev;
drivers/nfc/nxp-nci/i2c.c
100
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/nxp-nci/i2c.c
148
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/nxp-nci/i2c.c
202
client = phy->i2c_dev;
drivers/nfc/nxp-nci/i2c.c
292
phy->i2c_dev = client;
drivers/nfc/nxp-nci/i2c.c
34
struct i2c_client *i2c_dev;
drivers/nfc/nxp-nci/i2c.c
65
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn533/i2c.c
134
if (!phy || irq != phy->i2c_dev->irq) {
drivers/nfc/pn533/i2c.c
182
phy->i2c_dev = client;
drivers/nfc/pn533/i2c.c
188
&phy->i2c_dev->dev);
drivers/nfc/pn533/i2c.c
26
struct i2c_client *i2c_dev;
drivers/nfc/pn533/i2c.c
40
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn533/i2c.c
51
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn533/i2c.c
97
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn544/i2c.c
148
struct i2c_client *i2c_dev;
drivers/nfc/pn544/i2c.c
192
nfc_info(&phy->i2c_dev->dev, "Detecting nfc_en polarity\n");
drivers/nfc/pn544/i2c.c
210
dev_dbg(&phy->i2c_dev->dev, "Sending reset cmd\n");
drivers/nfc/pn544/i2c.c
211
ret = i2c_master_send(phy->i2c_dev, rset_cmd, count);
drivers/nfc/pn544/i2c.c
213
nfc_info(&phy->i2c_dev->dev,
drivers/nfc/pn544/i2c.c
221
nfc_err(&phy->i2c_dev->dev,
drivers/nfc/pn544/i2c.c
295
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn544/i2c.c
359
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn544/i2c.c
417
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/pn544/i2c.c
485
if (!phy || irq != phy->i2c_dev->irq) {
drivers/nfc/pn544/i2c.c
490
client = phy->i2c_dev;
drivers/nfc/pn544/i2c.c
640
r = pn544_hci_i2c_fw_write_cmd(phy->i2c_dev,
drivers/nfc/pn544/i2c.c
674
r = i2c_master_send(phy->i2c_dev, buf, chunklen);
drivers/nfc/pn544/i2c.c
702
r = i2c_master_send(phy->i2c_dev,
drivers/nfc/pn544/i2c.c
746
&phy->i2c_dev->dev);
drivers/nfc/pn544/i2c.c
785
r = pn544_hci_i2c_fw_check_cmd(phy->i2c_dev,
drivers/nfc/pn544/i2c.c
886
phy->i2c_dev = client;
drivers/nfc/s3fwrn5/i2c.c
108
ret = i2c_master_recv(phy->i2c_dev, skb_put(skb, data_len), data_len);
drivers/nfc/s3fwrn5/i2c.c
160
phy->i2c_dev = client;
drivers/nfc/s3fwrn5/i2c.c
182
ret = s3fwrn5_probe(&phy->common.ndev, phy, &phy->i2c_dev->dev,
drivers/nfc/s3fwrn5/i2c.c
187
ret = devm_request_threaded_irq(&client->dev, phy->i2c_dev->irq, NULL,
drivers/nfc/s3fwrn5/i2c.c
23
struct i2c_client *i2c_dev;
drivers/nfc/s3fwrn5/i2c.c
53
ret = i2c_master_send(phy->i2c_dev, skb->data, skb->len);
drivers/nfc/s3fwrn5/i2c.c
57
ret = i2c_master_send(phy->i2c_dev, skb->data, skb->len);
drivers/nfc/s3fwrn5/i2c.c
88
ret = i2c_master_recv(phy->i2c_dev, hdr, hdr_size);
drivers/nfc/st-nci/i2c.c
112
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/st-nci/i2c.c
163
if (!phy || !phy->ndlc || irq != phy->i2c_dev->irq) {
drivers/nfc/st-nci/i2c.c
213
phy->i2c_dev = client;
drivers/nfc/st-nci/i2c.c
33
struct i2c_client *i2c_dev;
drivers/nfc/st-nci/i2c.c
53
enable_irq(phy->i2c_dev->irq);
drivers/nfc/st-nci/i2c.c
64
disable_irq_nosync(phy->i2c_dev->irq);
drivers/nfc/st-nci/i2c.c
77
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/st21nfca/i2c.c
100
r = i2c_master_send(phy->i2c_dev, reboot_cmd,
drivers/nfc/st21nfca/i2c.c
112
r = i2c_master_recv(phy->i2c_dev, tmp,
drivers/nfc/st21nfca/i2c.c
185
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/st21nfca/i2c.c
350
struct i2c_client *client = phy->i2c_dev;
drivers/nfc/st21nfca/i2c.c
424
if (!phy || irq != phy->i2c_dev->irq) {
drivers/nfc/st21nfca/i2c.c
505
phy->i2c_dev = client;
drivers/nfc/st21nfca/i2c.c
51
struct i2c_client *i2c_dev;
drivers/platform/chrome/chromeos_laptop.c
138
struct i2c_peripheral *i2c_dev;
drivers/platform/chrome/chromeos_laptop.c
142
i2c_dev = &cros_laptop->i2c_peripherals[i];
drivers/platform/chrome/chromeos_laptop.c
145
if (i2c_dev->client)
drivers/platform/chrome/chromeos_laptop.c
148
if (strncmp(adapter->name, i2c_adapter_names[i2c_dev->type],
drivers/platform/chrome/chromeos_laptop.c
149
strlen(i2c_adapter_names[i2c_dev->type])))
drivers/platform/chrome/chromeos_laptop.c
152
if (i2c_dev->pci_devid &&
drivers/platform/chrome/chromeos_laptop.c
154
i2c_dev->pci_devid)) {
drivers/platform/chrome/chromeos_laptop.c
158
i2c_dev->client =
drivers/platform/chrome/chromeos_laptop.c
160
&i2c_dev->board_info,
drivers/platform/chrome/chromeos_laptop.c
161
i2c_dev->alt_addr);
drivers/platform/chrome/chromeos_laptop.c
201
struct i2c_peripheral *i2c_dev;
drivers/platform/chrome/chromeos_laptop.c
215
i2c_dev = &cros_laptop->i2c_peripherals[i];
drivers/platform/chrome/chromeos_laptop.c
217
if (i2c_dev->client == client) {
drivers/platform/chrome/chromeos_laptop.c
218
i2c_dev->client = NULL;
drivers/platform/chrome/chromeos_laptop.c
720
static int __init chromeos_laptop_setup_irq(struct i2c_peripheral *i2c_dev)
drivers/platform/chrome/chromeos_laptop.c
724
if (i2c_dev->dmi_name) {
drivers/platform/chrome/chromeos_laptop.c
725
irq = chromeos_laptop_get_irq_from_dmi(i2c_dev->dmi_name);
drivers/platform/chrome/chromeos_laptop.c
729
i2c_dev->irq_resource = DEFINE_RES_IRQ(irq);
drivers/platform/chrome/chromeos_laptop.c
730
i2c_dev->irq_resource.flags |= i2c_dev->irqflags;
drivers/platform/chrome/chromeos_laptop.c
732
i2c_dev->board_info.resources = &i2c_dev->irq_resource;
drivers/platform/chrome/chromeos_laptop.c
733
i2c_dev->board_info.num_resources = 1;
drivers/platform/chrome/chromeos_laptop.c
744
struct i2c_peripheral *i2c_dev;
drivers/platform/chrome/chromeos_laptop.c
759
i2c_dev = &i2c_peripherals[i];
drivers/platform/chrome/chromeos_laptop.c
760
info = &i2c_dev->board_info;
drivers/platform/chrome/chromeos_laptop.c
762
error = chromeos_laptop_setup_irq(i2c_dev);
drivers/platform/chrome/chromeos_laptop.c
767
if (i2c_dev->properties) {
drivers/platform/chrome/chromeos_laptop.c
768
info->fwnode = fwnode_create_software_node(i2c_dev->properties, NULL);
drivers/platform/chrome/chromeos_laptop.c
783
i2c_dev = &i2c_peripherals[i];
drivers/platform/chrome/chromeos_laptop.c
784
info = &i2c_dev->board_info;
drivers/platform/chrome/chromeos_laptop.c
854
struct i2c_peripheral *i2c_dev;
drivers/platform/chrome/chromeos_laptop.c
858
i2c_dev = &cros_laptop->i2c_peripherals[i];
drivers/platform/chrome/chromeos_laptop.c
859
i2c_unregister_device(i2c_dev->client);
drivers/platform/x86/amd/amd_isp4.c
263
struct i2c_client *i2c_dev;
drivers/platform/x86/amd/amd_isp4.c
267
if (isp4_platform->i2c_dev)
drivers/platform/x86/amd/amd_isp4.c
270
i2c_dev = i2c_new_client_device(adap, info);
drivers/platform/x86/amd/amd_isp4.c
271
if (IS_ERR(i2c_dev)) {
drivers/platform/x86/amd/amd_isp4.c
272
dev_err(&adap->dev, "error %pe registering isp i2c_client\n", i2c_dev);
drivers/platform/x86/amd/amd_isp4.c
275
isp4_platform->i2c_dev = i2c_dev;
drivers/platform/x86/amd/amd_isp4.c
301
if (isp4_platform->i2c_dev == client) {
drivers/platform/x86/amd/amd_isp4.c
303
isp4_platform->i2c_dev = NULL;
drivers/platform/x86/amd/amd_isp4.c
401
i2c_unregister_device(isp4_platform->i2c_dev);
drivers/platform/x86/amd/amd_isp4.c
45
struct i2c_client *i2c_dev;
drivers/platform/x86/dell/dell-lis3lv02d.c
132
if (i2c_dev)
drivers/platform/x86/dell/dell-lis3lv02d.c
147
i2c_dev = i2c_new_client_device(adap, &info);
drivers/platform/x86/dell/dell-lis3lv02d.c
152
i2c_dev = i2c_new_scanned_device(adap, &info, addr_list, detect_lis3lv02d);
drivers/platform/x86/dell/dell-lis3lv02d.c
155
if (IS_ERR(i2c_dev)) {
drivers/platform/x86/dell/dell-lis3lv02d.c
156
dev_err(&adap->dev, "error %ld registering i2c_client\n", PTR_ERR(i2c_dev));
drivers/platform/x86/dell/dell-lis3lv02d.c
157
i2c_dev = NULL;
drivers/platform/x86/dell/dell-lis3lv02d.c
186
if (i2c_dev == client) {
drivers/platform/x86/dell/dell-lis3lv02d.c
188
i2c_dev = NULL;
drivers/platform/x86/dell/dell-lis3lv02d.c
254
i2c_unregister_device(i2c_dev);
drivers/platform/x86/dell/dell-lis3lv02d.c
64
static struct i2c_client *i2c_dev;
drivers/scsi/esas2r/atioctl.h
802
u8 i2c_dev;
include/sound/pt2258.h
14
struct snd_i2c_device *i2c_dev;
sound/i2c/other/pt2258.c
111
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 2) != 2)
sound/i2c/other/pt2258.c
119
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 2) != 2)
sound/i2c/other/pt2258.c
156
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 1) != 1)
sound/i2c/other/pt2258.c
40
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 1) != 1)
sound/i2c/other/pt2258.c
48
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 1) != 1)
sound/i2c/other/pt2258.c
58
if (snd_i2c_sendbytes(pt->i2c_dev, bytes, 2) != 2)
sound/pci/ice1712/revo.c
170
pt->i2c_dev = spec->dev;
sound/soc/codecs/rt5682-i2c.c
133
rt5682->i2c_dev = &i2c->dev;
sound/soc/codecs/rt5682.c
2580
dev_dbg(rt5682->i2c_dev, "sysclk/dai not set correctly\n");
sound/soc/codecs/rt5682.c
2670
dev_warn(rt5682->i2c_dev, "%s: clk %s only support %d or %d Hz output\n",
sound/soc/codecs/rt5682.c
2693
dev_warn(rt5682->i2c_dev, "%s: clk %s only support %d or %d Hz output\n",
sound/soc/codecs/rt5682.c
2727
dev_warn(rt5682->i2c_dev,
sound/soc/codecs/rt5682.c
2732
dev_warn(rt5682->i2c_dev, "clk %s only support %d Hz input\n",
sound/soc/codecs/rt5682.c
2844
dev_err(rt5682->i2c_dev, "dai %d not found in component\n",
sound/soc/codecs/rt5682.c
2866
struct device *dev = rt5682->i2c_dev;
sound/soc/codecs/rt5682.h
1433
struct device *i2c_dev;
sound/soc/intel/boards/bytcr_rt5640.c
1213
static int byt_rt5640_add_codec_device_props(struct device *i2c_dev,
sound/soc/intel/boards/bytcr_rt5640.c
1267
ret = device_add_software_node(i2c_dev, to_software_node(fwnode));
sound/soc/intel/boards/bytcr_rt5651.c
544
static int byt_rt5651_add_codec_device_props(struct device *i2c_dev,
sound/soc/intel/boards/bytcr_rt5651.c
573
ret = device_add_software_node(i2c_dev, to_software_node(fwnode));