@@ -52,7 +52,6 @@ MODULE_PARM_DESC(irq, "ACCES 104-QUAD-8 interrupt line numbers");
52
52
*/
53
53
struct quad8 {
54
54
spinlock_t lock ;
55
- struct counter_device counter ;
56
55
unsigned int fck_prescaler [QUAD8_NUM_COUNTERS ];
57
56
unsigned int preset [QUAD8_NUM_COUNTERS ];
58
57
unsigned int count_mode [QUAD8_NUM_COUNTERS ];
@@ -1083,7 +1082,8 @@ static struct counter_count quad8_counts[] = {
1083
1082
1084
1083
static irqreturn_t quad8_irq_handler (int irq , void * private )
1085
1084
{
1086
- struct quad8 * const priv = private ;
1085
+ struct counter_device * counter = private ;
1086
+ struct quad8 * const priv = counter_priv (counter );
1087
1087
const unsigned long base = priv -> base ;
1088
1088
unsigned long irq_status ;
1089
1089
unsigned long channel ;
@@ -1114,7 +1114,7 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
1114
1114
continue ;
1115
1115
}
1116
1116
1117
- counter_push_event (& priv -> counter , event , channel );
1117
+ counter_push_event (counter , event , channel );
1118
1118
}
1119
1119
1120
1120
/* Clear pending interrupts on device */
@@ -1125,6 +1125,7 @@ static irqreturn_t quad8_irq_handler(int irq, void *private)
1125
1125
1126
1126
static int quad8_probe (struct device * dev , unsigned int id )
1127
1127
{
1128
+ struct counter_device * counter ;
1128
1129
struct quad8 * priv ;
1129
1130
int i , j ;
1130
1131
unsigned int base_offset ;
@@ -1136,19 +1137,19 @@ static int quad8_probe(struct device *dev, unsigned int id)
1136
1137
return - EBUSY ;
1137
1138
}
1138
1139
1139
- priv = devm_kzalloc (dev , sizeof (* priv ), GFP_KERNEL );
1140
- if (!priv )
1140
+ counter = devm_counter_alloc (dev , sizeof (* priv ));
1141
+ if (!counter )
1141
1142
return - ENOMEM ;
1143
+ priv = counter_priv (counter );
1142
1144
1143
1145
/* Initialize Counter device and driver data */
1144
- priv -> counter .name = dev_name (dev );
1145
- priv -> counter .parent = dev ;
1146
- priv -> counter .ops = & quad8_ops ;
1147
- priv -> counter .counts = quad8_counts ;
1148
- priv -> counter .num_counts = ARRAY_SIZE (quad8_counts );
1149
- priv -> counter .signals = quad8_signals ;
1150
- priv -> counter .num_signals = ARRAY_SIZE (quad8_signals );
1151
- priv -> counter .priv = priv ;
1146
+ counter -> name = dev_name (dev );
1147
+ counter -> parent = dev ;
1148
+ counter -> ops = & quad8_ops ;
1149
+ counter -> counts = quad8_counts ;
1150
+ counter -> num_counts = ARRAY_SIZE (quad8_counts );
1151
+ counter -> signals = quad8_signals ;
1152
+ counter -> num_signals = ARRAY_SIZE (quad8_signals );
1152
1153
priv -> base = base [id ];
1153
1154
1154
1155
spin_lock_init (& priv -> lock );
@@ -1188,11 +1189,15 @@ static int quad8_probe(struct device *dev, unsigned int id)
1188
1189
outb (QUAD8_CHAN_OP_ENABLE_INTERRUPT_FUNC , base [id ] + QUAD8_REG_CHAN_OP );
1189
1190
1190
1191
err = devm_request_irq (dev , irq [id ], quad8_irq_handler , IRQF_SHARED ,
1191
- priv -> counter . name , priv );
1192
+ counter -> name , counter );
1192
1193
if (err )
1193
1194
return err ;
1194
1195
1195
- return devm_counter_register (dev , & priv -> counter );
1196
+ err = devm_counter_add (dev , counter );
1197
+ if (err < 0 )
1198
+ return dev_err_probe (dev , err , "Failed to add counter\n" );
1199
+
1200
+ return 0 ;
1196
1201
}
1197
1202
1198
1203
static struct isa_driver quad8_driver = {
0 commit comments