diff options
Diffstat (limited to 'drivers/rtc/rtc-88pm860x.c')
| -rw-r--r-- | drivers/rtc/rtc-88pm860x.c | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/rtc/rtc-88pm860x.c b/drivers/rtc/rtc-88pm860x.c index f663746f460..0f2b91bfee3 100644 --- a/drivers/rtc/rtc-88pm860x.c +++ b/drivers/rtc/rtc-88pm860x.c @@ -318,14 +318,14 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  	pdata = pdev->dev.platform_data; -	info = kzalloc(sizeof(struct pm860x_rtc_info), GFP_KERNEL); +	info = devm_kzalloc(&pdev->dev, sizeof(struct pm860x_rtc_info), +			    GFP_KERNEL);  	if (!info)  		return -ENOMEM;  	info->irq = platform_get_irq(pdev, 0);  	if (info->irq < 0) {  		dev_err(&pdev->dev, "No IRQ resource!\n"); -		ret = -EINVAL; -		goto out; +		return info->irq;  	}  	info->chip = chip; @@ -333,12 +333,13 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  	info->dev = &pdev->dev;  	dev_set_drvdata(&pdev->dev, info); -	ret = request_threaded_irq(info->irq, NULL, rtc_update_handler, -				   IRQF_ONESHOT, "rtc", info); +	ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, +					rtc_update_handler, IRQF_ONESHOT, "rtc", +					info);  	if (ret < 0) {  		dev_err(chip->dev, "Failed to request IRQ: #%d: %d\n",  			info->irq, ret); -		goto out; +		return ret;  	}  	/* set addresses of 32-bit base value for RTC time */ @@ -350,7 +351,7 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  	ret = pm860x_rtc_read_time(&pdev->dev, &tm);  	if (ret < 0) {  		dev_err(&pdev->dev, "Failed to read initial time.\n"); -		goto out_rtc; +		return ret;  	}  	if ((tm.tm_year < 70) || (tm.tm_year > 138)) {  		tm.tm_year = 70; @@ -362,7 +363,7 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  		ret = pm860x_rtc_set_time(&pdev->dev, &tm);  		if (ret < 0) {  			dev_err(&pdev->dev, "Failed to set initial time.\n"); -			goto out_rtc; +			return ret;  		}  	}  	rtc_tm_to_time(&tm, &ticks); @@ -373,12 +374,12 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  		}  	} -	info->rtc_dev = rtc_device_register("88pm860x-rtc", &pdev->dev, +	info->rtc_dev = devm_rtc_device_register(&pdev->dev, "88pm860x-rtc",  					    &pm860x_rtc_ops, THIS_MODULE);  	ret = PTR_ERR(info->rtc_dev);  	if (IS_ERR(info->rtc_dev)) {  		dev_err(&pdev->dev, "Failed to register RTC device: %d\n", ret); -		goto out_rtc; +		return ret;  	}  	/* @@ -405,11 +406,6 @@ static int pm860x_rtc_probe(struct platform_device *pdev)  	device_init_wakeup(&pdev->dev, 1);  	return 0; -out_rtc: -	free_irq(info->irq, info); -out: -	kfree(info); -	return ret;  }  static int pm860x_rtc_remove(struct platform_device *pdev) @@ -423,9 +419,6 @@ static int pm860x_rtc_remove(struct platform_device *pdev)  #endif	/* VRTC_CALIBRATION */  	platform_set_drvdata(pdev, NULL); -	rtc_device_unregister(info->rtc_dev); -	free_irq(info->irq, info); -	kfree(info);  	return 0;  }  |