Annotation of /trunk/kernel-alx-legacy/patches-4.9/0250-4.9.151-all-fixes.patch
Parent Directory | Revision Log
Revision 3608 -
(hide annotations)
(download)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 14721 byte(s)
Fri Aug 14 07:34:29 2020 UTC (4 years, 1 month ago) by niro
File size: 14721 byte(s)
-added kerenl-alx-legacy pkg
1 | niro | 3608 | diff --git a/Makefile b/Makefile |
2 | index 0e7874951ac5..f1aeb98f9ace 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 150 | ||
9 | +SUBLEVEL = 151 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c | ||
14 | index 3a6c9b741b23..4f4c34892086 100644 | ||
15 | --- a/drivers/acpi/power.c | ||
16 | +++ b/drivers/acpi/power.c | ||
17 | @@ -131,6 +131,23 @@ void acpi_power_resources_list_free(struct list_head *list) | ||
18 | } | ||
19 | } | ||
20 | |||
21 | +static bool acpi_power_resource_is_dup(union acpi_object *package, | ||
22 | + unsigned int start, unsigned int i) | ||
23 | +{ | ||
24 | + acpi_handle rhandle, dup; | ||
25 | + unsigned int j; | ||
26 | + | ||
27 | + /* The caller is expected to check the package element types */ | ||
28 | + rhandle = package->package.elements[i].reference.handle; | ||
29 | + for (j = start; j < i; j++) { | ||
30 | + dup = package->package.elements[j].reference.handle; | ||
31 | + if (dup == rhandle) | ||
32 | + return true; | ||
33 | + } | ||
34 | + | ||
35 | + return false; | ||
36 | +} | ||
37 | + | ||
38 | int acpi_extract_power_resources(union acpi_object *package, unsigned int start, | ||
39 | struct list_head *list) | ||
40 | { | ||
41 | @@ -150,6 +167,11 @@ int acpi_extract_power_resources(union acpi_object *package, unsigned int start, | ||
42 | err = -ENODEV; | ||
43 | break; | ||
44 | } | ||
45 | + | ||
46 | + /* Some ACPI tables contain duplicate power resource references */ | ||
47 | + if (acpi_power_resource_is_dup(package, start, i)) | ||
48 | + continue; | ||
49 | + | ||
50 | err = acpi_add_power_resource(rhandle); | ||
51 | if (err) | ||
52 | break; | ||
53 | diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c | ||
54 | index ef3016a467a0..8a93ca4d6840 100644 | ||
55 | --- a/drivers/block/rbd.c | ||
56 | +++ b/drivers/block/rbd.c | ||
57 | @@ -6346,7 +6346,6 @@ static ssize_t do_rbd_remove(struct bus_type *bus, | ||
58 | struct list_head *tmp; | ||
59 | int dev_id; | ||
60 | char opt_buf[6]; | ||
61 | - bool already = false; | ||
62 | bool force = false; | ||
63 | int ret; | ||
64 | |||
65 | @@ -6379,13 +6378,13 @@ static ssize_t do_rbd_remove(struct bus_type *bus, | ||
66 | spin_lock_irq(&rbd_dev->lock); | ||
67 | if (rbd_dev->open_count && !force) | ||
68 | ret = -EBUSY; | ||
69 | - else | ||
70 | - already = test_and_set_bit(RBD_DEV_FLAG_REMOVING, | ||
71 | - &rbd_dev->flags); | ||
72 | + else if (test_and_set_bit(RBD_DEV_FLAG_REMOVING, | ||
73 | + &rbd_dev->flags)) | ||
74 | + ret = -EINPROGRESS; | ||
75 | spin_unlock_irq(&rbd_dev->lock); | ||
76 | } | ||
77 | spin_unlock(&rbd_dev_list_lock); | ||
78 | - if (ret < 0 || already) | ||
79 | + if (ret) | ||
80 | return ret; | ||
81 | |||
82 | if (force) { | ||
83 | diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c | ||
84 | index 6f638bbc922d..00e8e675cbeb 100644 | ||
85 | --- a/drivers/i2c/i2c-dev.c | ||
86 | +++ b/drivers/i2c/i2c-dev.c | ||
87 | @@ -461,9 +461,15 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | ||
88 | return i2cdev_ioctl_smbus(client, arg); | ||
89 | |||
90 | case I2C_RETRIES: | ||
91 | + if (arg > INT_MAX) | ||
92 | + return -EINVAL; | ||
93 | + | ||
94 | client->adapter->retries = arg; | ||
95 | break; | ||
96 | case I2C_TIMEOUT: | ||
97 | + if (arg > INT_MAX) | ||
98 | + return -EINVAL; | ||
99 | + | ||
100 | /* For historical reasons, user-space sets the timeout | ||
101 | * value in units of 10 ms. | ||
102 | */ | ||
103 | diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c | ||
104 | index 6c0bb38c4089..8d4d46f3fd16 100644 | ||
105 | --- a/drivers/usb/class/cdc-acm.c | ||
106 | +++ b/drivers/usb/class/cdc-acm.c | ||
107 | @@ -1828,6 +1828,13 @@ static const struct usb_device_id acm_ids[] = { | ||
108 | .driver_info = IGNORE_DEVICE, | ||
109 | }, | ||
110 | |||
111 | + { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */ | ||
112 | + .driver_info = SEND_ZERO_PACKET, | ||
113 | + }, | ||
114 | + { USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */ | ||
115 | + .driver_info = SEND_ZERO_PACKET, | ||
116 | + }, | ||
117 | + | ||
118 | /* control interfaces without any protocol set */ | ||
119 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | ||
120 | USB_CDC_PROTO_NONE) }, | ||
121 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c | ||
122 | index cf378b1ed373..733479ddf8a7 100644 | ||
123 | --- a/drivers/usb/core/quirks.c | ||
124 | +++ b/drivers/usb/core/quirks.c | ||
125 | @@ -240,7 +240,8 @@ static const struct usb_device_id usb_quirk_list[] = { | ||
126 | USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, | ||
127 | |||
128 | /* Corsair K70 RGB */ | ||
129 | - { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT }, | ||
130 | + { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT | | ||
131 | + USB_QUIRK_DELAY_CTRL_MSG }, | ||
132 | |||
133 | /* Corsair Strafe */ | ||
134 | { USB_DEVICE(0x1b1c, 0x1b15), .driver_info = USB_QUIRK_DELAY_INIT | | ||
135 | diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c | ||
136 | index 344ec8631481..13f2c051dbf2 100644 | ||
137 | --- a/drivers/usb/storage/scsiglue.c | ||
138 | +++ b/drivers/usb/storage/scsiglue.c | ||
139 | @@ -251,8 +251,12 @@ static int slave_configure(struct scsi_device *sdev) | ||
140 | if (!(us->fflags & US_FL_NEEDS_CAP16)) | ||
141 | sdev->try_rc_10_first = 1; | ||
142 | |||
143 | - /* assume SPC3 or latter devices support sense size > 18 */ | ||
144 | - if (sdev->scsi_level > SCSI_SPC_2) | ||
145 | + /* | ||
146 | + * assume SPC3 or latter devices support sense size > 18 | ||
147 | + * unless US_FL_BAD_SENSE quirk is specified. | ||
148 | + */ | ||
149 | + if (sdev->scsi_level > SCSI_SPC_2 && | ||
150 | + !(us->fflags & US_FL_BAD_SENSE)) | ||
151 | us->fflags |= US_FL_SANE_SENSE; | ||
152 | |||
153 | /* | ||
154 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
155 | index 0a86b3f3638e..c802aabcc58c 100644 | ||
156 | --- a/drivers/usb/storage/unusual_devs.h | ||
157 | +++ b/drivers/usb/storage/unusual_devs.h | ||
158 | @@ -1284,6 +1284,18 @@ UNUSUAL_DEV( 0x090c, 0x1132, 0x0000, 0xffff, | ||
159 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
160 | US_FL_FIX_CAPACITY ), | ||
161 | |||
162 | +/* | ||
163 | + * Reported by Icenowy Zheng <icenowy@aosc.io> | ||
164 | + * The SMI SM3350 USB-UFS bridge controller will enter a wrong state | ||
165 | + * that do not process read/write command if a long sense is requested, | ||
166 | + * so force to use 18-byte sense. | ||
167 | + */ | ||
168 | +UNUSUAL_DEV( 0x090c, 0x3350, 0x0000, 0xffff, | ||
169 | + "SMI", | ||
170 | + "SM3350 UFS-to-USB-Mass-Storage bridge", | ||
171 | + USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
172 | + US_FL_BAD_SENSE ), | ||
173 | + | ||
174 | /* | ||
175 | * Reported by Paul Hartman <paul.hartman+linux@gmail.com> | ||
176 | * This card reader returns "Illegal Request, Logical Block Address | ||
177 | diff --git a/fs/cifs/file.c b/fs/cifs/file.c | ||
178 | index 49eeed25f200..a3046b6523c8 100644 | ||
179 | --- a/fs/cifs/file.c | ||
180 | +++ b/fs/cifs/file.c | ||
181 | @@ -1118,10 +1118,10 @@ cifs_push_mandatory_locks(struct cifsFileInfo *cfile) | ||
182 | |||
183 | /* | ||
184 | * Accessing maxBuf is racy with cifs_reconnect - need to store value | ||
185 | - * and check it for zero before using. | ||
186 | + * and check it before using. | ||
187 | */ | ||
188 | max_buf = tcon->ses->server->maxBuf; | ||
189 | - if (!max_buf) { | ||
190 | + if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) { | ||
191 | free_xid(xid); | ||
192 | return -EINVAL; | ||
193 | } | ||
194 | @@ -1456,10 +1456,10 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, | ||
195 | |||
196 | /* | ||
197 | * Accessing maxBuf is racy with cifs_reconnect - need to store value | ||
198 | - * and check it for zero before using. | ||
199 | + * and check it before using. | ||
200 | */ | ||
201 | max_buf = tcon->ses->server->maxBuf; | ||
202 | - if (!max_buf) | ||
203 | + if (max_buf < (sizeof(struct smb_hdr) + sizeof(LOCKING_ANDX_RANGE))) | ||
204 | return -EINVAL; | ||
205 | |||
206 | max_num = (max_buf - sizeof(struct smb_hdr)) / | ||
207 | diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c | ||
208 | index b2aff0c6f22c..b7885dc0d9bb 100644 | ||
209 | --- a/fs/cifs/smb2file.c | ||
210 | +++ b/fs/cifs/smb2file.c | ||
211 | @@ -123,10 +123,10 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, | ||
212 | |||
213 | /* | ||
214 | * Accessing maxBuf is racy with cifs_reconnect - need to store value | ||
215 | - * and check it for zero before using. | ||
216 | + * and check it before using. | ||
217 | */ | ||
218 | max_buf = tcon->ses->server->maxBuf; | ||
219 | - if (!max_buf) | ||
220 | + if (max_buf < sizeof(struct smb2_lock_element)) | ||
221 | return -EINVAL; | ||
222 | |||
223 | max_num = max_buf / sizeof(struct smb2_lock_element); | ||
224 | diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c | ||
225 | index cc26d4138d70..de133eeebc8a 100644 | ||
226 | --- a/fs/cifs/transport.c | ||
227 | +++ b/fs/cifs/transport.c | ||
228 | @@ -301,7 +301,7 @@ uncork: | ||
229 | if (rc < 0 && rc != -EINTR) | ||
230 | cifs_dbg(VFS, "Error %d sending data on socket to server\n", | ||
231 | rc); | ||
232 | - else | ||
233 | + else if (rc > 0) | ||
234 | rc = 0; | ||
235 | |||
236 | return rc; | ||
237 | diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c | ||
238 | index 1008384d5ed5..9a13f86fed62 100644 | ||
239 | --- a/fs/ext4/inline.c | ||
240 | +++ b/fs/ext4/inline.c | ||
241 | @@ -1859,12 +1859,12 @@ int ext4_inline_data_fiemap(struct inode *inode, | ||
242 | physical += (char *)ext4_raw_inode(&iloc) - iloc.bh->b_data; | ||
243 | physical += offsetof(struct ext4_inode, i_block); | ||
244 | |||
245 | - if (physical) | ||
246 | - error = fiemap_fill_next_extent(fieinfo, start, physical, | ||
247 | - inline_len, flags); | ||
248 | brelse(iloc.bh); | ||
249 | out: | ||
250 | up_read(&EXT4_I(inode)->xattr_sem); | ||
251 | + if (physical) | ||
252 | + error = fiemap_fill_next_extent(fieinfo, start, physical, | ||
253 | + inline_len, flags); | ||
254 | return (error < 0 ? error : 0); | ||
255 | } | ||
256 | |||
257 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c | ||
258 | index f62eca8cbde0..4815be26b15f 100644 | ||
259 | --- a/fs/ext4/inode.c | ||
260 | +++ b/fs/ext4/inode.c | ||
261 | @@ -2698,7 +2698,8 @@ static int ext4_writepages(struct address_space *mapping, | ||
262 | * We may need to convert up to one extent per block in | ||
263 | * the page and we may dirty the inode. | ||
264 | */ | ||
265 | - rsv_blocks = 1 + (PAGE_SIZE >> inode->i_blkbits); | ||
266 | + rsv_blocks = 1 + ext4_chunk_trans_blocks(inode, | ||
267 | + PAGE_SIZE >> inode->i_blkbits); | ||
268 | } | ||
269 | |||
270 | /* | ||
271 | diff --git a/fs/ext4/super.c b/fs/ext4/super.c | ||
272 | index 6810234b0b27..a6c7ace9cfd1 100644 | ||
273 | --- a/fs/ext4/super.c | ||
274 | +++ b/fs/ext4/super.c | ||
275 | @@ -4679,7 +4679,7 @@ static int ext4_commit_super(struct super_block *sb, int sync) | ||
276 | ext4_superblock_csum_set(sb); | ||
277 | if (sync) | ||
278 | lock_buffer(sbh); | ||
279 | - if (buffer_write_io_error(sbh)) { | ||
280 | + if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) { | ||
281 | /* | ||
282 | * Oh, dear. A previous attempt to write the | ||
283 | * superblock failed. This could happen because the | ||
284 | diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h | ||
285 | index 102c84dcc11a..63eed9ac8fd7 100644 | ||
286 | --- a/include/linux/sunrpc/svc.h | ||
287 | +++ b/include/linux/sunrpc/svc.h | ||
288 | @@ -291,9 +291,12 @@ struct svc_rqst { | ||
289 | struct svc_cacherep * rq_cacherep; /* cache info */ | ||
290 | struct task_struct *rq_task; /* service thread */ | ||
291 | spinlock_t rq_lock; /* per-request lock */ | ||
292 | + struct net *rq_bc_net; /* pointer to backchannel's | ||
293 | + * net namespace | ||
294 | + */ | ||
295 | }; | ||
296 | |||
297 | -#define SVC_NET(svc_rqst) (svc_rqst->rq_xprt->xpt_net) | ||
298 | +#define SVC_NET(rqst) (rqst->rq_xprt ? rqst->rq_xprt->xpt_net : rqst->rq_bc_net) | ||
299 | |||
300 | /* | ||
301 | * Rigorous type checking on sockaddr type conversions | ||
302 | diff --git a/mm/slab.c b/mm/slab.c | ||
303 | index 263dcda6897b..354a09deecff 100644 | ||
304 | --- a/mm/slab.c | ||
305 | +++ b/mm/slab.c | ||
306 | @@ -682,8 +682,10 @@ static struct alien_cache *__alloc_alien_cache(int node, int entries, | ||
307 | struct alien_cache *alc = NULL; | ||
308 | |||
309 | alc = kmalloc_node(memsize, gfp, node); | ||
310 | - init_arraycache(&alc->ac, entries, batch); | ||
311 | - spin_lock_init(&alc->lock); | ||
312 | + if (alc) { | ||
313 | + init_arraycache(&alc->ac, entries, batch); | ||
314 | + spin_lock_init(&alc->lock); | ||
315 | + } | ||
316 | return alc; | ||
317 | } | ||
318 | |||
319 | diff --git a/mm/util.c b/mm/util.c | ||
320 | index 8c755d05d4e6..07f467206186 100644 | ||
321 | --- a/mm/util.c | ||
322 | +++ b/mm/util.c | ||
323 | @@ -389,7 +389,7 @@ bool page_mapped(struct page *page) | ||
324 | return true; | ||
325 | if (PageHuge(page)) | ||
326 | return false; | ||
327 | - for (i = 0; i < hpage_nr_pages(page); i++) { | ||
328 | + for (i = 0; i < (1 << compound_order(page)); i++) { | ||
329 | if (atomic_read(&page[i]._mapcount) >= 0) | ||
330 | return true; | ||
331 | } | ||
332 | diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c | ||
333 | index 272c34551979..eea18a124e4f 100644 | ||
334 | --- a/net/sunrpc/svc.c | ||
335 | +++ b/net/sunrpc/svc.c | ||
336 | @@ -1137,6 +1137,8 @@ void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) | ||
337 | static __printf(2,3) void svc_printk(struct svc_rqst *rqstp, const char *fmt, ...) {} | ||
338 | #endif | ||
339 | |||
340 | +extern void svc_tcp_prep_reply_hdr(struct svc_rqst *); | ||
341 | + | ||
342 | /* | ||
343 | * Common routine for processing the RPC request. | ||
344 | */ | ||
345 | @@ -1166,7 +1168,8 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) | ||
346 | clear_bit(RQ_DROPME, &rqstp->rq_flags); | ||
347 | |||
348 | /* Setup reply header */ | ||
349 | - rqstp->rq_xprt->xpt_ops->xpo_prep_reply_hdr(rqstp); | ||
350 | + if (rqstp->rq_prot == IPPROTO_TCP) | ||
351 | + svc_tcp_prep_reply_hdr(rqstp); | ||
352 | |||
353 | svc_putu32(resv, rqstp->rq_xid); | ||
354 | |||
355 | @@ -1312,7 +1315,7 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv) | ||
356 | return 0; | ||
357 | |||
358 | close: | ||
359 | - if (test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) | ||
360 | + if (rqstp->rq_xprt && test_bit(XPT_TEMP, &rqstp->rq_xprt->xpt_flags)) | ||
361 | svc_close_xprt(rqstp->rq_xprt); | ||
362 | dprintk("svc: svc_process close\n"); | ||
363 | return 0; | ||
364 | @@ -1439,10 +1442,10 @@ bc_svc_process(struct svc_serv *serv, struct rpc_rqst *req, | ||
365 | dprintk("svc: %s(%p)\n", __func__, req); | ||
366 | |||
367 | /* Build the svc_rqst used by the common processing routine */ | ||
368 | - rqstp->rq_xprt = serv->sv_bc_xprt; | ||
369 | rqstp->rq_xid = req->rq_xid; | ||
370 | rqstp->rq_prot = req->rq_xprt->prot; | ||
371 | rqstp->rq_server = serv; | ||
372 | + rqstp->rq_bc_net = req->rq_xprt->xprt_net; | ||
373 | |||
374 | rqstp->rq_addrlen = sizeof(req->rq_xprt->addr); | ||
375 | memcpy(&rqstp->rq_addr, &req->rq_xprt->addr, rqstp->rq_addrlen); | ||
376 | diff --git a/net/sunrpc/svc_xprt.c b/net/sunrpc/svc_xprt.c | ||
377 | index 064f20bb845a..42ce3ed21637 100644 | ||
378 | --- a/net/sunrpc/svc_xprt.c | ||
379 | +++ b/net/sunrpc/svc_xprt.c | ||
380 | @@ -510,10 +510,11 @@ out: | ||
381 | */ | ||
382 | void svc_reserve(struct svc_rqst *rqstp, int space) | ||
383 | { | ||
384 | + struct svc_xprt *xprt = rqstp->rq_xprt; | ||
385 | + | ||
386 | space += rqstp->rq_res.head[0].iov_len; | ||
387 | |||
388 | - if (space < rqstp->rq_reserved) { | ||
389 | - struct svc_xprt *xprt = rqstp->rq_xprt; | ||
390 | + if (xprt && space < rqstp->rq_reserved) { | ||
391 | atomic_sub((rqstp->rq_reserved - space), &xprt->xpt_reserved); | ||
392 | rqstp->rq_reserved = space; | ||
393 | |||
394 | diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c | ||
395 | index 33f599cb0936..fd7fbe91955e 100644 | ||
396 | --- a/net/sunrpc/svcsock.c | ||
397 | +++ b/net/sunrpc/svcsock.c | ||
398 | @@ -1195,7 +1195,7 @@ static int svc_tcp_sendto(struct svc_rqst *rqstp) | ||
399 | /* | ||
400 | * Setup response header. TCP has a 4B record length field. | ||
401 | */ | ||
402 | -static void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) | ||
403 | +void svc_tcp_prep_reply_hdr(struct svc_rqst *rqstp) | ||
404 | { | ||
405 | struct kvec *resv = &rqstp->rq_res.head[0]; | ||
406 | |||
407 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
408 | index 0fd31cff483e..0fc05ebdf81a 100644 | ||
409 | --- a/sound/pci/hda/patch_realtek.c | ||
410 | +++ b/sound/pci/hda/patch_realtek.c | ||
411 | @@ -4841,6 +4841,13 @@ static void alc280_fixup_hp_9480m(struct hda_codec *codec, | ||
412 | } | ||
413 | } | ||
414 | |||
415 | +static void alc_fixup_disable_mic_vref(struct hda_codec *codec, | ||
416 | + const struct hda_fixup *fix, int action) | ||
417 | +{ | ||
418 | + if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
419 | + snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ); | ||
420 | +} | ||
421 | + | ||
422 | /* for hda_fixup_thinkpad_acpi() */ | ||
423 | #include "thinkpad_helper.c" | ||
424 | |||
425 | @@ -4947,6 +4954,7 @@ enum { | ||
426 | ALC293_FIXUP_LENOVO_SPK_NOISE, | ||
427 | ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, | ||
428 | ALC255_FIXUP_DELL_SPK_NOISE, | ||
429 | + ALC225_FIXUP_DISABLE_MIC_VREF, | ||
430 | ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, | ||
431 | ALC295_FIXUP_DISABLE_DAC3, | ||
432 | ALC280_FIXUP_HP_HEADSET_MIC, | ||
433 | @@ -5605,6 +5613,12 @@ static const struct hda_fixup alc269_fixups[] = { | ||
434 | .chained = true, | ||
435 | .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE | ||
436 | }, | ||
437 | + [ALC225_FIXUP_DISABLE_MIC_VREF] = { | ||
438 | + .type = HDA_FIXUP_FUNC, | ||
439 | + .v.func = alc_fixup_disable_mic_vref, | ||
440 | + .chained = true, | ||
441 | + .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE | ||
442 | + }, | ||
443 | [ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = { | ||
444 | .type = HDA_FIXUP_VERBS, | ||
445 | .v.verbs = (const struct hda_verb[]) { | ||
446 | @@ -5614,7 +5628,7 @@ static const struct hda_fixup alc269_fixups[] = { | ||
447 | {} | ||
448 | }, | ||
449 | .chained = true, | ||
450 | - .chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE | ||
451 | + .chain_id = ALC225_FIXUP_DISABLE_MIC_VREF | ||
452 | }, | ||
453 | [ALC280_FIXUP_HP_HEADSET_MIC] = { | ||
454 | .type = HDA_FIXUP_FUNC, |