]> err.no Git - linux-2.6/blobdiff - sound/pci/ice1712/ice1712.h
Merge branches 'at91', 'dyntick', 'ep93xx', 'iop', 'ixp', 'misc', 'orion', 'omap...
[linux-2.6] / sound / pci / ice1712 / ice1712.h
index 6ac486d9c138a96dcdc50a23c21a5a770a6d6709..3208901c740e075166f95bc1b8d51406ab88ba56 100644 (file)
@@ -4,7 +4,7 @@
 /*
  *   ALSA driver for ICEnsemble ICE1712 (Envy24)
  *
- *     Copyright (c) 2000 Jaroslav Kysela <perex@suse.cz>
+ *     Copyright (c) 2000 Jaroslav Kysela <perex@perex.cz>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -366,41 +366,15 @@ struct snd_ice1712 {
        struct mutex gpio_mutex;
 
        /* other board-specific data */
-       union {
-               /* additional i2c devices for EWS boards */
-               struct snd_i2c_device *i2cdevs[3];
-               /* AC97 register cache for Aureon */
-               struct aureon_spec {
-                       unsigned short stac9744[64];
-                       unsigned int cs8415_mux;
-                       unsigned short master[2];
-                       unsigned short vol[8];
-                       unsigned char pca9554_out;
-               } aureon;
-               /* AC97 register cache for Phase28 */
-               struct phase28_spec {
-                       unsigned short master[2];
-                       unsigned short vol[8];
-               } phase28;
-               /* a non-standard I2C device for revo51 */
-               struct revo51_spec {
-                       struct snd_i2c_device *dev;
-                       struct snd_pt2258 *pt2258;
-               } revo51;
-               /* Hoontech-specific setting */
-               struct hoontech_spec {
-                       unsigned char boxbits[4];
-                       unsigned int config;
-                       unsigned short boxconfig[4];
-               } hoontech;
-               struct {
-                       struct ak4114 *ak4114;
-                       unsigned int analog: 1;
-               } juli;
-               struct {
-                       struct ak4114 *ak4114;
-               } prodigy192;
-       } spec;
+       void *spec;
+
+       /* VT172x specific */
+       int pro_rate_default;
+       int (*is_spdif_master)(struct snd_ice1712 *ice);
+       unsigned int (*get_rate)(struct snd_ice1712 *ice);
+       void (*set_rate)(struct snd_ice1712 *ice, unsigned int rate);
+       unsigned char (*set_mclk)(struct snd_ice1712 *ice, unsigned int rate);
+       void (*set_spdif_clock)(struct snd_ice1712 *ice);
 
 };
 
@@ -451,11 +425,10 @@ static inline void snd_ice1712_restore_gpio_status(struct snd_ice1712 *ice)
 
 /* for bit controls */
 #define ICE1712_GPIO(xiface, xname, xindex, mask, invert, xaccess) \
-{ .iface = xiface, .name = xname, .access = xaccess, .info = snd_ice1712_gpio_info, \
+{ .iface = xiface, .name = xname, .access = xaccess, .info = snd_ctl_boolean_mono_info, \
   .get = snd_ice1712_gpio_get, .put = snd_ice1712_gpio_put, \
   .private_value = mask | (invert << 24) }
 
-int snd_ice1712_gpio_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo);
 int snd_ice1712_gpio_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
 int snd_ice1712_gpio_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
 
@@ -465,10 +438,14 @@ int snd_ice1712_gpio_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_valu
 static inline void snd_ice1712_gpio_write_bits(struct snd_ice1712 *ice,
                                               unsigned int mask, unsigned int bits)
 {
+       unsigned val;
+
        ice->gpio.direction |= mask;
        snd_ice1712_gpio_set_dir(ice, ice->gpio.direction);
-       snd_ice1712_gpio_set_mask(ice, ~mask);
-       snd_ice1712_gpio_write(ice, mask & bits);
+       val = snd_ice1712_gpio_read(ice);
+       val &= ~mask;
+       val |= mask & bits;
+       snd_ice1712_gpio_write(ice, val);
 }
 
 static inline int snd_ice1712_gpio_read_bits(struct snd_ice1712 *ice,