Mainline:Broadcom Kona/BCM590xx/Regulators: Difference between revisions

Created page with "== Revisions == BCMPMU_59054_ID is ID for 59054 BCMPMU_59054A1_ANA_REV refers to A1 which has ACLD, A0 does not == Downstream driver notes == * The downstream driver used is BCM59xxx, which despite the name is only for the BCM59054 ** In the tree there are also drivers for BCM59056, a handful of other PMUs including BCM59055, and BCM590xx (which confusingly is '''not''' the same as BCM59xxx). * The whole driver is fragmented as it's an MFD device, but the most import..."
 
No edit summary
Line 53: Line 53:
};   
};   
</syntaxhighlight>
</syntaxhighlight>
...a PC reference? You'll see these in the next section.
...a PC reference? You'll see these in the next section.


Line 70: Line 71:
The functions <code>__is_2bit_pmmode_regl_enabled</code> and <code>__is_3bit_pmmode_regl_enabled</code> check if a regulator is enabled based on those pin maps, and the <code>pmmode</code> value as read out from the PMMODE registers.
The functions <code>__is_2bit_pmmode_regl_enabled</code> and <code>__is_3bit_pmmode_regl_enabled</code> check if a regulator is enabled based on those pin maps, and the <code>pmmode</code> value as read out from the PMMODE registers.


For every <code>i</code> from 0 to 7 (<code>REGL_PMMODE_VAL_MAX</code>): * get the PM reg shift by <code>PMMODE_2BIT_PMx_MASK & i</code> (PMMODE_2BIT_PMx_MASK == 3) * if this <code>i</code> gives a value through <code>setval & i</code> in set0 or set1, then the value of whether the regulator is enabled is calculated using <code>PMMODE_2BIT_PMx_MASK & (pmmode[inx] >> shift)</code>, where <code>inx</code> is increased for every value where <code>PMMODE_2BIT_PMx_MASK & i</code> == 3.
For every <code>i</code> from 0 to 7 (<code>REGL_PMMODE_VAL_MAX</code>):
 
* get the PM reg shift by <code>PMMODE_2BIT_PMx_MASK & i</code> (PMMODE_2BIT_PMx_MASK == 3)
* if this <code>i</code> gives a value through <code>setval & i</code> in set0 or set1, then the value of whether the regulator is enabled is calculated using <code>PMMODE_2BIT_PMx_MASK & (pmmode[inx] >> shift)</code>, where <code>inx</code> is increased for every value where <code>PMMODE_2BIT_PMx_MASK & i</code> == 3.


In normal words: if the mode corresponding to the pin in ''any'' of the PMMODE registers is ON, then the regulator is on.
In normal words: if the mode corresponding to the pin in ''any'' of the PMMODE registers is ON, then the regulator is on.
Line 107: Line 111:
This one's similar to the previous function:
This one's similar to the previous function:


For every <code>i</code> from 0 to 7 (<code>REGL_PMMODE_VAL_MAX</code>): * If the value is in set0 or set1, set the value to <code>PMMODE_ON</code>; otherwise, use '''<code>dsm_pmmode</code>''' (a variable passed at init time). Oooh, DSM again! * Figure out the shift and register like before. * Add the value to a temp variable by ORing <code>val << shift</code> to it.
For every <code>i</code> from 0 to 7 (<code>REGL_PMMODE_VAL_MAX</code>):
 
* If the value is in set0 or set1, set the value to <code>PMMODE_ON</code>; otherwise, use '''<code>dsm_pmmode</code>''' (a variable passed at init time). Oooh, DSM again!
* Figure out the shift and register like before.
* Add the value to a temp variable by ORing <code>val << shift</code> to it.


Here's the thing: <code>dsm_pmmode</code>... is the mode value provided in <code>__bcmpmuldo_set_mode</code>.
Here's the thing: <code>dsm_pmmode</code>... is the mode value provided in <code>__bcmpmuldo_set_mode</code>.