The probe function of the pdc platform driver lives in the init section and so a pdc device that is created after the init section is discarded probably results in an oops. Even if this cannot happen, using platform_driver_probe is cleaner. (If this can happen and should be supported the probe function must live in the devinit section instead.) Signed-off-by: Uwe Kleine-König <ukleinek@strlen.de> Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C) 2006 Atmel Corporation
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU General Public License version 2 as
 | 
						|
 * published by the Free Software Foundation.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/clk.h>
 | 
						|
#include <linux/err.h>
 | 
						|
#include <linux/init.h>
 | 
						|
#include <linux/platform_device.h>
 | 
						|
 | 
						|
static int __init pdc_probe(struct platform_device *pdev)
 | 
						|
{
 | 
						|
	struct clk *pclk, *hclk;
 | 
						|
 | 
						|
	pclk = clk_get(&pdev->dev, "pclk");
 | 
						|
	if (IS_ERR(pclk)) {
 | 
						|
		dev_err(&pdev->dev, "no pclk defined\n");
 | 
						|
		return PTR_ERR(pclk);
 | 
						|
	}
 | 
						|
	hclk = clk_get(&pdev->dev, "hclk");
 | 
						|
	if (IS_ERR(hclk)) {
 | 
						|
		dev_err(&pdev->dev, "no hclk defined\n");
 | 
						|
		clk_put(pclk);
 | 
						|
		return PTR_ERR(hclk);
 | 
						|
	}
 | 
						|
 | 
						|
	clk_enable(pclk);
 | 
						|
	clk_enable(hclk);
 | 
						|
 | 
						|
	dev_info(&pdev->dev, "Atmel Peripheral DMA Controller enabled\n");
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static struct platform_driver pdc_driver = {
 | 
						|
	.driver		= {
 | 
						|
		.name	= "pdc",
 | 
						|
	},
 | 
						|
};
 | 
						|
 | 
						|
static int __init pdc_init(void)
 | 
						|
{
 | 
						|
	return platform_driver_probe(&pdc_driver, pdc_probe);
 | 
						|
}
 | 
						|
arch_initcall(pdc_init);
 |