Skip to content

Commit b1f366d

Browse files
committed
Merge remote-tracking branch 'stable/linux-6.12.y' into rpi-6.12.y
2 parents 2a536bf + 55767d6 commit b1f366d

File tree

26 files changed

+297
-126
lines changed

26 files changed

+297
-126
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 6
33
PATCHLEVEL = 12
4-
SUBLEVEL = 21
4+
SUBLEVEL = 22
55
EXTRAVERSION =
66
NAME = Baby Opossum Posse
77

drivers/counter/microchip-tcb-capture.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,25 @@ static int mchp_tc_probe(struct platform_device *pdev)
368368
channel);
369369
}
370370

371+
/* Disable Quadrature Decoder and position measure */
372+
ret = regmap_update_bits(regmap, ATMEL_TC_BMR, ATMEL_TC_QDEN | ATMEL_TC_POSEN, 0);
373+
if (ret)
374+
return ret;
375+
376+
/* Setup the period capture mode */
377+
ret = regmap_update_bits(regmap, ATMEL_TC_REG(priv->channel[0], CMR),
378+
ATMEL_TC_WAVE | ATMEL_TC_ABETRG | ATMEL_TC_CMR_MASK |
379+
ATMEL_TC_TCCLKS,
380+
ATMEL_TC_CMR_MASK);
381+
if (ret)
382+
return ret;
383+
384+
/* Enable clock and trigger counter */
385+
ret = regmap_write(regmap, ATMEL_TC_REG(priv->channel[0], CCR),
386+
ATMEL_TC_CLKEN | ATMEL_TC_SWTRG);
387+
if (ret)
388+
return ret;
389+
371390
priv->tc_cfg = tcb_config;
372391
priv->regmap = regmap;
373392
counter->name = dev_name(&pdev->dev);

drivers/counter/stm32-lptimer-cnt.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,37 +58,43 @@ static int stm32_lptim_set_enable_state(struct stm32_lptim_cnt *priv,
5858
return 0;
5959
}
6060

61+
ret = clk_enable(priv->clk);
62+
if (ret)
63+
goto disable_cnt;
64+
6165
/* LP timer must be enabled before writing CMP & ARR */
6266
ret = regmap_write(priv->regmap, STM32_LPTIM_ARR, priv->ceiling);
6367
if (ret)
64-
return ret;
68+
goto disable_clk;
6569

6670
ret = regmap_write(priv->regmap, STM32_LPTIM_CMP, 0);
6771
if (ret)
68-
return ret;
72+
goto disable_clk;
6973

7074
/* ensure CMP & ARR registers are properly written */
7175
ret = regmap_read_poll_timeout(priv->regmap, STM32_LPTIM_ISR, val,
7276
(val & STM32_LPTIM_CMPOK_ARROK) == STM32_LPTIM_CMPOK_ARROK,
7377
100, 1000);
7478
if (ret)
75-
return ret;
79+
goto disable_clk;
7680

7781
ret = regmap_write(priv->regmap, STM32_LPTIM_ICR,
7882
STM32_LPTIM_CMPOKCF_ARROKCF);
7983
if (ret)
80-
return ret;
84+
goto disable_clk;
8185

82-
ret = clk_enable(priv->clk);
83-
if (ret) {
84-
regmap_write(priv->regmap, STM32_LPTIM_CR, 0);
85-
return ret;
86-
}
8786
priv->enabled = true;
8887

8988
/* Start LP timer in continuous mode */
9089
return regmap_update_bits(priv->regmap, STM32_LPTIM_CR,
9190
STM32_LPTIM_CNTSTRT, STM32_LPTIM_CNTSTRT);
91+
92+
disable_clk:
93+
clk_disable(priv->clk);
94+
disable_cnt:
95+
regmap_write(priv->regmap, STM32_LPTIM_CR, 0);
96+
97+
return ret;
9298
}
9399

94100
static int stm32_lptim_setup(struct stm32_lptim_cnt *priv, int enable)

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3231,8 +3231,7 @@ static int dm_resume(void *handle)
32313231
struct dm_atomic_state *dm_state = to_dm_atomic_state(dm->atomic_obj.state);
32323232
enum dc_connection_type new_connection_type = dc_connection_none;
32333233
struct dc_state *dc_state;
3234-
int i, r, j, ret;
3235-
bool need_hotplug = false;
3234+
int i, r, j;
32363235
struct dc_commit_streams_params commit_params = {};
32373236

32383237
if (dm->dc->caps.ips_support) {
@@ -3427,23 +3426,16 @@ static int dm_resume(void *handle)
34273426
aconnector->mst_root)
34283427
continue;
34293428

