Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182// SPDX-License-Identifier: GPL-2.0-or-later/* * AMD SFH tablet-mode switch driver * * Copyright (c) 2026, Advanced Micro Devices, Inc. * All Rights Reserved. * * Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com> */
#include <linux/amd-pmf-io.h>#include <linux/auxiliary_bus.h>#include <linux/input.h>#include <linux/module.h>#include <linux/pci_ids.h>
#define POLL_INTERVAL_MS 200
static void sfh_tm_poll(struct input_dev *input){ struct amd_sfh_info info = {};
if (amd_get_sfh_info(&info, MT_OP_MODE)) return;
input_report_switch(input, SW_TABLET_MODE, info.op_mode == SFH_MODE_TABLET); input_sync(input);}
static int sfh_tm_probe(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id){ struct device *dev = &auxdev->dev; struct amd_sfh_info info = {}; struct input_dev *input; int error;
error = amd_get_sfh_info(&info, MT_OP_MODE); if (error) return error == -EINVAL ? -ENODEV : error;
input = devm_input_allocate_device(dev); if (!input) return -ENOMEM;
input->name = "AMD SFH tablet mode switch"; input->phys = "amd-sfh/tabletmode"; input->id.bustype = BUS_HOST; input->id.vendor = PCI_VENDOR_ID_AMD; input_set_capability(input, EV_SW, SW_TABLET_MODE);
error = input_setup_polling(input, sfh_tm_poll); if (error) return error; input_set_poll_interval(input, POLL_INTERVAL_MS);
sfh_tm_poll(input);
error = input_register_device(input); if (error) return error;
return 0;}
static const struct auxiliary_device_id sfh_tm_id_table[] = { { .name = "amd_sfh.tabletmode" }, {}};MODULE_DEVICE_TABLE(auxiliary, sfh_tm_id_table);
static struct auxiliary_driver sfh_tm_driver = { .name = "tabletmode", .id_table = sfh_tm_id_table, .probe = sfh_tm_probe,};module_auxiliary_driver(sfh_tm_driver);
MODULE_DESCRIPTION("AMD SFH tablet mode switch");MODULE_LICENSE("GPL");