@@ -60,6 +60,16 @@ static void regmap_irq_lock(struct irq_data *data)
60
60
mutex_lock (& d -> lock );
61
61
}
62
62
63
+ static int regmap_irq_update_bits (struct regmap_irq_chip_data * d ,
64
+ unsigned int reg , unsigned int mask ,
65
+ unsigned int val )
66
+ {
67
+ if (d -> chip -> mask_writeonly )
68
+ return regmap_write_bits (d -> map , reg , mask , val );
69
+ else
70
+ return regmap_update_bits (d -> map , reg , mask , val );
71
+ }
72
+
63
73
static void regmap_irq_sync_unlock (struct irq_data * data )
64
74
{
65
75
struct regmap_irq_chip_data * d = irq_data_get_irq_chip_data (data );
@@ -84,11 +94,11 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
84
94
reg = d -> chip -> mask_base +
85
95
(i * map -> reg_stride * d -> irq_reg_stride );
86
96
if (d -> chip -> mask_invert ) {
87
- ret = regmap_update_bits ( d -> map , reg ,
97
+ ret = regmap_irq_update_bits ( d , reg ,
88
98
d -> mask_buf_def [i ], ~d -> mask_buf [i ]);
89
99
} else if (d -> chip -> unmask_base ) {
90
100
/* set mask with mask_base register */
91
- ret = regmap_update_bits ( d -> map , reg ,
101
+ ret = regmap_irq_update_bits ( d , reg ,
92
102
d -> mask_buf_def [i ], ~d -> mask_buf [i ]);
93
103
if (ret < 0 )
94
104
dev_err (d -> map -> dev ,
@@ -97,12 +107,12 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
97
107
unmask_offset = d -> chip -> unmask_base -
98
108
d -> chip -> mask_base ;
99
109
/* clear mask with unmask_base register */
100
- ret = regmap_update_bits ( d -> map ,
110
+ ret = regmap_irq_update_bits ( d ,
101
111
reg + unmask_offset ,
102
112
d -> mask_buf_def [i ],
103
113
d -> mask_buf [i ]);
104
114
} else {
105
- ret = regmap_update_bits ( d -> map , reg ,
115
+ ret = regmap_irq_update_bits ( d , reg ,
106
116
d -> mask_buf_def [i ], d -> mask_buf [i ]);
107
117
}
108
118
if (ret != 0 )
@@ -113,11 +123,11 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
113
123
(i * map -> reg_stride * d -> irq_reg_stride );
114
124
if (d -> wake_buf ) {
115
125
if (d -> chip -> wake_invert )
116
- ret = regmap_update_bits ( d -> map , reg ,
126
+ ret = regmap_irq_update_bits ( d , reg ,
117
127
d -> mask_buf_def [i ],
118
128
~d -> wake_buf [i ]);
119
129
else
120
- ret = regmap_update_bits ( d -> map , reg ,
130
+ ret = regmap_irq_update_bits ( d , reg ,
121
131
d -> mask_buf_def [i ],
122
132
d -> wake_buf [i ]);
123
133
if (ret != 0 )
@@ -153,10 +163,10 @@ static void regmap_irq_sync_unlock(struct irq_data *data)
153
163
reg = d -> chip -> type_base +
154
164
(i * map -> reg_stride * d -> type_reg_stride );
155
165
if (d -> chip -> type_invert )
156
- ret = regmap_update_bits ( d -> map , reg ,
166
+ ret = regmap_irq_update_bits ( d , reg ,
157
167
d -> type_buf_def [i ], ~d -> type_buf [i ]);
158
168
else
159
- ret = regmap_update_bits ( d -> map , reg ,
169
+ ret = regmap_irq_update_bits ( d , reg ,
160
170
d -> type_buf_def [i ], d -> type_buf [i ]);
161
171
if (ret != 0 )
162
172
dev_err (d -> map -> dev , "Failed to sync type in %x\n" ,
@@ -519,17 +529,17 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
519
529
reg = chip -> mask_base +
520
530
(i * map -> reg_stride * d -> irq_reg_stride );
521
531
if (chip -> mask_invert )
522
- ret = regmap_update_bits ( map , reg ,
532
+ ret = regmap_irq_update_bits ( d , reg ,
523
533
d -> mask_buf [i ], ~d -> mask_buf [i ]);
524
534
else if (d -> chip -> unmask_base ) {
525
535
unmask_offset = d -> chip -> unmask_base -
526
536
d -> chip -> mask_base ;
527
- ret = regmap_update_bits ( d -> map ,
537
+ ret = regmap_irq_update_bits ( d ,
528
538
reg + unmask_offset ,
529
539
d -> mask_buf [i ],
530
540
d -> mask_buf [i ]);
531
541
} else
532
- ret = regmap_update_bits ( map , reg ,
542
+ ret = regmap_irq_update_bits ( d , reg ,
533
543
d -> mask_buf [i ], d -> mask_buf [i ]);
534
544
if (ret != 0 ) {
535
545
dev_err (map -> dev , "Failed to set masks in 0x%x: %d\n" ,
@@ -575,11 +585,11 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
575
585
(i * map -> reg_stride * d -> irq_reg_stride );
576
586
577
587
if (chip -> wake_invert )
578
- ret = regmap_update_bits ( map , reg ,
588
+ ret = regmap_irq_update_bits ( d , reg ,
579
589
d -> mask_buf_def [i ],
580
590
0 );
581
591
else
582
- ret = regmap_update_bits ( map , reg ,
592
+ ret = regmap_irq_update_bits ( d , reg ,
583
593
d -> mask_buf_def [i ],
584
594
d -> wake_buf [i ]);
585
595
if (ret != 0 ) {
@@ -603,10 +613,10 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
603
613
reg = chip -> type_base +
604
614
(i * map -> reg_stride * d -> type_reg_stride );
605
615
if (chip -> type_invert )
606
- ret = regmap_update_bits ( map , reg ,
616
+ ret = regmap_irq_update_bits ( d , reg ,
607
617
d -> type_buf_def [i ], 0xFF );
608
618
else
609
- ret = regmap_update_bits ( map , reg ,
619
+ ret = regmap_irq_update_bits ( d , reg ,
610
620
d -> type_buf_def [i ], 0x0 );
611
621
if (ret != 0 ) {
612
622
dev_err (map -> dev ,
0 commit comments