ALSA: hda: cs35l41: Utilize acpi_get_subsystem_id()
Replace open coded variant of recently introduced acpi_get_subsystem_id(). Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20220905165826.35979-2-andriy.shevchenko@linux.intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
aca289f7cd
commit
7269734abb
@ -842,8 +842,8 @@ static int cs35l41_hda_bind(struct device *dev, struct device *master, void *mas
|
||||
|
||||
comps->dev = dev;
|
||||
if (!cs35l41->acpi_subsystem_id)
|
||||
cs35l41->acpi_subsystem_id = devm_kasprintf(dev, GFP_KERNEL, "%.8x",
|
||||
comps->codec->core.subsystem_id);
|
||||
cs35l41->acpi_subsystem_id = kasprintf(GFP_KERNEL, "%.8x",
|
||||
comps->codec->core.subsystem_id);
|
||||
cs35l41->codec = comps->codec;
|
||||
strscpy(comps->name, dev_name(dev), sizeof(comps->name));
|
||||
|
||||
@ -1048,36 +1048,6 @@ static int cs35l41_hda_apply_properties(struct cs35l41_hda *cs35l41)
|
||||
return cs35l41_hda_channel_map(cs35l41->dev, 0, NULL, 1, &hw_cfg->spk_pos);
|
||||
}
|
||||
|
||||
static int cs35l41_get_acpi_sub_string(struct device *dev, struct acpi_device *adev,
|
||||
const char **subsysid)
|
||||
{
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
union acpi_object *obj;
|
||||
acpi_status status;
|
||||
int ret = 0;
|
||||
|
||||
status = acpi_evaluate_object(adev->handle, "_SUB", NULL, &buffer);
|
||||
if (ACPI_SUCCESS(status)) {
|
||||
obj = buffer.pointer;
|
||||
if (obj->type == ACPI_TYPE_STRING) {
|
||||
*subsysid = devm_kstrdup(dev, obj->string.pointer, GFP_KERNEL);
|
||||
if (*subsysid == NULL) {
|
||||
dev_err(dev, "Cannot allocate Subsystem ID");
|
||||
ret = -ENOMEM;
|
||||
}
|
||||
} else {
|
||||
dev_warn(dev, "Warning ACPI _SUB did not return a string\n");
|
||||
ret = -ENODEV;
|
||||
}
|
||||
acpi_os_free(buffer.pointer);
|
||||
} else {
|
||||
dev_dbg(dev, "Warning ACPI _SUB failed: %#x\n", status);
|
||||
ret = -ENODEV;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int cs35l41_get_speaker_id(struct device *dev, int amp_index,
|
||||
int num_amps, int fixed_gpio_id)
|
||||
{
|
||||
@ -1182,6 +1152,7 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i
|
||||
u32 values[HDA_MAX_COMPONENTS];
|
||||
struct acpi_device *adev;
|
||||
struct device *physdev;
|
||||
const char *sub;
|
||||
char *property;
|
||||
size_t nval;
|
||||
int i, ret;
|
||||
@ -1195,11 +1166,10 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i
|
||||
physdev = get_device(acpi_get_first_physical_node(adev));
|
||||
acpi_dev_put(adev);
|
||||
|
||||
ret = cs35l41_get_acpi_sub_string(cs35l41->dev, adev, &cs35l41->acpi_subsystem_id);
|
||||
if (ret)
|
||||
dev_info(cs35l41->dev, "No Subsystem ID found in ACPI: %d", ret);
|
||||
else
|
||||
dev_dbg(cs35l41->dev, "Subsystem ID %s found", cs35l41->acpi_subsystem_id);
|
||||
sub = acpi_get_subsystem_id(ACPI_HANDLE(physdev));
|
||||
if (IS_ERR(sub))
|
||||
sub = NULL;
|
||||
cs35l41->acpi_subsystem_id = sub;
|
||||
|
||||
property = "cirrus,dev-index";
|
||||
ret = device_property_count_u32(physdev, property);
|
||||
@ -1434,6 +1404,7 @@ err:
|
||||
if (cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type))
|
||||
gpiod_set_value_cansleep(cs35l41->reset_gpio, 0);
|
||||
gpiod_put(cs35l41->reset_gpio);
|
||||
kfree(cs35l41->acpi_subsystem_id);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1456,6 +1427,7 @@ void cs35l41_hda_remove(struct device *dev)
|
||||
if (cs35l41_safe_reset(cs35l41->regmap, cs35l41->hw_cfg.bst_type))
|
||||
gpiod_set_value_cansleep(cs35l41->reset_gpio, 0);
|
||||
gpiod_put(cs35l41->reset_gpio);
|
||||
kfree(cs35l41->acpi_subsystem_id);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(cs35l41_hda_remove, SND_HDA_SCODEC_CS35L41);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user