Re: [PATCH v2 2/2] platform/x86: think-lmi: Add possible_values for ThinkStation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Thomas,

On Mon, Mar 13, 2023, at 7:58 PM, Thomas Weißschuh wrote:
> Hi Mark,
>
> some more remarks, sorry not seeing this earlier.

No worries :) I appreciate the reviews.

>
> On Mon, Mar 13, 2023 at 02:45:41PM -0400, Mark Pearson wrote:
>> ThinkStation platforms don't support the API to return possible_values
>> but instead embed it in the settings string.
>> 
>> Try and extract this information and set the possible_values attribute
>> appropriately.
>> 
>> Signed-off-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx>
>> ---
>> Changes in V2:
>>  - Move no value for possible_values handling into show function
>>  - use kstrndup for allocating string
>> 
>>  drivers/platform/x86/think-lmi.c | 26 ++++++++++++++++++++++----
>>  1 file changed, 22 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c
>> index 5fa5451c4802..7dd8f72176f5 100644
>> --- a/drivers/platform/x86/think-lmi.c
>> +++ b/drivers/platform/x86/think-lmi.c
>> @@ -941,10 +941,9 @@ static ssize_t possible_values_show(struct kobject *kobj, struct kobj_attribute
>>  {
>>  	struct tlmi_attr_setting *setting = to_tlmi_attr_setting(kobj);
>>  
>> -	if (!tlmi_priv.can_get_bios_selections)
>> -		return -EOPNOTSUPP;
>> -
>> -	return sysfs_emit(buf, "%s\n", setting->possible_values);
>> +	if (setting->possible_values)
>> +		return sysfs_emit(buf, "%s\n", setting->possible_values);
>> +	return sysfs_emit(buf, "not available\n");
>>  }
>
> As the attribute "possible_values" is not mandatory it should be
> possible to hide it completely with an is_visible callback.
>
> This would indicate absence clearer than a magic value.

Agreed - I like it. I'll look into implementing that. Thank you.

>
>>  static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr,
>> @@ -1440,6 +1439,25 @@ static int tlmi_analyze(void)
>>  			if (ret || !setting->possible_values)
>>  				pr_info("Error retrieving possible values for %d : %s\n",
>>  						i, setting->display_name);
>> +		} else {
>> +			/*
>> +			 * Older Thinkstations don't support the bios_selections API.
>> +			 * Instead they store this as a [Optional:Option1,Option2] section of the
>> +			 * name string.
>> +			 * Try and pull that out if it's available.
>> +			 */
>
> The values in possible_values are supposed to be separated by
> semi-colons, not commas.
> I don't know how this affects the existing parts of this driver but it
> affects both patches of this series.

Good point, and I'd missed that.
The current string is returned directly from the BIOS, so I'll have to manipulate it. I would ask the BIOS team to change it but it will take forever and could impact Windows - so better to tweak it in the driver.
I'll do this as a third patch I think.

Thanks
Mark




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux