mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-23 16:53:58 -05:00
for-linus-2024072901
-----BEGIN PGP SIGNATURE----- iQJHBAABCAAxFiEEoEVH9lhNrxiMPSyI7MXwXhnZSjYFAmanUD8THGJlbnRpc3NA a2VybmVsLm9yZwAKCRDsxfBeGdlKNnEYD/9CjuuWX862zYmFxMuobRo7IkY+3ic7 MlnWrwf0FFg91zYEd4NjaH/V8ikLHxv5gDc5HYDhX7XDLdHVjgNsa3+eXKMZJsOP FIQPwQdncncbH3BFkNxh8Ehq832vqAvpa0H+InrUzlmCqfqf/kRClS3LlwJ0wETe j+/lrN5Lcg3cj78IQiBi/P4V0QNNTrB5aOZfzcdafUVogqM7fqZPE4SWOiZbZNlk xhB5vGvj9GJAZ/W2c1cmLPfsOsqGrXQuadAMl+0NIqBn3r9PS2eIabFMK3P3CGHc GW+xGHNJ8Bn2pujCZVamamodJTZG2ZSZ2l4l+f42iOxPXR629U+LhN1b4I69GFTc lwHH3Ez8+VIkyVVGKRz9Xk6Zwl8+x8YHsAlAX4Kg6JcZbJFam/IZIeL7cZghN6Nh 25eDNo2V3mdZSCTh7KEhTN1LU9IKR8RrE8umuke+C/iRn8t9DpMwnFnkA9OEP6dc JaKmNFGTwSfIdSaXF4YEUG24NAc32XhfD3PEaQ9dYo56TCLw6EBChubMOkEF/TDy FNDROAe3y8NcwAWLaQ1ttrOtMcXFyhzLq3gNb7yF4389IswJ10S/7qwxYcJ5fd+s iXsavwoMZPqO3wQvNqNEPRAnZGNMYZZOtXUBMQcu+UhFh+dj86ygfTSZ9hePQ8MR d3jZqsgHDP2hiw== =194H -----END PGP SIGNATURE----- Merge tag 'for-linus-2024072901' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid Pull HID fixes from Benjamin Tissoires: - fixes for HID-BPF after the merge with the bpf tree (Arnd Bergmann and Benjamin Tissoires) - some tool type fix for the Wacom driver (Tatsunosuke Tobita) - a reorder of the sensor discovery to ensure the HID AMD SFH is removed when no sensors are available (Basavaraj Natikar) * tag 'for-linus-2024072901' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid: selftests/hid: add test for attaching multiple time the same struct_ops HID: bpf: prevent the same struct_ops to be attached more than once selftests/hid: disable struct_ops auto-attach selftests/hid: fix bpf_wq new API HID: amd_sfh: Move sensor discovery before HID device initialization hid: bpf: add BPF_JIT dependency HID: wacom: more appropriate tool type categorization HID: wacom: Modify pen IDs
This commit is contained in:
commit
6b5faec9f5
7 changed files with 55 additions and 67 deletions
|
@ -288,12 +288,22 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
|
|||
mp2_ops->start(privdata, info);
|
||||
cl_data->sensor_sts[i] = amd_sfh_wait_for_response
|
||||
(privdata, cl_data->sensor_idx[i], SENSOR_ENABLED);
|
||||
|
||||
if (cl_data->sensor_sts[i] == SENSOR_ENABLED)
|
||||
cl_data->is_any_sensor_enabled = true;
|
||||
}
|
||||
|
||||
if (!cl_data->is_any_sensor_enabled ||
|
||||
(mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0)) {
|
||||
dev_warn(dev, "Failed to discover, sensors not enabled is %d\n",
|
||||
cl_data->is_any_sensor_enabled);
|
||||
rc = -EOPNOTSUPP;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
for (i = 0; i < cl_data->num_hid_devices; i++) {
|
||||
cl_data->cur_hid_dev = i;
|
||||
if (cl_data->sensor_sts[i] == SENSOR_ENABLED) {
|
||||
cl_data->is_any_sensor_enabled = true;
|
||||
rc = amdtp_hid_probe(i, cl_data);
|
||||
if (rc)
|
||||
goto cleanup;
|
||||
|
@ -305,12 +315,6 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
|
|||
cl_data->sensor_sts[i]);
|
||||
}
|
||||
|
||||
if (!cl_data->is_any_sensor_enabled ||
|
||||
(mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0)) {
|
||||
dev_warn(dev, "Failed to discover, sensors not enabled is %d\n", cl_data->is_any_sensor_enabled);
|
||||
rc = -EOPNOTSUPP;
|
||||
goto cleanup;
|
||||
}
|
||||
schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ menu "HID-BPF support"
|
|||
|
||||
config HID_BPF
|
||||
bool "HID-BPF support"
|
||||
depends on BPF
|
||||
depends on BPF_JIT
|
||||
depends on BPF_SYSCALL
|
||||
depends on DYNAMIC_FTRACE_WITH_DIRECT_CALLS
|
||||
help
|
||||
|
|
|
@ -183,6 +183,10 @@ static int hid_bpf_reg(void *kdata, struct bpf_link *link)
|
|||
struct hid_device *hdev;
|
||||
int count, err = 0;
|
||||
|
||||
/* prevent multiple attach of the same struct_ops */
|
||||
if (ops->hdev)
|
||||
return -EINVAL;
|
||||
|
||||
hdev = hid_get_device(ops->hid_id);
|
||||
if (IS_ERR(hdev))
|
||||
return PTR_ERR(hdev);
|
||||
|
@ -248,6 +252,7 @@ static void hid_bpf_unreg(void *kdata, struct bpf_link *link)
|
|||
|
||||
list_del_rcu(&ops->list);
|
||||
synchronize_srcu(&hdev->bpf.srcu);
|
||||
ops->hdev = NULL;
|
||||
|
||||
reconnect = hdev->bpf.rdesc_ops == ops;
|
||||
if (reconnect)
|
||||
|
|
|
@ -692,78 +692,28 @@ static bool wacom_is_art_pen(int tool_id)
|
|||
|
||||
static int wacom_intuos_get_tool_type(int tool_id)
|
||||
{
|
||||
int tool_type = BTN_TOOL_PEN;
|
||||
|
||||
if (wacom_is_art_pen(tool_id))
|
||||
return tool_type;
|
||||
|
||||
switch (tool_id) {
|
||||
case 0x812: /* Inking pen */
|
||||
case 0x801: /* Intuos3 Inking pen */
|
||||
case 0x12802: /* Intuos4/5 Inking Pen */
|
||||
case 0x012:
|
||||
tool_type = BTN_TOOL_PENCIL;
|
||||
break;
|
||||
|
||||
case 0x822: /* Pen */
|
||||
case 0x842:
|
||||
case 0x852:
|
||||
case 0x823: /* Intuos3 Grip Pen */
|
||||
case 0x813: /* Intuos3 Classic Pen */
|
||||
case 0x802: /* Intuos4/5 13HD/24HD General Pen */
|
||||
case 0x8e2: /* IntuosHT2 pen */
|
||||
case 0x022:
|
||||
case 0x200: /* Pro Pen 3 */
|
||||
case 0x04200: /* Pro Pen 3 */
|
||||
case 0x10842: /* MobileStudio Pro Pro Pen slim */
|
||||
case 0x14802: /* Intuos4/5 13HD/24HD Classic Pen */
|
||||
case 0x16802: /* Cintiq 13HD Pro Pen */
|
||||
case 0x18802: /* DTH2242 Pen */
|
||||
case 0x10802: /* Intuos4/5 13HD/24HD General Pen */
|
||||
case 0x80842: /* Intuos Pro and Cintiq Pro 3D Pen */
|
||||
tool_type = BTN_TOOL_PEN;
|
||||
break;
|
||||
return BTN_TOOL_PENCIL;
|
||||
|
||||
case 0x832: /* Stroke pen */
|
||||
case 0x032:
|
||||
tool_type = BTN_TOOL_BRUSH;
|
||||
break;
|
||||
return BTN_TOOL_BRUSH;
|
||||
|
||||
case 0x007: /* Mouse 4D and 2D */
|
||||
case 0x09c:
|
||||
case 0x094:
|
||||
case 0x017: /* Intuos3 2D Mouse */
|
||||
case 0x806: /* Intuos4 Mouse */
|
||||
tool_type = BTN_TOOL_MOUSE;
|
||||
break;
|
||||
return BTN_TOOL_MOUSE;
|
||||
|
||||
case 0x096: /* Lens cursor */
|
||||
case 0x097: /* Intuos3 Lens cursor */
|
||||
case 0x006: /* Intuos4 Lens cursor */
|
||||
tool_type = BTN_TOOL_LENS;
|
||||
break;
|
||||
|
||||
case 0x82a: /* Eraser */
|
||||
case 0x84a:
|
||||
case 0x85a:
|
||||
case 0x91a:
|
||||
case 0xd1a:
|
||||
case 0x0fa:
|
||||
case 0x82b: /* Intuos3 Grip Pen Eraser */
|
||||
case 0x81b: /* Intuos3 Classic Pen Eraser */
|
||||
case 0x91b: /* Intuos3 Airbrush Eraser */
|
||||
case 0x80c: /* Intuos4/5 13HD/24HD Marker Pen Eraser */
|
||||
case 0x80a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
||||
case 0x90a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
||||
case 0x1480a: /* Intuos4/5 13HD/24HD Classic Pen Eraser */
|
||||
case 0x1090a: /* Intuos4/5 13HD/24HD Airbrush Eraser */
|
||||
case 0x1080c: /* Intuos4/5 13HD/24HD Art Pen Eraser */
|
||||
case 0x1084a: /* MobileStudio Pro Pro Pen slim Eraser */
|
||||
case 0x1680a: /* Cintiq 13HD Pro Pen Eraser */
|
||||
case 0x1880a: /* DTH2242 Eraser */
|
||||
case 0x1080a: /* Intuos4/5 13HD/24HD General Pen Eraser */
|
||||
tool_type = BTN_TOOL_RUBBER;
|
||||
break;
|
||||
return BTN_TOOL_LENS;
|
||||
|
||||
case 0xd12:
|
||||
case 0x912:
|
||||
|
@ -771,10 +721,13 @@ static int wacom_intuos_get_tool_type(int tool_id)
|
|||
case 0x913: /* Intuos3 Airbrush */
|
||||
case 0x902: /* Intuos4/5 13HD/24HD Airbrush */
|
||||
case 0x10902: /* Intuos4/5 13HD/24HD Airbrush */
|
||||
tool_type = BTN_TOOL_AIRBRUSH;
|
||||
break;
|
||||
return BTN_TOOL_AIRBRUSH;
|
||||
|
||||
default:
|
||||
if (tool_id & 0x0008)
|
||||
return BTN_TOOL_RUBBER;
|
||||
return BTN_TOOL_PEN;
|
||||
}
|
||||
return tool_type;
|
||||
}
|
||||
|
||||
static void wacom_exit_report(struct wacom_wac *wacom)
|
||||
|
|
|
@ -532,6 +532,7 @@ static void load_programs(const struct test_program programs[],
|
|||
FIXTURE_DATA(hid_bpf) * self,
|
||||
const FIXTURE_VARIANT(hid_bpf) * variant)
|
||||
{
|
||||
struct bpf_map *iter_map;
|
||||
int err = -EINVAL;
|
||||
|
||||
ASSERT_LE(progs_count, ARRAY_SIZE(self->hid_links))
|
||||
|
@ -564,6 +565,13 @@ static void load_programs(const struct test_program programs[],
|
|||
*ops_hid_id = self->hid_id;
|
||||
}
|
||||
|
||||
/* we disable the auto-attach feature of all maps because we
|
||||
* only want the tested one to be manually attached in the next
|
||||
* call to bpf_map__attach_struct_ops()
|
||||
*/
|
||||
bpf_object__for_each_map(iter_map, *self->skel->skeleton->obj)
|
||||
bpf_map__set_autoattach(iter_map, false);
|
||||
|
||||
err = hid__load(self->skel);
|
||||
ASSERT_OK(err) TH_LOG("hid_skel_load failed: %d", err);
|
||||
|
||||
|
@ -686,6 +694,24 @@ TEST_F(hid_bpf, subprog_raw_event)
|
|||
ASSERT_EQ(buf[2], 52);
|
||||
}
|
||||
|
||||
/*
|
||||
* Attach hid_first_event to the given uhid device,
|
||||
* attempt at re-attaching it, we should not lock and
|
||||
* return an invalid struct bpf_link
|
||||
*/
|
||||
TEST_F(hid_bpf, multiple_attach)
|
||||
{
|
||||
const struct test_program progs[] = {
|
||||
{ .name = "hid_first_event" },
|
||||
};
|
||||
struct bpf_link *link;
|
||||
|
||||
LOAD_PROGRAMS(progs);
|
||||
|
||||
link = bpf_map__attach_struct_ops(self->skel->maps.first_event);
|
||||
ASSERT_NULL(link) TH_LOG("unexpected return value when re-attaching the struct_ops");
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensures that we can attach/detach programs
|
||||
*/
|
||||
|
|
|
@ -455,7 +455,7 @@ struct {
|
|||
__type(value, struct elem);
|
||||
} hmap SEC(".maps");
|
||||
|
||||
static int wq_cb_sleepable(void *map, int *key, struct bpf_wq *work)
|
||||
static int wq_cb_sleepable(void *map, int *key, void *work)
|
||||
{
|
||||
__u8 buf[9] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||||
struct hid_bpf_ctx *hid_ctx;
|
||||
|
|
|
@ -114,7 +114,7 @@ extern int hid_bpf_try_input_report(struct hid_bpf_ctx *ctx,
|
|||
extern int bpf_wq_init(struct bpf_wq *wq, void *p__map, unsigned int flags) __weak __ksym;
|
||||
extern int bpf_wq_start(struct bpf_wq *wq, unsigned int flags) __weak __ksym;
|
||||
extern int bpf_wq_set_callback_impl(struct bpf_wq *wq,
|
||||
int (callback_fn)(void *map, int *key, struct bpf_wq *wq),
|
||||
int (callback_fn)(void *map, int *key, void *wq),
|
||||
unsigned int flags__k, void *aux__ign) __ksym;
|
||||
#define bpf_wq_set_callback(timer, cb, flags) \
|
||||
bpf_wq_set_callback_impl(timer, cb, flags, NULL)
|
||||
|
|
Loading…
Add table
Reference in a new issue