Hi,

I wasn't aware that MPC5200 differ from MPC5200B in this regard. I also
couldn't find any MPC5200 user manual on Freescale's webpage.
Is there a #define that I can use to distinguish between the two
processor variants? Querying the PVR register is not a nice solution
because the chip-select activate function is called in some scenarios
quite often.

Regards,
Dragos


On 09/16/2009 10:48 PM, Wolfram Sang wrote:
> Hi,
>
> adding powerpc-list and Grant to cc.
>
> On Wed, Sep 16, 2009 at 01:07:50PM +0200, Dragos Carp wrote:
>   
>> allow spi clock values bellow 78kbps down to ca. 300bps
>>     
> Looks like your patch converts the driver from mpc5200 to mpc5200b? If this is
> really all which is needed, it should support both versions, I think.
>
> Regards,
>
>    Wolfram
>
>   
>> Signed-off-by: Dragos Carp <dragos.c...@toptica.com>
>> ---
>>  mpc52xx_psc_spi.c |   26 +++++++++++++-------------
>>  1 file changed, 13 insertions(+), 13 deletions(-)
>>
>>     
>   
>> diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
>> index 1b74d5c..b15882a 100644
>> --- a/drivers/spi/mpc52xx_psc_spi.c
>> +++ b/drivers/spi/mpc52xx_psc_spi.c
>> @@ -78,7 +78,8 @@ static void mpc52xx_psc_spi_activate_cs(struct spi_device 
>> *spi)
>>      struct mpc52xx_psc_spi *mps = spi_master_get_devdata(spi->master);
>>      struct mpc52xx_psc __iomem *psc = mps->psc;
>>      u32 sicr;
>> -    u16 ccr;
>> +    u32 ccr;
>> +    u32 bitclkdiv;
>>  
>>      sicr = in_be32(&psc->sicr);
>>  
>> @@ -98,17 +99,16 @@ static void mpc52xx_psc_spi_activate_cs(struct 
>> spi_device *spi)
>>              sicr &= ~0x10000000;
>>      out_be32(&psc->sicr, sicr);
>>  
>> -    /* Set clock frequency and bits per word
>> -     * Because psc->ccr is defined as 16bit register instead of 32bit
>> -     * just set the lower byte of BitClkDiv
>> -     */
>> -    ccr = in_be16((u16 __iomem *)&psc->ccr);
>> -    ccr &= 0xFF00;
>> -    if (cs->speed_hz)
>> -            ccr |= (MCLK / cs->speed_hz - 1) & 0xFF;
>> -    else /* by default SPI Clk 1MHz */
>> -            ccr |= (MCLK / 1000000 - 1) & 0xFF;
>> -    out_be16((u16 __iomem *)&psc->ccr, ccr);
>> +    /* Set clock frequency */
>> +    bitclkdiv = MCLK / (cs->speed_hz ? cs->speed_hz : 1000000) - 1;
>> +    bitclkdiv &= 0xFFFF;
>> +    bitclkdiv |= (bitclkdiv & 0xFF) << 16;  /* byte swapped */
>> +    bitclkdiv &= 0x00FFFF00;
>> +    ccr = in_be32(&psc->ccr);
>> +    ccr &= 0xFF0000FF;
>> +    ccr |= bitclkdiv;
>> +    out_be32(&psc->ccr, ccr);
>> +    
>>      mps->bits_per_word = cs->bits_per_word;
>>  
>>      if (mps->cs_control)
>> @@ -333,7 +333,7 @@ static int mpc52xx_psc_spi_port_config(int psc_id, 
>> struct mpc52xx_psc_spi *mps)
>>      /* Configure 8bit codec mode as a SPI master and use EOF flags */
>>      /* SICR_SIM_CODEC8|SICR_GENCLK|SICR_SPI|SICR_MSTR|SICR_USEEOF */
>>      out_be32(&psc->sicr, 0x0180C800);
>> -    out_be16((u16 __iomem *)&psc->ccr, 0x070F); /* default SPI Clk 1MHz */
>> +    out_be32(&psc->ccr, 0x07130000); /* default SPI Clk 1MHz */
>>  
>>      /* Set 2ms DTL delay */
>>      out_8(&psc->ctur, 0x00);
>>     
>   


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to