[PATCH 28/61] Add cpm2_set_pin().

Scott Wood scottwood at freescale.com
Thu Jul 19 04:51:55 EST 2007


Kumar Gala wrote:
> On Jul 17, 2007, at 8:35 PM, Scott Wood wrote:
>> +
>> +struct cpm2_ioports {
>> +    u32    dir, par, sor, odr, dat;
> 
> __be32?

OK.

>> +    u32    res[3];
>> +};
>> +
>> +void cpm2_set_pin(int port, int pin, int flags)
> 
> 
> Can we make the function take a pointer to the port directly?

I'd rather not -- it'd require the caller to use the immr struct 
directly, and either have no type checking, or different functions for 
different types of ports (on 8xx).

>> +{
>> +    struct cpm2_ioports __iomem *iop =
>> +        (struct cpm_ioports __iomem *)&cpm2_immr->im_ioport;
>> +
>> +    pin = 1 << (31 - pin);
>> +
>> +    if (flags & CPM_PIN_OUTPUT)
>> +        setbits32(&iop[port].dir, pin);
>> +    else
>> +        clrbits32(&iop[port].dir, pin);
>> +
>> +    if (!(flags & CPM_PIN_GPIO))
>> +        setbits32(&iop[port].par, pin);
>> +    else
>> +        clrbits32(&iop[port].par, pin);
>> +
>> +    if (flags & CPM_PIN_SECONDARY)
>> +        setbits32(&iop[port].sor, pin);
>> +    else
>> +        clrbits32(&iop[port].sor, pin);
> 
> 
> should we only do this if !(flags & CPM_PIN_GPIO)?

I don't think it matters.

> Any reason we don't also set odr here?

It wasn't clear to me when we need to set it.  I can add a flag for it, 
though.

-Scott



More information about the Linuxppc-dev mailing list