x86/sfi: Enable enumeration of SD devices
SFI specification v0.8.2 defines type of devices which are connected to SD bus. In particularly WiFi dongle is a such. Add a callback to enumerate the devices connected to SD bus. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Bjorn Helgaas <bhelgaas@google.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1468322192-62080-1-git-send-email-andriy.shevchenko@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Родитель
707a605b5a
Коммит
05f310e26f
|
@ -49,6 +49,21 @@ struct devs_id {
|
||||||
static const struct devs_id *const __intel_mid_sfi_##i##_dev __used \
|
static const struct devs_id *const __intel_mid_sfi_##i##_dev __used \
|
||||||
__attribute__((__section__(".x86_intel_mid_dev.init"))) = &i
|
__attribute__((__section__(".x86_intel_mid_dev.init"))) = &i
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mid_sd_board_info - template for SD device creation
|
||||||
|
* @name: identifies the driver
|
||||||
|
* @bus_num: board-specific identifier for a given SD controller
|
||||||
|
* @max_clk: the maximum frequency device supports
|
||||||
|
* @platform_data: the particular data stored there is driver-specific
|
||||||
|
*/
|
||||||
|
struct mid_sd_board_info {
|
||||||
|
char name[SFI_NAME_LEN];
|
||||||
|
int bus_num;
|
||||||
|
unsigned short addr;
|
||||||
|
u32 max_clk;
|
||||||
|
void *platform_data;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Medfield is the follow-up of Moorestown, it combines two chip solution into
|
* Medfield is the follow-up of Moorestown, it combines two chip solution into
|
||||||
* one. Other than that it also added always-on and constant tsc and lapic
|
* one. Other than that it also added always-on and constant tsc and lapic
|
||||||
|
|
|
@ -407,6 +407,32 @@ static void __init sfi_handle_i2c_dev(struct sfi_device_table_entry *pentry,
|
||||||
i2c_register_board_info(pentry->host_num, &i2c_info, 1);
|
i2c_register_board_info(pentry->host_num, &i2c_info, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init sfi_handle_sd_dev(struct sfi_device_table_entry *pentry,
|
||||||
|
struct devs_id *dev)
|
||||||
|
{
|
||||||
|
struct mid_sd_board_info sd_info;
|
||||||
|
void *pdata;
|
||||||
|
|
||||||
|
memset(&sd_info, 0, sizeof(sd_info));
|
||||||
|
strncpy(sd_info.name, pentry->name, SFI_NAME_LEN);
|
||||||
|
sd_info.bus_num = pentry->host_num;
|
||||||
|
sd_info.max_clk = pentry->max_freq;
|
||||||
|
sd_info.addr = pentry->addr;
|
||||||
|
pr_debug("SD bus = %d, name = %16.16s, max_clk = %d, addr = 0x%x\n",
|
||||||
|
sd_info.bus_num,
|
||||||
|
sd_info.name,
|
||||||
|
sd_info.max_clk,
|
||||||
|
sd_info.addr);
|
||||||
|
pdata = intel_mid_sfi_get_pdata(dev, &sd_info);
|
||||||
|
if (IS_ERR(pdata))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Nothing we can do with this for now */
|
||||||
|
sd_info.platform_data = pdata;
|
||||||
|
|
||||||
|
pr_debug("Successfully registered %16.16s", sd_info.name);
|
||||||
|
}
|
||||||
|
|
||||||
extern struct devs_id *const __x86_intel_mid_dev_start[],
|
extern struct devs_id *const __x86_intel_mid_dev_start[],
|
||||||
*const __x86_intel_mid_dev_end[];
|
*const __x86_intel_mid_dev_end[];
|
||||||
|
|
||||||
|
@ -490,6 +516,9 @@ static int __init sfi_parse_devs(struct sfi_table_header *table)
|
||||||
case SFI_DEV_TYPE_I2C:
|
case SFI_DEV_TYPE_I2C:
|
||||||
sfi_handle_i2c_dev(pentry, dev);
|
sfi_handle_i2c_dev(pentry, dev);
|
||||||
break;
|
break;
|
||||||
|
case SFI_DEV_TYPE_SD:
|
||||||
|
sfi_handle_sd_dev(pentry, dev);
|
||||||
|
break;
|
||||||
case SFI_DEV_TYPE_UART:
|
case SFI_DEV_TYPE_UART:
|
||||||
case SFI_DEV_TYPE_HSI:
|
case SFI_DEV_TYPE_HSI:
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -156,6 +156,7 @@ struct sfi_device_table_entry {
|
||||||
#define SFI_DEV_TYPE_UART 2
|
#define SFI_DEV_TYPE_UART 2
|
||||||
#define SFI_DEV_TYPE_HSI 3
|
#define SFI_DEV_TYPE_HSI 3
|
||||||
#define SFI_DEV_TYPE_IPC 4
|
#define SFI_DEV_TYPE_IPC 4
|
||||||
|
#define SFI_DEV_TYPE_SD 5
|
||||||
|
|
||||||
u8 host_num; /* attached to host 0, 1...*/
|
u8 host_num; /* attached to host 0, 1...*/
|
||||||
u16 addr;
|
u16 addr;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче