brcm2708: update to v3.18
[oweals/openwrt.git] / target / linux / brcm2708 / patches-3.18 / 0064-Adding-Device-Tree-support-for-some-RPi-audio-cards.patch
1 From 5f17e24bea60b696815d2c6cb578e1e23f61cd57 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Wed, 12 Nov 2014 17:07:02 +0000
4 Subject: [PATCH 064/114] Adding Device Tree support for some RPi audio cards
5
6 ---
7  arch/arm/boot/dts/Makefile                      |  2 +
8  arch/arm/boot/dts/bcm2708-rpi-b-plus.dts        | 81 +++++++++++++++++++++++++
9  arch/arm/boot/dts/bcm2708-rpi-b.dts             | 19 +++++-
10  arch/arm/boot/dts/bcm2708.dtsi                  | 18 ++++--
11  arch/arm/boot/dts/hifiberry-dac-overlay.dts     | 34 +++++++++++
12  arch/arm/boot/dts/hifiberry-dacplus-overlay.dts | 39 ++++++++++++
13  arch/arm/boot/dts/hifiberry-digi-overlay.dts    | 39 ++++++++++++
14  arch/arm/boot/dts/iqaudio-dac-overlay.dts       | 39 ++++++++++++
15  arch/arm/boot/dts/iqaudio-dacplus-overlay.dts   | 39 ++++++++++++
16  sound/soc/bcm/hifiberry_dac.c                   | 22 +++++++
17  sound/soc/bcm/hifiberry_dacplus.c               | 22 +++++++
18  sound/soc/bcm/hifiberry_digi.c                  | 22 +++++++
19  sound/soc/bcm/iqaudio-dac.c                     | 16 +++++
20  sound/soc/codecs/pcm5102a.c                     |  7 +++
21  14 files changed, 393 insertions(+), 6 deletions(-)
22  create mode 100644 arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
23  create mode 100644 arch/arm/boot/dts/hifiberry-dac-overlay.dts
24  create mode 100644 arch/arm/boot/dts/hifiberry-dacplus-overlay.dts
25  create mode 100644 arch/arm/boot/dts/hifiberry-digi-overlay.dts
26  create mode 100644 arch/arm/boot/dts/iqaudio-dac-overlay.dts
27  create mode 100644 arch/arm/boot/dts/iqaudio-dacplus-overlay.dts
28
29 diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
30 index c727f71..adaebbb 100644
31 --- a/arch/arm/boot/dts/Makefile
32 +++ b/arch/arm/boot/dts/Makefile
33 @@ -54,6 +54,7 @@ dtb-$(CONFIG_ARCH_AT91)       += at91-sama5d4ek.dtb
34  dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
35  dtb-$(CONFIG_ARCH_AXXIA) += axm5516-amarillo.dtb
36  dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b.dtb
37 +dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b-plus.dtb
38  dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
39  dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb
40  dtb-$(CONFIG_ARCH_BCM_63XX) += bcm963138dvt.dtb
41 @@ -520,6 +521,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += mt6589-aquaris5.dtb
42  
43  targets += dtbs dtbs_install
44  targets += $(dtb-y)
45 +
46  endif
47  
48  # *.dtb used to be generated in the directory above. Clean out the
49 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
50 new file mode 100644
51 index 0000000..983c23f
52 --- /dev/null
53 +++ b/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
54 @@ -0,0 +1,81 @@
55 +/dts-v1/;
56 +
57 +/include/ "bcm2708.dtsi"
58 +
59 +/ {
60 +       compatible = "brcm,bcm2708";
61 +       model = "Raspberry Pi Model B+";
62 +
63 +       aliases {
64 +               spi0 = &spi0;
65 +               i2c0 = &i2c0;
66 +               i2c1 = &i2c1;
67 +               i2s  = &i2s;
68 +               gpio = &gpio;
69 +               sound = &sound;
70 +       };
71 +
72 +       sound: sound {
73 +       };
74 +};
75 +
76 +&gpio {
77 +       spi0_pins: spi0_pins {
78 +               brcm,pins = <7 8 9 10 11>;
79 +               brcm,function = <4>; /* alt0 */
80 +       };
81 +
82 +       i2c0_pins: i2c0 {
83 +               brcm,pins = <0 1>;
84 +               brcm,function = <4>;
85 +       };
86 +
87 +       i2c1_pins: i2c1 {
88 +               brcm,pins = <2 3>;
89 +               brcm,function = <4>;
90 +       };
91 +
92 +       i2s_pins: i2s {
93 +               brcm,pins = <18 19 20 21>;
94 +               brcm,function = <4>; /* alt0 */
95 +       };
96 +};
97 +
98 +&spi0 {
99 +       pinctrl-names = "default";
100 +       pinctrl-0 = <&spi0_pins>;
101 +
102 +       spidev@0{
103 +               compatible = "spidev";
104 +               reg = <0>;      /* CE0 */
105 +               #address-cells = <1>;
106 +               #size-cells = <0>;
107 +               spi-max-frequency = <500000>;
108 +       };
109 +
110 +       spidev@1{
111 +               compatible = "spidev";
112 +               reg = <1>;      /* CE1 */
113 +               #address-cells = <1>;
114 +               #size-cells = <0>;
115 +               spi-max-frequency = <500000>;
116 +       };
117 +};
118 +
119 +&i2c0 {
120 +       pinctrl-names = "default";
121 +       pinctrl-0 = <&i2c0_pins>;
122 +       clock-frequency = <100000>;
123 +};
124 +
125 +&i2c1 {
126 +       pinctrl-names = "default";
127 +       pinctrl-0 = <&i2c1_pins>;
128 +       clock-frequency = <100000>;
129 +};
130 +
131 +&i2s {
132 +       #sound-dai-cells = <0>;
133 +       pinctrl-names = "default";
134 +       pinctrl-0 = <&i2s_pins>;
135 +};
136 diff --git a/arch/arm/boot/dts/bcm2708-rpi-b.dts b/arch/arm/boot/dts/bcm2708-rpi-b.dts
137 index 5893122..d8c6d15 100644
138 --- a/arch/arm/boot/dts/bcm2708-rpi-b.dts
139 +++ b/arch/arm/boot/dts/bcm2708-rpi-b.dts
140 @@ -4,12 +4,18 @@
141  
142  / {
143         compatible = "brcm,bcm2708";
144 -       model = "Raspberry Pi";
145 +       model = "Raspberry Pi Model B";
146  
147         aliases {
148                 spi0 = &spi0;
149                 i2c0 = &i2c0;
150                 i2c1 = &i2c1;
151 +               i2s  = &i2s;
152 +               gpio = &gpio;
153 +               sound = &sound;
154 +       };
155 +
156 +       sound: sound {
157         };
158  };
159  
160 @@ -28,6 +34,11 @@
161                 brcm,pins = <2 3>;
162                 brcm,function = <4>;
163         };
164 +
165 +       i2s_pins: i2s {
166 +               brcm,pins = <28 29 30 31>;
167 +               brcm,function = <4>; /* alt0 */
168 +       };
169  };
170  
171  &spi0 {
172 @@ -62,3 +73,9 @@
173         pinctrl-0 = <&i2c1_pins>;
174         clock-frequency = <100000>;
175  };
176 +
177 +&i2s {
178 +       #sound-dai-cells = <0>;
179 +       pinctrl-names = "default";
180 +       pinctrl-0 = <&i2s_pins>;
181 +};
182 diff --git a/arch/arm/boot/dts/bcm2708.dtsi b/arch/arm/boot/dts/bcm2708.dtsi
183 index 2ca6d63..6b36128 100644
184 --- a/arch/arm/boot/dts/bcm2708.dtsi
185 +++ b/arch/arm/boot/dts/bcm2708.dtsi
186 @@ -7,11 +7,8 @@
187         interrupt-parent = <&intc>;
188  
189         chosen {
190 -               /*
191 -                  bootargs must be 1024 characters long because the
192 -                  VC bootloader can't expand it
193 -               */
194 -               bootargs = "console=ttyAMA0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ";
195 +               /* No padding required - the boot loader can do that. */
196 +               bootargs = "";
197         };
198  
199         soc {
200 @@ -39,6 +36,17 @@
201                         #interrupt-cells = <2>;
202                 };
203  
204 +               i2s: i2s@7e203000 {
205 +                       compatible = "brcm,bcm2708-i2s";
206 +                       reg = <0x7e203000 0x20>,
207 +                             <0x7e101098 0x02>;
208 +
209 +                       //dmas = <&dma 2>,
210 +                       //       <&dma 3>;
211 +                       dma-names = "tx", "rx";
212 +                       status = "disabled";
213 +               };
214 +
215                 spi0: spi@7e204000 {
216                         compatible = "brcm,bcm2708-spi";
217                         reg = <0x7e204000 0x1000>;
218 diff --git a/arch/arm/boot/dts/hifiberry-dac-overlay.dts b/arch/arm/boot/dts/hifiberry-dac-overlay.dts
219 new file mode 100644
220 index 0000000..5e7633a
221 --- /dev/null
222 +++ b/arch/arm/boot/dts/hifiberry-dac-overlay.dts
223 @@ -0,0 +1,34 @@
224 +// Definitions for HiFiBerry DAC
225 +/dts-v1/;
226 +/plugin/;
227 +
228 +/ {
229 +       compatible = "brcm,bcm2708";
230 +
231 +       fragment@0 {
232 +               target = <&sound>;
233 +               __overlay__ {
234 +                       compatible = "hifiberry,hifiberry-dac";
235 +                       i2s-controller = <&i2s>;
236 +                       status = "okay";
237 +               };
238 +       };
239 +
240 +       fragment@1 {
241 +               target = <&i2s>;
242 +               __overlay__ {
243 +                       status = "okay";
244 +               };
245 +       };
246 +
247 +       fragment@2 {
248 +               target-path = "/";
249 +               __overlay__ {
250 +                       pcm5102a-codec {
251 +                               #sound-dai-cells = <0>;
252 +                               compatible = "ti,pcm5102a";
253 +                               status = "okay";
254 +                       };
255 +               };
256 +       };
257 +};
258 diff --git a/arch/arm/boot/dts/hifiberry-dacplus-overlay.dts b/arch/arm/boot/dts/hifiberry-dacplus-overlay.dts
259 new file mode 100644
260 index 0000000..deb9c62
261 --- /dev/null
262 +++ b/arch/arm/boot/dts/hifiberry-dacplus-overlay.dts
263 @@ -0,0 +1,39 @@
264 +// Definitions for HiFiBerry DAC+
265 +/dts-v1/;
266 +/plugin/;
267 +
268 +/ {
269 +       compatible = "brcm,bcm2708";
270 +
271 +       fragment@0 {
272 +               target = <&sound>;
273 +               __overlay__ {
274 +                       compatible = "hifiberry,hifiberry-dacplus";
275 +                       i2s-controller = <&i2s>;
276 +                       status = "okay";
277 +               };
278 +       };
279 +
280 +       fragment@1 {
281 +               target = <&i2s>;
282 +               __overlay__ {
283 +                       status = "okay";
284 +               };
285 +       };
286 +
287 +       fragment@2 {
288 +               target = <&i2c1>;
289 +               __overlay__ {
290 +                       #address-cells = <1>;
291 +                       #size-cells = <0>;
292 +                       status = "okay";
293 +
294 +                       pcm5122@4d {
295 +                               #sound-dai-cells = <0>;
296 +                               compatible = "ti,pcm5122";
297 +                               reg = <0x4d>;
298 +                               status = "okay";
299 +                       };
300 +               };
301 +       };
302 +};
303 diff --git a/arch/arm/boot/dts/hifiberry-digi-overlay.dts b/arch/arm/boot/dts/hifiberry-digi-overlay.dts
304 new file mode 100644
305 index 0000000..d0e0d8a
306 --- /dev/null
307 +++ b/arch/arm/boot/dts/hifiberry-digi-overlay.dts
308 @@ -0,0 +1,39 @@
309 +// Definitions for HiFiBerry Digi
310 +/dts-v1/;
311 +/plugin/;
312 +
313 +/ {
314 +       compatible = "brcm,bcm2708";
315 +
316 +       fragment@0 {
317 +               target = <&sound>;
318 +               __overlay__ {
319 +                       compatible = "hifiberry,hifiberry-digi";
320 +                       i2s-controller = <&i2s>;
321 +                       status = "okay";
322 +               };
323 +       };
324 +
325 +       fragment@1 {
326 +               target = <&i2s>;
327 +               __overlay__ {
328 +                       status = "okay";
329 +               };
330 +       };
331 +
332 +       fragment@2 {
333 +               target = <&i2c1>;
334 +               __overlay__ {
335 +                       #address-cells = <1>;
336 +                       #size-cells = <0>;
337 +                       status = "okay";
338 +
339 +                       wm8804@3b {
340 +                               #sound-dai-cells = <0>;
341 +                               compatible = "wlf,wm8804";
342 +                               reg = <0x3b>;
343 +                               status = "okay";
344 +                       };
345 +               };
346 +       };
347 +};
348 diff --git a/arch/arm/boot/dts/iqaudio-dac-overlay.dts b/arch/arm/boot/dts/iqaudio-dac-overlay.dts
349 new file mode 100644
350 index 0000000..ea8173e
351 --- /dev/null
352 +++ b/arch/arm/boot/dts/iqaudio-dac-overlay.dts
353 @@ -0,0 +1,39 @@
354 +// Definitions for IQaudIO DAC
355 +/dts-v1/;
356 +/plugin/;
357 +
358 +/ {
359 +       compatible = "brcm,bcm2708";
360 +
361 +       fragment@0 {
362 +               target = <&sound>;
363 +               __overlay__ {
364 +                       compatible = "iqaudio,iqaudio-dac";
365 +                       i2s-controller = <&i2s>;
366 +                       status = "okay";
367 +               };
368 +       };
369 +
370 +       fragment@1 {
371 +               target = <&i2s>;
372 +               __overlay__ {
373 +                       status = "okay";
374 +               };
375 +       };
376 +
377 +       fragment@2 {
378 +               target = <&i2c1>;
379 +               __overlay__ {
380 +                       #address-cells = <1>;
381 +                       #size-cells = <0>;
382 +                       status = "okay";
383 +
384 +                       pcm5122@4c {
385 +                               #sound-dai-cells = <0>;
386 +                               compatible = "ti,pcm5122";
387 +                               reg = <0x4c>;
388 +                               status = "okay";
389 +                       };
390 +               };
391 +       };
392 +};
393 diff --git a/arch/arm/boot/dts/iqaudio-dacplus-overlay.dts b/arch/arm/boot/dts/iqaudio-dacplus-overlay.dts
394 new file mode 100644
395 index 0000000..735d8ab
396 --- /dev/null
397 +++ b/arch/arm/boot/dts/iqaudio-dacplus-overlay.dts
398 @@ -0,0 +1,39 @@
399 +// Definitions for IQaudIO DAC+
400 +/dts-v1/;
401 +/plugin/;
402 +
403 +/ {
404 +       compatible = "brcm,bcm2708";
405 +
406 +       fragment@0 {
407 +               target = <&sound>;
408 +               __overlay__ {
409 +                       compatible = "iqaudio,iqaudio-dac";
410 +                       i2s-controller = <&i2s>;
411 +                       status = "okay";
412 +               };
413 +       };
414 +
415 +       fragment@1 {
416 +               target = <&i2s>;
417 +               __overlay__ {
418 +                       status = "okay";
419 +               };
420 +       };
421 +
422 +       fragment@2 {
423 +               target = <&i2c1>;
424 +               __overlay__ {
425 +                       #address-cells = <1>;
426 +                       #size-cells = <0>;
427 +                       status = "okay";
428 +
429 +                       pcm5122@4c {
430 +                               #sound-dai-cells = <0>;
431 +                               compatible = "ti,pcm5122";
432 +                               reg = <0x4c>;
433 +                               status = "okay";
434 +                       };
435 +               };
436 +       };
437 +};
438 diff --git a/sound/soc/bcm/hifiberry_dac.c b/sound/soc/bcm/hifiberry_dac.c
439 index 4b70b45..3ab0f47 100644
440 --- a/sound/soc/bcm/hifiberry_dac.c
441 +++ b/sound/soc/bcm/hifiberry_dac.c
442 @@ -72,6 +72,21 @@ static int snd_rpi_hifiberry_dac_probe(struct platform_device *pdev)
443         int ret = 0;
444  
445         snd_rpi_hifiberry_dac.dev = &pdev->dev;
446 +
447 +       if (pdev->dev.of_node) {
448 +           struct device_node *i2s_node;
449 +           struct snd_soc_dai_link *dai = &snd_rpi_hifiberry_dac_dai[0];
450 +           i2s_node = of_parse_phandle(pdev->dev.of_node,
451 +                                       "i2s-controller", 0);
452 +
453 +           if (i2s_node) {
454 +               dai->cpu_dai_name = NULL;
455 +               dai->cpu_of_node = i2s_node;
456 +               dai->platform_name = NULL;
457 +               dai->platform_of_node = i2s_node;
458 +           }
459 +       }
460 +
461         ret = snd_soc_register_card(&snd_rpi_hifiberry_dac);
462         if (ret)
463                 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret);
464 @@ -84,10 +99,17 @@ static int snd_rpi_hifiberry_dac_remove(struct platform_device *pdev)
465         return snd_soc_unregister_card(&snd_rpi_hifiberry_dac);
466  }
467  
468 +static const struct of_device_id snd_rpi_hifiberry_dac_of_match[] = {
469 +       { .compatible = "hifiberry,hifiberry-dac", },
470 +       {},
471 +};
472 +MODULE_DEVICE_TABLE(of, snd_rpi_hifiberry_dac_of_match);
473 +
474  static struct platform_driver snd_rpi_hifiberry_dac_driver = {
475          .driver = {
476                  .name   = "snd-hifiberry-dac",
477                  .owner  = THIS_MODULE,
478 +               .of_match_table = snd_rpi_hifiberry_dac_of_match,
479          },
480          .probe          = snd_rpi_hifiberry_dac_probe,
481          .remove         = snd_rpi_hifiberry_dac_remove,
482 diff --git a/sound/soc/bcm/hifiberry_dacplus.c b/sound/soc/bcm/hifiberry_dacplus.c
483 index c63387b..11e4f39 100644
484 --- a/sound/soc/bcm/hifiberry_dacplus.c
485 +++ b/sound/soc/bcm/hifiberry_dacplus.c
486 @@ -90,6 +90,21 @@ static int snd_rpi_hifiberry_dacplus_probe(struct platform_device *pdev)
487         int ret = 0;
488  
489         snd_rpi_hifiberry_dacplus.dev = &pdev->dev;
490 +
491 +       if (pdev->dev.of_node) {
492 +           struct device_node *i2s_node;
493 +           struct snd_soc_dai_link *dai = &snd_rpi_hifiberry_dacplus_dai[0];
494 +           i2s_node = of_parse_phandle(pdev->dev.of_node,
495 +                                       "i2s-controller", 0);
496 +
497 +           if (i2s_node) {
498 +               dai->cpu_dai_name = NULL;
499 +               dai->cpu_of_node = i2s_node;
500 +               dai->platform_name = NULL;
501 +               dai->platform_of_node = i2s_node;
502 +           }
503 +       }
504 +
505         ret = snd_soc_register_card(&snd_rpi_hifiberry_dacplus);
506         if (ret)
507                 dev_err(&pdev->dev,
508 @@ -103,10 +118,17 @@ static int snd_rpi_hifiberry_dacplus_remove(struct platform_device *pdev)
509         return snd_soc_unregister_card(&snd_rpi_hifiberry_dacplus);
510  }
511  
512 +static const struct of_device_id snd_rpi_hifiberry_dacplus_of_match[] = {
513 +       { .compatible = "hifiberry,hifiberry-dacplus", },
514 +       {},
515 +};
516 +MODULE_DEVICE_TABLE(of, snd_rpi_hifiberry_dacplus_of_match);
517 +
518  static struct platform_driver snd_rpi_hifiberry_dacplus_driver = {
519         .driver = {
520                 .name   = "snd-rpi-hifiberry-dacplus",
521                 .owner  = THIS_MODULE,
522 +               .of_match_table = snd_rpi_hifiberry_dacplus_of_match,
523         },
524         .probe          = snd_rpi_hifiberry_dacplus_probe,
525         .remove         = snd_rpi_hifiberry_dacplus_remove,
526 diff --git a/sound/soc/bcm/hifiberry_digi.c b/sound/soc/bcm/hifiberry_digi.c
527 index e4f769d..76af8a6 100644
528 --- a/sound/soc/bcm/hifiberry_digi.c
529 +++ b/sound/soc/bcm/hifiberry_digi.c
530 @@ -125,6 +125,21 @@ static int snd_rpi_hifiberry_digi_probe(struct platform_device *pdev)
531         int ret = 0;
532  
533         snd_rpi_hifiberry_digi.dev = &pdev->dev;
534 +
535 +       if (pdev->dev.of_node) {
536 +           struct device_node *i2s_node;
537 +           struct snd_soc_dai_link *dai = &snd_rpi_hifiberry_digi_dai[0];
538 +           i2s_node = of_parse_phandle(pdev->dev.of_node,
539 +                                       "i2s-controller", 0);
540 +
541 +           if (i2s_node) {
542 +               dai->cpu_dai_name = NULL;
543 +               dai->cpu_of_node = i2s_node;
544 +               dai->platform_name = NULL;
545 +               dai->platform_of_node = i2s_node;
546 +           }
547 +       }
548 +
549         ret = snd_soc_register_card(&snd_rpi_hifiberry_digi);
550         if (ret)
551                 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret);
552 @@ -137,10 +152,17 @@ static int snd_rpi_hifiberry_digi_remove(struct platform_device *pdev)
553         return snd_soc_unregister_card(&snd_rpi_hifiberry_digi);
554  }
555  
556 +static const struct of_device_id snd_rpi_hifiberry_digi_of_match[] = {
557 +       { .compatible = "hifiberry,hifiberry-digi", },
558 +       {},
559 +};
560 +MODULE_DEVICE_TABLE(of, snd_rpi_hifiberry_digi_of_match);
561 +
562  static struct platform_driver snd_rpi_hifiberry_digi_driver = {
563         .driver = {
564                 .name   = "snd-hifiberry-digi",
565                 .owner  = THIS_MODULE,
566 +               .of_match_table = snd_rpi_hifiberry_digi_of_match,
567         },
568         .probe          = snd_rpi_hifiberry_digi_probe,
569         .remove         = snd_rpi_hifiberry_digi_remove,
570 diff --git a/sound/soc/bcm/iqaudio-dac.c b/sound/soc/bcm/iqaudio-dac.c
571 index 8d0e2ae..ee8cd6e 100644
572 --- a/sound/soc/bcm/iqaudio-dac.c
573 +++ b/sound/soc/bcm/iqaudio-dac.c
574 @@ -76,6 +76,21 @@ static int snd_rpi_iqaudio_dac_probe(struct platform_device *pdev)
575         int ret = 0;
576  
577         snd_rpi_iqaudio_dac.dev = &pdev->dev;
578 +
579 +       if (pdev->dev.of_node) {
580 +           struct device_node *i2s_node;
581 +           struct snd_soc_dai_link *dai = &snd_rpi_iqaudio_dac_dai[0];
582 +           i2s_node = of_parse_phandle(pdev->dev.of_node,
583 +                                       "i2s-controller", 0);
584 +
585 +           if (i2s_node) {
586 +               dai->cpu_dai_name = NULL;
587 +               dai->cpu_of_node = i2s_node;
588 +               dai->platform_name = NULL;
589 +               dai->platform_of_node = i2s_node;
590 +           }
591 +       }
592 +
593         ret = snd_soc_register_card(&snd_rpi_iqaudio_dac);
594         if (ret)
595                 dev_err(&pdev->dev,
596 @@ -93,6 +108,7 @@ static const struct of_device_id iqaudio_of_match[] = {
597         { .compatible = "iqaudio,iqaudio-dac", },
598         {},
599  };
600 +MODULE_DEVICE_TABLE(of, iqaudio_of_match);
601  
602  static struct platform_driver snd_rpi_iqaudio_dac_driver = {
603         .driver = {
604 diff --git a/sound/soc/codecs/pcm5102a.c b/sound/soc/codecs/pcm5102a.c
605 index 126f1e9..7c6598e 100644
606 --- a/sound/soc/codecs/pcm5102a.c
607 +++ b/sound/soc/codecs/pcm5102a.c
608 @@ -47,12 +47,19 @@ static int pcm5102a_remove(struct platform_device *pdev)
609         return 0;
610  }
611  
612 +static const struct of_device_id pcm5102a_of_match[] = {
613 +       { .compatible = "ti,pcm5102a", },
614 +       { }
615 +};
616 +MODULE_DEVICE_TABLE(of, pcm5102a_of_match);
617 +
618  static struct platform_driver pcm5102a_codec_driver = {
619         .probe          = pcm5102a_probe,
620         .remove         = pcm5102a_remove,
621         .driver         = {
622                 .name   = "pcm5102a-codec",
623                 .owner  = THIS_MODULE,
624 +               .of_match_table = pcm5102a_of_match,
625         },
626  };
627  
628 -- 
629 1.8.3.2
630