On Wed, Jul 02, 2008 at 11:27:17AM -0400, Jon Smirl wrote:
On 7/1/08, Grant Likely grant.likely@secretlab.ca wrote:
+static struct of_snd_soc_device * +of_snd_soc_get_device(struct device_node *codec_node) +{
struct of_snd_soc_device *of_soc;
list_for_each_entry(of_soc, &of_snd_soc_device_list, list) {
if (of_soc->codec_node == codec_node)
return of_soc;
}
of_soc = kzalloc(sizeof(struct of_snd_soc_device), GFP_KERNEL);
if (!of_soc)
return NULL;
/* Initialize the structure and add it to the global list */
of_soc->codec_node = codec_node;
of_soc->id = of_snd_soc_next_index++;
of_soc->machine.dai_link = &of_soc->dai_link;
of_soc->machine.num_links = 1;
of_soc->device.machine = &of_soc->machine;
of_soc->dai_link.ops = &of_snd_soc_ops;
list_add(&of_soc->list, &of_snd_soc_device_list);
return of_soc;
+}
Isn't this performing the same basic function as this code (except for spi)? Should this list be maintained in alsa or should there be an equivalent for searching the spi bus? If you follow the link to the codec node and get it's parent you know which bus to search. But it might be simpler to just search the buses sequentially for the node.
static int of_dev_node_match(struct device *dev, void *data) { return dev->archdata.of_node == data; }
struct i2c_client *of_find_i2c_device_by_node(struct device_node *node) { struct device *dev;
dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match); if (!dev) return NULL; return to_i2c_client(dev); } EXPORT_SYMBOL(of_find_i2c_device_by_node);
Yes, but you hadn't written these functions when I wrote this helper. :-P. I believe ASoC v2 makes all this stuff unnecessary, but I'm waiting for v2 to hit mainline before I port forward.
g.