diff options
Diffstat (limited to 'sound/pci/cs46xx/dsp_spos.c')
| -rw-r--r-- | sound/pci/cs46xx/dsp_spos.c | 136 | 
1 files changed, 84 insertions, 52 deletions
diff --git a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c index e377287192a..1c4a0fb3ffe 100644 --- a/sound/pci/cs46xx/dsp_spos.c +++ b/sound/pci/cs46xx/dsp_spos.c @@ -32,7 +32,7 @@  #include <sound/control.h>  #include <sound/info.h>  #include <sound/asoundef.h> -#include <sound/cs46xx.h> +#include "cs46xx.h"  #include "cs46xx_lib.h"  #include "dsp_spos.h" @@ -85,12 +85,15 @@ static int shadow_and_reallocate_code (struct snd_cs46xx * chip, u32 * data, u32  						address  = (hival & 0x00FFF) << 5;  						address |=  loval >> 15; -						snd_printdd("handle_wideop[1]: %05x:%05x addr %04x\n",hival,loval,address); +						dev_dbg(chip->card->dev, +							"handle_wideop[1]: %05x:%05x addr %04x\n", +							hival, loval, address);  						if ( !(address & 0x8000) ) {  							address += (ins->code.offset / 2) - overlay_begin_address;  						} else { -							snd_printdd("handle_wideop[1]: ROM symbol not reallocated\n"); +							dev_dbg(chip->card->dev, +								"handle_wideop[1]: ROM symbol not reallocated\n");  						}  						hival &= 0xFF000; @@ -102,8 +105,9 @@ static int shadow_and_reallocate_code (struct snd_cs46xx * chip, u32 * data, u32  						address  = (hival & 0x00FFF) << 5;  						address |=  loval >> 15; -						snd_printdd("handle_wideop:[2] %05x:%05x addr %04x\n",hival,loval,address);             -						nreallocated ++; +						dev_dbg(chip->card->dev, +							"handle_wideop:[2] %05x:%05x addr %04x\n", +							hival, loval, address);						nreallocated++;  					} /* wide_opcodes[j] == wide_op */  				} /* for */  			} /* mod_type == 0 ... */ @@ -113,7 +117,8 @@ static int shadow_and_reallocate_code (struct snd_cs46xx * chip, u32 * data, u32  		ins->code.data[ins->code.size++] = hival;  	} -	snd_printdd("dsp_spos: %d instructions reallocated\n",nreallocated); +	dev_dbg(chip->card->dev, +		"dsp_spos: %d instructions reallocated\n", nreallocated);  	return nreallocated;  } @@ -157,7 +162,8 @@ static int add_symbols (struct snd_cs46xx * chip, struct dsp_module_desc * modul  	for (i = 0;i < module->symbol_table.nsymbols; ++i) {  		if (ins->symbol_table.nsymbols == (DSP_MAX_SYMBOLS - 1)) { -			snd_printk(KERN_ERR "dsp_spos: symbol table is full\n"); +			dev_err(chip->card->dev, +				"dsp_spos: symbol table is full\n");  			return -ENOMEM;  		} @@ -176,8 +182,11 @@ static int add_symbols (struct snd_cs46xx * chip, struct dsp_module_desc * modul  			ins->symbol_table.nsymbols++;  		} else { -          /* if (0) printk ("dsp_spos: symbol <%s> duplicated, probably nothing wrong with that (Cirrus?)\n", -                             module->symbol_table.symbols[i].symbol_name); */ +#if 0 +			dev_dbg(chip->card->dev, +				"dsp_spos: symbol <%s> duplicated, probably nothing wrong with that (Cirrus?)\n", +				module->symbol_table.symbols[i].symbol_name); */ +#endif  		}  	} @@ -192,14 +201,15 @@ add_symbol (struct snd_cs46xx * chip, char * symbol_name, u32 address, int type)  	int index;  	if (ins->symbol_table.nsymbols == (DSP_MAX_SYMBOLS - 1)) { -		snd_printk(KERN_ERR "dsp_spos: symbol table is full\n"); +		dev_err(chip->card->dev, "dsp_spos: symbol table is full\n");  		return NULL;  	}  	if (cs46xx_dsp_lookup_symbol(chip,  				     symbol_name,  				     type) != NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol <%s> duplicated\n", symbol_name); +		dev_err(chip->card->dev, +			"dsp_spos: symbol <%s> duplicated\n", symbol_name);  		return NULL;  	} @@ -287,7 +297,7 @@ void  cs46xx_dsp_spos_destroy (struct snd_cs46xx * chip)  		if (ins->scbs[i].deleted) continue;  		cs46xx_dsp_proc_free_scb_desc ( (ins->scbs + i) ); -#ifdef CONFIG_PM +#ifdef CONFIG_PM_SLEEP  		kfree(ins->scbs[i].data);  #endif  	} @@ -305,19 +315,20 @@ static int dsp_load_parameter(struct snd_cs46xx *chip,  	u32 doffset, dsize;  	if (!parameter) { -		snd_printdd("dsp_spos: module got no parameter segment\n"); +		dev_dbg(chip->card->dev, +			"dsp_spos: module got no parameter segment\n");  		return 0;  	}  	doffset = (parameter->offset * 4 + DSP_PARAMETER_BYTE_OFFSET);  	dsize   = parameter->size * 4; -	snd_printdd("dsp_spos: " -		    "downloading parameter data to chip (%08x-%08x)\n", +	dev_dbg(chip->card->dev, +		"dsp_spos: downloading parameter data to chip (%08x-%08x)\n",  		    doffset,doffset + dsize);  	if (snd_cs46xx_download (chip, parameter->data, doffset, dsize)) { -		snd_printk(KERN_ERR "dsp_spos: " -			   "failed to download parameter data to DSP\n"); +		dev_err(chip->card->dev, +			"dsp_spos: failed to download parameter data to DSP\n");  		return -EINVAL;  	}  	return 0; @@ -329,18 +340,21 @@ static int dsp_load_sample(struct snd_cs46xx *chip,  	u32 doffset, dsize;  	if (!sample) { -		snd_printdd("dsp_spos: module got no sample segment\n"); +		dev_dbg(chip->card->dev, +			"dsp_spos: module got no sample segment\n");  		return 0;  	}  	doffset = (sample->offset * 4  + DSP_SAMPLE_BYTE_OFFSET);  	dsize   =  sample->size * 4; -	snd_printdd("dsp_spos: downloading sample data to chip (%08x-%08x)\n", +	dev_dbg(chip->card->dev, +		"dsp_spos: downloading sample data to chip (%08x-%08x)\n",  		    doffset,doffset + dsize);  	if (snd_cs46xx_download (chip,sample->data,doffset,dsize)) { -		snd_printk(KERN_ERR "dsp_spos: failed to sample data to DSP\n"); +		dev_err(chip->card->dev, +			"dsp_spos: failed to sample data to DSP\n");  		return -EINVAL;  	}  	return 0; @@ -354,14 +368,16 @@ int cs46xx_dsp_load_module (struct snd_cs46xx * chip, struct dsp_module_desc * m  	int err;  	if (ins->nmodules == DSP_MAX_MODULES - 1) { -		snd_printk(KERN_ERR "dsp_spos: to many modules loaded into DSP\n"); +		dev_err(chip->card->dev, +			"dsp_spos: to many modules loaded into DSP\n");  		return -ENOMEM;  	} -	snd_printdd("dsp_spos: loading module %s into DSP\n", module->module_name); +	dev_dbg(chip->card->dev, +		"dsp_spos: loading module %s into DSP\n", module->module_name);  	if (ins->nmodules == 0) { -		snd_printdd("dsp_spos: clearing parameter area\n"); +		dev_dbg(chip->card->dev, "dsp_spos: clearing parameter area\n");  		snd_cs46xx_clear_BA1(chip, DSP_PARAMETER_BYTE_OFFSET, DSP_PARAMETER_BYTE_SIZE);  	} @@ -371,7 +387,7 @@ int cs46xx_dsp_load_module (struct snd_cs46xx * chip, struct dsp_module_desc * m  		return err;  	if (ins->nmodules == 0) { -		snd_printdd("dsp_spos: clearing sample area\n"); +		dev_dbg(chip->card->dev, "dsp_spos: clearing sample area\n");  		snd_cs46xx_clear_BA1(chip, DSP_SAMPLE_BYTE_OFFSET, DSP_SAMPLE_BYTE_SIZE);  	} @@ -381,15 +397,17 @@ int cs46xx_dsp_load_module (struct snd_cs46xx * chip, struct dsp_module_desc * m  		return err;  	if (ins->nmodules == 0) { -		snd_printdd("dsp_spos: clearing code area\n"); +		dev_dbg(chip->card->dev, "dsp_spos: clearing code area\n");  		snd_cs46xx_clear_BA1(chip, DSP_CODE_BYTE_OFFSET, DSP_CODE_BYTE_SIZE);  	}  	if (code == NULL) { -		snd_printdd("dsp_spos: module got no code segment\n"); +		dev_dbg(chip->card->dev, +			"dsp_spos: module got no code segment\n");  	} else {  		if (ins->code.offset + code->size > DSP_CODE_BYTE_SIZE) { -			snd_printk(KERN_ERR "dsp_spos: no space available in DSP\n"); +			dev_err(chip->card->dev, +				"dsp_spos: no space available in DSP\n");  			return -ENOMEM;  		} @@ -401,19 +419,22 @@ int cs46xx_dsp_load_module (struct snd_cs46xx * chip, struct dsp_module_desc * m  		if (snd_BUG_ON(!module->symbol_table.symbols))  			return -ENOMEM;  		if (add_symbols(chip,module)) { -			snd_printk(KERN_ERR "dsp_spos: failed to load symbol table\n"); +			dev_err(chip->card->dev, +				"dsp_spos: failed to load symbol table\n");  			return -ENOMEM;  		}  		doffset = (code->offset * 4 + ins->code.offset * 4 + DSP_CODE_BYTE_OFFSET);  		dsize   = code->size * 4; -		snd_printdd("dsp_spos: downloading code to chip (%08x-%08x)\n", +		dev_dbg(chip->card->dev, +			"dsp_spos: downloading code to chip (%08x-%08x)\n",  			    doffset,doffset + dsize);     		module->nfixups = shadow_and_reallocate_code(chip,code->data,code->size,module->overlay_begin_address);  		if (snd_cs46xx_download (chip,(ins->code.data + ins->code.offset),doffset,dsize)) { -			snd_printk(KERN_ERR "dsp_spos: failed to download code to DSP\n"); +			dev_err(chip->card->dev, +				"dsp_spos: failed to download code to DSP\n");  			return -EINVAL;  		} @@ -447,7 +468,7 @@ cs46xx_dsp_lookup_symbol (struct snd_cs46xx * chip, char * symbol_name, int symb  	}  #if 0 -	printk ("dsp_spos: symbol <%s> type %02x not found\n", +	dev_err(chip->card->dev, "dsp_spos: symbol <%s> type %02x not found\n",  		symbol_name,symbol_type);  #endif @@ -910,7 +931,6 @@ int cs46xx_dsp_proc_done (struct snd_cs46xx *chip)  }  #endif /* CONFIG_PROC_FS */ -static int debug_tree;  static void _dsp_create_task_tree (struct snd_cs46xx *chip, u32 * task_data,  				   u32  dest, int size)  { @@ -919,13 +939,13 @@ static void _dsp_create_task_tree (struct snd_cs46xx *chip, u32 * task_data,  	int i;  	for (i = 0; i < size; ++i) { -		if (debug_tree) printk ("addr %p, val %08x\n",spdst,task_data[i]); +		dev_dbg(chip->card->dev, "addr %p, val %08x\n", +			spdst, task_data[i]);  		writel(task_data[i],spdst);  		spdst += sizeof(u32);  	}  } -static int debug_scb;  static void _dsp_create_scb (struct snd_cs46xx *chip, u32 * scb_data, u32 dest)  {  	void __iomem *spdst = chip->region.idx[1].remap_addr +  @@ -933,7 +953,8 @@ static void _dsp_create_scb (struct snd_cs46xx *chip, u32 * scb_data, u32 dest)  	int i;  	for (i = 0; i < 0x10; ++i) { -		if (debug_scb) printk ("addr %p, val %08x\n",spdst,scb_data[i]); +		dev_dbg(chip->card->dev, "addr %p, val %08x\n", +			spdst, scb_data[i]);  		writel(scb_data[i],spdst);  		spdst += sizeof(u32);  	} @@ -960,7 +981,8 @@ static struct dsp_scb_descriptor * _map_scb (struct snd_cs46xx *chip, char * nam  	int index;  	if (ins->nscb == DSP_MAX_SCB_DESC - 1) { -		snd_printk(KERN_ERR "dsp_spos: got no place for other SCB\n"); +		dev_err(chip->card->dev, +			"dsp_spos: got no place for other SCB\n");  		return NULL;  	} @@ -991,7 +1013,8 @@ _map_task_tree (struct snd_cs46xx *chip, char * name, u32 dest, u32 size)  	struct dsp_task_descriptor * desc = NULL;  	if (ins->ntask == DSP_MAX_TASK_DESC - 1) { -		snd_printk(KERN_ERR "dsp_spos: got no place for other TASK\n"); +		dev_err(chip->card->dev, +			"dsp_spos: got no place for other TASK\n");  		return NULL;  	} @@ -1019,7 +1042,7 @@ cs46xx_dsp_create_scb (struct snd_cs46xx *chip, char * name, u32 * scb_data, u32  {  	struct dsp_scb_descriptor * desc; -#ifdef CONFIG_PM +#ifdef CONFIG_PM_SLEEP  	/* copy the data for resume */  	scb_data = kmemdup(scb_data, SCB_BYTES, GFP_KERNEL);  	if (!scb_data) @@ -1031,8 +1054,8 @@ cs46xx_dsp_create_scb (struct snd_cs46xx *chip, char * name, u32 * scb_data, u32  		desc->data = scb_data;  		_dsp_create_scb(chip,scb_data,dest);  	} else { -		snd_printk(KERN_ERR "dsp_spos: failed to map SCB\n"); -#ifdef CONFIG_PM +		dev_err(chip->card->dev, "dsp_spos: failed to map SCB\n"); +#ifdef CONFIG_PM_SLEEP  		kfree(scb_data);  #endif  	} @@ -1052,7 +1075,7 @@ cs46xx_dsp_create_task_tree (struct snd_cs46xx *chip, char * name, u32 * task_da  		desc->data = task_data;  		_dsp_create_task_tree(chip,task_data,dest,size);  	} else { -		snd_printk(KERN_ERR "dsp_spos: failed to map TASK\n"); +		dev_err(chip->card->dev, "dsp_spos: failed to map TASK\n");  	}  	return desc; @@ -1105,31 +1128,36 @@ int cs46xx_dsp_scb_and_task_init (struct snd_cs46xx *chip)  	null_algorithm  = cs46xx_dsp_lookup_symbol(chip, "NULLALGORITHM", SYMBOL_CODE);  	if (null_algorithm == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol NULLALGORITHM not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol NULLALGORITHM not found\n");  		return -EIO;  	}  	fg_task_tree_header_code = cs46xx_dsp_lookup_symbol(chip, "FGTASKTREEHEADERCODE", SYMBOL_CODE);    	if (fg_task_tree_header_code == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol FGTASKTREEHEADERCODE not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol FGTASKTREEHEADERCODE not found\n");  		return -EIO;  	}  	task_tree_header_code = cs46xx_dsp_lookup_symbol(chip, "TASKTREEHEADERCODE", SYMBOL_CODE);    	if (task_tree_header_code == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol TASKTREEHEADERCODE not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol TASKTREEHEADERCODE not found\n");  		return -EIO;  	}  	task_tree_thread = cs46xx_dsp_lookup_symbol(chip, "TASKTREETHREAD", SYMBOL_CODE);  	if (task_tree_thread == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol TASKTREETHREAD not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol TASKTREETHREAD not found\n");  		return -EIO;  	}  	magic_snoop_task = cs46xx_dsp_lookup_symbol(chip, "MAGICSNOOPTASK", SYMBOL_CODE);  	if (magic_snoop_task == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol MAGICSNOOPTASK not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol MAGICSNOOPTASK not found\n");  		return -EIO;  	} @@ -1476,7 +1504,7 @@ int cs46xx_dsp_scb_and_task_init (struct snd_cs46xx *chip)  	return 0;   _fail_end: -	snd_printk(KERN_ERR "dsp_spos: failed to setup SCB's in DSP\n"); +	dev_err(chip->card->dev, "dsp_spos: failed to setup SCB's in DSP\n");  	return -EINVAL;  } @@ -1491,18 +1519,21 @@ static int cs46xx_dsp_async_init (struct snd_cs46xx *chip,  	s16_async_codec_input_task = cs46xx_dsp_lookup_symbol(chip, "S16_ASYNCCODECINPUTTASK", SYMBOL_CODE);  	if (s16_async_codec_input_task == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol S16_ASYNCCODECINPUTTASK not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol S16_ASYNCCODECINPUTTASK not found\n");  		return -EIO;  	}  	spdifo_task = cs46xx_dsp_lookup_symbol(chip, "SPDIFOTASK", SYMBOL_CODE);  	if (spdifo_task == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol SPDIFOTASK not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol SPDIFOTASK not found\n");  		return -EIO;  	}  	spdifi_task = cs46xx_dsp_lookup_symbol(chip, "SPDIFITASK", SYMBOL_CODE);  	if (spdifi_task == NULL) { -		snd_printk(KERN_ERR "dsp_spos: symbol SPDIFITASK not found\n"); +		dev_err(chip->card->dev, +			"dsp_spos: symbol SPDIFITASK not found\n");  		return -EIO;  	} @@ -1883,7 +1914,8 @@ int cs46xx_poke_via_dsp (struct snd_cs46xx *chip, u32 address, u32 data)  	}  	if (i == 25) { -		snd_printk(KERN_ERR "dsp_spos: SPIOWriteTask not responding\n"); +		dev_err(chip->card->dev, +			"dsp_spos: SPIOWriteTask not responding\n");  		return -EBUSY;  	} @@ -1937,7 +1969,7 @@ int cs46xx_dsp_set_iec958_volume (struct snd_cs46xx * chip, u16 left, u16 right)  	return 0;  } -#ifdef CONFIG_PM +#ifdef CONFIG_PM_SLEEP  int cs46xx_dsp_resume(struct snd_cs46xx * chip)  {  	struct dsp_spos_instance * ins = chip->dsp_spos_instance;  | 
