On Mon, Sep 22, 2014 at 04:37:11PM +0530, Naidu Tellapati wrote:
> Hi Thierry,
> 
> Many thanks for your quick response.
> 
> There are total 4 blocks available on our SOC, those could be used
> either as PWM DAC (or) PDM DAC blocks. If one of them is used as a PWM
> DAC block, it can’t be used as a PDM block. As an example if the user
> wants, based on the configuration from the device tree, he could use
> all the 4 blocks as PWM DAC blocks (or) all 4 as PDM DAC blocks (or) 2
> PDM DAC blocks & 2 PDM blocks (or) any combination of these two types.
> Since there are 4 blocks available, total 16 combinations of these two
> types (PDM & PWM) are possible.
> 
> For example based on sort of channel mask defined in the device tree,
> If the user wishes to use the blocks as PWM DAC blocks, my driver
> exactly fits into linux PWM frame work. As usual, the PWM blocks
> expect the user to configure all the required configuration attributes
> (frequency, duty-cycle etc) as defined by the Linux PWM Framework.
> 
> Bu if the user wishes to use the blocks as PDM DAC blocks, my driver
> does not exactly fit into PWM framework. In this case the PDM DAC
> block takes only a 12 bit value (as input) program in one of the SOC
> configuration registers as an
> input and based on some simple internal logic, the block produces a
> form of analogue output according to the relative density of output
> pulses to the intended analogue signal amplitude. The width of the
> output pulse varies with the 12-bit value we program in one of the SOC
> configuration registers.
> 
> If the user wants to change the width of the output pulse, he has to
> program different values for 12-bit value. For example different
> 12-bit input values 0xFFF, 0x800, 0x0800, 0x0080, 0x0008, 0x001 will
> produce output pulses of totally different widths.

What's the relation of the 12-bit value to the resulting signal? Does
each bit in the value correspond to a fixed interval so that a one is
high and 0 low? That is, does:

        0x800 produce -___________
        0x080 produce ____-_______
        0x008 produce ________-___
        0x444 produce _-___-___-__
        0x555 produce _-_-_-_-_-_-
        0x00f produce ________----
        ...

? If so you can probably still mimic PWM behaviour by subdividing the
duty-cycle into 12 intervals.

> The idea is to implement a driver which could be upstream-able. I am
> trying to understand how I could use the existing PWM Framework to
> achieve this. If you think this does not fit into existing PWM
> Framework, I request you to please suggest me some better approach.

Even if you can't mimic PWM using PDM it's still possible to use a PWM
driver only if all channels are configured in PWM mode.

Thierry

Attachment: pgpvvOsdW9l74.pgp
Description: PGP signature

Reply via email to