[alsa-devel] [PATCH] Improved support for different bt87x board configurations

Takashi Iwai tiwai at suse.de
Wed Sep 5 12:07:52 CEST 2007


At Wed, 5 Sep 2007 02:09:45 -0700 (PDT),
Trent Piepho wrote:
> 
> On Wed, 5 Sep 2007, Mauro Carvalho Chehab wrote:
> > Em Ter, 2007-09-04 às 14:04 -0700, Trent Piepho escreveu:
> > > There are few drawbacks.
> > >
> > > First, there are like 20x more cards supported by the bttv driver than by
> > > the bt87x driver.  It's going to produce a very sparse card database in the
> > > ALSA driver.  Note that for the most part, __initdata doesn't work, so you
> > > can't say "it'll just be dropped after the driver loads."
> >
> > You should notice that even the way you've mapped is a a little sparse,
> > since just two boards use digital_fmt.
> >
> > Maybe one solution for that is to use a different code or data
> > structure.
> >
> > For example, instead of using a data struct, you could use some sort of
> > code like (*) (**):
> >
> > static void fill_board (struct snd_bt87x_board &board, int board_id)
> > {
> >         board->dig_rate = 32000;
> >         switch (board_id) {
> >         case BTTV_BOARD_AVPHONE98:
> >                 board.dig_rate = 48000,
> > 		break;
> 
> I don't think gcc will be smart enough to a bunch of cases with random numbers
> into a O(1) lookup, instead it will use an O(log n) branch chain.  With all
> the explicit assignments, I doubt it will be much smaller, if any, since there
> are just a couple board configurations.  Several board configurations are
> currently duplicates and I think I'll just merge them.
> 
> But code wise I think using a switch with manual assignments is ugly.  It's a
> lot more code to write and just doesn't have the regularity and elegance of a
> table.

I second for Trent.  The switch is uglier than the array for such a
purpose.


> > > And if both linuxtv and alsa use the same header, what happens if they
> > > don't push the changes to GIT at the exact same time?  You'll have patches
> > > in one subsystem that are dependant on the other subsystem.  How will they
> > > make the same merge window?
> >
> > This should be coordinated between me and Takashi. I have no objections
> > if he pull such patch, if he is willing to send the pull request before
> > myself.
> >
> > I don't see this as a big trouble. There are other cases like this
> > already (pci_ids.h, i2c_id.h). Also, currently, there are not much bttv
> > board additions anymore.
> 
> And pci_ids and i2d_id are pain to deal with.  Both v4l-dvb and ALSA have out
> of kernel tree build system that try to be backward compatible with older
> kernels.  When the IDs come from somewhere outside the repository, you need to
> have compat patches to deal with old id files that are missing ids.  Look at
> all the kernel-sync patches for those id files, all the compat code in the
> various drivers for non-defined PCI ids.  There's even something I had to add
> to compat.h for an i2c ID that went away in newer kernels.
> 
> It's a lot of extra work, and I just don't see the point.  To reuse a couple
> defines from a bttv header file?  They are just arbitrary numbers, it's not
> like there is any benefit from using the same value in both drivers.

Well, at first I misunderstood that we would share the PCI SSIDs
together with enum items.  Sharing only the enum items doesn't give
much improvements.  Sharing the card database may do, though.

So, I see Trent's point.  The merge work wouldn't pay for the benifit
by sharing only the enum id, not the card database.


thanks,

Takashi


More information about the Alsa-devel mailing list