-static int gbaudio_dai_probe(struct gb_connection *connection)
-{
- struct gbaudio_dai *dai;
- struct device *dev = &connection->bundle->dev;
- int dev_id = connection->intf->interface_id;
- struct gbaudio_codec_info *gbcodec;
- struct gb_audio_manager_module_descriptor desc;
- int ret;
-
- dev_dbg(dev, "Add DAI device:%d:%s\n", dev_id, dev_name(dev));
-
- /* get gbcodec data */
- gbcodec = gbaudio_get_codec(dev, dev_id);
- if (!gbcodec)
- return -ENOMEM;
-
- ret = gb_connection_enable(connection);
- if (ret)
- goto err_free_codec;
-
- /* add/update dai_list*/
- dai = gbaudio_add_dai(gbcodec, connection->intf_cport_id, connection,
- NULL);
- if (!dai) {
- ret = -ENOMEM;
- goto err_connection_disable;
- }
-
- /* update dai_added count */
- mutex_lock(&gbcodec->lock);
- gbcodec->dai_added++;
-
- /* inform above layer for uevent */
- if (!gbcodec->set_uevent && gbcodec->codec_registered &&
- (gbcodec->dai_added == gbcodec->num_dais)) {
- /* prepare for the audio manager */
- dev_dbg(dev, "Inform set_event:%d to above layer\n", 1);
- strlcpy(desc.name, gbcodec->name,
- GB_AUDIO_MANAGER_MODULE_NAME_LEN); /* todo */
- desc.slot = 1; /* todo */
- desc.vid = 2; /* todo */
- desc.pid = 3; /* todo */
- desc.cport = gbcodec->dev_id;
- desc.devices = 0x2; /* todo */
- gbcodec->manager_id = gb_audio_manager_add(&desc);
- gbcodec->set_uevent = 1;
- }
- mutex_unlock(&gbcodec->lock);
-
- return 0;
-
-err_connection_disable:
- gb_connection_disable(connection);
-err_free_codec:
- gbaudio_free_codec(dev, gbcodec);
- return ret;
-}
-
-static void gbaudio_dai_remove(struct gb_connection *connection)
-{
- struct device *dev = &connection->bundle->dev;
- int dev_id = connection->intf->interface_id;
- struct gbaudio_codec_info *gbcodec;
-
- dev_dbg(dev, "Remove DAI device:%d:%s\n", dev_id, dev_name(dev));
-
- /* get gbcodec data */
- gbcodec = gbaudio_find_codec(dev, dev_id);
- if (!gbcodec)
- return;
-
- /* inform uevent to above layers */
- mutex_lock(&gbcodec->lock);
- if (gbcodec->set_uevent) {
- /* notify the audio manager */
- dev_dbg(dev, "Inform set_event:%d to above layer\n", 0);
- gb_audio_manager_remove(gbcodec->manager_id);
- gbcodec->set_uevent = 0;
- }
- /* update dai_added count */
- gbcodec->dai_added--;
- mutex_unlock(&gbcodec->lock);
-
- gb_connection_disable(connection);
- gbaudio_free_codec(dev, gbcodec);
-}
-