[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <EYXQWQ.O2RLFGQXKOHO2@ljones.dev>
Date: Sat, 24 Jul 2021 23:15:50 +1200
From: Luke Jones <luke@...nes.dev>
To: Hans de Goede <hdegoede@...hat.com>
Cc: pobrn@...tonmail.com, mgross@...ux.intel.com,
corentin.chary@...il.com, platform-driver-x86@...r.kernel.org,
linux-kernel@...r.kernel.org, acpi4asus-user@...ts.sourceforge.net
Subject: Re: [PATCH 3/4] asus-wmi: Add egpu enable method
Oh I see, thanks. I was trying to do the "-v3" on send-email part.
On Sat, Jul 17 2021 at 17:57:54 +0200, Hans de Goede
<hdegoede@...hat.com> wrote:
> Hi Luke,
>
> On 7/17/21 10:19 AM, Luke Jones wrote:
>> Damn. I thought `-v2` on `git send-email` would bump patch version
>> too. What is the correct way to do that for a full patch sequence?
>
> You need to split the sending of patches into 2 steps, which
> generally is a good
> idea anyways, since that will also allow you to easily add a
> cover-letter to the
> series:
>
> Lets say you are ready to send v3 and you have the 3 patches as the
> last 3
> commits in your git tree's current HEAD, then you would do:
>
> git format-patch --cover-letter -v3 HEAD~3
> $EDITOR v3-0000*.patch
> # Edit the cover letter, say something like:
> # Hi All here is v3 of my ... series, which does foobar
> # new in v3 is ...
> # And don't forget to set the Subject
> git send-email v3-00*.patch
>
> And you're done. I hope this helps.
>
> Regards,
>
> Hans
>
>
>
>
>
>>
>> On Sat, Jul 17 2021 at 20:15:30 +1200, Luke Jones <luke@...nes.dev>
>> wrote:
>>> Apologies, I forgot that the patches contain sequence. There is
>>> actually no 4th patch (the patch itself was already upstreamed).
>>>
>>> Sincere regards,
>>> Luke.
>>>
>>> On Sat, Jul 17 2021 at 20:13:23 +1200, Luke D. Jones
>>> <luke@...nes.dev> wrote:
>>>> The X13 Flow laptops can utilise an external GPU. This requires
>>>> toggling an ACPI method which will first disable the internal
>>>> dGPU, and then enable the eGPU.
>>>>
>>>> Signed-off-by: Luke D. Jones <luke@...nes.dev>
>>>> ---
>>>> drivers/platform/x86/asus-wmi.c | 91
>>>> ++++++++++++++++++++++
>>>> include/linux/platform_data/x86/asus-wmi.h | 3 +
>>>> 2 files changed, 94 insertions(+)
>>>>
>>>> diff --git a/drivers/platform/x86/asus-wmi.c
>>>> b/drivers/platform/x86/asus-wmi.c
>>>> index 02762a60d27a..ee5d8656641e 100644
>>>> --- a/drivers/platform/x86/asus-wmi.c
>>>> +++ b/drivers/platform/x86/asus-wmi.c
>>>> @@ -210,6 +210,9 @@ struct asus_wmi {
>>>> u8 fan_boost_mode_mask;
>>>> u8 fan_boost_mode;
>>>>
>>>> + bool egpu_enable_available; // 0 = enable
>>>> + bool egpu_enable;
>>>> +
>>>> bool dgpu_disable_available;
>>>> bool dgpu_disable;
>>>>
>>>> @@ -430,6 +433,86 @@ static void
>>>> lid_flip_tablet_mode_get_state(struct asus_wmi *asus)
>>>> }
>>>> }
>>>>
>>>> +/* eGPU
>>>> ********************************************************************/
>>>> +static int egpu_enable_check_present(struct asus_wmi *asus)
>>>> +{
>>>> + u32 result;
>>>> + int err;
>>>> +
>>>> + asus->egpu_enable_available = false;
>>>> +
>>>> + err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_EGPU,
>>>> &result);
>>>> + if (err) {
>>>> + if (err == -ENODEV)
>>>> + return 0;
>>>> + return err;
>>>> + }
>>>> +
>>>> + if (result & ASUS_WMI_DSTS_PRESENCE_BIT) {
>>>> + asus->egpu_enable_available = true;
>>>> + asus->egpu_enable = result & ASUS_WMI_DSTS_STATUS_BIT;
>>>> + }
>>>> +
>>>> + return 0;
>>>> +}
>>>> +
>>>> +static int egpu_enable_write(struct asus_wmi *asus)
>>>> +{
>>>> + int err;
>>>> + u8 value;
>>>> + u32 retval;
>>>> +
>>>> + value = asus->egpu_enable;
>>>> +
>>>> + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_EGPU, value,
>>>> &retval);
>>>> +
>>>> + if (err) {
>>>> + pr_warn("Failed to set egpu disable: %d\n", err);
>>>> + return err;
>>>> + }
>>>> +
>>>> + if (retval > 1 || retval < 0) {
>>>> + pr_warn("Failed to set egpu disable (retval): 0x%x\n",
>>>> retval);
>>>> + return -EIO;
>>>> + }
>>>> +
>>>> + sysfs_notify(&asus->platform_device->dev.kobj, NULL,
>>>> "egpu_enable");
>>>> +
>>>> + return 0;
>>>> +}
>>>> +
>>>> +static ssize_t egpu_enable_show(struct device *dev,
>>>> + struct device_attribute *attr, char *buf)
>>>> +{
>>>> + struct asus_wmi *asus = dev_get_drvdata(dev);
>>>> + bool mode = asus->egpu_enable;
>>>> +
>>>> + return sysfs_emit(buf, "%d\n", mode);
>>>> +}
>>>> +
>>>> +static ssize_t egpu_enable_store(struct device *dev,
>>>> + struct device_attribute *attr,
>>>> + const char *buf, size_t count)
>>>> +{
>>>> + int result;
>>>> + bool disable;
>>>> + struct asus_wmi *asus = dev_get_drvdata(dev);
>>>> +
>>>> + result = kstrtobool(buf, &disable);
>>>> + if (result == -EINVAL)
>>>> + return result;
>>>> +
>>>> + asus->egpu_enable = disable;
>>>> +
>>>> + result = egpu_enable_write(asus);
>>>> + if (result != 0)
>>>> + return result;
>>>> +
>>>> + return count;
>>>> +}
>>>> +
>>>> +static DEVICE_ATTR_RW(egpu_enable);
>>>> +
>>>> /* dGPU
>>>> ********************************************************************/
>>>> static int dgpu_disable_check_present(struct asus_wmi *asus)
>>>> {
>>>> @@ -2502,6 +2585,7 @@ static struct attribute
>>>> *platform_attributes[] = {
>>>> &dev_attr_camera.attr,
>>>> &dev_attr_cardr.attr,
>>>> &dev_attr_touchpad.attr,
>>>> + &dev_attr_egpu_enable.attr,
>>>> &dev_attr_dgpu_disable.attr,
>>>> &dev_attr_lid_resume.attr,
>>>> &dev_attr_als_enable.attr,
>>>> @@ -2529,6 +2613,8 @@ static umode_t asus_sysfs_is_visible(struct
>>>> kobject *kobj,
>>>> devid = ASUS_WMI_DEVID_LID_RESUME;
>>>> else if (attr == &dev_attr_als_enable.attr)
>>>> devid = ASUS_WMI_DEVID_ALS_ENABLE;
>>>> + else if (attr == &dev_attr_egpu_enable.attr)
>>>> + ok = asus->egpu_enable_available;
>>>> else if (attr == &dev_attr_dgpu_disable.attr)
>>>> ok = asus->dgpu_disable_available;
>>>> else if (attr == &dev_attr_fan_boost_mode.attr)
>>>> @@ -2792,6 +2878,10 @@ static int asus_wmi_add(struct
>>>> platform_device *pdev)
>>>> if (err)
>>>> goto fail_platform;
>>>>
>>>> + err = egpu_enable_check_present(asus);
>>>> + if (err)
>>>> + goto fail_egpu_enable;
>>>> +
>>>> err = dgpu_disable_check_present(asus);
>>>> if (err)
>>>> goto fail_dgpu_disable;
>>>> @@ -2896,6 +2986,7 @@ static int asus_wmi_add(struct
>>>> platform_device *pdev)
>>>> fail_sysfs:
>>>> fail_throttle_thermal_policy:
>>>> fail_fan_boost_mode:
>>>> +fail_egpu_enable:
>>>> fail_dgpu_disable:
>>>> fail_platform:
>>>> fail_panel_od:
>>>> diff --git a/include/linux/platform_data/x86/asus-wmi.h
>>>> b/include/linux/platform_data/x86/asus-wmi.h
>>>> index a528f9d0e4b7..17dc5cb6f3f2 100644
>>>> --- a/include/linux/platform_data/x86/asus-wmi.h
>>>> +++ b/include/linux/platform_data/x86/asus-wmi.h
>>>> @@ -90,6 +90,9 @@
>>>> /* Keyboard dock */
>>>> #define ASUS_WMI_DEVID_KBD_DOCK 0x00120063
>>>>
>>>> +/* dgpu on/off */
>>>> +#define ASUS_WMI_DEVID_EGPU 0x00090019
>>>> +
>>>> /* dgpu on/off */
>>>> #define ASUS_WMI_DEVID_DGPU 0x00090020
>>>>
>>>> --
>>>> 2.31.1
>>>>
>>>
>>
>>
>
Powered by blists - more mailing lists