2 * drivers/w1/masters/omap_hdq.c
4 * Copyright (C) 2007,2012 Texas Instruments, Inc.
6 * This file is licensed under the terms of the GNU General Public License
7 * version 2. This program is licensed "as is" without any warranty of any
8 * kind, whether express or implied.
11 #include <linux/kernel.h>
12 #include <linux/module.h>
13 #include <linux/platform_device.h>
14 #include <linux/interrupt.h>
15 #include <linux/slab.h>
16 #include <linux/err.h>
18 #include <linux/sched.h>
19 #include <linux/pm_runtime.h>
23 #include "../w1_int.h"
25 #define MOD_NAME "OMAP_HDQ:"
27 #define OMAP_HDQ_REVISION 0x00
28 #define OMAP_HDQ_TX_DATA 0x04
29 #define OMAP_HDQ_RX_DATA 0x08
30 #define OMAP_HDQ_CTRL_STATUS 0x0c
31 #define OMAP_HDQ_CTRL_STATUS_SINGLE BIT(7)
32 #define OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK BIT(6)
33 #define OMAP_HDQ_CTRL_STATUS_CLOCKENABLE BIT(5)
34 #define OMAP_HDQ_CTRL_STATUS_GO BIT(4)
35 #define OMAP_HDQ_CTRL_STATUS_PRESENCE BIT(3)
36 #define OMAP_HDQ_CTRL_STATUS_INITIALIZATION BIT(2)
37 #define OMAP_HDQ_CTRL_STATUS_DIR BIT(1)
38 #define OMAP_HDQ_INT_STATUS 0x10
39 #define OMAP_HDQ_INT_STATUS_TXCOMPLETE BIT(2)
40 #define OMAP_HDQ_INT_STATUS_RXCOMPLETE BIT(1)
41 #define OMAP_HDQ_INT_STATUS_TIMEOUT BIT(0)
42 #define OMAP_HDQ_SYSCONFIG 0x14
43 #define OMAP_HDQ_SYSCONFIG_SOFTRESET BIT(1)
44 #define OMAP_HDQ_SYSCONFIG_AUTOIDLE BIT(0)
45 #define OMAP_HDQ_SYSCONFIG_NOIDLE 0x0
46 #define OMAP_HDQ_SYSSTATUS 0x18
47 #define OMAP_HDQ_SYSSTATUS_RESETDONE BIT(0)
49 #define OMAP_HDQ_FLAG_CLEAR 0
50 #define OMAP_HDQ_FLAG_SET 1
51 #define OMAP_HDQ_TIMEOUT (HZ/5)
53 #define OMAP_HDQ_MAX_USER 4
55 static DECLARE_WAIT_QUEUE_HEAD(hdq_wait_queue
);
60 void __iomem
*hdq_base
;
61 /* lock status update */
62 struct mutex hdq_mutex
;
66 spinlock_t hdq_spinlock
;
68 * Used to control the call to omap_hdq_get and omap_hdq_put.
69 * HDQ Protocol: Write the CMD|REG_address first, followed by
70 * the data wrire or read.
74 /* mode: 0-HDQ 1-W1 */
79 static int omap_hdq_probe(struct platform_device
*pdev
);
80 static int omap_hdq_remove(struct platform_device
*pdev
);
82 static const struct of_device_id omap_hdq_dt_ids
[] = {
83 { .compatible
= "ti,omap3-1w" },
84 { .compatible
= "ti,am4372-hdq" },
87 MODULE_DEVICE_TABLE(of
, omap_hdq_dt_ids
);
89 static struct platform_driver omap_hdq_driver
= {
90 .probe
= omap_hdq_probe
,
91 .remove
= omap_hdq_remove
,
94 .of_match_table
= omap_hdq_dt_ids
,
98 static u8
omap_w1_read_byte(void *_hdq
);
99 static void omap_w1_write_byte(void *_hdq
, u8 byte
);
100 static u8
omap_w1_reset_bus(void *_hdq
);
103 static struct w1_bus_master omap_w1_master
= {
104 .read_byte
= omap_w1_read_byte
,
105 .write_byte
= omap_w1_write_byte
,
106 .reset_bus
= omap_w1_reset_bus
,
109 /* HDQ register I/O routines */
110 static inline u8
hdq_reg_in(struct hdq_data
*hdq_data
, u32 offset
)
112 return __raw_readl(hdq_data
->hdq_base
+ offset
);
115 static inline void hdq_reg_out(struct hdq_data
*hdq_data
, u32 offset
, u8 val
)
117 __raw_writel(val
, hdq_data
->hdq_base
+ offset
);
120 static inline u8
hdq_reg_merge(struct hdq_data
*hdq_data
, u32 offset
,
123 u8 new_val
= (__raw_readl(hdq_data
->hdq_base
+ offset
) & ~mask
)
125 __raw_writel(new_val
, hdq_data
->hdq_base
+ offset
);
130 static void hdq_disable_interrupt(struct hdq_data
*hdq_data
, u32 offset
,
135 ie
= readl(hdq_data
->hdq_base
+ offset
);
136 writel(ie
& mask
, hdq_data
->hdq_base
+ offset
);
140 * Wait for one or more bits in flag change.
141 * HDQ_FLAG_SET: wait until any bit in the flag is set.
142 * HDQ_FLAG_CLEAR: wait until all bits in the flag are cleared.
143 * return 0 on success and -ETIMEDOUT in the case of timeout.
145 static int hdq_wait_for_flag(struct hdq_data
*hdq_data
, u32 offset
,
146 u8 flag
, u8 flag_set
, u8
*status
)
149 unsigned long timeout
= jiffies
+ OMAP_HDQ_TIMEOUT
;
151 if (flag_set
== OMAP_HDQ_FLAG_CLEAR
) {
152 /* wait for the flag clear */
153 while (((*status
= hdq_reg_in(hdq_data
, offset
)) & flag
)
154 && time_before(jiffies
, timeout
)) {
155 schedule_timeout_uninterruptible(1);
159 } else if (flag_set
== OMAP_HDQ_FLAG_SET
) {
160 /* wait for the flag set */
161 while (!((*status
= hdq_reg_in(hdq_data
, offset
)) & flag
)
162 && time_before(jiffies
, timeout
)) {
163 schedule_timeout_uninterruptible(1);
165 if (!(*status
& flag
))
173 /* write out a byte and fill *status with HDQ_INT_STATUS */
174 static int hdq_write_byte(struct hdq_data
*hdq_data
, u8 val
, u8
*status
)
178 unsigned long irqflags
;
182 spin_lock_irqsave(&hdq_data
->hdq_spinlock
, irqflags
);
183 /* clear interrupt flags via a dummy read */
184 hdq_reg_in(hdq_data
, OMAP_HDQ_INT_STATUS
);
185 /* ISR loads it with new INT_STATUS */
186 hdq_data
->hdq_irqstatus
= 0;
187 spin_unlock_irqrestore(&hdq_data
->hdq_spinlock
, irqflags
);
189 hdq_reg_out(hdq_data
, OMAP_HDQ_TX_DATA
, val
);
192 hdq_reg_merge(hdq_data
, OMAP_HDQ_CTRL_STATUS
, OMAP_HDQ_CTRL_STATUS_GO
,
193 OMAP_HDQ_CTRL_STATUS_DIR
| OMAP_HDQ_CTRL_STATUS_GO
);
194 /* wait for the TXCOMPLETE bit */
195 ret
= wait_event_timeout(hdq_wait_queue
,
196 hdq_data
->hdq_irqstatus
, OMAP_HDQ_TIMEOUT
);
198 dev_dbg(hdq_data
->dev
, "TX wait elapsed\n");
203 *status
= hdq_data
->hdq_irqstatus
;
204 /* check irqstatus */
205 if (!(*status
& OMAP_HDQ_INT_STATUS_TXCOMPLETE
)) {
206 dev_dbg(hdq_data
->dev
, "timeout waiting for"
207 " TXCOMPLETE/RXCOMPLETE, %x\n", *status
);
212 /* wait for the GO bit return to zero */
213 ret
= hdq_wait_for_flag(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
214 OMAP_HDQ_CTRL_STATUS_GO
,
215 OMAP_HDQ_FLAG_CLEAR
, &tmp_status
);
217 dev_dbg(hdq_data
->dev
, "timeout waiting GO bit"
218 " return to zero, %x\n", tmp_status
);
225 /* HDQ Interrupt service routine */
226 static irqreturn_t
hdq_isr(int irq
, void *_hdq
)
228 struct hdq_data
*hdq_data
= _hdq
;
229 unsigned long irqflags
;
231 spin_lock_irqsave(&hdq_data
->hdq_spinlock
, irqflags
);
232 hdq_data
->hdq_irqstatus
= hdq_reg_in(hdq_data
, OMAP_HDQ_INT_STATUS
);
233 spin_unlock_irqrestore(&hdq_data
->hdq_spinlock
, irqflags
);
234 dev_dbg(hdq_data
->dev
, "hdq_isr: %x\n", hdq_data
->hdq_irqstatus
);
236 if (hdq_data
->hdq_irqstatus
&
237 (OMAP_HDQ_INT_STATUS_TXCOMPLETE
| OMAP_HDQ_INT_STATUS_RXCOMPLETE
238 | OMAP_HDQ_INT_STATUS_TIMEOUT
)) {
239 /* wake up sleeping process */
240 wake_up(&hdq_wait_queue
);
246 /* W1 search callback function in HDQ mode */
247 static void omap_w1_search_bus(void *_hdq
, struct w1_master
*master_dev
,
248 u8 search_type
, w1_slave_found_callback slave_found
)
250 u64 module_id
, rn_le
, cs
, id
;
257 rn_le
= cpu_to_le64(module_id
);
259 * HDQ might not obey truly the 1-wire spec.
260 * So calculate CRC based on module parameter.
262 cs
= w1_calc_crc8((u8
*)&rn_le
, 7);
263 id
= (cs
<< 56) | module_id
;
265 slave_found(master_dev
, id
);
268 static int _omap_hdq_reset(struct hdq_data
*hdq_data
)
273 hdq_reg_out(hdq_data
, OMAP_HDQ_SYSCONFIG
,
274 OMAP_HDQ_SYSCONFIG_SOFTRESET
);
276 * Select HDQ/1W mode & enable clocks.
277 * It is observed that INT flags can't be cleared via a read and GO/INIT
278 * won't return to zero if interrupt is disabled. So we always enable
281 hdq_reg_out(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
282 OMAP_HDQ_CTRL_STATUS_CLOCKENABLE
|
283 OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK
);
285 /* wait for reset to complete */
286 ret
= hdq_wait_for_flag(hdq_data
, OMAP_HDQ_SYSSTATUS
,
287 OMAP_HDQ_SYSSTATUS_RESETDONE
, OMAP_HDQ_FLAG_SET
, &tmp_status
);
289 dev_dbg(hdq_data
->dev
, "timeout waiting HDQ reset, %x",
292 hdq_reg_out(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
293 OMAP_HDQ_CTRL_STATUS_CLOCKENABLE
|
294 OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK
|
296 hdq_reg_out(hdq_data
, OMAP_HDQ_SYSCONFIG
,
297 OMAP_HDQ_SYSCONFIG_AUTOIDLE
);
303 /* Issue break pulse to the device */
304 static int omap_hdq_break(struct hdq_data
*hdq_data
)
308 unsigned long irqflags
;
310 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
312 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
317 spin_lock_irqsave(&hdq_data
->hdq_spinlock
, irqflags
);
318 /* clear interrupt flags via a dummy read */
319 hdq_reg_in(hdq_data
, OMAP_HDQ_INT_STATUS
);
320 /* ISR loads it with new INT_STATUS */
321 hdq_data
->hdq_irqstatus
= 0;
322 spin_unlock_irqrestore(&hdq_data
->hdq_spinlock
, irqflags
);
324 /* set the INIT and GO bit */
325 hdq_reg_merge(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
326 OMAP_HDQ_CTRL_STATUS_INITIALIZATION
| OMAP_HDQ_CTRL_STATUS_GO
,
327 OMAP_HDQ_CTRL_STATUS_DIR
| OMAP_HDQ_CTRL_STATUS_INITIALIZATION
|
328 OMAP_HDQ_CTRL_STATUS_GO
);
330 /* wait for the TIMEOUT bit */
331 ret
= wait_event_timeout(hdq_wait_queue
,
332 hdq_data
->hdq_irqstatus
, OMAP_HDQ_TIMEOUT
);
334 dev_dbg(hdq_data
->dev
, "break wait elapsed\n");
339 tmp_status
= hdq_data
->hdq_irqstatus
;
340 /* check irqstatus */
341 if (!(tmp_status
& OMAP_HDQ_INT_STATUS_TIMEOUT
)) {
342 dev_dbg(hdq_data
->dev
, "timeout waiting for TIMEOUT, %x\n",
349 * check for the presence detect bit to get
350 * set to show that the slave is responding
352 if (!(hdq_reg_in(hdq_data
, OMAP_HDQ_CTRL_STATUS
) &
353 OMAP_HDQ_CTRL_STATUS_PRESENCE
)) {
354 dev_dbg(hdq_data
->dev
, "Presence bit not set\n");
360 * wait for both INIT and GO bits rerurn to zero.
361 * zero wait time expected for interrupt mode.
363 ret
= hdq_wait_for_flag(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
364 OMAP_HDQ_CTRL_STATUS_INITIALIZATION
|
365 OMAP_HDQ_CTRL_STATUS_GO
, OMAP_HDQ_FLAG_CLEAR
,
368 dev_dbg(hdq_data
->dev
, "timeout waiting INIT&GO bits"
369 " return to zero, %x\n", tmp_status
);
372 mutex_unlock(&hdq_data
->hdq_mutex
);
377 static int hdq_read_byte(struct hdq_data
*hdq_data
, u8
*val
)
382 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
388 if (!hdq_data
->hdq_usecount
) {
393 if (!(hdq_data
->hdq_irqstatus
& OMAP_HDQ_INT_STATUS_RXCOMPLETE
)) {
394 hdq_reg_merge(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
395 OMAP_HDQ_CTRL_STATUS_DIR
| OMAP_HDQ_CTRL_STATUS_GO
,
396 OMAP_HDQ_CTRL_STATUS_DIR
| OMAP_HDQ_CTRL_STATUS_GO
);
398 * The RX comes immediately after TX.
400 wait_event_timeout(hdq_wait_queue
,
401 (hdq_data
->hdq_irqstatus
402 & OMAP_HDQ_INT_STATUS_RXCOMPLETE
),
405 hdq_reg_merge(hdq_data
, OMAP_HDQ_CTRL_STATUS
, 0,
406 OMAP_HDQ_CTRL_STATUS_DIR
);
407 status
= hdq_data
->hdq_irqstatus
;
408 /* check irqstatus */
409 if (!(status
& OMAP_HDQ_INT_STATUS_RXCOMPLETE
)) {
410 dev_dbg(hdq_data
->dev
, "timeout waiting for"
411 " RXCOMPLETE, %x", status
);
416 /* the data is ready. Read it in! */
417 *val
= hdq_reg_in(hdq_data
, OMAP_HDQ_RX_DATA
);
419 mutex_unlock(&hdq_data
->hdq_mutex
);
425 /* Enable clocks and set the controller to HDQ/1W mode */
426 static int omap_hdq_get(struct hdq_data
*hdq_data
)
430 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
436 if (OMAP_HDQ_MAX_USER
== hdq_data
->hdq_usecount
) {
437 dev_dbg(hdq_data
->dev
, "attempt to exceed the max use count");
441 hdq_data
->hdq_usecount
++;
442 try_module_get(THIS_MODULE
);
443 if (1 == hdq_data
->hdq_usecount
) {
445 pm_runtime_get_sync(hdq_data
->dev
);
447 /* make sure HDQ/1W is out of reset */
448 if (!(hdq_reg_in(hdq_data
, OMAP_HDQ_SYSSTATUS
) &
449 OMAP_HDQ_SYSSTATUS_RESETDONE
)) {
450 ret
= _omap_hdq_reset(hdq_data
);
452 /* back up the count */
453 hdq_data
->hdq_usecount
--;
455 /* select HDQ/1W mode & enable clocks */
456 hdq_reg_out(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
457 OMAP_HDQ_CTRL_STATUS_CLOCKENABLE
|
458 OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK
|
460 hdq_reg_out(hdq_data
, OMAP_HDQ_SYSCONFIG
,
461 OMAP_HDQ_SYSCONFIG_NOIDLE
);
462 hdq_reg_in(hdq_data
, OMAP_HDQ_INT_STATUS
);
468 mutex_unlock(&hdq_data
->hdq_mutex
);
473 /* Disable clocks to the module */
474 static int omap_hdq_put(struct hdq_data
*hdq_data
)
478 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
482 hdq_reg_out(hdq_data
, OMAP_HDQ_SYSCONFIG
,
483 OMAP_HDQ_SYSCONFIG_AUTOIDLE
);
484 if (0 == hdq_data
->hdq_usecount
) {
485 dev_dbg(hdq_data
->dev
, "attempt to decrement use count"
489 hdq_data
->hdq_usecount
--;
490 module_put(THIS_MODULE
);
491 if (0 == hdq_data
->hdq_usecount
)
492 pm_runtime_put_sync(hdq_data
->dev
);
494 mutex_unlock(&hdq_data
->hdq_mutex
);
500 * W1 triplet callback function - used for searching ROM addresses.
501 * Registered only when controller is in 1-wire mode.
503 static u8
omap_w1_triplet(void *_hdq
, u8 bdir
)
507 u8 ret
= 0x3; /* no slaves responded */
508 struct hdq_data
*hdq_data
= _hdq
;
509 u8 ctrl
= OMAP_HDQ_CTRL_STATUS_SINGLE
| OMAP_HDQ_CTRL_STATUS_GO
|
510 OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK
;
511 u8 mask
= ctrl
| OMAP_HDQ_CTRL_STATUS_DIR
;
515 err
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
517 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
521 hdq_data
->hdq_irqstatus
= 0;
523 hdq_reg_merge(_hdq
, OMAP_HDQ_CTRL_STATUS
,
524 ctrl
| OMAP_HDQ_CTRL_STATUS_DIR
, mask
);
525 err
= wait_event_timeout(hdq_wait_queue
,
526 (hdq_data
->hdq_irqstatus
527 & OMAP_HDQ_INT_STATUS_RXCOMPLETE
),
530 dev_dbg(hdq_data
->dev
, "RX wait elapsed\n");
533 id_bit
= (hdq_reg_in(_hdq
, OMAP_HDQ_RX_DATA
) & 0x01);
535 hdq_data
->hdq_irqstatus
= 0;
537 hdq_reg_merge(_hdq
, OMAP_HDQ_CTRL_STATUS
,
538 ctrl
| OMAP_HDQ_CTRL_STATUS_DIR
, mask
);
539 err
= wait_event_timeout(hdq_wait_queue
,
540 (hdq_data
->hdq_irqstatus
541 & OMAP_HDQ_INT_STATUS_RXCOMPLETE
),
544 dev_dbg(hdq_data
->dev
, "RX wait elapsed\n");
547 comp_bit
= (hdq_reg_in(_hdq
, OMAP_HDQ_RX_DATA
) & 0x01);
549 if (id_bit
&& comp_bit
) {
550 ret
= 0x03; /* no slaves responded */
553 if (!id_bit
&& !comp_bit
) {
554 /* Both bits are valid, take the direction given */
555 ret
= bdir
? 0x04 : 0;
557 /* Only one bit is valid, take that direction */
559 ret
= id_bit
? 0x05 : 0x02;
563 hdq_reg_out(_hdq
, OMAP_HDQ_TX_DATA
, bdir
);
564 hdq_reg_merge(_hdq
, OMAP_HDQ_CTRL_STATUS
, ctrl
, mask
);
565 err
= wait_event_timeout(hdq_wait_queue
,
566 (hdq_data
->hdq_irqstatus
567 & OMAP_HDQ_INT_STATUS_TXCOMPLETE
),
570 dev_dbg(hdq_data
->dev
, "TX wait elapsed\n");
574 hdq_reg_merge(_hdq
, OMAP_HDQ_CTRL_STATUS
, 0,
575 OMAP_HDQ_CTRL_STATUS_SINGLE
);
578 mutex_unlock(&hdq_data
->hdq_mutex
);
585 static u8
omap_w1_reset_bus(void *_hdq
)
588 omap_hdq_break(_hdq
);
593 /* Read a byte of data from the device */
594 static u8
omap_w1_read_byte(void *_hdq
)
596 struct hdq_data
*hdq_data
= _hdq
;
600 /* First write to initialize the transfer */
601 if (hdq_data
->init_trans
== 0)
602 omap_hdq_get(hdq_data
);
604 ret
= hdq_read_byte(hdq_data
, &val
);
606 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
608 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
611 hdq_data
->init_trans
= 0;
612 mutex_unlock(&hdq_data
->hdq_mutex
);
613 omap_hdq_put(hdq_data
);
617 hdq_disable_interrupt(hdq_data
, OMAP_HDQ_CTRL_STATUS
,
618 ~OMAP_HDQ_CTRL_STATUS_INTERRUPTMASK
);
620 /* Write followed by a read, release the module */
621 if (hdq_data
->init_trans
) {
622 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
624 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
627 hdq_data
->init_trans
= 0;
628 mutex_unlock(&hdq_data
->hdq_mutex
);
629 omap_hdq_put(hdq_data
);
635 /* Write a byte of data to the device */
636 static void omap_w1_write_byte(void *_hdq
, u8 byte
)
638 struct hdq_data
*hdq_data
= _hdq
;
642 /* First write to initialize the transfer */
643 if (hdq_data
->init_trans
== 0)
644 omap_hdq_get(hdq_data
);
647 * We need to reset the slave before
648 * issuing the SKIP ROM command, else
649 * the slave will not work.
651 if (byte
== W1_SKIP_ROM
)
652 omap_hdq_break(hdq_data
);
654 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
656 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
659 hdq_data
->init_trans
++;
660 mutex_unlock(&hdq_data
->hdq_mutex
);
662 ret
= hdq_write_byte(hdq_data
, byte
, &status
);
664 dev_dbg(hdq_data
->dev
, "TX failure:Ctrl status %x\n", status
);
668 /* Second write, data transferred. Release the module */
669 if (hdq_data
->init_trans
> 1) {
670 omap_hdq_put(hdq_data
);
671 ret
= mutex_lock_interruptible(&hdq_data
->hdq_mutex
);
673 dev_dbg(hdq_data
->dev
, "Could not acquire mutex\n");
676 hdq_data
->init_trans
= 0;
677 mutex_unlock(&hdq_data
->hdq_mutex
);
681 static int omap_hdq_probe(struct platform_device
*pdev
)
683 struct device
*dev
= &pdev
->dev
;
684 struct hdq_data
*hdq_data
;
685 struct resource
*res
;
690 hdq_data
= devm_kzalloc(dev
, sizeof(*hdq_data
), GFP_KERNEL
);
692 dev_dbg(&pdev
->dev
, "unable to allocate memory\n");
697 platform_set_drvdata(pdev
, hdq_data
);
699 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
700 hdq_data
->hdq_base
= devm_ioremap_resource(dev
, res
);
701 if (IS_ERR(hdq_data
->hdq_base
))
702 return PTR_ERR(hdq_data
->hdq_base
);
704 hdq_data
->hdq_usecount
= 0;
706 mutex_init(&hdq_data
->hdq_mutex
);
708 pm_runtime_enable(&pdev
->dev
);
709 ret
= pm_runtime_get_sync(&pdev
->dev
);
711 dev_dbg(&pdev
->dev
, "pm_runtime_get_sync failed\n");
715 ret
= _omap_hdq_reset(hdq_data
);
717 dev_dbg(&pdev
->dev
, "reset failed\n");
721 rev
= hdq_reg_in(hdq_data
, OMAP_HDQ_REVISION
);
722 dev_info(&pdev
->dev
, "OMAP HDQ Hardware Rev %c.%c. Driver in %s mode\n",
723 (rev
>> 4) + '0', (rev
& 0x0f) + '0', "Interrupt");
725 spin_lock_init(&hdq_data
->hdq_spinlock
);
727 irq
= platform_get_irq(pdev
, 0);
733 ret
= devm_request_irq(dev
, irq
, hdq_isr
, 0, "omap_hdq", hdq_data
);
735 dev_dbg(&pdev
->dev
, "could not request irq\n");
739 omap_hdq_break(hdq_data
);
741 pm_runtime_put_sync(&pdev
->dev
);
743 ret
= of_property_read_string(pdev
->dev
.of_node
, "ti,mode", &mode
);
744 if (ret
< 0 || !strcmp(mode
, "hdq")) {
746 omap_w1_master
.search
= omap_w1_search_bus
;
749 omap_w1_master
.triplet
= omap_w1_triplet
;
752 omap_w1_master
.data
= hdq_data
;
754 ret
= w1_add_master_device(&omap_w1_master
);
756 dev_dbg(&pdev
->dev
, "Failure in registering w1 master\n");
763 pm_runtime_put_sync(&pdev
->dev
);
765 pm_runtime_disable(&pdev
->dev
);
770 static int omap_hdq_remove(struct platform_device
*pdev
)
772 struct hdq_data
*hdq_data
= platform_get_drvdata(pdev
);
774 mutex_lock(&hdq_data
->hdq_mutex
);
776 if (hdq_data
->hdq_usecount
) {
777 dev_dbg(&pdev
->dev
, "removed when use count is not zero\n");
778 mutex_unlock(&hdq_data
->hdq_mutex
);
782 mutex_unlock(&hdq_data
->hdq_mutex
);
784 /* remove module dependency */
785 pm_runtime_disable(&pdev
->dev
);
787 w1_remove_master_device(&omap_w1_master
);
792 module_platform_driver(omap_hdq_driver
);
794 module_param(w1_id
, int, S_IRUSR
);
795 MODULE_PARM_DESC(w1_id
, "1-wire id for the slave detection in HDQ mode");
797 MODULE_AUTHOR("Texas Instruments");
798 MODULE_DESCRIPTION("HDQ-1W driver Library");
799 MODULE_LICENSE("GPL");