public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: "Hamad Kadmany" <hkadmany@codeaurora.org>
To: <linux-media@vger.kernel.org>
Subject: RE: [dvb] Problem registering demux0 device
Date: Wed, 7 Dec 2011 15:27:22 +0200	[thread overview]
Message-ID: <002301ccb4e3$f509d560$df1d8020$@org> (raw)
In-Reply-To: 

On 07-12-2011 13:50, Mauro Carvalho Chehab wrote:
> It is hard to tell the exact problem without looking into the driver. Are you
> handling the error codes returned by the register functions?
>
> You can follow what's happening inside your driver by enabling tracepoints.
> Here is one of the scripts I used when I need to know what functions are
> called:
>
>	#!/bin/bash
>	cd /sys/kernel/debug/tracing
>
>	echo disabling trace
>	echo 0 > tracing_enabled
>	echo getting funcs
>	FUNC="`cat /sys/kernel/debug/tracing/available_filter_functions|grep -i drx`"
>
>	echo setting functions
>	echo $FUNC>set_ftrace_filter
>	echo set trace type
>	echo function_graph > current_tracer
>	echo enabling trace
>	echo 1 > tracing_enabled
>
> (the above enables tracing only for functions with "drx" in the name - you'll
> need to tailor it for your specific needs)

> Of course, after finishing the device creation, you should disable the trace and
> get its results with:
>
>	#!/bin/bash
>	cd /sys/kernel/debug/tracing
>	echo 0 > tracing_enabled
>	less trace
>
> I suggest you to compare the trace for a device that is known to create all dvb
> nodes with your driver. This may give you a good hint about what is missing on
> your driver.
>
> Regards,
> Mauro

I'm checking return error codes, no problems there, I also added traces within the register functions and they all run fine. Here's my code that registers the demux device (note that the net device works fine):

static struct dvb_demux demux;
static struct dmxdev dmxdev;
static struct dvb_net net;
static struct dmx_frontend fe_hw;
static struct dmx_frontend fe_mem;

static int test_start_feed(struct dvb_demux_feed *feed)
{
	printk(KERN_INFO "%s executed\n", __FUNCTION__);
	return 0;
}

static int test_stop_feed(struct dvb_demux_feed *feed)
{
	printk(KERN_INFO "%s executed\n", __FUNCTION__);
	return 0;
}

static int test_write_to_decoder(struct dvb_demux_feed *feed, const u8 *buf, size_t len)
{
	printk(KERN_INFO "%s executed\n", __FUNCTION__);
	return 0;
}
	
// initialization specific demux device
void test_demux_device_init(struct dvb_adapter* adapter)
{
	int result;

	printk(KERN_INFO "%s executed\n", __FUNCTION__);
	
	memset(&demux, 0, sizeof(struct dvb_demux));

	demux.dmx.capabilities = DMX_TS_FILTERING | 
					  DMX_PES_FILTERING |
					  DMX_SECTION_FILTERING | 
					  DMX_MEMORY_BASED_FILTERING |
					  DMX_CRC_CHECKING | 
					  DMX_TS_DESCRAMBLING;

	demux.priv = NULL;	
	demux.filternum = 31;
	demux.feednum = 31;
	demux.start_feed = test_start_feed;
	demux.stop_feed = test_stop_feed;
	demux.write_to_decoder = test_write_to_decoder;

	printk(KERN_INFO "%s call dvb_dmx_init\n", __FUNCTION__);
	
	if ((result = dvb_dmx_init(&demux)) < 0) 
	{
		printk(KERN_ERR "%s: dvb_dmx_init failed\n", __FUNCTION__);
		goto init_failed;
	}

	dmxdev.filternum = 31;
	dmxdev.demux = &demux.dmx;
	dmxdev.capabilities = 0;

	printk(KERN_INFO "%s call dvb_dmxdev_init\n", __FUNCTION__);
	
	if ((result = dvb_dmxdev_init(&dmxdev, adapter)) < 0) 
	{
		printk(KERN_ERR "%s: dvb_dmxdev_init failed (errno=%d)\n", __FUNCTION__, result);
		goto init_failed_dmx_release;
	}

	fe_hw.source = DMX_FRONTEND_0;

	printk(KERN_INFO "%s call add_frontend\n", __FUNCTION__);
	
	if ((result = demux.dmx.add_frontend(&demux.dmx, &fe_hw)) < 0) 
	{
		printk(KERN_ERR "%s: add_frontend (hw) failed (errno=%d)\n", __FUNCTION__, result);
		goto init_failed_dmxdev_release;
	}

	fe_mem.source = DMX_MEMORY_FE;

	if ((result = demux.dmx.add_frontend(&demux.dmx, &fe_mem)) < 0) 
	{
		printk(KERN_ERR "%s: add_frontend (mem) failed (errno=%d)\n", __FUNCTION__, result);
		goto init_failed_remove_hw_frontend;
	}

	if ((result = demux.dmx.connect_frontend(&demux.dmx, &fe_hw)) < 0) 
	{
		printk(KERN_ERR "%s: connect_frontend failed (errno=%d)\n", __FUNCTION__, result);
		goto init_failed_remove_mem_frontend;
	}
	
	if ((result = dvb_net_init(adapter, &net, &demux.dmx)) < 0) 
	{
		printk(KERN_ERR "%s: dvb_net_init failed (errno=%d)\n", __FUNCTION__, result);
		goto init_failed_disconnect_frontend;
	}
	
init_failed_disconnect_frontend:
	demux.dmx.disconnect_frontend(&demux.dmx);
init_failed_remove_mem_frontend:
	demux.dmx.remove_frontend(&demux.dmx, &fe_mem);
init_failed_remove_hw_frontend:
	demux.dmx.remove_frontend(&demux.dmx, &fe_hw);
init_failed_dmxdev_release:
	dvb_dmxdev_release(&dmxdev);
init_failed_dmx_release:
	dvb_dmx_release(&demux);
init_failed:
	return;
}
EXPORT_SYMBOL(test_demux_device_init);

// terminate specific demux device
void test_demux_device_terminate(struct dvb_adapter* adapter)
{
	dvb_net_release(&net);
	demux.dmx.close(&demux.dmx);
	demux.dmx.disconnect_frontend(&demux.dmx);
	demux.dmx.remove_frontend(&demux.dmx, &fe_mem);
	demux.dmx.remove_frontend(&demux.dmx, &fe_hw);
	dvb_dmxdev_release(&dmxdev);
	dvb_dmx_release(&demux);
}
EXPORT_SYMBOL(test_demux_device_terminate);

Thanks,
Hamad


      reply	other threads:[~2011-12-07 13:27 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-29  8:05 Support for multiple section feeds with same PIDs Hamad Kadmany
2011-12-01  6:23 ` Hamad Kadmany
2011-12-01 11:48   ` Mauro Carvalho Chehab
2011-12-01 13:36 ` Andreas Oberritter
2011-12-01 13:55   ` Hamad Kadmany
2011-12-01 13:57     ` Andreas Oberritter
2011-12-01 14:22       ` Hamad Kadmany
2011-12-01 14:30         ` Andreas Oberritter
2011-12-01 15:57           ` Hamad Kadmany
2011-12-01 16:30             ` Andreas Oberritter
2011-12-07 11:30 ` [dvb] Problem registering demux0 device Hamad Kadmany
2011-12-07 11:49   ` Mauro Carvalho Chehab
2011-12-07 13:27     ` Hamad Kadmany [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='002301ccb4e3$f509d560$df1d8020$@org' \
    --to=hkadmany@codeaurora.org \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox