Hi, On 1-May-25 2:36 PM, Nitin Joshi wrote: > New Lenovo Thinkpad models, e.g. the 'X9-14 Gen 1' and 'X9-15 Gen 1' > has new shortcut on F9 key i.e to switch camera shutter and it > send a new 0x131b hkey event when F9 key is pressed. > > This commit adds support for new hkey 0x131b. > > Reviewed-by: Mark Pearson <mpearson-len...@squebb.ca> > Signed-off-by: Nitin Joshi <nitjo...@gmail.com> > --- > Changes in v5: > * Incorporated review comments for consistency.
Thanks, this version looks good to me: Reviewed-by: Hans de Goede <hdego...@redhat.com> Regards, Hans > Changes in v4: > * Renamed macro from METHOD_ERR to GCES_NO_SHUTTER_DEVICE. > Changes in v3: > * Avoid wasteful get_camera_shutter() calls and Minor changes based on review > comments to make > code more readable. > Changes in v2: > * Added ASL method to get camera shutter status and send it to userspace. > --- > drivers/platform/x86/thinkpad_acpi.c | 43 +++++++++++++++++++++++++++- > 1 file changed, 42 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c > b/drivers/platform/x86/thinkpad_acpi.c > index 5790095c175e..3c75161667cf 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -182,6 +182,7 @@ enum tpacpi_hkey_event_t { > * directly in the > sparse-keymap. > */ > TP_HKEY_EV_AMT_TOGGLE = 0x131a, /* Toggle AMT on/off */ > + TP_HKEY_EV_CAMERASHUTTER_TOGGLE = 0x131b, /* Toggle Camera Shutter */ > TP_HKEY_EV_DOUBLETAP_TOGGLE = 0x131c, /* Toggle trackpoint > doubletap on/off */ > TP_HKEY_EV_PROFILE_TOGGLE = 0x131f, /* Toggle platform profile in > 2024 systems */ > TP_HKEY_EV_PROFILE_TOGGLE2 = 0x1401, /* Toggle platform profile in > 2025 + systems */ > @@ -2250,6 +2251,25 @@ static void tpacpi_input_send_tabletsw(void) > } > } > > +#define GCES_NO_SHUTTER_DEVICE BIT(31) > + > +static int get_camera_shutter(void) > +{ > + acpi_handle gces_handle; > + int output; > + > + if (ACPI_FAILURE(acpi_get_handle(hkey_handle, "GCES", &gces_handle))) > + return -ENODEV; > + > + if (!acpi_evalf(gces_handle, &output, NULL, "dd", 0)) > + return -EIO; > + > + if (output & GCES_NO_SHUTTER_DEVICE) > + return -ENODEV; > + > + return output; > +} > + > static bool tpacpi_input_send_key(const u32 hkey, bool *send_acpi_ev) > { > bool known_ev; > @@ -3303,7 +3323,7 @@ static int __init hotkey_init(struct ibm_init_struct > *iibm) > const struct key_entry *keymap; > bool radiosw_state = false; > bool tabletsw_state = false; > - int hkeyv, res, status; > + int hkeyv, res, status, camera_shutter_state; > > vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_HKEY, > "initializing hotkey subdriver\n"); > @@ -3467,6 +3487,12 @@ static int __init hotkey_init(struct ibm_init_struct > *iibm) > if (res) > return res; > > + camera_shutter_state = get_camera_shutter(); > + if (camera_shutter_state >= 0) { > + input_set_capability(tpacpi_inputdev, EV_SW, > SW_CAMERA_LENS_COVER); > + input_report_switch(tpacpi_inputdev, SW_CAMERA_LENS_COVER, > camera_shutter_state); > + } > + > if (tp_features.hotkey_wlsw) { > input_set_capability(tpacpi_inputdev, EV_SW, SW_RFKILL_ALL); > input_report_switch(tpacpi_inputdev, > @@ -11236,6 +11262,21 @@ static bool tpacpi_driver_event(const unsigned int > hkey_event) > else > dytc_control_amt(!dytc_amt_active); > > + return true; > + case TP_HKEY_EV_CAMERASHUTTER_TOGGLE: > + int camera_shutter_state; > + > + camera_shutter_state = get_camera_shutter(); > + if (camera_shutter_state < 0) { > + pr_err("Error retrieving camera shutter state after > shutter event\n"); > + return true; > + } > + mutex_lock(&tpacpi_inputdev_send_mutex); > + > + input_report_switch(tpacpi_inputdev, SW_CAMERA_LENS_COVER, > camera_shutter_state); > + input_sync(tpacpi_inputdev); > + > + mutex_unlock(&tpacpi_inputdev_send_mutex); > return true; > case TP_HKEY_EV_DOUBLETAP_TOGGLE: > tp_features.trackpoint_doubletap = > !tp_features.trackpoint_doubletap; _______________________________________________ ibm-acpi-devel mailing list ibm-acpi-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel