mirror of https://gitee.com/openkylin/linux.git
V4L/DVB: tm6000: Add a callback code for buffer fill
Implements a callback to be used by tm6000-alsa, in order to allow filling audio data packets. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
39e1256bc4
commit
b17b86991a
|
@ -200,6 +200,21 @@ static int snd_tm6000_close(struct snd_pcm_substream *substream)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tm6000_fillbuf(struct tm6000_core *core, char *buf, int size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Need to add a real code to copy audio buffer */
|
||||||
|
printk("Audio (%i bytes): ", size);
|
||||||
|
for (i = 0; i < size - 3; i +=4)
|
||||||
|
printk("(0x%04x, 0x%04x), ",
|
||||||
|
*(u16 *)(buf + i), *(u16 *)(buf + i + 2));
|
||||||
|
|
||||||
|
printk("\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* hw_params callback
|
* hw_params callback
|
||||||
*/
|
*/
|
||||||
|
@ -396,6 +411,7 @@ struct tm6000_ops audio_ops = {
|
||||||
.name = "TM6000 Audio Extension",
|
.name = "TM6000 Audio Extension",
|
||||||
.init = tm6000_audio_init,
|
.init = tm6000_audio_init,
|
||||||
.fini = tm6000_audio_fini,
|
.fini = tm6000_audio_fini,
|
||||||
|
.fillbuf = tm6000_fillbuf,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init tm6000_alsa_register(void)
|
static int __init tm6000_alsa_register(void)
|
||||||
|
|
|
@ -653,6 +653,23 @@ void tm6000_add_into_devlist(struct tm6000_core *dev)
|
||||||
static LIST_HEAD(tm6000_extension_devlist);
|
static LIST_HEAD(tm6000_extension_devlist);
|
||||||
static DEFINE_MUTEX(tm6000_extension_devlist_lock);
|
static DEFINE_MUTEX(tm6000_extension_devlist_lock);
|
||||||
|
|
||||||
|
int tm6000_call_fillbuf(struct tm6000_core *dev, enum tm6000_ops_type type,
|
||||||
|
char *buf, int size)
|
||||||
|
{
|
||||||
|
struct tm6000_ops *ops = NULL;
|
||||||
|
|
||||||
|
/* FIXME: tm6000_extension_devlist_lock should be a spinlock */
|
||||||
|
|
||||||
|
if (!list_empty(&tm6000_extension_devlist)) {
|
||||||
|
list_for_each_entry(ops, &tm6000_extension_devlist, next) {
|
||||||
|
if (ops->fillbuf && ops->type == type)
|
||||||
|
ops->fillbuf(dev, buf, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int tm6000_register_extension(struct tm6000_ops *ops)
|
int tm6000_register_extension(struct tm6000_ops *ops)
|
||||||
{
|
{
|
||||||
struct tm6000_core *dev = NULL;
|
struct tm6000_core *dev = NULL;
|
||||||
|
|
|
@ -301,7 +301,7 @@ static int copy_streams(u8 *data, unsigned long len,
|
||||||
memcpy (&voutp[pos], ptr, cpysize);
|
memcpy (&voutp[pos], ptr, cpysize);
|
||||||
break;
|
break;
|
||||||
case TM6000_URB_MSG_AUDIO:
|
case TM6000_URB_MSG_AUDIO:
|
||||||
/* Need some code to copy audio buffer */
|
tm6000_call_fillbuf(dev, TM6000_AUDIO, ptr, cpysize);
|
||||||
break;
|
break;
|
||||||
case TM6000_URB_MSG_VBI:
|
case TM6000_URB_MSG_VBI:
|
||||||
/* Need some code to copy vbi buffer */
|
/* Need some code to copy vbi buffer */
|
||||||
|
|
|
@ -229,6 +229,7 @@ struct tm6000_ops {
|
||||||
enum tm6000_ops_type type;
|
enum tm6000_ops_type type;
|
||||||
int (*init)(struct tm6000_core *);
|
int (*init)(struct tm6000_core *);
|
||||||
int (*fini)(struct tm6000_core *);
|
int (*fini)(struct tm6000_core *);
|
||||||
|
int (*fillbuf)(struct tm6000_core *, char *buf, int size);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct tm6000_fh {
|
struct tm6000_fh {
|
||||||
|
@ -278,6 +279,9 @@ int tm6000_register_extension(struct tm6000_ops *ops);
|
||||||
void tm6000_unregister_extension(struct tm6000_ops *ops);
|
void tm6000_unregister_extension(struct tm6000_ops *ops);
|
||||||
void tm6000_init_extension(struct tm6000_core *dev);
|
void tm6000_init_extension(struct tm6000_core *dev);
|
||||||
void tm6000_close_extension(struct tm6000_core *dev);
|
void tm6000_close_extension(struct tm6000_core *dev);
|
||||||
|
int tm6000_call_fillbuf(struct tm6000_core *dev, enum tm6000_ops_type type,
|
||||||
|
char *buf, int size);
|
||||||
|
|
||||||
|
|
||||||
/* In tm6000-stds.c */
|
/* In tm6000-stds.c */
|
||||||
void tm6000_get_std_res(struct tm6000_core *dev);
|
void tm6000_get_std_res(struct tm6000_core *dev);
|
||||||
|
|
Loading…
Reference in New Issue