[PATCH 1/3] mfd: Add realtek USB card reader driver

Lee Jones lee.jones at linaro.org
Tue Jan 14 14:15:23 UTC 2014


> [ Sorry, I am coming down with the flu today so I'm doing dorky things
>   like reviewing review comments.  I'm not sure how coherent I am.  ]

Always welcome.

NB: I did this review in double-quick time, which may account for some
of the weird thought processes (or lack there of).

> > > +static void rtsx_usb_sg_timed_out(unsigned long data)
> > > +{
> > > +	struct rtsx_ucr *ucr = (struct rtsx_ucr *)data;
> > 
> > What's going to happen when your device runs 64bit?
> > 
> 
> I'm not sure I understand what you mean here.  On linux sizeof(long) is
> always the same as sizeof(void *).

I had an odd moment where I thought we'd need long long for 64bit.

Nevermind.

> > > +	if (cmd_len > IOBUF_SIZE)
> > > +		return -EINVAL;
> > > +
> > > +	if (cmd_len % 4)
> > > +		cmd_len += (4 - cmd_len % 4);
> > 
> > Please document in a comment.
> 
> There is a kernel macro for this:
> 
> 	cmd_len = ALIGN(cmd_len, 4);
> 
> 	if (cmd_len > IOBUF_SIZE)
> 		return -EINVAL;

I had a feeling this was the intention, hence why I was asking for a
comment. But yes, if all this is doing is alignment then the kernel
macro is preferred.

> > > +
> > > +
> > 
> > Extra '/n'
> > 
> 
> It weirds me out when you mix up '\n' and /n'.

Typos happen on occasion...

> > > +int rtsx_usb_ep0_write_register(struct rtsx_ucr *ucr, u16 addr,
> > > +		u8 mask, u8 data)
> > > +{
> > > +	u16 value = 0, index = 0;
> > > +
> > > +	value |= 0x03 << 14;
> > > +	value |= addr & 0x3FFF;
> > > +	value = ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF);
> > > +	index |= (u16)mask;
> > > +	index |= (u16)data << 8;
> > 
> > Lots of random numbers here, please #define for clarity and ease of
> > reading.
> > 
> 
> The only really random number is the 0x03, but yeah, it would help if
> that we a define.

See ---^

As I say, I just glossed over the code, thus didn't spend the time to
work out the arithmetic. Now I do, most of it is pretty self
explanatory. I would also like to see the SHIFT #defined, although
this may become superfluous once the 0x03 is clarified.

> 	addr |= 0x03 << 14;
> 
> 	value = __swab16(addr);
> 	index = mask | (data << 8);

This is 100% better/clearer.

> > > +
> > > +	dev_dbg(&intf->dev,
> > > +		": Realtek USB Card Reader found at bus %03d address %03d\n",
> > > +		 usb_dev->bus->busnum, usb_dev->devnum);
> > > +
> > > +	ucr = kzalloc(sizeof(struct rtsx_ucr), GFP_KERNEL);
> > 
> > s/struct rtsx_ucr/*ucr/
> > 
> > Any reason for not using managed resources?
> > 
> Roger, he means the devm_kzalloc().

That I do.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog


More information about the devel mailing list