LINUX.ORG.RU

Audio в mini2440


0

1

В новых ядрах почему-то не работает звук в девките http://www.friendlyarm.net/products/mini2440?lang=en

Попытался разобраться сам но что-то не выходит.

static struct platform_driver s3c24xx_uda134x_driver = {
	.probe  = s3c24xx_uda134x_probe,
	.remove = s3c24xx_uda134x_remove,
	.driver = {
		.name = "s3c24xx_uda134x",
		.owner = THIS_MODULE,
	},
};

static int __init s3c24xx_uda134x_init(void)
{
	return platform_driver_register(&s3c24xx_uda134x_driver);
}
Тут все ок s3c24xx_uda134x_probe вызывается. Птому собственно доходит до snd_soc_instantiate_card(который в linux-2.6\sound\soс\soc-core.c) А вот в нем доходит до сюда
for (i = 0; i < card->num_links; i++)
		soc_bind_dai_link(card, i);
//soc_bind_dai_link
....
find_platform:
	/* do we already have the CODEC DAI for this link ? */
	if (rtd->platform) {
		goto out;
	}
	/* no, then find CPU DAI from registered DAIs*/
	list_for_each_entry(platform, &platform_list, list) {
		if (!strcmp(platform->name, dai_link->platform_name)) {
			rtd->platform = platform;
			goto out;
		}
	}
...
А вот и проблема. platform_list пуст. начал искать как заполняется. нашел файл linux-2.6\sound\soc\samsung\dma.c там
.....
static int __devinit samsung_asoc_platform_probe(struct platform_device *pdev)
{
//В эту функцию уже незаходит.
	return snd_soc_register_platform(&pdev->dev, &samsung_asoc_platform);
}

static int __devexit samsung_asoc_platform_remove(struct platform_device *pdev)
{
	snd_soc_unregister_platform(&pdev->dev);
	return 0;
}

static struct platform_driver asoc_dma_driver = {
	.driver = {
		.name = "samsung-audio",
		.owner = THIS_MODULE,
	},

	.probe = samsung_asoc_platform_probe,
	.remove = __devexit_p(samsung_asoc_platform_remove),
};

static int __init samsung_asoc_init(void)
{
//А вот эта выполняется
	return platform_driver_register(&asoc_dma_driver);
}
module_init(samsung_asoc_init);
....
Куда мне копать?

ЗЫ dai_link->platform_name = samsung-audio проверил. Тоесть надо добиться правильного заполнения platform_list но он вобще нехочет заполнтся(



Последнее исправление: a1ien_n3t (всего исправлений: 1)
Ответ на: комментарий от a1ien_n3t

там разница в цене весьма несущественна:
micro2440SDK + 3,5"LCD цена 1640 грн с НДС
tiny6410SDK + 4,3"LCD цена 1860 грн с НДС
но tiny6410 не устроил ибо на нем не разведен GPIO

теперь жду цену на mini6410. там камень более другого поколения, памяти больше и ддр. есть видеовыход. ядра более свежие от вендора и проч.

VladimirMalyk ★★★★★
()
Ответ на: SOLVED от a1ien_n3t

> Все проблемма решена.

Ну тогда вперёд - слать патчи в мэйнстрим :) Ещё есть шансы успеть протолкнуть в 2.6.38. Только разделить придётся - sound/soc в один патч, arch/arm/mach-s3c2440 в другой. И слать соответствующим мэйнтейнерам. И да - вот этот hunk ненужен:

 static int __devinit uda134x_codec_probe(struct platform_device *pdev)
+
 {

> Добавляем в /sound/soc/codecs/uda134x.c #define POWER_OFF_ON_STANDBY 1

Вот это вообще очень подозрительно. Предлагаю попинать Лайма Гирдвуда и спросить чего он имел в виду этим #ifdef-ом, добавив его в f0fba2ad.

mad_soft
()
Ответ на: комментарий от a1ien_n3t

А, ну ладно тогда - главное чтоб изыскания не пропали зря :)

А грязный хак с #define POWER_OFF_ON_STANDBY 1 в ядро точно не примут - скорее примут патч убирающий #ifdef

mad_soft
()
Ответ на: комментарий от mad_soft

ну это понятно. поэтому его туда и не направили. А хак делл больше на проверку что оно хотябы работает. Щас наверно буду разбираться для чего точно нужен этот дефайн

a1ien_n3t
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.