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
pgpvvOsdW9l74.pgp
Description: PGP signature