3430-
ret = drm_dp_mst_topology_mgr_resume(&aconnector->mst_mgr, true);
3431-
3432-
if (ret < 0) {
3433-
dm_helpers_dp_mst_stop_top_mgr(aconnector->dc_link->ctx,
3434-
aconnector->dc_link);
3435-
need_hotplug = true;
3436-
}
3429+
drm_dp_mst_topology_queue_probe(&aconnector->mst_mgr);
34373430
}
34383431
drm_connector_list_iter_end(&iter);
34393432

3440-
if (need_hotplug)
3441-
drm_kms_helper_hotplug_event(ddev);
3442-
34433433
amdgpu_dm_irq_resume_late(adev);
34443434

34453435
amdgpu_dm_smu_write_watermarks_table(adev);
34463436

3437+
drm_kms_helper_hotplug_event(ddev);
3438+
34473439
return 0;
34483440
}
34493441

drivers/hid/hid-plantronics.c

Lines changed: 67 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
* Copyright (c) 2015-2018 Terry Junge <[email protected]>
77
*/
88

9-
/*
10-
*/
11-
129
#include "hid-ids.h"
1310

1411
#include <linux/hid.h>
@@ -23,30 +20,28 @@
2320

2421
#define PLT_VOL_UP 0x00b1
2522
#define PLT_VOL_DOWN 0x00b2
23+
#define PLT_MIC_MUTE 0x00b5
2624

2725
#define PLT1_VOL_UP (PLT_HID_1_0_PAGE | PLT_VOL_UP)
2826
#define PLT1_VOL_DOWN (PLT_HID_1_0_PAGE | PLT_VOL_DOWN)
27+
#define PLT1_MIC_MUTE (PLT_HID_1_0_PAGE | PLT_MIC_MUTE)
2928
#define PLT2_VOL_UP (PLT_HID_2_0_PAGE | PLT_VOL_UP)
3029
#define PLT2_VOL_DOWN (PLT_HID_2_0_PAGE | PLT_VOL_DOWN)
30+
#define PLT2_MIC_MUTE (PLT_HID_2_0_PAGE | PLT_MIC_MUTE)
31+
#define HID_TELEPHONY_MUTE (HID_UP_TELEPHONY | 0x2f)
32+
#define HID_CONSUMER_MUTE (HID_UP_CONSUMER | 0xe2)
3133

3234
#define PLT_DA60 0xda60
3335
#define PLT_BT300_MIN 0x0413
3436
#define PLT_BT300_MAX 0x0418
3537

36-
37-
#define PLT_ALLOW_CONSUMER (field->application == HID_CP_CONSUMERCONTROL && \
38-
(usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER)
39-
40-
#define PLT_QUIRK_DOUBLE_VOLUME_KEYS BIT(0)
41-
#define PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS BIT(1)
42-
4338
#define PLT_DOUBLE_KEY_TIMEOUT 5 /* ms */
44-
#define PLT_FOLLOWED_OPPOSITE_KEY_TIMEOUT 220 /* ms */
4539

4640
struct plt_drv_data {
4741
unsigned long device_type;
48-
unsigned long last_volume_key_ts;
49-
u32 quirks;
42+
unsigned long last_key_ts;
43+
unsigned long double_key_to;
44+
__u16 last_key;
5045
};
5146

