[alsa-devel] [PATCH v2 2/6] ASoC: sirf: add I2S CPU DAI driver
Barry Song
21cnbao at gmail.com
Mon Oct 28 09:58:41 CET 2013
2013/10/28 Lars-Peter Clausen <lars at metafoo.de>:
> On 10/28/2013 09:32 AM, Barry Song wrote:
>> 2013/10/28 Lars-Peter Clausen <lars at metafoo.de>:
>>> On 10/27/2013 11:37 PM, Barry Song wrote:
>>>> +struct snd_soc_dai_ops sirfsoc_i2s_dai_ops = {
>>>
>>> static const
>>>
>>> Building your driver with sparse (`make C=2 ...`) will tell you these things.
>>>
>>>> + .startup = sirf_i2s_startup,
>>>> + .shutdown = sirf_i2s_shutdown,
>>>> + .trigger = sirf_i2s_trigger,
>>>> + .hw_params = sirf_i2s_hw_params,
>>>> + .set_fmt = sirf_i2s_set_dai_fmt,
>>>> + .set_clkdiv = sirf_i2s_set_clkdiv,
>>>> +};
>>>> +
>>> [...]
>>>> +
>>>> +static int sirf_i2s_probe(struct platform_device *pdev)
>>>> +{
>>>> + struct sirf_i2s *si2s;
>>>> + u32 rx_dma_ch, tx_dma_ch;
>>>> + int ret;
>>>> + struct resource mem_res;
>>>> +
>>>> + si2s = devm_kzalloc(&pdev->dev, sizeof(struct sirf_i2s),
>>>> + GFP_KERNEL);
>>>> + if (!si2s)
>>>> + return -ENOMEM;
>>>> +
>>>> + si2s->sirf_pcm_pdev = platform_device_register_simple("sirf-pcm-audio",
>>>> + 0, NULL, 0);
>>>> + if (IS_ERR(si2s->sirf_pcm_pdev))
>>>> + return PTR_ERR(si2s->sirf_pcm_pdev);
>>>> +
>>>> + platform_set_drvdata(pdev, si2s);
>>>> +
>>>> + spin_lock_init(&si2s->lock);
>>>> +
>>>> + ret = of_property_read_u32(pdev->dev.of_node,
>>>> + "sirf,i2s-dma-rx-channel", &rx_dma_ch);
>>>> + if (ret < 0) {
>>>> + dev_err(&pdev->dev, "Unable to USP0 rx dma channel\n");
>>>> + return ret;
>>>> + }
>>>> + ret = of_property_read_u32(pdev->dev.of_node,
>>>> + "sirf,i2s-dma-tx-channel", &tx_dma_ch);
>>>> + if (ret < 0) {
>>>> + dev_err(&pdev->dev, "Unable to USP0 tx dma channel\n");
>>>> + return ret;
>>>> + }
>>>> +
>>>> + dma_data[0].filter_data = (void *)tx_dma_ch;
>>>> + dma_data[1].filter_data = (void *)rx_dma_ch;
>>>
>>> This should be using the standard DMA OF bindings. This combind with the
>>> recent changes to the generic dmaengine PCM driver, which added support for
>>> querying certain parameters (like max period length) from the dmaengine
>>> driver, will allow you to completely remove your custom PCM code. You'd
>>> basically just need to call "snd_dmaengine_pcm_register(&pdev->dev, NULL)"
>>> here in the I2S driver.
>>>
>>> This will require some changes to your dmaengine driver though. You need to
>>> implement the of_xlate callback for the generic DMA bindings and the
>>> device_slave_caps API for being able to query the capabilities from the driver.
>>
>> i am really happy to have that as for clock, gpio, pinctrl, all of
>> them we have the binding.
>> here the problem is we can't implement this in this driver as there
>> are still many drivers depending on the sirf-dma changes.
>>
>> so our point is keeping the things as is here. and we have another
>> patchset of dt binding for sirf-dma and all drivers depending sirf-dma
>> driver.
>
> I don't think this is a good idea. Adding of_xlate support to the DMA driver
> is a 10 line patch at most. And there is no compile time dependency between
> the DMA driver changes and using the generic DMA bindings in this driver, so
> this driver does not have to wait for the changes to the DMA driver to be
> merged first.
if we don't wait dma driver and other drivers using sirf-dma to be
merged before merging sound, it is ok to me to have of_xlate support
at first.
>
> I'm fine with having the device_slave_caps stuff added in a later patch, but
> adding custom DMA bindings at this point is in my opinion a no-go.
> Especially if you consider that DT bindings are considered ABI by some people.
>
> Btw. the DT bindings documentation for this driver seems to be missing.
fine. take it into v3 then.
>
> - Lars
>
-barry
More information about the Alsa-devel
mailing list