Hi Grant,

>> <...>
>> +#include <asm/mach-ath79/ath79_spi_platform.h>
>> +
>> +#define DRV_DESC    "SPI controller driver for Atheros AR71XX/AR724X/AR91X"
> 
> Used exactly once.  Don't bother with a #define

Ok.

>> +#define DRV_NAME    "ath79-spi"
>> +
>> +struct ath79_spi {
>> +    struct  spi_bitbang     bitbang;
>> +    u32                     ioc_base;
>> +    u32                     reg_ctrl;
>> +
>> +    void __iomem            *base;
>> +
>> +    struct platform_device  *pdev;
>> +};
>> +
>> +static inline u32 ath79_spi_rr(struct ath79_spi *sp, unsigned reg)
>> +{
>> +    return __raw_readl(sp->base + reg);
>> +}
>> +
>> +static inline void ath79_spi_wr(struct ath79_spi *sp, unsigned reg, u32 val)
>> +{
>> +    __raw_writel(val, sp->base + reg);
>> +}
> 
> This is suspect.  Why is __raw_{readl,writel} being used instead of
> ioread32/iowrite32?  The __raw versions don't provide any kind of
> ordering barriers.

Mainly because the resulting code is smaller, and the performance is a bit
better with the use of the __raw versions. The controller is embedded into the
SoC and the registers are memory mapped, so i think it is safe to access them
with __raw_{readl,writel}. However I can change it if that is the preferred 
method.

>> <...>
>> +static int ath79_spi_probe(struct platform_device *pdev)
> 
> __devinit

I will add this.

> 
>> +{
>> +    struct spi_master *master;
>> +    struct ath79_spi *sp;
>> +    struct ath79_spi_platform_data *pdata;
>> +    struct resource *r;
>> +    int ret;
>> +
>> +    master = spi_alloc_master(&pdev->dev, sizeof(*sp));
>> +    if (master == NULL) {
>> +            dev_err(&pdev->dev, "failed to allocate spi master\n");
>> +            return -ENOMEM;
>> +    }
>> +
>> +    sp = spi_master_get_devdata(master);
>> +    platform_set_drvdata(pdev, sp);
>> +
>> +    pdata = pdev->dev.platform_data;
>> +
>> +    master->setup = ath79_spi_setup;
>> +    master->cleanup = ath79_spi_cleanup;
>> +    if (pdata) {
>> +            master->bus_num = pdata->bus_num;
>> +            master->num_chipselect = pdata->num_chipselect;
>> +    } else {
>> +            master->bus_num = 0;
> 
> Use -1 so that a bus number can be dynamically assigned

All right.

>> <...>
>> +static int ath79_spi_remove(struct platform_device *pdev)
> 
> __devexit
> 
>> +{
>> +    struct ath79_spi *sp = platform_get_drvdata(pdev);
>> +
>> +    spi_bitbang_stop(&sp->bitbang);
>> +    iounmap(sp->base);
>> +    platform_set_drvdata(pdev, NULL);
>> +    spi_master_put(sp->bitbang.master);
>> +
>> +    return 0;
>> +}
>> +
>> +static struct platform_driver ath79_spi_drv = {
>> +    .probe          = ath79_spi_probe,
>> +    .remove         = ath79_spi_remove,
> 
> __devexit_p(ath79_spi_remove),
> 

I will add these annotations as well.

Thank you,
Gabor

------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to