diff options
Diffstat (limited to 'sound/i2c')
| -rw-r--r-- | sound/i2c/cs8427.c | 58 | ||||
| -rw-r--r-- | sound/i2c/i2c.c | 1 | ||||
| -rw-r--r-- | sound/i2c/other/Makefile | 2 | ||||
| -rw-r--r-- | sound/i2c/other/ak4113.c | 10 | ||||
| -rw-r--r-- | sound/i2c/other/ak4114.c | 18 | ||||
| -rw-r--r-- | sound/i2c/other/ak4117.c | 5 | ||||
| -rw-r--r-- | sound/i2c/other/ak4xxx-adda.c | 5 | ||||
| -rw-r--r-- | sound/i2c/other/pt2258.c | 1 | ||||
| -rw-r--r-- | sound/i2c/other/tea575x-tuner.c | 365 | ||||
| -rw-r--r-- | sound/i2c/tea6330t.c | 1 | 
10 files changed, 62 insertions, 404 deletions
diff --git a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c index 04ae8704cdc..7e21621e492 100644 --- a/sound/i2c/cs8427.c +++ b/sound/i2c/cs8427.c @@ -24,6 +24,7 @@  #include <linux/delay.h>  #include <linux/init.h>  #include <linux/bitrev.h> +#include <linux/module.h>  #include <asm/unaligned.h>  #include <sound/core.h>  #include <sound/control.h> @@ -149,10 +150,8 @@ static void snd_cs8427_free(struct snd_i2c_device *device)  	kfree(device->private_data);  } -int snd_cs8427_create(struct snd_i2c_bus *bus, -		      unsigned char addr, -		      unsigned int reset_timeout, -		      struct snd_i2c_device **r_cs8427) +int snd_cs8427_init(struct snd_i2c_bus *bus, +		    struct snd_i2c_device *device)  {  	static unsigned char initvals1[] = {  	  CS8427_REG_CONTROL1 | CS8427_REG_AUTOINC, @@ -199,22 +198,10 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,  	     Inhibit E->F transfers. */  	  CS8427_UD | CS8427_EFTUI | CS8427_DETUI,  	}; +	struct cs8427 *chip = device->private_data;  	int err; -	struct cs8427 *chip; -	struct snd_i2c_device *device;  	unsigned char buf[24]; -	if ((err = snd_i2c_device_create(bus, "CS8427", -					 CS8427_ADDR | (addr & 7), -					 &device)) < 0) -		return err; -	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL); -	if (chip == NULL) { -	      	snd_i2c_device_free(device); -		return -ENOMEM; -	} -	device->private_free = snd_cs8427_free; -	  	snd_i2c_lock(bus);  	err = snd_cs8427_reg_read(device, CS8427_REG_ID_AND_VER);  	if (err != CS8427_VER8427A) { @@ -263,10 +250,44 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,  	snd_i2c_unlock(bus);  	/* turn on run bit and rock'n'roll */ +	snd_cs8427_reset(device); + +	return 0; + +__fail: +	snd_i2c_unlock(bus); + +	return err; +} +EXPORT_SYMBOL(snd_cs8427_init); + +int snd_cs8427_create(struct snd_i2c_bus *bus, +		      unsigned char addr, +		      unsigned int reset_timeout, +		      struct snd_i2c_device **r_cs8427) +{ +	int err; +	struct cs8427 *chip; +	struct snd_i2c_device *device; + +	err = snd_i2c_device_create(bus, "CS8427", CS8427_ADDR | (addr & 7), +				    &device); +	if (err < 0) +		return err; +	chip = device->private_data = kzalloc(sizeof(*chip), GFP_KERNEL); +	if (chip == NULL) { +		snd_i2c_device_free(device); +		return -ENOMEM; +	} +	device->private_free = snd_cs8427_free; +  	if (reset_timeout < 1)  		reset_timeout = 1;  	chip->reset_timeout = reset_timeout; -	snd_cs8427_reset(device); + +	err = snd_cs8427_init(bus, device); +	if (err) +		goto __fail;  #if 0	// it's nice for read tests  	{ @@ -285,7 +306,6 @@ int snd_cs8427_create(struct snd_i2c_bus *bus,  	return 0;        __fail: -      	snd_i2c_unlock(bus);        	snd_i2c_device_free(device);        	return err < 0 ? err : -EIO;  } diff --git a/sound/i2c/i2c.c b/sound/i2c/i2c.c index eb7c7d05a7c..4677037f0c8 100644 --- a/sound/i2c/i2c.c +++ b/sound/i2c/i2c.c @@ -22,6 +22,7 @@  #include <linux/init.h>  #include <linux/slab.h> +#include <linux/module.h>  #include <linux/string.h>  #include <linux/errno.h>  #include <sound/core.h> diff --git a/sound/i2c/other/Makefile b/sound/i2c/other/Makefile index 2dad40f3f62..5526b03b95a 100644 --- a/sound/i2c/other/Makefile +++ b/sound/i2c/other/Makefile @@ -8,10 +8,8 @@ snd-ak4117-objs := ak4117.o  snd-ak4113-objs := ak4113.o  snd-ak4xxx-adda-objs := ak4xxx-adda.o  snd-pt2258-objs := pt2258.o -snd-tea575x-tuner-objs := tea575x-tuner.o  # Module Dependency  obj-$(CONFIG_SND_PDAUDIOCF) += snd-ak4117.o  obj-$(CONFIG_SND_ICE1712) += snd-ak4xxx-adda.o  obj-$(CONFIG_SND_ICE1724) += snd-ak4114.o snd-ak4113.o snd-ak4xxx-adda.o snd-pt2258.o -obj-$(CONFIG_SND_FM801_TEA575X) += snd-tea575x-tuner.o diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c index 971a84a4fa7..1a3a6fa2715 100644 --- a/sound/i2c/other/ak4113.c +++ b/sound/i2c/other/ak4113.c @@ -23,6 +23,7 @@  #include <linux/slab.h>  #include <linux/delay.h> +#include <linux/module.h>  #include <sound/core.h>  #include <sound/control.h>  #include <sound/pcm.h> @@ -57,8 +58,7 @@ static void snd_ak4113_free(struct ak4113 *chip)  {  	chip->init = 1;	/* don't schedule new work */  	mb(); -	cancel_delayed_work(&chip->work); -	flush_scheduled_work(); +	cancel_delayed_work_sync(&chip->work);  	kfree(chip);  } @@ -98,7 +98,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,  			AK4113_CINT | AK4113_STC);  	chip->rcs1 = reg_read(chip, AK4113_REG_RCS1);  	chip->rcs2 = reg_read(chip, AK4113_REG_RCS2); -	err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); +	err = snd_device_new(card, SNDRV_DEV_CODEC, chip, &ops);  	if (err < 0)  		goto __fail; @@ -141,7 +141,7 @@ void snd_ak4113_reinit(struct ak4113 *chip)  {  	chip->init = 1;  	mb(); -	flush_scheduled_work(); +	flush_delayed_work(&chip->work);  	ak4113_init_regs(chip);  	/* bring up statistics / event queing */  	chip->init = 0; @@ -426,7 +426,7 @@ static struct snd_kcontrol_new snd_ak4113_iec958_controls[] = {  },  {  	.iface =	SNDRV_CTL_ELEM_IFACE_PCM, -	.name =		"IEC958 Preample Capture Default", +	.name =		"IEC958 Preamble Capture Default",  	.access =	SNDRV_CTL_ELEM_ACCESS_READ |  		SNDRV_CTL_ELEM_ACCESS_VOLATILE,  	.info =		snd_ak4113_spdif_pinfo, diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c index 0341451f814..c7f56339415 100644 --- a/sound/i2c/other/ak4114.c +++ b/sound/i2c/other/ak4114.c @@ -22,6 +22,7 @@  #include <linux/slab.h>  #include <linux/delay.h> +#include <linux/module.h>  #include <sound/core.h>  #include <sound/control.h>  #include <sound/pcm.h> @@ -59,7 +60,7 @@ static void reg_dump(struct ak4114 *ak4114)  	printk(KERN_DEBUG "AK4114 REG DUMP:\n");  	for (i = 0; i < 0x20; i++) -		printk(KERN_DEBUG "reg[%02x] = %02x (%02x)\n", i, reg_read(ak4114, i), i < sizeof(ak4114->regmap) ? ak4114->regmap[i] : 0); +		printk(KERN_DEBUG "reg[%02x] = %02x (%02x)\n", i, reg_read(ak4114, i), i < ARRAY_SIZE(ak4114->regmap) ? ak4114->regmap[i] : 0);  }  #endif @@ -67,8 +68,7 @@ static void snd_ak4114_free(struct ak4114 *chip)  {  	chip->init = 1;	/* don't schedule new work */  	mb(); -	cancel_delayed_work(&chip->work); -	flush_scheduled_work(); +	cancel_delayed_work_sync(&chip->work);  	kfree(chip);  } @@ -81,7 +81,7 @@ static int snd_ak4114_dev_free(struct snd_device *device)  int snd_ak4114_create(struct snd_card *card,  		      ak4114_read_t *read, ak4114_write_t *write, -		      const unsigned char pgm[7], const unsigned char txcsb[5], +		      const unsigned char pgm[6], const unsigned char txcsb[5],  		      void *private_data, struct ak4114 **r_ak4114)  {  	struct ak4114 *chip; @@ -101,7 +101,7 @@ int snd_ak4114_create(struct snd_card *card,  	chip->private_data = private_data;  	INIT_DELAYED_WORK(&chip->work, ak4114_stats); -	for (reg = 0; reg < 7; reg++) +	for (reg = 0; reg < 6; reg++)  		chip->regmap[reg] = pgm[reg];  	for (reg = 0; reg < 5; reg++)  		chip->txcsb[reg] = txcsb[reg]; @@ -111,7 +111,7 @@ int snd_ak4114_create(struct snd_card *card,  	chip->rcs0 = reg_read(chip, AK4114_REG_RCS0) & ~(AK4114_QINT | AK4114_CINT);  	chip->rcs1 = reg_read(chip, AK4114_REG_RCS1); -	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) +	if ((err = snd_device_new(card, SNDRV_DEV_CODEC, chip, &ops)) < 0)  		goto __fail;  	if (r_ak4114) @@ -142,7 +142,7 @@ static void ak4114_init_regs(struct ak4114 *chip)  	/* release reset, but leave powerdown */  	reg_write(chip, AK4114_REG_PWRDN, (old | AK4114_RST) & ~AK4114_PWN);  	udelay(200); -	for (reg = 1; reg < 7; reg++) +	for (reg = 1; reg < 6; reg++)  		reg_write(chip, reg, chip->regmap[reg]);  	for (reg = 0; reg < 5; reg++)  		reg_write(chip, reg + AK4114_REG_TXCSB0, chip->txcsb[reg]); @@ -154,7 +154,7 @@ void snd_ak4114_reinit(struct ak4114 *chip)  {  	chip->init = 1;  	mb(); -	flush_scheduled_work(); +	flush_delayed_work(&chip->work);  	ak4114_init_regs(chip);  	/* bring up statistics / event queing */  	chip->init = 0; @@ -401,7 +401,7 @@ static struct snd_kcontrol_new snd_ak4114_iec958_controls[] = {  },  {  	.iface =	SNDRV_CTL_ELEM_IFACE_PCM, -	.name =		"IEC958 Preample Capture Default", +	.name =		"IEC958 Preamble Capture Default",  	.access =	SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,  	.info =		snd_ak4114_spdif_pinfo,  	.get =		snd_ak4114_spdif_pget, diff --git a/sound/i2c/other/ak4117.c b/sound/i2c/other/ak4117.c index 2cad2d61251..88452e899bd 100644 --- a/sound/i2c/other/ak4117.c +++ b/sound/i2c/other/ak4117.c @@ -22,6 +22,7 @@  #include <linux/slab.h>  #include <linux/delay.h> +#include <linux/module.h>  #include <sound/core.h>  #include <sound/control.h>  #include <sound/pcm.h> @@ -61,7 +62,7 @@ static void reg_dump(struct ak4117 *ak4117)  static void snd_ak4117_free(struct ak4117 *chip)  { -	del_timer(&chip->timer); +	del_timer_sync(&chip->timer);  	kfree(chip);  } @@ -379,7 +380,7 @@ static struct snd_kcontrol_new snd_ak4117_iec958_controls[] = {  },  {  	.iface =	SNDRV_CTL_ELEM_IFACE_PCM, -	.name =		"IEC958 Preample Capture Default", +	.name =		"IEC958 Preamble Capture Default",  	.access =	SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,  	.info =		snd_ak4117_spdif_pinfo,  	.get =		snd_ak4117_spdif_pget, diff --git a/sound/i2c/other/ak4xxx-adda.c b/sound/i2c/other/ak4xxx-adda.c index 57ccba88700..f3735e64791 100644 --- a/sound/i2c/other/ak4xxx-adda.c +++ b/sound/i2c/other/ak4xxx-adda.c @@ -25,6 +25,7 @@  #include <linux/delay.h>  #include <linux/interrupt.h>  #include <linux/init.h> +#include <linux/module.h>  #include <sound/core.h>  #include <sound/control.h>  #include <sound/tlv.h> @@ -570,7 +571,7 @@ static int ak4xxx_capture_source_info(struct snd_kcontrol *kcontrol,  	struct snd_akm4xxx *ak = snd_kcontrol_chip(kcontrol);  	int mixer_ch = AK_GET_SHIFT(kcontrol->private_value);  	const char **input_names; -	int  num_names, idx; +	unsigned int num_names, idx;  	num_names = ak4xxx_capture_num_inputs(ak, mixer_ch);  	if (!num_names) @@ -582,7 +583,7 @@ static int ak4xxx_capture_source_info(struct snd_kcontrol *kcontrol,  	if (idx >= num_names)  		return -EINVAL;  	input_names = ak->adc_info[mixer_ch].input_names; -	strncpy(uinfo->value.enumerated.name, input_names[idx], +	strlcpy(uinfo->value.enumerated.name, input_names[idx],  		sizeof(uinfo->value.enumerated.name));  	return 0;  } diff --git a/sound/i2c/other/pt2258.c b/sound/i2c/other/pt2258.c index 797d3a6687e..9fa390ba171 100644 --- a/sound/i2c/other/pt2258.c +++ b/sound/i2c/other/pt2258.c @@ -24,6 +24,7 @@  #include <sound/tlv.h>  #include <sound/i2c.h>  #include <sound/pt2258.h> +#include <linux/module.h>  MODULE_AUTHOR("Jochen Voss <voss@seehuhn.de>");  MODULE_DESCRIPTION("PT2258 volume controller (Princeton Technology Corp.)"); diff --git a/sound/i2c/other/tea575x-tuner.c b/sound/i2c/other/tea575x-tuner.c deleted file mode 100644 index ee538f1ae84..00000000000 --- a/sound/i2c/other/tea575x-tuner.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - *   ALSA driver for TEA5757/5759 Philips AM/FM radio tuner chips - * - *	Copyright (c) 2004 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 - *   the Free Software Foundation; either version 2 of the License, or - *   (at your option) any later version. - * - *   This program is distributed in the hope that it will be useful, - *   but WITHOUT ANY WARRANTY; without even the implied warranty of - *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *   GNU General Public License for more details. - * - *   You should have received a copy of the GNU General Public License - *   along with this program; if not, write to the Free Software - *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA - * - */ - -#include <asm/io.h> -#include <linux/delay.h> -#include <linux/interrupt.h> -#include <linux/init.h> -#include <linux/slab.h> -#include <linux/version.h> -#include <sound/core.h> -#include <sound/tea575x-tuner.h> - -MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>"); -MODULE_DESCRIPTION("Routines for control of TEA5757/5759 Philips AM/FM radio tuner chips"); -MODULE_LICENSE("GPL"); - -static int radio_nr = -1; -module_param(radio_nr, int, 0); - -#define RADIO_VERSION KERNEL_VERSION(0, 0, 2) -#define FREQ_LO		 (87 * 16000) -#define FREQ_HI		(108 * 16000) - -/* - * definitions - */ - -#define TEA575X_BIT_SEARCH	(1<<24)		/* 1 = search action, 0 = tuned */ -#define TEA575X_BIT_UPDOWN	(1<<23)		/* 0 = search down, 1 = search up */ -#define TEA575X_BIT_MONO	(1<<22)		/* 0 = stereo, 1 = mono */ -#define TEA575X_BIT_BAND_MASK	(3<<20) -#define TEA575X_BIT_BAND_FM	(0<<20) -#define TEA575X_BIT_BAND_MW	(1<<20) -#define TEA575X_BIT_BAND_LW	(1<<21) -#define TEA575X_BIT_BAND_SW	(1<<22) -#define TEA575X_BIT_PORT_0	(1<<19)		/* user bit */ -#define TEA575X_BIT_PORT_1	(1<<18)		/* user bit */ -#define TEA575X_BIT_SEARCH_MASK	(3<<16)		/* search level */ -#define TEA575X_BIT_SEARCH_5_28	     (0<<16)	/* FM >5uV, AM >28uV */ -#define TEA575X_BIT_SEARCH_10_40     (1<<16)	/* FM >10uV, AM > 40uV */ -#define TEA575X_BIT_SEARCH_30_63     (2<<16)	/* FM >30uV, AM > 63uV */ -#define TEA575X_BIT_SEARCH_150_1000  (3<<16)	/* FM > 150uV, AM > 1000uV */ -#define TEA575X_BIT_DUMMY	(1<<15)		/* buffer */ -#define TEA575X_BIT_FREQ_MASK	0x7fff - -static struct v4l2_queryctrl radio_qctrl[] = { -	{ -		.id            = V4L2_CID_AUDIO_MUTE, -		.name          = "Mute", -		.minimum       = 0, -		.maximum       = 1, -		.default_value = 1, -		.type          = V4L2_CTRL_TYPE_BOOLEAN, -	} -}; - -/* - * lowlevel part - */ - -static void snd_tea575x_set_freq(struct snd_tea575x *tea) -{ -	unsigned long freq; - -	freq = tea->freq / 16;		/* to kHz */ -	if (freq > 108000) -		freq = 108000; -	if (freq < 87000) -		freq = 87000; -	/* crystal fixup */ -	if (tea->tea5759) -		freq -= tea->freq_fixup; -	else -		freq += tea->freq_fixup; -	/* freq /= 12.5 */ -	freq *= 10; -	freq /= 125; - -	tea->val &= ~TEA575X_BIT_FREQ_MASK; -	tea->val |= freq & TEA575X_BIT_FREQ_MASK; -	tea->ops->write(tea, tea->val); -} - -/* - * Linux Video interface - */ - -static int vidioc_querycap(struct file *file, void  *priv, -					struct v4l2_capability *v) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	strcpy(v->card, tea->tea5759 ? "TEA5759" : "TEA5757"); -	strlcpy(v->driver, "tea575x-tuner", sizeof(v->driver)); -	strlcpy(v->card, "Maestro Radio", sizeof(v->card)); -	sprintf(v->bus_info, "PCI"); -	v->version = RADIO_VERSION; -	v->capabilities = V4L2_CAP_TUNER; -	return 0; -} - -static int vidioc_g_tuner(struct file *file, void *priv, -					struct v4l2_tuner *v) -{ -	if (v->index > 0) -		return -EINVAL; - -	strcpy(v->name, "FM"); -	v->type = V4L2_TUNER_RADIO; -	v->rangelow = FREQ_LO; -	v->rangehigh = FREQ_HI; -	v->rxsubchans = V4L2_TUNER_SUB_MONO|V4L2_TUNER_SUB_STEREO; -	v->capability = V4L2_TUNER_CAP_LOW; -	v->audmode = V4L2_TUNER_MODE_MONO; -	v->signal = 0xffff; -	return 0; -} - -static int vidioc_s_tuner(struct file *file, void *priv, -					struct v4l2_tuner *v) -{ -	if (v->index > 0) -		return -EINVAL; -	return 0; -} - -static int vidioc_g_frequency(struct file *file, void *priv, -					struct v4l2_frequency *f) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	f->type = V4L2_TUNER_RADIO; -	f->frequency = tea->freq; -	return 0; -} - -static int vidioc_s_frequency(struct file *file, void *priv, -					struct v4l2_frequency *f) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	if (f->frequency < FREQ_LO || f->frequency > FREQ_HI) -		return -EINVAL; - -	tea->freq = f->frequency; - -	snd_tea575x_set_freq(tea); - -	return 0; -} - -static int vidioc_g_audio(struct file *file, void *priv, -					struct v4l2_audio *a) -{ -	if (a->index > 1) -		return -EINVAL; - -	strcpy(a->name, "Radio"); -	a->capability = V4L2_AUDCAP_STEREO; -	return 0; -} - -static int vidioc_s_audio(struct file *file, void *priv, -					struct v4l2_audio *a) -{ -	if (a->index != 0) -		return -EINVAL; -	return 0; -} - -static int vidioc_queryctrl(struct file *file, void *priv, -					struct v4l2_queryctrl *qc) -{ -	int i; - -	for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) { -		if (qc->id && qc->id == radio_qctrl[i].id) { -			memcpy(qc, &(radio_qctrl[i]), -						sizeof(*qc)); -			return 0; -		} -	} -	return -EINVAL; -} - -static int vidioc_g_ctrl(struct file *file, void *priv, -					struct v4l2_control *ctrl) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	switch (ctrl->id) { -	case V4L2_CID_AUDIO_MUTE: -		if (tea->ops->mute) { -			ctrl->value = tea->mute; -			return 0; -		} -	} -	return -EINVAL; -} - -static int vidioc_s_ctrl(struct file *file, void *priv, -					struct v4l2_control *ctrl) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	switch (ctrl->id) { -	case V4L2_CID_AUDIO_MUTE: -		if (tea->ops->mute) { -			tea->ops->mute(tea, ctrl->value); -			tea->mute = ctrl->value; -			return 0; -		} -	} -	return -EINVAL; -} - -static int vidioc_g_input(struct file *filp, void *priv, unsigned int *i) -{ -	*i = 0; -	return 0; -} - -static int vidioc_s_input(struct file *filp, void *priv, unsigned int i) -{ -	if (i != 0) -		return -EINVAL; -	return 0; -} - -static int snd_tea575x_exclusive_open(struct file *file) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0; -} - -static int snd_tea575x_exclusive_release(struct file *file) -{ -	struct snd_tea575x *tea = video_drvdata(file); - -	clear_bit(0, &tea->in_use); -	return 0; -} - -static const struct v4l2_file_operations tea575x_fops = { -	.owner		= THIS_MODULE, -	.open           = snd_tea575x_exclusive_open, -	.release        = snd_tea575x_exclusive_release, -	.ioctl		= video_ioctl2, -}; - -static const struct v4l2_ioctl_ops tea575x_ioctl_ops = { -	.vidioc_querycap    = vidioc_querycap, -	.vidioc_g_tuner     = vidioc_g_tuner, -	.vidioc_s_tuner     = vidioc_s_tuner, -	.vidioc_g_audio     = vidioc_g_audio, -	.vidioc_s_audio     = vidioc_s_audio, -	.vidioc_g_input     = vidioc_g_input, -	.vidioc_s_input     = vidioc_s_input, -	.vidioc_g_frequency = vidioc_g_frequency, -	.vidioc_s_frequency = vidioc_s_frequency, -	.vidioc_queryctrl   = vidioc_queryctrl, -	.vidioc_g_ctrl      = vidioc_g_ctrl, -	.vidioc_s_ctrl      = vidioc_s_ctrl, -}; - -static struct video_device tea575x_radio = { -	.name           = "tea575x-tuner", -	.fops           = &tea575x_fops, -	.ioctl_ops 	= &tea575x_ioctl_ops, -	.release	= video_device_release, -}; - -/* - * initialize all the tea575x chips - */ -void snd_tea575x_init(struct snd_tea575x *tea) -{ -	int retval; -	unsigned int val; -	struct video_device *tea575x_radio_inst; - -	val = tea->ops->read(tea); -	if (val == 0x1ffffff || val == 0) { -		snd_printk(KERN_ERR -			   "tea575x-tuner: Cannot find TEA575x chip\n"); -		return; -	} - -	tea->in_use = 0; -	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40; -	tea->freq = 90500 * 16;		/* 90.5Mhz default */ - -	tea575x_radio_inst = video_device_alloc(); -	if (tea575x_radio_inst == NULL) { -		printk(KERN_ERR "tea575x-tuner: not enough memory\n"); -		return; -	} - -	memcpy(tea575x_radio_inst, &tea575x_radio, sizeof(tea575x_radio)); - -	strcpy(tea575x_radio.name, tea->tea5759 ? -				   "TEA5759 radio" : "TEA5757 radio"); - -	video_set_drvdata(tea575x_radio_inst, tea); - -	retval = video_register_device(tea575x_radio_inst, -				       VFL_TYPE_RADIO, radio_nr); -	if (retval) { -		printk(KERN_ERR "tea575x-tuner: can't register video device!\n"); -		kfree(tea575x_radio_inst); -		return; -	} - -	snd_tea575x_set_freq(tea); - -	/* mute on init */ -	if (tea->ops->mute) { -		tea->ops->mute(tea, 1); -		tea->mute = 1; -	} -	tea->vd = tea575x_radio_inst; -} - -void snd_tea575x_exit(struct snd_tea575x *tea) -{ -	if (tea->vd) { -		video_unregister_device(tea->vd); -		tea->vd = NULL; -	} -} - -static int __init alsa_tea575x_module_init(void) -{ -	return 0; -} - -static void __exit alsa_tea575x_module_exit(void) -{ -} - -module_init(alsa_tea575x_module_init) -module_exit(alsa_tea575x_module_exit) - -EXPORT_SYMBOL(snd_tea575x_init); -EXPORT_SYMBOL(snd_tea575x_exit); diff --git a/sound/i2c/tea6330t.c b/sound/i2c/tea6330t.c index 0e3a9f2c529..2d22310dce0 100644 --- a/sound/i2c/tea6330t.c +++ b/sound/i2c/tea6330t.c @@ -22,6 +22,7 @@  #include <linux/init.h>  #include <linux/slab.h> +#include <linux/module.h>  #include <sound/core.h>  #include <sound/control.h>  #include <sound/tea6330t.h>  | 
