Symbol: hdq_data
drivers/w1/masters/omap_hdq.c
104
while (!((*status = hdq_reg_in(hdq_data, offset)) & flag)
drivers/w1/masters/omap_hdq.c
117
static u8 hdq_reset_irqstatus(struct hdq_data *hdq_data, u8 bits)
drivers/w1/masters/omap_hdq.c
122
spin_lock_irqsave(&hdq_data->hdq_spinlock, irqflags);
drivers/w1/masters/omap_hdq.c
123
status = hdq_data->hdq_irqstatus;
drivers/w1/masters/omap_hdq.c
125
hdq_data->hdq_irqstatus &= ~bits;
drivers/w1/masters/omap_hdq.c
126
spin_unlock_irqrestore(&hdq_data->hdq_spinlock, irqflags);
drivers/w1/masters/omap_hdq.c
132
static int hdq_write_byte(struct hdq_data *hdq_data, u8 val, u8 *status)
drivers/w1/masters/omap_hdq.c
137
ret = mutex_lock_interruptible(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
143
if (hdq_data->hdq_irqstatus)
drivers/w1/masters/omap_hdq.c
144
dev_err(hdq_data->dev, "TX irqstatus not cleared (%02x)\n",
drivers/w1/masters/omap_hdq.c
145
hdq_data->hdq_irqstatus);
drivers/w1/masters/omap_hdq.c
149
hdq_reg_out(hdq_data, OMAP_HDQ_TX_DATA, val);
drivers/w1/masters/omap_hdq.c
152
hdq_reg_merge(hdq_data, OMAP_HDQ_CTRL_STATUS, OMAP_HDQ_CTRL_STATUS_GO,
drivers/w1/masters/omap_hdq.c
156
(hdq_data->hdq_irqstatus & OMAP_HDQ_INT_STATUS_TXCOMPLETE),
drivers/w1/masters/omap_hdq.c
158
*status = hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_TXCOMPLETE);
drivers/w1/masters/omap_hdq.c
160
dev_dbg(hdq_data->dev, "TX wait elapsed\n");
drivers/w1/masters/omap_hdq.c
167
dev_dbg(hdq_data->dev, "timeout waiting for"
drivers/w1/masters/omap_hdq.c
174
ret = hdq_wait_for_flag(hdq_data, OMAP_HDQ_CTRL_STATUS,
drivers/w1/masters/omap_hdq.c
178
dev_dbg(hdq_data->dev, "timeout waiting GO bit"
drivers/w1/masters/omap_hdq.c
183
mutex_unlock(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
191
struct hdq_data *hdq_data = _hdq;
drivers/w1/masters/omap_hdq.c
194
spin_lock_irqsave(&hdq_data->hdq_spinlock, irqflags);
drivers/w1/masters/omap_hdq.c
195
hdq_data->hdq_irqstatus |= hdq_reg_in(hdq_data, OMAP_HDQ_INT_STATUS);
drivers/w1/masters/omap_hdq.c
196
spin_unlock_irqrestore(&hdq_data->hdq_spinlock, irqflags);
drivers/w1/masters/omap_hdq.c
197
dev_dbg(hdq_data->dev, "hdq_isr: %x\n", hdq_data->hdq_irqstatus);
drivers/w1/masters/omap_hdq.c
199
if (hdq_data->hdq_irqstatus &
drivers/w1/masters/omap_hdq.c
232
static int omap_hdq_break(struct hdq_data *hdq_data)
drivers/w1/masters/omap_hdq.c
237
ret = mutex_lock_interruptible(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
239
dev_dbg(hdq_data->dev, "Could not acquire mutex\n");
drivers/w1/masters/omap_hdq.c
244
if (hdq_data->hdq_irqstatus)
drivers/w1/masters/omap_hdq.c
245
dev_err(hdq_data->dev, "break irqstatus not cleared (%02x)\n",
drivers/w1/masters/omap_hdq.c
246
hdq_data->hdq_irqstatus);
drivers/w1/masters/omap_hdq.c
249
hdq_reg_merge(hdq_data, OMAP_HDQ_CTRL_STATUS,
drivers/w1/masters/omap_hdq.c
256
(hdq_data->hdq_irqstatus & OMAP_HDQ_INT_STATUS_TIMEOUT),
drivers/w1/masters/omap_hdq.c
258
tmp_status = hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_TIMEOUT);
drivers/w1/masters/omap_hdq.c
260
dev_dbg(hdq_data->dev, "break wait elapsed\n");
drivers/w1/masters/omap_hdq.c
267
dev_dbg(hdq_data->dev, "timeout waiting for TIMEOUT, %x\n",
drivers/w1/masters/omap_hdq.c
277
if (!(hdq_reg_in(hdq_data, OMAP_HDQ_CTRL_STATUS) &
drivers/w1/masters/omap_hdq.c
279
dev_dbg(hdq_data->dev, "Presence bit not set\n");
drivers/w1/masters/omap_hdq.c
288
ret = hdq_wait_for_flag(hdq_data, OMAP_HDQ_CTRL_STATUS,
drivers/w1/masters/omap_hdq.c
293
dev_dbg(hdq_data->dev, "timeout waiting INIT&GO bits"
drivers/w1/masters/omap_hdq.c
297
mutex_unlock(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
302
static int hdq_read_byte(struct hdq_data *hdq_data, u8 *val)
drivers/w1/masters/omap_hdq.c
307
ret = mutex_lock_interruptible(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
313
if (pm_runtime_suspended(hdq_data->dev)) {
drivers/w1/masters/omap_hdq.c
318
if (!(hdq_data->hdq_irqstatus & OMAP_HDQ_INT_STATUS_RXCOMPLETE)) {
drivers/w1/masters/omap_hdq.c
319
hdq_reg_merge(hdq_data, OMAP_HDQ_CTRL_STATUS,
drivers/w1/masters/omap_hdq.c
326
(hdq_data->hdq_irqstatus
drivers/w1/masters/omap_hdq.c
330
status = hdq_reset_irqstatus(hdq_data,
drivers/w1/masters/omap_hdq.c
333
hdq_reg_merge(hdq_data, OMAP_HDQ_CTRL_STATUS, 0,
drivers/w1/masters/omap_hdq.c
338
dev_dbg(hdq_data->dev, "timeout waiting for"
drivers/w1/masters/omap_hdq.c
344
hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_RXCOMPLETE);
drivers/w1/masters/omap_hdq.c
347
*val = hdq_reg_in(hdq_data, OMAP_HDQ_RX_DATA);
drivers/w1/masters/omap_hdq.c
349
mutex_unlock(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
364
struct hdq_data *hdq_data = _hdq;
drivers/w1/masters/omap_hdq.c
369
err = pm_runtime_get_sync(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
371
pm_runtime_put_noidle(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
376
err = mutex_lock_interruptible(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
378
dev_dbg(hdq_data->dev, "Could not acquire mutex\n");
drivers/w1/masters/omap_hdq.c
386
(hdq_data->hdq_irqstatus
drivers/w1/masters/omap_hdq.c
390
hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_RXCOMPLETE);
drivers/w1/masters/omap_hdq.c
393
dev_dbg(hdq_data->dev, "RX wait elapsed\n");
drivers/w1/masters/omap_hdq.c
402
(hdq_data->hdq_irqstatus
drivers/w1/masters/omap_hdq.c
406
hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_RXCOMPLETE);
drivers/w1/masters/omap_hdq.c
409
dev_dbg(hdq_data->dev, "RX wait elapsed\n");
drivers/w1/masters/omap_hdq.c
431
(hdq_data->hdq_irqstatus
drivers/w1/masters/omap_hdq.c
435
hdq_reset_irqstatus(hdq_data, OMAP_HDQ_INT_STATUS_TXCOMPLETE);
drivers/w1/masters/omap_hdq.c
438
dev_dbg(hdq_data->dev, "TX wait elapsed\n");
drivers/w1/masters/omap_hdq.c
446
mutex_unlock(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
448
pm_runtime_put_autosuspend(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
456
struct hdq_data *hdq_data = _hdq;
drivers/w1/masters/omap_hdq.c
459
err = pm_runtime_get_sync(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
461
pm_runtime_put_noidle(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
466
omap_hdq_break(hdq_data);
drivers/w1/masters/omap_hdq.c
468
pm_runtime_put_autosuspend(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
476
struct hdq_data *hdq_data = _hdq;
drivers/w1/masters/omap_hdq.c
480
ret = pm_runtime_get_sync(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
482
pm_runtime_put_noidle(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
487
ret = hdq_read_byte(hdq_data, &val);
drivers/w1/masters/omap_hdq.c
491
pm_runtime_put_autosuspend(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
499
struct hdq_data *hdq_data = _hdq;
drivers/w1/masters/omap_hdq.c
503
ret = pm_runtime_get_sync(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
505
pm_runtime_put_noidle(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
516
omap_hdq_break(hdq_data);
drivers/w1/masters/omap_hdq.c
518
ret = hdq_write_byte(hdq_data, byte, &status);
drivers/w1/masters/omap_hdq.c
520
dev_dbg(hdq_data->dev, "TX failure:Ctrl status %x\n", status);
drivers/w1/masters/omap_hdq.c
525
pm_runtime_put_autosuspend(hdq_data->dev);
drivers/w1/masters/omap_hdq.c
536
struct hdq_data *hdq_data = dev_get_drvdata(dev);
drivers/w1/masters/omap_hdq.c
538
hdq_reg_out(hdq_data, 0, hdq_data->mode);
drivers/w1/masters/omap_hdq.c
539
hdq_reg_in(hdq_data, OMAP_HDQ_INT_STATUS);
drivers/w1/masters/omap_hdq.c
546
struct hdq_data *hdq_data = dev_get_drvdata(dev);
drivers/w1/masters/omap_hdq.c
549
hdq_reg_out(hdq_data, OMAP_HDQ_CTRL_STATUS,
drivers/w1/masters/omap_hdq.c
552
hdq_data->mode);
drivers/w1/masters/omap_hdq.c
553
hdq_reg_in(hdq_data, OMAP_HDQ_INT_STATUS);
drivers/w1/masters/omap_hdq.c
566
struct hdq_data *hdq_data;
drivers/w1/masters/omap_hdq.c
571
hdq_data = devm_kzalloc(dev, sizeof(*hdq_data), GFP_KERNEL);
drivers/w1/masters/omap_hdq.c
572
if (!hdq_data)
drivers/w1/masters/omap_hdq.c
575
hdq_data->dev = dev;
drivers/w1/masters/omap_hdq.c
576
platform_set_drvdata(pdev, hdq_data);
drivers/w1/masters/omap_hdq.c
578
hdq_data->hdq_base = devm_platform_ioremap_resource(pdev, 0);
drivers/w1/masters/omap_hdq.c
579
if (IS_ERR(hdq_data->hdq_base))
drivers/w1/masters/omap_hdq.c
580
return PTR_ERR(hdq_data->hdq_base);
drivers/w1/masters/omap_hdq.c
582
mutex_init(&hdq_data->hdq_mutex);
drivers/w1/masters/omap_hdq.c
586
hdq_data->mode = 0;
drivers/w1/masters/omap_hdq.c
589
hdq_data->mode = 1;
drivers/w1/masters/omap_hdq.c
603
rev = hdq_reg_in(hdq_data, OMAP_HDQ_REVISION);
drivers/w1/masters/omap_hdq.c
607
spin_lock_init(&hdq_data->hdq_spinlock);
drivers/w1/masters/omap_hdq.c
616
ret = devm_request_irq(dev, irq, hdq_isr, 0, "omap_hdq", hdq_data);
drivers/w1/masters/omap_hdq.c
62
static inline u8 hdq_reg_in(struct hdq_data *hdq_data, u32 offset)
drivers/w1/masters/omap_hdq.c
622
omap_hdq_break(hdq_data);
drivers/w1/masters/omap_hdq.c
626
omap_w1_master.data = hdq_data;
drivers/w1/masters/omap_hdq.c
64
return __raw_readl(hdq_data->hdq_base + offset);
drivers/w1/masters/omap_hdq.c
67
static inline void hdq_reg_out(struct hdq_data *hdq_data, u32 offset, u8 val)
drivers/w1/masters/omap_hdq.c
69
__raw_writel(val, hdq_data->hdq_base + offset);
drivers/w1/masters/omap_hdq.c
72
static inline u8 hdq_reg_merge(struct hdq_data *hdq_data, u32 offset,
drivers/w1/masters/omap_hdq.c
75
u8 new_val = (__raw_readl(hdq_data->hdq_base + offset) & ~mask)
drivers/w1/masters/omap_hdq.c
77
__raw_writel(new_val, hdq_data->hdq_base + offset);
drivers/w1/masters/omap_hdq.c
88
static int hdq_wait_for_flag(struct hdq_data *hdq_data, u32 offset,
drivers/w1/masters/omap_hdq.c
96
while (((*status = hdq_reg_in(hdq_data, offset)) & flag)