diff options
Diffstat (limited to 'sound/soc/intel/atom/sst/sst_acpi.c')
| -rw-r--r-- | sound/soc/intel/atom/sst/sst_acpi.c | 230 | 
1 files changed, 168 insertions, 62 deletions
diff --git a/sound/soc/intel/atom/sst/sst_acpi.c b/sound/soc/intel/atom/sst/sst_acpi.c index dd250b8b26f2..0e928d54305d 100644 --- a/sound/soc/intel/atom/sst/sst_acpi.c +++ b/sound/soc/intel/atom/sst/sst_acpi.c @@ -303,8 +303,6 @@ static int sst_acpi_probe(struct platform_device *pdev)  		dev_err(dev, "No matching machine driver found\n");  		return -ENODEV;  	} -	if (mach->machine_quirk) -		mach = mach->machine_quirk(mach);  	pdata = mach->pdata; @@ -360,23 +358,9 @@ static int sst_acpi_probe(struct platform_device *pdev)  	if (ret < 0)  		return ret; -	/* need to save shim registers in BYT */ -	ctx->shim_regs64 = devm_kzalloc(ctx->dev, sizeof(*ctx->shim_regs64), -					GFP_KERNEL); -	if (!ctx->shim_regs64) { -		ret = -ENOMEM; -		goto do_sst_cleanup; -	} -  	sst_configure_runtime_pm(ctx);  	platform_set_drvdata(pdev, ctx);  	return ret; - -do_sst_cleanup: -	sst_context_cleanup(ctx); -	platform_set_drvdata(pdev, NULL); -	dev_err(ctx->dev, "failed with %d\n", ret); -	return ret;  }  /** @@ -453,12 +437,20 @@ static const struct dmi_system_id cht_table[] = {  static struct sst_acpi_mach cht_surface_mach = { -	"10EC5640", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -								&chv_platform_data }; +	.id = "10EC5640", +	.drv_name = "cht-bsw-rt5645", +	.fw_filename = "intel/fw_sst_22a8.bin", +	.board = "cht-bsw", +	.pdata = &chv_platform_data, +};  static struct sst_acpi_mach byt_thinkpad_10 = { -	"10EC5640", "cht-bsw-rt5672", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, -	                                                        &byt_rvp_platform_data }; +	.id = "10EC5640", +	.drv_name = "cht-bsw-rt5672", +	.fw_filename = "intel/fw_sst_0f28.bin", +	.board = "cht-bsw", +	.pdata = &byt_rvp_platform_data, +};  static struct sst_acpi_mach *cht_quirk(void *arg)  { @@ -486,68 +478,182 @@ static struct sst_acpi_mach *byt_quirk(void *arg)  static struct sst_acpi_mach sst_acpi_bytcr[] = { -	{"10EC5640", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", byt_quirk, -						&byt_rvp_platform_data }, -	{"10EC5642", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL, -						&byt_rvp_platform_data }, -	{"INTCCFFD", "bytcr_rt5640", "intel/fw_sst_0f28.bin", "bytcr_rt5640", NULL, -						&byt_rvp_platform_data }, -	{"10EC5651", "bytcr_rt5651", "intel/fw_sst_0f28.bin", "bytcr_rt5651", NULL, -						&byt_rvp_platform_data }, -	{"DLGS7212", "bytcht_da7213", "intel/fw_sst_0f28.bin", "bytcht_da7213", NULL, -						&byt_rvp_platform_data }, -	{"DLGS7213", "bytcht_da7213", "intel/fw_sst_0f28.bin", "bytcht_da7213", NULL, -						&byt_rvp_platform_data }, +	{ +		.id = "10EC5640", +		.drv_name = "bytcr_rt5640", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcr_rt5640", +		.machine_quirk = byt_quirk, +		.pdata = &byt_rvp_platform_data, +	}, +	{ +		.id = "10EC5642", +		.drv_name = "bytcr_rt5640", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcr_rt5640", +		.pdata = &byt_rvp_platform_data +	}, +	{ +		.id = "INTCCFFD", +		.drv_name = "bytcr_rt5640", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcr_rt5640", +		.pdata = &byt_rvp_platform_data +	}, +	{ +		.id = "10EC5651", +		.drv_name = "bytcr_rt5651", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcr_rt5651", +		.pdata = &byt_rvp_platform_data +	}, +	{ +		.id = "DLGS7212", +		.drv_name = "bytcht_da7213", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcht_da7213", +		.pdata = &byt_rvp_platform_data +	}, +	{ +		.id = "DLGS7213", +		.drv_name = "bytcht_da7213", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcht_da7213", +		.pdata = &byt_rvp_platform_data +	},  	/* some Baytrail platforms rely on RT5645, use CHT machine driver */ -	{"10EC5645", "cht-bsw-rt5645", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, -						&byt_rvp_platform_data }, -	{"10EC5648", "cht-bsw-rt5645", "intel/fw_sst_0f28.bin", "cht-bsw", NULL, -						&byt_rvp_platform_data }, +	{ +		.id = "10EC5645", +		.drv_name = "cht-bsw-rt5645", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "cht-bsw", +		.pdata = &byt_rvp_platform_data +	}, +	{ +		.id = "10EC5648", +		.drv_name = "cht-bsw-rt5645", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "cht-bsw", +		.pdata = &byt_rvp_platform_data +	},  #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)  	/*  	 * This is always last in the table so that it is selected only when  	 * enabled explicitly and there is no codec-related information in SSDT  	 */ -	{"80860F28", "bytcht_nocodec", "intel/fw_sst_0f28.bin", "bytcht_nocodec", NULL, -						&byt_rvp_platform_data }, +	{ +		.id = "80860F28", +		.drv_name = "bytcht_nocodec", +		.fw_filename = "intel/fw_sst_0f28.bin", +		.board = "bytcht_nocodec", +		.pdata = &byt_rvp_platform_data +	},  #endif  	{},  };  /* Cherryview-based platforms: CherryTrail and Braswell */  static struct sst_acpi_mach sst_acpi_chv[] = { -	{"10EC5670", "cht-bsw-rt5672", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, -	{"10EC5672", "cht-bsw-rt5672", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, -	{"10EC5645", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, -	{"10EC5650", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, -	{"10EC3270", "cht-bsw-rt5645", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, +	{ +		.id = "10EC5670", +		.drv_name = "cht-bsw-rt5672", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "10EC5672", +		.drv_name = "cht-bsw-rt5672", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "10EC5645", +		.drv_name = "cht-bsw-rt5645", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "10EC5650", +		.drv_name = "cht-bsw-rt5645", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "10EC3270", +		.drv_name = "cht-bsw-rt5645", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, -	{"193C9890", "cht-bsw-max98090", "intel/fw_sst_22a8.bin", "cht-bsw", NULL, -						&chv_platform_data }, -	{"DLGS7212", "bytcht_da7213", "intel/fw_sst_22a8.bin", "bytcht_da7213", NULL, -						&chv_platform_data }, -	{"DLGS7213", "bytcht_da7213", "intel/fw_sst_22a8.bin", "bytcht_da7213", NULL, -						&chv_platform_data }, +	{ +		.id = "193C9890", +		.drv_name = "cht-bsw-max98090", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "cht-bsw", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "DLGS7212", +		.drv_name = "bytcht_da7213", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcht_da7213", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "DLGS7213", +		.drv_name = "bytcht_da7213", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcht_da7213", +		.pdata = &chv_platform_data +	}, +	{ +		.id = "ESSX8316", +		.drv_name = "bytcht_es8316", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcht_es8316", +		.pdata = &chv_platform_data +	},  	/* some CHT-T platforms rely on RT5640, use Baytrail machine driver */ -	{"10EC5640", "bytcr_rt5640", "intel/fw_sst_22a8.bin", "bytcr_rt5640", cht_quirk, -						&chv_platform_data }, -	{"10EC3276", "bytcr_rt5640", "intel/fw_sst_22a8.bin", "bytcr_rt5640", NULL, -						&chv_platform_data }, +	{ +		.id = "10EC5640", +		.drv_name = "bytcr_rt5640", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcr_rt5640", +		.machine_quirk = cht_quirk, +		.pdata = &chv_platform_data +	}, +	{ +		.id = "10EC3276", +		.drv_name = "bytcr_rt5640", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcr_rt5640", +		.pdata = &chv_platform_data +	},  	/* some CHT-T platforms rely on RT5651, use Baytrail machine driver */ -	{"10EC5651", "bytcr_rt5651", "intel/fw_sst_22a8.bin", "bytcr_rt5651", NULL, -						&chv_platform_data }, +	{ +		.id = "10EC5651", +		.drv_name = "bytcr_rt5651", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcr_rt5651", +		.pdata = &chv_platform_data +	},  #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)  	/*  	 * This is always last in the table so that it is selected only when  	 * enabled explicitly and there is no codec-related information in SSDT  	 */ -	{"808622A8", "bytcht_nocodec", "intel/fw_sst_22a8.bin", "bytcht_nocodec", NULL, -						&chv_platform_data }, +	{ +		.id = "808622A8", +		.drv_name = "bytcht_nocodec", +		.fw_filename = "intel/fw_sst_22a8.bin", +		.board = "bytcht_nocodec", +		.pdata = &chv_platform_data +	},  #endif  	{},  };  | 
