On Wed, Apr 13, 2016 at 06:52:58PM +0530, Purna Chandra Mandal wrote:

> +     enable = readl(sqi->regs + PESQI_INT_ENABLE_REG);
> +     status = readl(sqi->regs + PESQI_INT_STAT_REG);
> +     if (!status)
> +             return IRQ_NONE;
> +

For robustness the check should be if there was anything handled, not if
there was anything set.

> +static dma_addr_t pic32_sqi_map_transfer(struct pic32_sqi *sqi,
> +                                      struct spi_transfer *transfer)
> +{
> +     struct device *dev = &sqi->master->dev;

Don't open code DMA mapping of the buffers, use the core support.

> +     reg = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +     sqi->regs = devm_ioremap_resource(&pdev->dev, reg);
> +     if (!sqi->regs) {
> +             dev_err(&pdev->dev, "mem map failed\n");

devm_ioremap_resource() will log for you.

> +     clk_prepare_enable(sqi->sys_clk);
> +     clk_prepare_enable(sqi->base_clk);

Check the return value please.

> +     /* install irq handlers */
> +     ret = devm_request_irq(&pdev->dev, sqi->irq, pic32_sqi_isr,
> +                            0, dev_name(&pdev->dev), sqi);
> +     if (ret < 0) {
> +             dev_err(&pdev->dev, "request-irq %d, failed ?\n", sqi->irq);
> +             goto err_free_ring;
> +     }

This will free before the clocks are disabled.  Are you sure that's
safe?  It's generally not good to mix devm_ and non-devm operations
especially things like these that aren't simple frees of data.  It is
safer to use a normal request_irq().

> +static int pic32_sqi_remove(struct platform_device *pdev)
> +{
> +     struct pic32_sqi *sqi = platform_get_drvdata(pdev);
> +
> +     clk_disable_unprepare(sqi->base_clk);
> +     clk_disable_unprepare(sqi->sys_clk);
> +
> +     /* release memory */
> +     ring_desc_ring_free(sqi);

This will free the descriptor ring before the interrupt...

Attachment: signature.asc
Description: PGP signature

Reply via email to