diff options
author | Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> | 2013-10-17 18:35:31 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2013-10-17 19:40:49 -0400 |
commit | 3fd79ae4275001f293dbd170479e89df6c433226 (patch) | |
tree | 9631bf5f11c69a67381531dadc12079f594cc7ad /arch/x86/platform/intel-mid/intel-mid.c | |
parent | 661b01076500e364c68dd9fdf0ef4216a75e8375 (diff) |
intel_mid: Added custom device_handler support
This patch provides a means to add custom handler for
SFI devices. If you set device_handler as NULL in
device_id table standard SFI device handler will be used.
If its not NULL custom handler will be called.
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Link: http://lkml.kernel.org/r/1382049336-21316-8-git-send-email-david.a.cohen@linux.intel.com
Signed-off-by: David Cohen <david.a.cohen@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/platform/intel-mid/intel-mid.c')
-rw-r--r-- | arch/x86/platform/intel-mid/intel-mid.c | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c index d24c729b24ad..7bfd7847a7a6 100644 --- a/arch/x86/platform/intel-mid/intel-mid.c +++ b/arch/x86/platform/intel-mid/intel-mid.c | |||
@@ -396,6 +396,9 @@ struct devs_id { | |||
396 | u8 type; | 396 | u8 type; |
397 | u8 delay; | 397 | u8 delay; |
398 | void *(*get_platform_data)(void *info); | 398 | void *(*get_platform_data)(void *info); |
399 | /* Custom handler for devices */ | ||
400 | void (*device_handler)(struct sfi_device_table_entry *pentry, | ||
401 | struct devs_id *dev); | ||
399 | }; | 402 | }; |
400 | 403 | ||
401 | /* the offset for the mapping of global gpio pin to irq */ | 404 | /* the offset for the mapping of global gpio pin to irq */ |
@@ -690,28 +693,27 @@ static void *tc35876x_platform_data(void *data) | |||
690 | } | 693 | } |
691 | 694 | ||
692 | static const struct devs_id __initconst device_ids[] = { | 695 | static const struct devs_id __initconst device_ids[] = { |
693 | {"bma023", SFI_DEV_TYPE_I2C, 1, &no_platform_data}, | 696 | {"bma023", SFI_DEV_TYPE_I2C, 1, &no_platform_data, NULL}, |
694 | {"pmic_gpio", SFI_DEV_TYPE_SPI, 1, &pmic_gpio_platform_data}, | 697 | {"pmic_gpio", SFI_DEV_TYPE_SPI, 1, &pmic_gpio_platform_data, NULL}, |
695 | {"pmic_gpio", SFI_DEV_TYPE_IPC, 1, &pmic_gpio_platform_data}, | 698 | {"pmic_gpio", SFI_DEV_TYPE_IPC, 1, &pmic_gpio_platform_data, NULL}, |
696 | {"spi_max3111", SFI_DEV_TYPE_SPI, 0, &max3111_platform_data}, | 699 | {"spi_max3111", SFI_DEV_TYPE_SPI, 0, &max3111_platform_data, NULL}, |
697 | {"i2c_max7315", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data}, | 700 | {"i2c_max7315", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data, NULL}, |
698 | {"i2c_max7315_2", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data}, | 701 | {"i2c_max7315_2", SFI_DEV_TYPE_I2C, 1, &max7315_platform_data, NULL}, |
699 | {"tca6416", SFI_DEV_TYPE_I2C, 1, &tca6416_platform_data}, | 702 | {"tca6416", SFI_DEV_TYPE_I2C, 1, &tca6416_platform_data, NULL}, |
700 | {"emc1403", SFI_DEV_TYPE_I2C, 1, &emc1403_platform_data}, | 703 | {"emc1403", SFI_DEV_TYPE_I2C, 1, &emc1403_platform_data, NULL}, |
701 | {"i2c_accel", SFI_DEV_TYPE_I2C, 0, &lis331dl_platform_data}, | 704 | {"i2c_accel", SFI_DEV_TYPE_I2C, 0, &lis331dl_platform_data, NULL}, |
702 | {"pmic_audio", SFI_DEV_TYPE_IPC, 1, &no_platform_data}, | 705 | {"pmic_audio", SFI_DEV_TYPE_IPC, 1, &no_platform_data, NULL}, |
703 | {"mpu3050", SFI_DEV_TYPE_I2C, 1, &mpu3050_platform_data}, | 706 | {"mpu3050", SFI_DEV_TYPE_I2C, 1, &mpu3050_platform_data, NULL}, |
704 | {"i2c_disp_brig", SFI_DEV_TYPE_I2C, 0, &tc35876x_platform_data}, | 707 | {"i2c_disp_brig", SFI_DEV_TYPE_I2C, 0, &tc35876x_platform_data, NULL}, |
705 | 708 | ||
706 | /* MSIC subdevices */ | 709 | /* MSIC subdevices */ |
707 | {"msic_battery", SFI_DEV_TYPE_IPC, 1, &msic_battery_platform_data}, | 710 | {"msic_battery", SFI_DEV_TYPE_IPC, 1, &msic_battery_platform_data, NULL}, |
708 | {"msic_gpio", SFI_DEV_TYPE_IPC, 1, &msic_gpio_platform_data}, | 711 | {"msic_gpio", SFI_DEV_TYPE_IPC, 1, &msic_gpio_platform_data, NULL}, |
709 | {"msic_audio", SFI_DEV_TYPE_IPC, 1, &msic_audio_platform_data}, | 712 | {"msic_audio", SFI_DEV_TYPE_IPC, 1, &msic_audio_platform_data, NULL}, |
710 | {"msic_power_btn", SFI_DEV_TYPE_IPC, 1, &msic_power_btn_platform_data}, | 713 | {"msic_power_btn", SFI_DEV_TYPE_IPC, 1, &msic_power_btn_platform_data, NULL}, |
711 | {"msic_ocd", SFI_DEV_TYPE_IPC, 1, &msic_ocd_platform_data}, | 714 | {"msic_ocd", SFI_DEV_TYPE_IPC, 1, &msic_ocd_platform_data, NULL}, |
712 | {"msic_thermal", SFI_DEV_TYPE_IPC, 1, &msic_thermal_platform_data}, | 715 | {"msic_thermal", SFI_DEV_TYPE_IPC, 1, &msic_thermal_platform_data, NULL}, |
713 | 716 | { 0 } | |
714 | {}, | ||
715 | }; | 717 | }; |
716 | 718 | ||
717 | #define MAX_IPCDEVS 24 | 719 | #define MAX_IPCDEVS 24 |
@@ -965,20 +967,24 @@ static int __init sfi_parse_devs(struct sfi_table_header *table) | |||
965 | if ((dev == NULL) || (dev->get_platform_data == NULL)) | 967 | if ((dev == NULL) || (dev->get_platform_data == NULL)) |
966 | continue; | 968 | continue; |
967 | 969 | ||
968 | switch (pentry->type) { | 970 | if (dev->device_handler) { |
969 | case SFI_DEV_TYPE_IPC: | 971 | dev->device_handler(pentry, dev); |
970 | sfi_handle_ipc_dev(pentry, dev); | 972 | } else { |
971 | break; | 973 | switch (pentry->type) { |
972 | case SFI_DEV_TYPE_SPI: | 974 | case SFI_DEV_TYPE_IPC: |
973 | sfi_handle_spi_dev(pentry, dev); | 975 | sfi_handle_ipc_dev(pentry, dev); |
974 | break; | 976 | break; |
975 | case SFI_DEV_TYPE_I2C: | 977 | case SFI_DEV_TYPE_SPI: |
976 | sfi_handle_i2c_dev(pentry, dev); | 978 | sfi_handle_spi_dev(pentry, dev); |
977 | break; | 979 | break; |
978 | case SFI_DEV_TYPE_UART: | 980 | case SFI_DEV_TYPE_I2C: |
979 | case SFI_DEV_TYPE_HSI: | 981 | sfi_handle_i2c_dev(pentry, dev); |
980 | default: | 982 | break; |
981 | ; | 983 | case SFI_DEV_TYPE_UART: |
984 | case SFI_DEV_TYPE_HSI: | ||
985 | default: | ||
986 | break; | ||
987 | } | ||
982 | } | 988 | } |
983 | } | 989 | } |
984 | return 0; | 990 | return 0; |