5247
static int plantronics_input_mapping(struct hid_device *hdev,
@@ -58,34 +53,43 @@ static int plantronics_input_mapping(struct hid_device *hdev,
5853
unsigned short mapped_key;
5954
struct plt_drv_data *drv_data = hid_get_drvdata(hdev);
6055
unsigned long plt_type = drv_data->device_type;
56+
int allow_mute = usage->hid == HID_TELEPHONY_MUTE;
57+
int allow_consumer = field->application == HID_CP_CONSUMERCONTROL &&
58+
(usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER &&
59+
usage->hid != HID_CONSUMER_MUTE;
6160

6261
/* special case for PTT products */
6362
if (field->application == HID_GD_JOYSTICK)
6463
goto defaulted;
6564

66-
/* handle volume up/down mapping */
6765
/* non-standard types or multi-HID interfaces - plt_type is PID */
6866
if (!(plt_type & HID_USAGE_PAGE)) {
6967
switch (plt_type) {
7068
case PLT_DA60:
71-
if (PLT_ALLOW_CONSUMER)
69+
if (allow_consumer)
7270
goto defaulted;
73-
goto ignored;
71+
if (usage->hid == HID_CONSUMER_MUTE) {
72+
mapped_key = KEY_MICMUTE;
73+
goto mapped;
74+
}
75+
break;
7476
default:
75-
if (PLT_ALLOW_CONSUMER)
77+
if (allow_consumer || allow_mute)
7678
goto defaulted;
7779
}
80+
goto ignored;
7881
}
79-
/* handle standard types - plt_type is 0xffa0uuuu or 0xffa2uuuu */
80-
/* 'basic telephony compliant' - allow default consumer page map */
81-
else if ((plt_type & HID_USAGE) >= PLT_BASIC_TELEPHONY &&
82-
(plt_type & HID_USAGE) != PLT_BASIC_EXCEPTION) {
83-
if (PLT_ALLOW_CONSUMER)
84-
goto defaulted;
85-
}
86-
/* not 'basic telephony' - apply legacy mapping */
87-
/* only map if the field is in the device's primary vendor page */
88-
else if (!((field->application ^ plt_type) & HID_USAGE_PAGE)) {
82+
83+
/* handle standard consumer control mapping */
84+
/* and standard telephony mic mute mapping */
85+
if (allow_consumer || allow_mute)
86+
goto defaulted;
87+
88+
/* handle vendor unique types - plt_type is 0xffa0uuuu or 0xffa2uuuu */
89+
/* if not 'basic telephony compliant' - map vendor unique controls */
90+
if (!((plt_type & HID_USAGE) >= PLT_BASIC_TELEPHONY &&
91+
(plt_type & HID_USAGE) != PLT_BASIC_EXCEPTION) &&
92+
!((field->application ^ plt_type) & HID_USAGE_PAGE))
8993
switch (usage->hid) {
9094
case PLT1_VOL_UP:
9195
case PLT2_VOL_UP:
@@ -95,8 +99,11 @@ static int plantronics_input_mapping(struct hid_device *hdev,
9599
case PLT2_VOL_DOWN:
96100
mapped_key = KEY_VOLUMEDOWN;
97101
goto mapped;
102+
case PLT1_MIC_MUTE:
103+
case PLT2_MIC_MUTE:
104+
mapped_key = KEY_MICMUTE;
105+
goto mapped;
98106
}
99-
}
100107

101108
/*
102109
* Future mapping of call control or other usages,
@@ -105,6 +112,8 @@ static int plantronics_input_mapping(struct hid_device *hdev,
105112
*/
106113

107114
ignored:
115+
hid_dbg(hdev, "usage: %08x (appl: %08x) - ignored\n",
116+
usage->hid, field->application);
108117
return -1;
109118

110119
defaulted:
@@ -123,38 +132,26 @@ static int plantronics_event(struct hid_device *hdev, struct hid_field *field,
123132
struct hid_usage *usage, __s32 value)
124133
{
125134
struct plt_drv_data *drv_data = hid_get_drvdata(hdev);
135+
unsigned long prev_tsto, cur_ts;
136+
__u16 prev_key, cur_key;
126137

127-
if (drv_data->quirks & PLT_QUIRK_DOUBLE_VOLUME_KEYS) {
128-
unsigned long prev_ts, cur_ts;
138+
/* Usages are filtered in plantronics_usages. */
129139

130-
/* Usages are filtered in plantronics_usages. */
140+
/* HZ too low for ms resolution - double key detection disabled */
141+
/* or it is a key release - handle key presses only. */
142+
if (!drv_data->double_key_to || !value)
143+
return 0;
131144

132-
if (!value) /* Handle key presses only. */
133-
return 0;
145+
prev_tsto = drv_data->last_key_ts + drv_data->double_key_to;
146+
cur_ts = drv_data->last_key_ts = jiffies;
147+
prev_key = drv_data->last_key;
148+
cur_key = drv_data->last_key = usage->code;
134149

135-
prev_ts = drv_data->last_volume_key_ts;
136-
cur_ts = jiffies;
137-
if (jiffies_to_msecs(cur_ts - prev_ts) <= PLT_DOUBLE_KEY_TIMEOUT)
138-
return 1; /* Ignore the repeated key. */
139-
140-
drv_data->last_volume_key_ts = cur_ts;
150+
/* If the same key occurs in <= double_key_to -- ignore it */
151+
if (prev_key == cur_key && time_before_eq(cur_ts, prev_tsto)) {
152+
hid_dbg(hdev, "double key %d ignored\n", cur_key);
153+
return 1; /* Ignore the repeated key. */
141154
}
142-
if (drv_data->quirks & PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS) {
143-
unsigned long prev_ts, cur_ts;
144-
145-
/* Usages are filtered in plantronics_usages. */
146-
147-
if (!value) /* Handle key presses only. */
148-
return 0;
149-
150-
prev_ts = drv_data->last_volume_key_ts;
151-
cur_ts = jiffies;
152-
if (jiffies_to_msecs(cur_ts - prev_ts) <= PLT_FOLLOWED_OPPOSITE_KEY_TIMEOUT)
153-
return 1; /* Ignore the followed opposite volume key. */
154-
155-
drv_data->last_volume_key_ts = cur_ts;
156-
}
157-
158155
return 0;
159156
}
160157

@@ -196,12 +193,16 @@ static int plantronics_probe(struct hid_device *hdev,
196193
ret = hid_parse(hdev);
197194
if (ret) {
198195
hid_err(hdev, "parse failed\n");
199-
goto err;
196+
return ret;
200197
}
201198

202199
drv_data->device_type = plantronics_device_type(hdev);
203-
drv_data->quirks = id->driver_data;
204-
drv_data->last_volume_key_ts = jiffies - msecs_to_jiffies(PLT_DOUBLE_KEY_TIMEOUT);
200+
drv_data->double_key_to = msecs_to_jiffies(PLT_DOUBLE_KEY_TIMEOUT);
201+
drv_data->last_key_ts = jiffies - drv_data->double_key_to;
202+
203+
/* if HZ does not allow ms resolution - disable double key detection */
204+
if (drv_data->double_key_to < PLT_DOUBLE_KEY_TIMEOUT)
205+
drv_data->double_key_to = 0;
205206

206207
hid_set_drvdata(hdev, drv_data);
207208

@@ -210,29 +211,10 @@ static int plantronics_probe(struct hid_device *hdev,
210211
if (ret)
211212
hid_err(hdev, "hw start failed\n");
212213

213-
err:
214214
return ret;
215215
}
216216

217217
static const struct hid_device_id plantronics_devices[] = {
218-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
219-
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3210_SERIES),
220-
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
221-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
222-
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3220_SERIES),
223-
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
224-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
225-
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3215_SERIES),
226-
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
227-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
228-
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES),
229-
.driver_data = PLT_QUIRK_DOUBLE_VOLUME_KEYS },
230-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
231-
USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3325_SERIES),
232-
.driver_data = PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS },
233-
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS,
234-
USB_DEVICE_ID_PLANTRONICS_ENCOREPRO_500_SERIES),
235-
.driver_data = PLT_QUIRK_FOLLOWED_OPPOSITE_VOLUME_KEYS },
236218
{ HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
237219
{ }
238220
};
@@ -241,6 +223,14 @@ MODULE_DEVICE_TABLE(hid, plantronics_devices);
241223
static const struct hid_usage_id plantronics_usages[] = {
242224
{ HID_CP_VOLUMEUP, EV_KEY, HID_ANY_ID },
243225
{ HID_CP_VOLUMEDOWN, EV_KEY, HID_ANY_ID },
226+
{ HID_TELEPHONY_MUTE, EV_KEY, HID_ANY_ID },
227+
{ HID_CONSUMER_MUTE, EV_KEY, HID_ANY_ID },
228+
{ PLT2_VOL_UP, EV_KEY, HID_ANY_ID },
229+
{ PLT2_VOL_DOWN, EV_KEY, HID_ANY_ID },
230+
{ PLT2_MIC_MUTE, EV_KEY, HID_ANY_ID },
231+
{ PLT1_VOL_UP, EV_KEY, HID_ANY_ID },
232+
{ PLT1_VOL_DOWN, EV_KEY, HID_ANY_ID },
233+
{ PLT1_MIC_MUTE, EV_KEY, HID_ANY_ID },
244234
{ HID_TERMINATOR, HID_TERMINATOR, HID_TERMINATOR }
245235
};
246236

drivers/memstick/host/rtsx_usb_ms.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,7 @@ static void rtsx_usb_ms_drv_remove(struct platform_device *pdev)
813813

814814
host->eject = true;
815815
cancel_work_sync(&host->handle_req);
816+
cancel_delayed_work_sync(&host->poll_card);
816817

817818
mutex_lock(&host->host_mutex);
818819
if (host->req) {

drivers/net/usb/qmi_wwan.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,9 +1365,11 @@ static const struct usb_device_id products[] = {
13651365
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10a0, 0)}, /* Telit FN920C04 */
13661366
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10a4, 0)}, /* Telit FN920C04 */
13671367
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10a9, 0)}, /* Telit FN920C04 */
1368+
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10b0, 0)}, /* Telit FE990B */
13681369
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10c0, 0)}, /* Telit FE910C04 */
13691370
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10c4, 0)}, /* Telit FE910C04 */
13701371
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10c8, 0)}, /* Telit FE910C04 */
1372+
{QMI_QUIRK_SET_DTR(0x1bc7, 0x10d0, 0)}, /* Telit FN990B */
13711373
{QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
13721374
{QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */
13731375
{QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */

0 commit comments

Comments
 (0)