[rtc-linux] [PATCH] ARM: NUC900: add rtc controller driver support for NUC900
jack wang
jack_wang at usish.com
Mon Nov 23 04:59:58 EST 2009
Hi jack,
2009/11/23 jack wang <jack_wang at usish.com>:
> +static int __devinit nuc900_rtc_probe(struct platform_device *pdev)
> +{
> + struct resource *res;
> + struct nuc900_rtc *nuc900_rtc;
> + int err;
> +
> + nuc900_rtc = kzalloc(sizeof(struct nuc900_rtc), GFP_KERNEL);
> + if (!nuc900_rtc) {
> + err = -ENOMEM;
> + goto fail1;
> [jack] Here goto fail1 is not quite right, You'd better just return err
> instead or just use if (!nu900_rtc) return -ENOMEM;
Hmmm, good, it is right, but why did not 'CC' other people? :)
Thanks !
[Jack]I am not subscribe arm dev list, just review from
http://www.spinics.net/lists , but now CC'ing added :-)
Wang Jinpu
> + }
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!res) {
> + err = -ENXIO;
> + goto fail1;
> + }
> +
> + if (!request_mem_region(res->start, resource_size(res),
> + pdev->name)) {
> + err = -EBUSY;
> + goto fail1;
> + }
> +
> + nuc900_rtc->rtc_reg = ioremap(res->start, resource_size(res));
> + if (!nuc900_rtc->rtc_reg) {
> + err = -ENOMEM;
> + goto fail2;
> + }
> +
> + nuc900_rtc->irq_num = platform_get_irq(pdev, 0);
> + if (request_irq(nuc900_rtc->irq_num, nuc900_rtc_interrupt,
> + IRQF_DISABLED, "nuc900rtc", nuc900_rtc)) {
> + err = -EBUSY;
> + goto fail3;
> + }
> +
> + nuc900_rtc->rtcdev = rtc_device_register(pdev->name, &pdev->dev,
> + &nuc900_rtc_ops,
> THIS_MODULE);
> + if (IS_ERR(nuc900_rtc->rtcdev)) {
> + err = PTR_ERR(nuc900_rtc->rtcdev);
> + goto fail4;
> + }
> +
> + platform_set_drvdata(pdev, nuc900_rtc->rtcdev);
> + nuc900_rtc_enbale_timeirq(nuc900_rtc, 1);
> +
> + return 0;
> +
> +fail4: free_irq(nuc900_rtc->irq_num, nuc900_rtc);
> +fail3: iounmap(nuc900_rtc->rtc_reg);
> +fail2: release_mem_region(res->start, resource_size(res));
> +fail1: kfree(nuc900_rtc);
> + return err;
> +}
More information about the linux-arm-kernel
mailing list