Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: Convert wm8350 IRQ handlers to irq_handler_t

This is done as simple code transformation, the semantics of the
IRQ API provided by the core are are still very different to those
of genirq (mainly with regard to masking).

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

Mark Brown and committed by
Samuel Ortiz
5a65edbc b9f96b5d

+59 -34
+3 -3
drivers/mfd/wm8350-irq.c
··· 371 371 mutex_lock(&wm8350->irq_mutex); 372 372 373 373 if (wm8350->irq[irq].handler) 374 - wm8350->irq[irq].handler(wm8350, irq, wm8350->irq[irq].data); 374 + wm8350->irq[irq].handler(irq, wm8350->irq[irq].data); 375 375 else { 376 376 dev_err(wm8350->dev, "irq %d nobody cared. now masked.\n", 377 377 irq); ··· 431 431 } 432 432 433 433 int wm8350_register_irq(struct wm8350 *wm8350, int irq, 434 - void (*handler) (struct wm8350 *, int, void *), 435 - void *data) 434 + irq_handler_t handler, unsigned long flags, 435 + const char *name, void *data) 436 436 { 437 437 if (irq < 0 || irq > WM8350_NUM_IRQ || !handler) 438 438 return -EINVAL;
+25 -14
drivers/power/wm8350_power.c
··· 184 184 185 185 static DEVICE_ATTR(charger_state, 0444, charger_state_show, NULL); 186 186 187 - static void wm8350_charger_handler(struct wm8350 *wm8350, int irq, void *data) 187 + static irqreturn_t wm8350_charger_handler(int irq, void *data) 188 188 { 189 + struct wm8350 *wm8350 = data; 189 190 struct wm8350_power *power = &wm8350->power; 190 191 struct wm8350_charger_policy *policy = power->policy; 191 192 ··· 239 238 default: 240 239 dev_err(wm8350->dev, "Unknown interrupt %d\n", irq); 241 240 } 241 + 242 + return IRQ_HANDLED; 242 243 } 243 244 244 245 /********************************************************************* ··· 390 387 { 391 388 /* register our interest in charger events */ 392 389 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, 393 - wm8350_charger_handler, NULL); 390 + wm8350_charger_handler, 0, "Battery hot", wm8350); 394 391 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT); 395 392 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, 396 - wm8350_charger_handler, NULL); 393 + wm8350_charger_handler, 0, "Battery cold", wm8350); 397 394 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD); 398 395 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, 399 - wm8350_charger_handler, NULL); 396 + wm8350_charger_handler, 0, "Battery fail", wm8350); 400 397 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL); 401 398 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO, 402 - wm8350_charger_handler, NULL); 399 + wm8350_charger_handler, 0, 400 + "Charger timeout", wm8350); 403 401 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_TO); 404 402 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END, 405 - wm8350_charger_handler, NULL); 403 + wm8350_charger_handler, 0, 404 + "Charge end", wm8350); 406 405 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_END); 407 406 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START, 408 - wm8350_charger_handler, NULL); 407 + wm8350_charger_handler, 0, 408 + "Charge start", wm8350); 409 409 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_START); 410 410 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, 411 - wm8350_charger_handler, NULL); 411 + wm8350_charger_handler, 0, 412 + "Fast charge ready", wm8350); 412 413 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY); 413 414 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, 414 - wm8350_charger_handler, NULL); 415 + wm8350_charger_handler, 0, 416 + "Battery <3.9V", wm8350); 415 417 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9); 416 418 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, 417 - wm8350_charger_handler, NULL); 419 + wm8350_charger_handler, 0, 420 + "Battery <3.1V", wm8350); 418 421 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1); 419 422 wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, 420 - wm8350_charger_handler, NULL); 423 + wm8350_charger_handler, 0, 424 + "Battery <2.85V", wm8350); 425 + 421 426 wm8350_unmask_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85); 422 427 423 428 /* and supply change events */ 424 429 wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB, 425 - wm8350_charger_handler, NULL); 430 + wm8350_charger_handler, 0, "USB", wm8350); 426 431 wm8350_unmask_irq(wm8350, WM8350_IRQ_EXT_USB_FB); 427 432 wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, 428 - wm8350_charger_handler, NULL); 433 + wm8350_charger_handler, 0, "Wall", wm8350); 429 434 wm8350_unmask_irq(wm8350, WM8350_IRQ_EXT_WALL_FB); 430 435 wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB, 431 - wm8350_charger_handler, NULL); 436 + wm8350_charger_handler, 0, "Battery", wm8350); 432 437 wm8350_unmask_irq(wm8350, WM8350_IRQ_EXT_BAT_FB); 433 438 } 434 439
+5 -2
drivers/regulator/wm8350-regulator.c
··· 1330 1330 }, 1331 1331 }; 1332 1332 1333 - static void pmic_uv_handler(struct wm8350 *wm8350, int irq, void *data) 1333 + static irqreturn_t pmic_uv_handler(int irq, void *data) 1334 1334 { 1335 1335 struct regulator_dev *rdev = (struct regulator_dev *)data; 1336 + struct wm8350 *wm8350 = rdev_get_drvdata(rdev); 1336 1337 1337 1338 mutex_lock(&rdev->mutex); 1338 1339 if (irq == WM8350_IRQ_CS1 || irq == WM8350_IRQ_CS2) ··· 1345 1344 REGULATOR_EVENT_UNDER_VOLTAGE, 1346 1345 wm8350); 1347 1346 mutex_unlock(&rdev->mutex); 1347 + 1348 + return IRQ_HANDLED; 1348 1349 } 1349 1350 1350 1351 static int wm8350_regulator_probe(struct platform_device *pdev) ··· 1391 1388 1392 1389 /* register regulator IRQ */ 1393 1390 ret = wm8350_register_irq(wm8350, wm8350_reg[pdev->id].irq, 1394 - pmic_uv_handler, rdev); 1391 + pmic_uv_handler, 0, "UV", rdev); 1395 1392 if (ret < 0) { 1396 1393 regulator_unregister(rdev); 1397 1394 dev_err(&pdev->dev, "failed to register regulator %s IRQ\n",
+12 -6
drivers/rtc/rtc-wm8350.c
··· 315 315 return 0; 316 316 } 317 317 318 - static void wm8350_rtc_alarm_handler(struct wm8350 *wm8350, int irq, 319 - void *data) 318 + static irqreturn_t wm8350_rtc_alarm_handler(int irq, void *data) 320 319 { 320 + struct wm8350 *wm8350 = data; 321 321 struct rtc_device *rtc = wm8350->rtc.rtc; 322 322 int ret; 323 323 ··· 330 330 dev_err(&(wm8350->rtc.pdev->dev), 331 331 "Failed to disable alarm: %d\n", ret); 332 332 } 333 + 334 + return IRQ_HANDLED; 333 335 } 334 336 335 - static void wm8350_rtc_update_handler(struct wm8350 *wm8350, int irq, 336 - void *data) 337 + static irqreturn_t wm8350_rtc_update_handler(int irq, void *data) 337 338 { 339 + struct wm8350 *wm8350 = data; 338 340 struct rtc_device *rtc = wm8350->rtc.rtc; 339 341 340 342 rtc_update_irq(rtc, 1, RTC_IRQF | RTC_UF); 343 + 344 + return IRQ_HANDLED; 341 345 } 342 346 343 347 static const struct rtc_class_ops wm8350_rtc_ops = { ··· 463 459 wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_PER); 464 460 465 461 wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC, 466 - wm8350_rtc_update_handler, NULL); 462 + wm8350_rtc_update_handler, 0, 463 + "RTC Seconds", wm8350); 467 464 468 465 wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM, 469 - wm8350_rtc_alarm_handler, NULL); 466 + wm8350_rtc_alarm_handler, 0, 467 + "RTC Alarm", wm8350); 470 468 wm8350_unmask_irq(wm8350, WM8350_IRQ_RTC_ALM); 471 469 472 470 return 0;
+4 -4
include/linux/mfd/wm8350/core.h
··· 15 15 16 16 #include <linux/kernel.h> 17 17 #include <linux/mutex.h> 18 - #include <linux/workqueue.h> 18 + #include <linux/interrupt.h> 19 19 20 20 #include <linux/mfd/wm8350/audio.h> 21 21 #include <linux/mfd/wm8350/gpio.h> ··· 601 601 struct wm8350; 602 602 603 603 struct wm8350_irq { 604 - void (*handler) (struct wm8350 *, int, void *); 604 + irq_handler_t handler; 605 605 void *data; 606 606 }; 607 607 ··· 678 678 * WM8350 internal interrupts 679 679 */ 680 680 int wm8350_register_irq(struct wm8350 *wm8350, int irq, 681 - void (*handler) (struct wm8350 *, int, void *), 682 - void *data); 681 + irq_handler_t handler, unsigned long flags, 682 + const char *name, void *data); 683 683 int wm8350_free_irq(struct wm8350 *wm8350, int irq); 684 684 int wm8350_mask_irq(struct wm8350 *wm8350, int irq); 685 685 int wm8350_unmask_irq(struct wm8350 *wm8350, int irq);
+10 -5
sound/soc/codecs/wm8350.c
··· 1340 1340 return 0; 1341 1341 } 1342 1342 1343 - static void wm8350_hp_jack_handler(struct wm8350 *wm8350, int irq, void *data) 1343 + static irqreturn_t wm8350_hp_jack_handler(int irq, void *data) 1344 1344 { 1345 1345 struct wm8350_data *priv = data; 1346 + struct wm8350 *wm8350 = priv->codec.control_data; 1346 1347 u16 reg; 1347 1348 int report; 1348 1349 int mask; ··· 1366 1365 1367 1366 if (!jack->jack) { 1368 1367 dev_warn(wm8350->dev, "Jack interrupt called with no jack\n"); 1369 - return; 1368 + return IRQ_NONE; 1370 1369 } 1371 1370 1372 1371 /* Debounce */ ··· 1379 1378 report = 0; 1380 1379 1381 1380 snd_soc_jack_report(jack->jack, report, jack->report); 1381 + 1382 + return IRQ_HANDLED; 1382 1383 } 1383 1384 1384 1385 /** ··· 1424 1421 wm8350_set_bits(wm8350, WM8350_JACK_DETECT, ena); 1425 1422 1426 1423 /* Sync status */ 1427 - wm8350_hp_jack_handler(wm8350, irq, priv); 1424 + wm8350_hp_jack_handler(irq, priv); 1428 1425 1429 1426 wm8350_unmask_irq(wm8350, irq); 1430 1427 ··· 1488 1485 wm8350_mask_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L); 1489 1486 wm8350_mask_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R); 1490 1487 wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L, 1491 - wm8350_hp_jack_handler, priv); 1488 + wm8350_hp_jack_handler, 0, "Left jack detect", 1489 + priv); 1492 1490 wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R, 1493 - wm8350_hp_jack_handler, priv); 1491 + wm8350_hp_jack_handler, 0, "Right jack detect", 1492 + priv); 1494 1493 1495 1494 ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); 1496 1495 if (ret < 0) {