Message ID | 1312815586-25756-1-git-send-email-bhaskar.upadhaya@freescale.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On 08/08/2011 04:59 PM, Bhaskar Upadhaya wrote: > - Rearrange header file so that it can be used by both of_ type > and platform_ type architecture. > - Provide a common read and write interface for of_ type and platform_ > type architecture for accessing h/w registers. > Signed-off-by: Bhaskar Upadhaya <bhaskar.upadhaya@freescale.com> NACK - please have a look at Robin's patches. They are in a much better shape. cheers, Marc > --- > Based on http://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git > Branch master > > include/linux/can/platform/flexcan.h | 65 ++++++++++++++++++++++++++++++++++ > 1 files changed, 65 insertions(+), 0 deletions(-) > > diff --git a/include/linux/can/platform/flexcan.h b/include/linux/can/platform/flexcan.h > index 72b713a..8458a87 100644 > --- a/include/linux/can/platform/flexcan.h > +++ b/include/linux/can/platform/flexcan.h > @@ -1,5 +1,6 @@ > /* > * Copyright (C) 2010 Marc Kleine-Budde <kernel@pengutronix.de> > + * Copyright 2011 Freescale Semiconductor, Inc. > * > * This file is released under the GPLv2 > * > @@ -8,6 +9,27 @@ > #ifndef __CAN_PLATFORM_FLEXCAN_H > #define __CAN_PLATFORM_FLEXCAN_H > > +#include <linux/clk.h> > +#include <linux/can/dev.h> > +#include <linux/io.h> > + > +#ifdef CONFIG_OF > +#include<linux/of_platform.h> > +#else > +#include <linux/platform_device.h> > +#include <mach/clock.h> > +#endif > + > +#define DRV_NAME "flexcan" > + > +#ifdef __BIG_ENDIAN > +#define flexcan_read(x) in_be32(x) > +#define flexcan_write(x, y) out_be32(y, x) > +#else > +#define flexcan_read(x) readl(x) > +#define flexcan_write(x, y) writel(x, y) > +#endif > + > /** > * struct flexcan_platform_data - flex CAN controller platform data > * @transceiver_enable: - called to power on/off the transceiver > @@ -17,4 +39,47 @@ struct flexcan_platform_data { > void (*transceiver_switch)(int enable); > }; > > +struct flexcan_interface { > + int (*clk_enable) (struct clk *clk); > + void (*clk_disable) (struct clk *clk); > + void (*clk_put) (struct clk *clk); > + unsigned long (*clk_get_rate) (struct clk *clk); > + struct clk *(*clk_get) (struct device *dev, const char *id); > +}; > + > +struct flexcan_resource { > + u32 irq; > + u64 addr; > + u64 size; > + const char *drv_name; > +}; > + > +#ifdef CONFIG_OF > +struct clk { > + unsigned long rate; > + void *data; > +}; > +#endif > + > +struct flexcan_priv { > + struct can_priv can; > + struct net_device *dev; > + struct napi_struct napi; > + > + void __iomem *base; > + u32 reg_esr; > + u32 reg_ctrl_default; > + > + struct clk *clk; > + struct flexcan_interface *flexcan_ops; > + struct flexcan_platform_data *pdata; > +}; > + > +int flexcan_dev_init(struct device *pdev, struct flexcan_resource > + flexcan_res, struct flexcan_interface *flexcan_ops); > + > +void __devexit unregister_flexcandev(struct net_device *dev); > + > +void flexcan_reg_dump(struct net_device *dev); > + > #endif /* __CAN_PLATFORM_FLEXCAN_H */
diff --git a/include/linux/can/platform/flexcan.h b/include/linux/can/platform/flexcan.h index 72b713a..8458a87 100644 --- a/include/linux/can/platform/flexcan.h +++ b/include/linux/can/platform/flexcan.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2010 Marc Kleine-Budde <kernel@pengutronix.de> + * Copyright 2011 Freescale Semiconductor, Inc. * * This file is released under the GPLv2 * @@ -8,6 +9,27 @@ #ifndef __CAN_PLATFORM_FLEXCAN_H #define __CAN_PLATFORM_FLEXCAN_H +#include <linux/clk.h> +#include <linux/can/dev.h> +#include <linux/io.h> + +#ifdef CONFIG_OF +#include<linux/of_platform.h> +#else +#include <linux/platform_device.h> +#include <mach/clock.h> +#endif + +#define DRV_NAME "flexcan" + +#ifdef __BIG_ENDIAN +#define flexcan_read(x) in_be32(x) +#define flexcan_write(x, y) out_be32(y, x) +#else +#define flexcan_read(x) readl(x) +#define flexcan_write(x, y) writel(x, y) +#endif + /** * struct flexcan_platform_data - flex CAN controller platform data * @transceiver_enable: - called to power on/off the transceiver @@ -17,4 +39,47 @@ struct flexcan_platform_data { void (*transceiver_switch)(int enable); }; +struct flexcan_interface { + int (*clk_enable) (struct clk *clk); + void (*clk_disable) (struct clk *clk); + void (*clk_put) (struct clk *clk); + unsigned long (*clk_get_rate) (struct clk *clk); + struct clk *(*clk_get) (struct device *dev, const char *id); +}; + +struct flexcan_resource { + u32 irq; + u64 addr; + u64 size; + const char *drv_name; +}; + +#ifdef CONFIG_OF +struct clk { + unsigned long rate; + void *data; +}; +#endif + +struct flexcan_priv { + struct can_priv can; + struct net_device *dev; + struct napi_struct napi; + + void __iomem *base; + u32 reg_esr; + u32 reg_ctrl_default; + + struct clk *clk; + struct flexcan_interface *flexcan_ops; + struct flexcan_platform_data *pdata; +}; + +int flexcan_dev_init(struct device *pdev, struct flexcan_resource + flexcan_res, struct flexcan_interface *flexcan_ops); + +void __devexit unregister_flexcandev(struct net_device *dev); + +void flexcan_reg_dump(struct net_device *dev); + #endif /* __CAN_PLATFORM_FLEXCAN_H */
- Rearrange header file so that it can be used by both of_ type and platform_ type architecture. - Provide a common read and write interface for of_ type and platform_ type architecture for accessing h/w registers. Signed-off-by: Bhaskar Upadhaya <bhaskar.upadhaya@freescale.com> --- Based on http://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git Branch master include/linux/can/platform/flexcan.h | 65 ++++++++++++++++++++++++++++++++++ 1 files changed, 65 insertions(+), 0 deletions(-)