@@ -268,26 +268,28 @@ static const struct regmap_irq_chip s5m8767_irq_chip = {
268268 .ack_base = S5M8767_REG_INT1 ,
269269};
270270
271- static int s2mpg1x_add_chained_irq_chip (struct device * dev , struct regmap * regmap , int pirq ,
272- struct regmap_irq_chip_data * parent ,
273- const struct regmap_irq_chip * chip ,
274- struct regmap_irq_chip_data * * data )
271+ static struct regmap_irq_chip_data *
272+ s2mpg1x_add_chained_pmic (struct sec_pmic_dev * sec_pmic , int pirq ,
273+ struct regmap_irq_chip_data * parent , const struct regmap_irq_chip * chip )
275274{
275+ struct device * dev = sec_pmic -> dev ;
276+ struct regmap_irq_chip_data * data ;
276277 int irq , ret ;
277278
278279 irq = regmap_irq_get_virq (parent , pirq );
279280 if (irq < 0 )
280- return dev_err_probe (dev , irq , "Failed to get parent vIRQ(%d) for chip %s\n" , pirq ,
281- chip -> name );
281+ return dev_err_ptr_probe (dev , irq , "Failed to get parent vIRQ(%d) for chip %s\n" ,
282+ pirq , chip -> name );
282283
283- ret = devm_regmap_add_irq_chip (dev , regmap , irq , IRQF_ONESHOT | IRQF_SHARED , 0 , chip , data );
284+ ret = devm_regmap_add_irq_chip (dev , sec_pmic -> regmap_pmic , irq ,
285+ IRQF_ONESHOT | IRQF_SHARED , 0 , chip , & data );
284286 if (ret )
285- return dev_err_probe (dev , ret , "Failed to add %s IRQ chip\n" , chip -> name );
287+ return dev_err_ptr_probe (dev , ret , "Failed to add %s IRQ chip\n" , chip -> name );
286288
287- return 0 ;
289+ return data ;
288290}
289291
290- static int sec_irq_init_s2mpg1x (struct sec_pmic_dev * sec_pmic )
292+ static struct regmap_irq_chip_data * sec_irq_init_s2mpg1x (struct sec_pmic_dev * sec_pmic )
291293{
292294 const struct regmap_irq_chip * irq_chip , * chained_irq_chip ;
293295 struct regmap_irq_chip_data * irq_data ;
@@ -302,27 +304,27 @@ static int sec_irq_init_s2mpg1x(struct sec_pmic_dev *sec_pmic)
302304 chained_pirq = S2MPG10_COMMON_IRQ_PMIC ;
303305 break ;
304306 default :
305- return dev_err_probe (sec_pmic -> dev , - EINVAL , "Unsupported device type %d\n" ,
306- sec_pmic -> device_type );
307+ return dev_err_ptr_probe (sec_pmic -> dev , - EINVAL , "Unsupported device type %d\n" ,
308+ sec_pmic -> device_type );
307309 }
308310
309311 regmap_common = dev_get_regmap (sec_pmic -> dev , "common" );
310312 if (!regmap_common )
311- return dev_err_probe (sec_pmic -> dev , - EINVAL , "No 'common' regmap %d\n" ,
312- sec_pmic -> device_type );
313+ return dev_err_ptr_probe (sec_pmic -> dev , - EINVAL , "No 'common' regmap %d\n" ,
314+ sec_pmic -> device_type );
313315
314316 ret = devm_regmap_add_irq_chip (sec_pmic -> dev , regmap_common , sec_pmic -> irq , IRQF_ONESHOT , 0 ,
315317 irq_chip , & irq_data );
316318 if (ret )
317- return dev_err_probe (sec_pmic -> dev , ret , "Failed to add %s IRQ chip\n" ,
318- irq_chip -> name );
319+ return dev_err_ptr_probe (sec_pmic -> dev , ret , "Failed to add %s IRQ chip\n" ,
320+ irq_chip -> name );
319321
320- return s2mpg1x_add_chained_irq_chip (sec_pmic -> dev , sec_pmic -> regmap_pmic , chained_pirq ,
321- irq_data , chained_irq_chip , & sec_pmic -> irq_data );
322+ return s2mpg1x_add_chained_pmic (sec_pmic , chained_pirq , irq_data , chained_irq_chip );
322323}
323324
324- int sec_irq_init (struct sec_pmic_dev * sec_pmic )
325+ struct regmap_irq_chip_data * sec_irq_init (struct sec_pmic_dev * sec_pmic )
325326{
327+ struct regmap_irq_chip_data * sec_irq_chip_data ;
326328 const struct regmap_irq_chip * sec_irq_chip ;
327329 int ret ;
328330
@@ -331,7 +333,7 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
331333 sec_irq_chip = & s5m8767_irq_chip ;
332334 break ;
333335 case S2DOS05 :
334- return 0 ;
336+ return NULL ;
335337 case S2MPA01 :
336338 sec_irq_chip = & s2mps14_irq_chip ;
337339 break ;
@@ -356,30 +358,22 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
356358 sec_irq_chip = & s2mpu05_irq_chip ;
357359 break ;
358360 default :
359- return dev_err_probe (sec_pmic -> dev , - EINVAL ,
360- "Unsupported device type %d\n" ,
361- sec_pmic -> device_type );
361+ return dev_err_ptr_probe (sec_pmic -> dev , - EINVAL , "Unsupported device type %d\n" ,
362+ sec_pmic -> device_type );
362363 }
363364
364365 if (!sec_pmic -> irq ) {
365366 dev_warn (sec_pmic -> dev ,
366367 "No interrupt specified, no interrupts\n" );
367- return 0 ;
368+ return NULL ;
368369 }
369370
370371 ret = devm_regmap_add_irq_chip (sec_pmic -> dev , sec_pmic -> regmap_pmic ,
371372 sec_pmic -> irq , IRQF_ONESHOT ,
372- 0 , sec_irq_chip , & sec_pmic -> irq_data );
373+ 0 , sec_irq_chip , & sec_irq_chip_data );
373374 if (ret )
374- return dev_err_probe (sec_pmic -> dev , ret ,
375- "Failed to add %s IRQ chip\n" ,
376- sec_irq_chip -> name );
375+ return dev_err_ptr_probe (sec_pmic -> dev , ret , "Failed to add %s IRQ chip\n" ,
376+ sec_irq_chip -> name );
377377
378- /*
379- * The rtc-s5m driver requests S2MPS14_IRQ_RTCA0 also for S2MPS11
380- * so the interrupt number must be consistent.
381- */
382- BUILD_BUG_ON (((enum s2mps14_irq )S2MPS11_IRQ_RTCA0 ) != S2MPS14_IRQ_RTCA0 );
383-
384- return 0 ;
378+ return sec_irq_chip_data ;
385379}
0 commit comments