disable sstrip when using musl
[lede.git] / target / linux / ubicom32 / files / sound / ubicom32 / ubi32-cs4384.c
1 /*
2  * sound/ubicom32/ubi32-cs4384.c
3  *      Interface to ubicom32 virtual audio peripheral - using CS4384 DAC
4  *
5  * (C) Copyright 2009, Ubicom, Inc.
6  *
7  * This file is part of the Ubicom32 Linux Kernel Port.
8  *
9  * The Ubicom32 Linux Kernel Port is free software: you can redistribute
10  * it and/or modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation, either version 2 of the
12  * License, or (at your option) any later version.
13  *
14  * The Ubicom32 Linux Kernel Port is distributed in the hope that it
15  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
16  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
17  * the GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with the Ubicom32 Linux Kernel Port.  If not,
21  * see <http://www.gnu.org/licenses/>.
22  */
23
24 #include <linux/i2c.h>
25 #include <linux/module.h>
26 #include <linux/moduleparam.h>
27 #include <linux/delay.h>
28 #include <sound/core.h>
29 #include <sound/tlv.h>
30 #include <sound/control.h>
31 #include <sound/pcm.h>
32 #include <sound/initval.h>
33 #include <asm/ip5000.h>
34 #include <asm/gpio.h>
35 #include <asm/audio.h>
36 #include <asm/ubi32-cs4384.h>
37 #include "ubi32.h"
38
39 #define DRIVER_NAME "snd-ubi32-cs4384"
40
41 /*
42  * Module properties
43  */
44 static const struct i2c_device_id snd_ubi32_cs4384_id[] = {
45         {"cs4384", 0 },
46         { }
47 };
48 MODULE_DEVICE_TABLE(i2c, ubicom32audio_id);
49
50 static int index = SNDRV_DEFAULT_IDX1; /* Index 0-MAX */
51
52 /*
53  * Mixer properties
54  */
55 enum {
56         /*
57          * Be careful of changing the order of these IDs, they
58          * are used to index the volume array.
59          */
60         SND_UBI32_CS4384_FRONT_ID,
61         SND_UBI32_CS4384_SURROUND_ID,
62         SND_UBI32_CS4384_CENTER_ID,
63         SND_UBI32_CS4384_LFE_ID,
64         SND_UBI32_CS4384_REAR_ID,
65
66         /*
67          * This should be the last ID
68          */
69         SND_UBI32_CS4384_LAST_ID,
70 };
71 static const u8_t snd_ubi32_cs4384_ch_ofs[] = {0, 2, 4, 5, 6};
72
73 static const DECLARE_TLV_DB_SCALE(snd_ubi32_cs4384_db, -12750, 50, 0);
74
75 #define snd_ubi32_cs4384_info_mute      snd_ctl_boolean_stereo_info
76 #define snd_ubi32_cs4384_info_mute_mono snd_ctl_boolean_mono_info
77
78 /*
79  * Mixer controls
80  */
81 static int snd_ubi32_cs4384_info_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo);
82 static int snd_ubi32_cs4384_get_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
83 static int snd_ubi32_cs4384_put_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
84 static int snd_ubi32_cs4384_get_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
85 static int snd_ubi32_cs4384_put_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
86
87 /*
88  * Make sure to update these if the structure below is changed
89  */
90 #define SND_UBI32_MUTE_CTL_START        5
91 #define SND_UBI32_MUTE_CTL_END          9
92 static struct snd_kcontrol_new snd_ubi32_cs4384_controls[] __devinitdata = {
93         {
94                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
95                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
96                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
97                 .name = "Front Playback Volume",
98                 .info = snd_ubi32_cs4384_info_volume,
99                 .get = snd_ubi32_cs4384_get_volume,
100                 .put = snd_ubi32_cs4384_put_volume,
101                 .private_value = SND_UBI32_CS4384_FRONT_ID,
102                 .tlv = {
103                         .p = snd_ubi32_cs4384_db,
104                 },
105         },
106         {
107                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
108                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
109                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
110                 .name = "Surround Playback Volume",
111                 .info = snd_ubi32_cs4384_info_volume,
112                 .get = snd_ubi32_cs4384_get_volume,
113                 .put = snd_ubi32_cs4384_put_volume,
114                 .private_value = SND_UBI32_CS4384_SURROUND_ID,
115                 .tlv = {
116                         .p = snd_ubi32_cs4384_db,
117                 },
118         },
119         {
120                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
121                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
122                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
123                 .name = "Center Playback Volume",
124                 .info = snd_ubi32_cs4384_info_volume,
125                 .get = snd_ubi32_cs4384_get_volume,
126                 .put = snd_ubi32_cs4384_put_volume,
127                 .private_value = SND_UBI32_CS4384_CENTER_ID,
128                 .tlv = {
129                         .p = snd_ubi32_cs4384_db,
130                 },
131         },
132         {
133                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
134                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
135                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
136                 .name = "LFE Playback Volume",
137                 .info = snd_ubi32_cs4384_info_volume,
138                 .get = snd_ubi32_cs4384_get_volume,
139                 .put = snd_ubi32_cs4384_put_volume,
140                 .private_value = SND_UBI32_CS4384_LFE_ID,
141                 .tlv = {
142                         .p = snd_ubi32_cs4384_db,
143                 },
144         },
145         {
146                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
147                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
148                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
149                 .name = "Rear Playback Volume",
150                 .info = snd_ubi32_cs4384_info_volume,
151                 .get = snd_ubi32_cs4384_get_volume,
152                 .put = snd_ubi32_cs4384_put_volume,
153                 .private_value = SND_UBI32_CS4384_REAR_ID,
154                 .tlv = {
155                         .p = snd_ubi32_cs4384_db,
156                 },
157         },
158         {
159                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
160                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
161                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
162                 .name = "Front Playback Switch",
163                 .info = snd_ubi32_cs4384_info_mute,
164                 .get = snd_ubi32_cs4384_get_mute,
165                 .put = snd_ubi32_cs4384_put_mute,
166                 .private_value = SND_UBI32_CS4384_FRONT_ID,
167         },
168         {
169                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
170                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
171                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
172                 .name = "Surround Playback Switch",
173                 .info = snd_ubi32_cs4384_info_mute,
174                 .get = snd_ubi32_cs4384_get_mute,
175                 .put = snd_ubi32_cs4384_put_mute,
176                 .private_value = SND_UBI32_CS4384_SURROUND_ID,
177         },
178         {
179                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
180                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
181                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
182                 .name = "Center Playback Switch",
183                 .info = snd_ubi32_cs4384_info_mute_mono,
184                 .get = snd_ubi32_cs4384_get_mute,
185                 .put = snd_ubi32_cs4384_put_mute,
186                 .private_value = SND_UBI32_CS4384_CENTER_ID,
187         },
188         {
189                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
190                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
191                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
192                 .name = "LFE Playback Switch",
193                 .info = snd_ubi32_cs4384_info_mute_mono,
194                 .get = snd_ubi32_cs4384_get_mute,
195                 .put = snd_ubi32_cs4384_put_mute,
196                 .private_value = SND_UBI32_CS4384_LFE_ID,
197         },
198         {
199                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
200                 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
201                           SNDRV_CTL_ELEM_ACCESS_TLV_READ,
202                 .name = "Rear Playback Switch",
203                 .info = snd_ubi32_cs4384_info_mute,
204                 .get = snd_ubi32_cs4384_get_mute,
205                 .put = snd_ubi32_cs4384_put_mute,
206                 .private_value = SND_UBI32_CS4384_REAR_ID,
207         },
208 };
209
210 /*
211  * Our private data
212  */
213 struct snd_ubi32_cs4384_priv {
214         /*
215          * Array of current volumes
216          *      (L, R, SL, SR, C, LFE, RL, RR)
217          */
218         uint8_t volume[8];
219
220         /*
221          * Bitmask of mutes
222          *      MSB (RR, RL, LFE, C, SR, SL, R, L) LSB
223          */
224         uint8_t mute;
225
226         /*
227          * Array of controls
228          */
229         struct snd_kcontrol *kctls[ARRAY_SIZE(snd_ubi32_cs4384_controls)];
230
231         /*
232          * Lock to protect our card
233          */
234         spinlock_t lock;
235 };
236
237 /*
238  * snd_ubi32_cs4384_info_volume
239  */
240 static int snd_ubi32_cs4384_info_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)
241 {
242         unsigned int id = (unsigned int)kcontrol->private_value;
243
244         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
245         uinfo->count = 1;
246         if ((id != SND_UBI32_CS4384_LFE_ID) &&
247             (id != SND_UBI32_CS4384_CENTER_ID)) {
248                 uinfo->count = 2;
249         }
250         uinfo->value.integer.min = 0;
251         uinfo->value.integer.max = 255;
252         return 0;
253 }
254
255 /*
256  * snd_ubi32_cs4384_get_volume
257  */
258 static int snd_ubi32_cs4384_get_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
259 {
260         struct ubi32_snd_priv *priv = snd_kcontrol_chip(kcontrol);
261         struct snd_ubi32_cs4384_priv *cs4384_priv;
262         unsigned int id = (unsigned int)kcontrol->private_value;
263         int ch = snd_ubi32_cs4384_ch_ofs[id];
264         unsigned long flags;
265
266         if (id >= SND_UBI32_CS4384_LAST_ID) {
267                 return -EINVAL;
268         }
269
270         cs4384_priv = snd_ubi32_priv_get_drv(priv);
271
272         spin_lock_irqsave(&cs4384_priv->lock, flags);
273
274         ucontrol->value.integer.value[0] = cs4384_priv->volume[ch];
275         if ((id != SND_UBI32_CS4384_LFE_ID) &&
276             (id != SND_UBI32_CS4384_CENTER_ID)) {
277                 ch++;
278                 ucontrol->value.integer.value[1] = cs4384_priv->volume[ch];
279         }
280
281         spin_unlock_irqrestore(&cs4384_priv->lock, flags);
282
283         return 0;
284 }
285
286 /*
287  * snd_ubi32_cs4384_put_volume
288  */
289 static int snd_ubi32_cs4384_put_volume(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
290 {
291         struct ubi32_snd_priv *priv = snd_kcontrol_chip(kcontrol);
292         struct i2c_client *client = (struct i2c_client *)priv->client;
293         struct snd_ubi32_cs4384_priv *cs4384_priv;
294         unsigned int id = (unsigned int)kcontrol->private_value;
295         int ch = snd_ubi32_cs4384_ch_ofs[id];
296         unsigned long flags;
297         unsigned char send[3];
298         int nch;
299         int ret = -EINVAL;
300
301         if (id >= SND_UBI32_CS4384_LAST_ID) {
302                 return -EINVAL;
303         }
304
305         cs4384_priv = snd_ubi32_priv_get_drv(priv);
306
307         spin_lock_irqsave(&cs4384_priv->lock, flags);
308
309         send[0] = 0;
310         switch (id) {
311         case SND_UBI32_CS4384_REAR_ID:
312                 send[0] = 0x06;
313
314                 /*
315                  * Fall through
316                  */
317
318         case SND_UBI32_CS4384_SURROUND_ID:
319                 send[0] += 0x03;
320
321                 /*
322                  * Fall through
323                  */
324
325         case SND_UBI32_CS4384_FRONT_ID:
326                 send[0] += 0x8B;
327                 nch = 2;
328                 send[1] = 255 - (ucontrol->value.integer.value[0] & 0xFF);
329                 send[2] = 255 - (ucontrol->value.integer.value[1] & 0xFF);
330                 cs4384_priv->volume[ch++] = send[1];
331                 cs4384_priv->volume[ch] = send[2];
332                 break;
333
334         case SND_UBI32_CS4384_LFE_ID:
335                 send[0] = 0x81;
336
337                 /*
338                  * Fall through
339                  */
340
341         case SND_UBI32_CS4384_CENTER_ID:
342                 send[0] += 0x11;
343                 nch = 1;
344                 send[1] = 255 - (ucontrol->value.integer.value[0] & 0xFF);
345                 cs4384_priv->volume[ch] = send[1];
346                 break;
347
348         default:
349                 spin_unlock_irqrestore(&cs4384_priv->lock, flags);
350                 goto done;
351
352         }
353
354         /*
355          * Send the volume to the chip
356          */
357         nch++;
358         ret = i2c_master_send(client, send, nch);
359         if (ret != nch) {
360                 snd_printk(KERN_ERR "Failed to set volume on CS4384\n");
361         }
362
363 done:
364         spin_unlock_irqrestore(&cs4384_priv->lock, flags);
365
366         return ret;
367 }
368
369 /*
370  * snd_ubi32_cs4384_get_mute
371  */
372 static int snd_ubi32_cs4384_get_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
373 {
374         struct ubi32_snd_priv *priv = snd_kcontrol_chip(kcontrol);
375         struct snd_ubi32_cs4384_priv *cs4384_priv;
376         unsigned int id = (unsigned int)kcontrol->private_value;
377         int ch = snd_ubi32_cs4384_ch_ofs[id];
378         unsigned long flags;
379
380         if (id >= SND_UBI32_CS4384_LAST_ID) {
381                 return -EINVAL;
382         }
383
384         cs4384_priv = snd_ubi32_priv_get_drv(priv);
385
386         spin_lock_irqsave(&cs4384_priv->lock, flags);
387
388         ucontrol->value.integer.value[0] = !(cs4384_priv->mute & (1 << ch));
389
390         if ((id != SND_UBI32_CS4384_LFE_ID) &&
391             (id != SND_UBI32_CS4384_CENTER_ID)) {
392                 ch++;
393                 ucontrol->value.integer.value[1] = !(cs4384_priv->mute & (1 << ch));
394         }
395
396         spin_unlock_irqrestore(&cs4384_priv->lock, flags);
397
398         return 0;
399 }
400
401 /*
402  * snd_ubi32_cs4384_put_mute
403  */
404 static int snd_ubi32_cs4384_put_mute(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
405 {
406         struct ubi32_snd_priv *priv = snd_kcontrol_chip(kcontrol);
407         struct i2c_client *client = (struct i2c_client *)priv->client;
408         struct snd_ubi32_cs4384_priv *cs4384_priv;
409         unsigned int id = (unsigned int)kcontrol->private_value;
410         int ch = snd_ubi32_cs4384_ch_ofs[id];
411         unsigned long flags;
412         unsigned char send[2];
413         int ret = -EINVAL;
414
415         if (id >= SND_UBI32_CS4384_LAST_ID) {
416                 return -EINVAL;
417         }
418
419         cs4384_priv = snd_ubi32_priv_get_drv(priv);
420
421         spin_lock_irqsave(&cs4384_priv->lock, flags);
422
423         if (ucontrol->value.integer.value[0]) {
424                 cs4384_priv->mute &= ~(1 << ch);
425         } else {
426                 cs4384_priv->mute |= (1 << ch);
427         }
428
429         if ((id != SND_UBI32_CS4384_LFE_ID) && (id != SND_UBI32_CS4384_CENTER_ID)) {
430                 ch++;
431                 if (ucontrol->value.integer.value[1]) {
432                         cs4384_priv->mute &= ~(1 << ch);
433                 } else {
434                         cs4384_priv->mute |= (1 << ch);
435                 }
436         }
437
438         /*
439          * Update the chip's mute reigster
440          */
441         send[0] = 0x09;
442         send[1] = cs4384_priv->mute;
443         ret = i2c_master_send(client, send, 2);
444         if (ret != 2) {
445                 snd_printk(KERN_ERR "Failed to set mute on CS4384\n");
446         }
447
448         spin_unlock_irqrestore(&cs4384_priv->lock, flags);
449
450         return ret;
451 }
452
453 /*
454  * snd_ubi32_cs4384_mixer
455  *      Setup the mixer controls
456  */
457 static int __devinit snd_ubi32_cs4384_mixer(struct ubi32_snd_priv *priv)
458 {
459         struct snd_card *card = priv->card;
460         struct snd_ubi32_cs4384_priv *cs4384_priv;
461         int i;
462
463         cs4384_priv = snd_ubi32_priv_get_drv(priv);
464         for (i = 0; i < ARRAY_SIZE(snd_ubi32_cs4384_controls); i++) {
465                 int err;
466
467                 cs4384_priv->kctls[i] = snd_ctl_new1(&snd_ubi32_cs4384_controls[i], priv);
468                 err = snd_ctl_add(card, cs4384_priv->kctls[i]);
469                 if (err) {
470                         snd_printk(KERN_WARNING "Failed to add control %d\n", i);
471                         return err;
472                 }
473         }
474         return 0;
475 }
476
477 /*
478  * snd_ubi32_cs4384_free
479  *      Card private data free function
480  */
481 void snd_ubi32_cs4384_free(struct snd_card *card)
482 {
483         struct snd_ubi32_cs4384_priv *cs4384_priv;
484         struct ubi32_snd_priv *ubi32_priv;
485
486         ubi32_priv = card->private_data;
487         cs4384_priv = snd_ubi32_priv_get_drv(ubi32_priv);
488         if (cs4384_priv) {
489                 kfree(cs4384_priv);
490         }
491 }
492
493 /*
494  * snd_ubi32_cs4384_setup_mclk
495  */
496 static int snd_ubi32_cs4384_setup_mclk(struct ubi32_cs4384_platform_data *pdata)
497 {
498         struct ubicom32_io_port *ioa = (struct ubicom32_io_port *)RA;
499         struct ubicom32_io_port *ioc = (struct ubicom32_io_port *)RC;
500         struct ubicom32_io_port *iod = (struct ubicom32_io_port *)RD;
501         struct ubicom32_io_port *ioe = (struct ubicom32_io_port *)RE;
502         struct ubicom32_io_port *ioh = (struct ubicom32_io_port *)RH;
503         unsigned int ctl0;
504         unsigned int ctlx;
505         unsigned int div;
506
507         div = pdata->mclk_entries[0].div;
508
509         ctl0 = (1 << 13);
510         ctlx = ((div - 1) << 16) | (div / 2);
511
512         switch (pdata->mclk_src) {
513         case UBI32_CS4384_MCLK_PWM_0:
514                 ioc->function |= 2;
515                 ioc->ctl0 |= ctl0;
516                 ioc->ctl1 = ctlx;
517                 if (!ioa->function) {
518                         ioa->function = 3;
519                 }
520                 return 0;
521
522         case UBI32_CS4384_MCLK_PWM_1:
523                 ioc->function |= 2;
524                 ioc->ctl0 |= ctl0 << 16;
525                 ioc->ctl2 = ctlx;
526                 if (!ioe->function) {
527                         ioe->function = 3;
528                 }
529                 return 0;
530
531         case UBI32_CS4384_MCLK_PWM_2:
532                 ioh->ctl0 |= ctl0;
533                 ioh->ctl1 = ctlx;
534                 if (!iod->function) {
535                         iod->function = 3;
536                 }
537                 return 0;
538
539         case UBI32_CS4384_MCLK_CLKDIV_1:
540                 ioa->gpio_mask &= (1 << 7);
541                 ioa->ctl1 &= ~(0x7F << 14);
542                 ioa->ctl1 |= ((div - 1) << 14);
543                 return 0;
544
545         case UBI32_CS4384_MCLK_OTHER:
546                 return 0;
547         }
548
549         return 1;
550 }
551
552 /*
553  * snd_ubi32_cs4384_set_rate
554  */
555 static int snd_ubi32_cs4384_set_rate(struct ubi32_snd_priv *priv, int rate)
556 {
557         struct ubi32_cs4384_platform_data *cpd = priv->pdata->priv_data;
558         struct ubicom32_io_port *ioa = (struct ubicom32_io_port *)RA;
559         struct ubicom32_io_port *ioc = (struct ubicom32_io_port *)RC;
560         struct ubicom32_io_port *ioh = (struct ubicom32_io_port *)RH;
561         unsigned int ctl;
562         unsigned int div = 0;
563         const u16_t mult[] = {64, 96, 128, 192, 256, 384, 512, 768, 1024};
564         int i;
565         int j;
566
567
568         for (i = 0; i < sizeof(mult) / sizeof(u16_t); i++) {
569                 for (j = 0; j < cpd->n_mclk; j++) {
570                         if (((unsigned int)rate * (unsigned int)mult[i]) ==
571                              cpd->mclk_entries[j].rate) {
572                                 div = cpd->mclk_entries[j].div;
573                                 break;
574                         }
575                 }
576         }
577
578         ctl = ((div - 1) << 16) | (div / 2);
579
580         switch (cpd->mclk_src) {
581         case UBI32_CS4384_MCLK_PWM_0:
582                 ioc->ctl1 = ctl;
583                 return 0;
584
585         case UBI32_CS4384_MCLK_PWM_1:
586                 ioc->ctl2 = ctl;
587                 return 0;
588
589         case UBI32_CS4384_MCLK_PWM_2:
590                 ioh->ctl1 = ctl;
591                 return 0;
592
593         case UBI32_CS4384_MCLK_CLKDIV_1:
594                 ioa->ctl1 &= ~(0x7F << 14);
595                 ioa->ctl1 |= ((div - 1) << 14);
596                 return 0;
597
598         case UBI32_CS4384_MCLK_OTHER:
599                 return 0;
600         }
601
602         return 1;
603 }
604
605 /*
606  * snd_ubi32_cs4384_set_channels
607  *      Mute unused channels
608  */
609 static int snd_ubi32_cs4384_set_channels(struct ubi32_snd_priv *priv, int channels)
610 {
611         struct i2c_client *client = (struct i2c_client *)priv->client;
612         struct snd_ubi32_cs4384_priv *cs4384_priv;
613         unsigned char send[2];
614         int ret;
615         int i;
616         unsigned long flags;
617
618         /*
619          * Only support 0, 2, 4, 6, 8 channels
620          */
621         if ((channels > 8) || (channels & 1)) {
622                 return -EINVAL;
623         }
624
625         cs4384_priv = snd_ubi32_priv_get_drv(priv);
626         spin_lock_irqsave(&cs4384_priv->lock, flags);
627
628         /*
629          * Address 09h, Mute control
630          */
631         send[0] = 0x09;
632         send[1] = (unsigned char)(0xFF << channels);
633
634         ret = i2c_master_send(client, send, 2);
635
636         spin_unlock_irqrestore(&cs4384_priv->lock, flags);
637
638         /*
639          * Notify the system that we changed the mutes
640          */
641         cs4384_priv->mute = (unsigned char)(0xFF << channels);
642
643         for (i = SND_UBI32_MUTE_CTL_START; i < SND_UBI32_MUTE_CTL_END; i++) {
644                 snd_ctl_notify(priv->card, SNDRV_CTL_EVENT_MASK_VALUE,
645                                &cs4384_priv->kctls[i]->id);
646         }
647
648         if (ret != 2) {
649                 return -ENXIO;
650         }
651
652         return 0;
653 }
654
655 /*
656  * snd_ubi32_cs4384_dac_init
657  */
658 static int snd_ubi32_cs4384_dac_init(struct i2c_client *client, const struct i2c_device_id *id)
659 {
660         int ret;
661         unsigned char send[2];
662         unsigned char recv[2];
663
664         /*
665          * Initialize the CS4384 DAC over the I2C interface
666          */
667         snd_printk(KERN_INFO "Initializing CS4384 DAC\n");
668
669         /*
670          * Register 0x01: device/revid
671          */
672         send[0] = 0x01;
673         ret = i2c_master_send(client, send, 1);
674         if (ret != 1) {
675                 snd_printk(KERN_ERR "Failed 1st attempt to write to CS4384 register 0x01\n");
676                 goto fail;
677         }
678         ret = i2c_master_recv(client, recv, 1);
679         if (ret != 1) {
680                 snd_printk(KERN_ERR "Failed initial read of CS4384 registers\n");
681                 goto fail;
682         }
683         snd_printk(KERN_INFO "CS4384 DAC Device/Rev: %08x\n", recv[0]);
684
685         /*
686          * Register 0x02: Mode Control 1
687          *      Control Port Enable, PCM, All DACs enabled, Power Down
688          */
689         send[0] = 0x02;
690         send[1] = 0x81;
691         ret = i2c_master_send(client, send, 2);
692         if (ret != 2) {
693                 snd_printk(KERN_ERR "Failed to set CPEN CS4384\n");
694                 goto fail;
695         }
696
697         /*
698          * Register 0x08: Ramp and Mute
699          *      RMP_UP, RMP_DN, PAMUTE, DAMUTE
700          */
701         send[0] = 0x08;
702         send[1] = 0xBC;
703         ret = i2c_master_send(client, send, 2);
704         if (ret != 2) {
705                 snd_printk(KERN_ERR "Failed to set CPEN CS4384\n");
706                 goto fail;
707         }
708
709         /*
710          * Register 0x03: PCM Control
711          *      I2S DIF[3:0] = 0001, no De-Emphasis, Auto speed mode
712          */
713         send[0] = 0x03;
714         send[1] = 0x13;
715         ret = i2c_master_send(client, send, 2);
716         if (ret != 2) {
717                 snd_printk(KERN_ERR "Failed to set CS4384 to I2S mode\n");
718                 goto fail;
719         }
720
721         /*
722          * Register 0x0B/0x0C: Volume control A1/B1
723          * Register 0x0E/0x0F: Volume control A2/B2
724          * Register 0x11/0x12: Volume control A3/B3
725          * Register 0x14/0x15: Volume control A4/B4
726          */
727         send[0] = 0x80 | 0x0B;
728         send[1] = 0x00;
729         send[2] = 0x00;
730         ret = i2c_master_send(client, send, 3);
731         if (ret != 3) {
732                 snd_printk(KERN_ERR "Failed to set ch1 volume on CS4384\n");
733                 goto fail;
734         }
735
736         send[0] = 0x80 | 0x0E;
737         send[1] = 0x00;
738         send[2] = 0x00;
739         ret = i2c_master_send(client, send, 3);
740         if (ret != 3) {
741                 snd_printk(KERN_ERR "Failed to set ch2 volume on CS4384\n");
742                 goto fail;
743         }
744
745         send[0] = 0x80 | 0x11;
746         send[1] = 0x00;
747         send[2] = 0x00;
748         ret = i2c_master_send(client, send, 3);
749         if (ret != 3) {
750                 snd_printk(KERN_ERR "Failed to set ch3 volume on CS4384\n");
751                 goto fail;
752         }
753
754         send[0] = 0x80 | 0x14;
755         send[1] = 0x00;
756         send[2] = 0x00;
757         ret = i2c_master_send(client, send, 3);
758         if (ret != 3) {
759                 snd_printk(KERN_ERR "Failed to set ch4 volume on CS4384\n");
760                 goto fail;
761         }
762
763         /*
764          * Register 09h: Mute control
765          *      Mute all (we will unmute channels as needed)
766          */
767         send[0] = 0x09;
768         send[1] = 0xFF;
769         ret = i2c_master_send(client, send, 2);
770         if (ret != 2) {
771                 snd_printk(KERN_ERR "Failed to power up CS4384\n");
772                 goto fail;
773         }
774
775         /*
776          * Register 0x02: Mode Control 1
777          *      Control Port Enable, PCM, All DACs enabled, Power Up
778          */
779         send[0] = 0x02;
780         send[1] = 0x80;
781         ret = i2c_master_send(client, send, 2);
782         if (ret != 2) {
783                 snd_printk(KERN_ERR "Failed to power up CS4384\n");
784                 goto fail;
785         }
786
787         /*
788          * Make sure the changes took place, this helps verify we are talking to
789          * the correct chip.
790          */
791         send[0] = 0x80 | 0x03;
792         ret = i2c_master_send(client, send, 1);
793         if (ret != 1) {
794                 snd_printk(KERN_ERR "Failed to initiate readback\n");
795                 goto fail;
796         }
797
798         ret = i2c_master_recv(client, recv, 1);
799         if (ret != 1) {
800                 snd_printk(KERN_ERR "Failed second read of CS4384 registers\n");
801                 goto fail;
802         }
803
804         if (recv[0] != 0x13) {
805                 snd_printk(KERN_ERR "Failed to initialize CS4384 DAC\n");
806                 goto fail;
807         }
808
809         snd_printk(KERN_INFO "CS4384 DAC Initialized\n");
810         return 0;
811
812 fail:
813         return -ENODEV;
814 }
815
816 /*
817  * snd_ubi32_cs4384_i2c_probe
818  */
819 static int snd_ubi32_cs4384_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
820 {
821         struct snd_card *card;
822         struct ubi32_snd_priv *ubi32_priv;
823         int err, ret;
824         struct platform_device *pdev;
825         struct ubi32_cs4384_platform_data *pdata;
826         struct snd_ubi32_cs4384_priv *cs4384_priv;
827
828         /*
829          * pdev is audio device
830          */
831         pdev = client->dev.platform_data;
832         if (!pdev) {
833                 return -ENODEV;
834         }
835
836         /*
837          * pdev->dev.platform_data is ubi32-pcm platform_data
838          */
839         pdata = audio_device_priv(pdev);
840         if (!pdata) {
841                 return -ENODEV;
842         }
843
844         /*
845          * Initialize the CS4384 DAC
846          */
847         ret = snd_ubi32_cs4384_dac_init(client, id);
848         if (ret < 0) {
849                 /*
850                  * Initialization failed.  Propagate the error.
851                  */
852                 return ret;
853         }
854
855         if (snd_ubi32_cs4384_setup_mclk(pdata)) {
856                 return -EINVAL;
857         }
858
859         /*
860          * Create a snd_card structure
861          */
862         card = snd_card_new(index, "Ubi32-CS4384", THIS_MODULE, sizeof(struct ubi32_snd_priv));
863         if (card == NULL) {
864                 return -ENOMEM;
865         }
866
867         card->private_free = snd_ubi32_cs4384_free;
868         ubi32_priv = card->private_data;
869
870         /*
871          * Initialize the snd_card's private data structure
872          */
873         ubi32_priv->card = card;
874         ubi32_priv->client = client;
875         ubi32_priv->set_channels = snd_ubi32_cs4384_set_channels;
876         ubi32_priv->set_rate = snd_ubi32_cs4384_set_rate;
877
878         /*
879          * CS4384 DAC has a minimum sample rate of 4khz and an
880          * upper limit of 216khz for it's auto-detect.
881          */
882         ubi32_priv->min_sample_rate = 4000;
883         ubi32_priv->max_sample_rate = 216000;
884
885         /*
886          * Create our private data (to manage volume, etc)
887          */
888         cs4384_priv = kzalloc(sizeof(struct snd_ubi32_cs4384_priv), GFP_KERNEL);
889         if (!cs4384_priv) {
890                 snd_card_free(card);
891                 return -ENOMEM;
892         }
893         snd_ubi32_priv_set_drv(ubi32_priv, cs4384_priv);
894         spin_lock_init(&cs4384_priv->lock);
895
896         /*
897          * We start off all muted and max volume
898          */
899         cs4384_priv->mute = 0xFF;
900         memset(cs4384_priv->volume, 0xFF, 8);
901
902         /*
903          * Create the new PCM instance
904          */
905         err = snd_ubi32_pcm_probe(ubi32_priv, pdev);
906         if (err < 0) {
907                 snd_card_free(card);
908                 return err; /* What is err?  Need to include correct file */
909         }
910
911         strcpy(card->driver, "Ubi32-CS4384");
912         strcpy(card->shortname, "Ubi32-CS4384");
913         snprintf(card->longname, sizeof(card->longname),
914                 "%s at sendirq=%d.%d recvirq=%d.%d regs=%p",
915                 card->shortname, ubi32_priv->tx_irq, ubi32_priv->irq_idx,
916                 ubi32_priv->rx_irq, ubi32_priv->irq_idx, ubi32_priv->adr);
917
918         snd_card_set_dev(card, &client->dev);
919
920         /*
921          * Set up the mixer
922          */
923         snd_ubi32_cs4384_mixer(ubi32_priv);
924
925         /*
926          * Register the sound card
927          */
928         if ((err = snd_card_register(card)) != 0) {
929                 snd_printk(KERN_INFO "snd_card_register error\n");
930         }
931
932         /*
933          * Store card for access from other methods
934          */
935         i2c_set_clientdata(client, card);
936
937         return 0;
938 }
939
940 /*
941  * snd_ubi32_cs4384_i2c_remove
942  */
943 static int __devexit snd_ubi32_cs4384_i2c_remove(struct i2c_client *client)
944 {
945         struct snd_card *card;
946         struct ubi32_snd_priv *ubi32_priv;
947
948         card = i2c_get_clientdata(client);
949
950         ubi32_priv = card->private_data;
951         snd_ubi32_pcm_remove(ubi32_priv);
952
953         snd_card_free(i2c_get_clientdata(client));
954         i2c_set_clientdata(client, NULL);
955
956         return 0;
957 }
958
959 /*
960  * I2C driver description
961  */
962 static struct i2c_driver snd_ubi32_cs4384_driver = {
963         .driver = {
964                 .name = DRIVER_NAME,
965                 .owner = THIS_MODULE,
966         },
967         .id_table       = snd_ubi32_cs4384_id,
968         .probe          = snd_ubi32_cs4384_i2c_probe,
969         .remove         = __devexit_p(snd_ubi32_cs4384_i2c_remove),
970 };
971
972 /*
973  * Driver init
974  */
975 static int __init snd_ubi32_cs4384_init(void)
976 {
977         return i2c_add_driver(&snd_ubi32_cs4384_driver);
978 }
979 module_init(snd_ubi32_cs4384_init);
980
981 /*
982  * snd_ubi32_cs4384_exit
983  */
984 static void __exit snd_ubi32_cs4384_exit(void)
985 {
986         i2c_del_driver(&snd_ubi32_cs4384_driver);
987 }
988 module_exit(snd_ubi32_cs4384_exit);
989
990 /*
991  * Module properties
992  */
993 MODULE_ALIAS("i2c:" DRIVER_NAME);
994 MODULE_AUTHOR("Patrick Tjin");
995 MODULE_DESCRIPTION("Driver for Ubicom32 audio devices CS4384");
996 MODULE_LICENSE("GPL");