Commit 6f45eba1 authored by David S. Miller's avatar David S. Miller

Merge branch 'for-davem' of git://gitorious.org/linux-can/linux-can-next

Marc Kleine-Budde says:

====================
this is a pull-request for net-next/master. It consists of two patches
by Fabio Estevam, cleaning up the flexcan driver (remove default
pinctrl and switch to SIMPLE_DEV_PM_OPS). A patch by me to simplify the
Kconfig [1] handling for flexcan. And a patch by Jingoo Han that
converts the can drivers to use platform_{get,set}_drvdata().

[1] My patch touches arch/{arm,powerpc}, so I collected Acked-bys from
Arnd Bergmann, Shawn Guo and Benjamin Herrenschmidt.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 600fed5e 00e4bbc8
...@@ -111,7 +111,6 @@ config SOC_IMX25 ...@@ -111,7 +111,6 @@ config SOC_IMX25
select ARCH_MXC_IOMUX_V3 select ARCH_MXC_IOMUX_V3
select COMMON_CLK select COMMON_CLK
select CPU_ARM926T select CPU_ARM926T
select HAVE_CAN_FLEXCAN if CAN
select MXC_AVIC select MXC_AVIC
config SOC_IMX27 config SOC_IMX27
...@@ -137,7 +136,6 @@ config SOC_IMX35 ...@@ -137,7 +136,6 @@ config SOC_IMX35
select ARCH_MXC_IOMUX_V3 select ARCH_MXC_IOMUX_V3
select COMMON_CLK select COMMON_CLK
select CPU_V6K select CPU_V6K
select HAVE_CAN_FLEXCAN if CAN
select HAVE_EPIT select HAVE_EPIT
select MXC_AVIC select MXC_AVIC
select SMP_ON_UP if SMP select SMP_ON_UP if SMP
...@@ -776,7 +774,6 @@ comment "Device tree only" ...@@ -776,7 +774,6 @@ comment "Device tree only"
config SOC_IMX53 config SOC_IMX53
bool "i.MX53 support" bool "i.MX53 support"
select HAVE_CAN_FLEXCAN if CAN
select HAVE_IMX_SRC select HAVE_IMX_SRC
select IMX_HAVE_PLATFORM_IMX2_WDT select IMX_HAVE_PLATFORM_IMX2_WDT
select PINCTRL select PINCTRL
...@@ -799,7 +796,6 @@ config SOC_IMX6Q ...@@ -799,7 +796,6 @@ config SOC_IMX6Q
select CPU_V7 select CPU_V7
select HAVE_ARM_SCU if SMP select HAVE_ARM_SCU if SMP
select HAVE_ARM_TWD if LOCAL_TIMERS select HAVE_ARM_TWD if LOCAL_TIMERS
select HAVE_CAN_FLEXCAN if CAN
select HAVE_IMX_ANATOP select HAVE_IMX_ANATOP
select HAVE_IMX_GPC select HAVE_IMX_GPC
select HAVE_IMX_MMDC select HAVE_IMX_MMDC
......
...@@ -4,7 +4,6 @@ config IMX_HAVE_PLATFORM_FEC ...@@ -4,7 +4,6 @@ config IMX_HAVE_PLATFORM_FEC
config IMX_HAVE_PLATFORM_FLEXCAN config IMX_HAVE_PLATFORM_FLEXCAN
bool bool
select HAVE_CAN_FLEXCAN if CAN
config IMX_HAVE_PLATFORM_FSL_USB2_UDC config IMX_HAVE_PLATFORM_FSL_USB2_UDC
bool bool
......
...@@ -11,7 +11,6 @@ config SOC_IMX28 ...@@ -11,7 +11,6 @@ config SOC_IMX28
select ARM_AMBA select ARM_AMBA
select ARM_CPU_SUSPEND if PM select ARM_CPU_SUSPEND if PM
select CPU_ARM926T select CPU_ARM926T
select HAVE_CAN_FLEXCAN if CAN
select HAVE_PWM select HAVE_PWM
select PINCTRL_IMX28 select PINCTRL_IMX28
......
...@@ -674,7 +674,6 @@ config SBUS ...@@ -674,7 +674,6 @@ config SBUS
config FSL_SOC config FSL_SOC
bool bool
select HAVE_CAN_FLEXCAN if NET && CAN
config FSL_PCI config FSL_PCI
bool bool
......
...@@ -102,12 +102,9 @@ config CAN_JANZ_ICAN3 ...@@ -102,12 +102,9 @@ config CAN_JANZ_ICAN3
This driver can also be built as a module. If so, the module will be This driver can also be built as a module. If so, the module will be
called janz-ican3.ko. called janz-ican3.ko.
config HAVE_CAN_FLEXCAN
bool
config CAN_FLEXCAN config CAN_FLEXCAN
tristate "Support for Freescale FLEXCAN based chips" tristate "Support for Freescale FLEXCAN based chips"
depends on HAVE_CAN_FLEXCAN depends on ARM || PPC
---help--- ---help---
Say Y here if you want to support for Freescale FlexCAN. Say Y here if you want to support for Freescale FlexCAN.
......
...@@ -580,7 +580,7 @@ static int bfin_can_probe(struct platform_device *pdev) ...@@ -580,7 +580,7 @@ static int bfin_can_probe(struct platform_device *pdev)
priv->pin_list = pdata; priv->pin_list = pdata;
priv->can.clock.freq = get_sclk(); priv->can.clock.freq = get_sclk();
dev_set_drvdata(&pdev->dev, dev); platform_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
dev->flags |= IFF_ECHO; /* we support local echo */ dev->flags |= IFF_ECHO; /* we support local echo */
...@@ -613,7 +613,7 @@ static int bfin_can_probe(struct platform_device *pdev) ...@@ -613,7 +613,7 @@ static int bfin_can_probe(struct platform_device *pdev)
static int bfin_can_remove(struct platform_device *pdev) static int bfin_can_remove(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct bfin_can_priv *priv = netdev_priv(dev); struct bfin_can_priv *priv = netdev_priv(dev);
struct resource *res; struct resource *res;
...@@ -621,8 +621,6 @@ static int bfin_can_remove(struct platform_device *pdev) ...@@ -621,8 +621,6 @@ static int bfin_can_remove(struct platform_device *pdev)
unregister_candev(dev); unregister_candev(dev);
dev_set_drvdata(&pdev->dev, NULL);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(res->start, resource_size(res)); release_mem_region(res->start, resource_size(res));
...@@ -635,7 +633,7 @@ static int bfin_can_remove(struct platform_device *pdev) ...@@ -635,7 +633,7 @@ static int bfin_can_remove(struct platform_device *pdev)
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg) static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct bfin_can_priv *priv = netdev_priv(dev); struct bfin_can_priv *priv = netdev_priv(dev);
struct bfin_can_regs __iomem *reg = priv->membase; struct bfin_can_regs __iomem *reg = priv->membase;
int timeout = BFIN_CAN_TIMEOUT; int timeout = BFIN_CAN_TIMEOUT;
...@@ -658,7 +656,7 @@ static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg) ...@@ -658,7 +656,7 @@ static int bfin_can_suspend(struct platform_device *pdev, pm_message_t mesg)
static int bfin_can_resume(struct platform_device *pdev) static int bfin_can_resume(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct bfin_can_priv *priv = netdev_priv(dev); struct bfin_can_priv *priv = netdev_priv(dev);
struct bfin_can_regs __iomem *reg = priv->membase; struct bfin_can_regs __iomem *reg = priv->membase;
......
...@@ -265,7 +265,7 @@ static int cc770_isa_probe(struct platform_device *pdev) ...@@ -265,7 +265,7 @@ static int cc770_isa_probe(struct platform_device *pdev)
else else
priv->clkout = COR_DEFAULT; priv->clkout = COR_DEFAULT;
dev_set_drvdata(&pdev->dev, dev); platform_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
err = register_cc770dev(dev); err = register_cc770dev(dev);
...@@ -293,12 +293,11 @@ static int cc770_isa_probe(struct platform_device *pdev) ...@@ -293,12 +293,11 @@ static int cc770_isa_probe(struct platform_device *pdev)
static int cc770_isa_remove(struct platform_device *pdev) static int cc770_isa_remove(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct cc770_priv *priv = netdev_priv(dev); struct cc770_priv *priv = netdev_priv(dev);
int idx = pdev->id; int idx = pdev->id;
unregister_cc770dev(dev); unregister_cc770dev(dev);
dev_set_drvdata(&pdev->dev, NULL);
if (mem[idx]) { if (mem[idx]) {
iounmap(priv->reg_base); iounmap(priv->reg_base);
......
...@@ -216,7 +216,7 @@ static int cc770_platform_probe(struct platform_device *pdev) ...@@ -216,7 +216,7 @@ static int cc770_platform_probe(struct platform_device *pdev)
priv->reg_base, dev->irq, priv->can.clock.freq, priv->reg_base, dev->irq, priv->can.clock.freq,
priv->cpu_interface, priv->bus_config, priv->clkout); priv->cpu_interface, priv->bus_config, priv->clkout);
dev_set_drvdata(&pdev->dev, dev); platform_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
err = register_cc770dev(dev); err = register_cc770dev(dev);
...@@ -240,7 +240,7 @@ static int cc770_platform_probe(struct platform_device *pdev) ...@@ -240,7 +240,7 @@ static int cc770_platform_probe(struct platform_device *pdev)
static int cc770_platform_remove(struct platform_device *pdev) static int cc770_platform_remove(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct cc770_priv *priv = netdev_priv(dev); struct cc770_priv *priv = netdev_priv(dev);
struct resource *mem; struct resource *mem;
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pinctrl/consumer.h>
#define DRV_NAME "flexcan" #define DRV_NAME "flexcan"
...@@ -1004,16 +1003,11 @@ static int flexcan_probe(struct platform_device *pdev) ...@@ -1004,16 +1003,11 @@ static int flexcan_probe(struct platform_device *pdev)
struct flexcan_priv *priv; struct flexcan_priv *priv;
struct resource *mem; struct resource *mem;
struct clk *clk_ipg = NULL, *clk_per = NULL; struct clk *clk_ipg = NULL, *clk_per = NULL;
struct pinctrl *pinctrl;
void __iomem *base; void __iomem *base;
resource_size_t mem_size; resource_size_t mem_size;
int err, irq; int err, irq;
u32 clock_freq = 0; u32 clock_freq = 0;
pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
return PTR_ERR(pinctrl);
if (pdev->dev.of_node) if (pdev->dev.of_node)
of_property_read_u32(pdev->dev.of_node, of_property_read_u32(pdev->dev.of_node,
"clock-frequency", &clock_freq); "clock-frequency", &clock_freq);
...@@ -1137,10 +1131,10 @@ static int flexcan_remove(struct platform_device *pdev) ...@@ -1137,10 +1131,10 @@ static int flexcan_remove(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
static int flexcan_suspend(struct platform_device *pdev, pm_message_t state) static int flexcan_suspend(struct device *device)
{ {
struct net_device *dev = platform_get_drvdata(pdev); struct net_device *dev = dev_get_drvdata(device);
struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_priv *priv = netdev_priv(dev);
flexcan_chip_disable(priv); flexcan_chip_disable(priv);
...@@ -1154,9 +1148,9 @@ static int flexcan_suspend(struct platform_device *pdev, pm_message_t state) ...@@ -1154,9 +1148,9 @@ static int flexcan_suspend(struct platform_device *pdev, pm_message_t state)
return 0; return 0;
} }
static int flexcan_resume(struct platform_device *pdev) static int flexcan_resume(struct device *device)
{ {
struct net_device *dev = platform_get_drvdata(pdev); struct net_device *dev = dev_get_drvdata(device);
struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_priv *priv = netdev_priv(dev);
priv->can.state = CAN_STATE_ERROR_ACTIVE; priv->can.state = CAN_STATE_ERROR_ACTIVE;
...@@ -1168,21 +1162,19 @@ static int flexcan_resume(struct platform_device *pdev) ...@@ -1168,21 +1162,19 @@ static int flexcan_resume(struct platform_device *pdev)
return 0; return 0;
} }
#else #endif /* CONFIG_PM_SLEEP */
#define flexcan_suspend NULL
#define flexcan_resume NULL static SIMPLE_DEV_PM_OPS(flexcan_pm_ops, flexcan_suspend, flexcan_resume);
#endif
static struct platform_driver flexcan_driver = { static struct platform_driver flexcan_driver = {
.driver = { .driver = {
.name = DRV_NAME, .name = DRV_NAME,
.owner = THIS_MODULE, .owner = THIS_MODULE,
.pm = &flexcan_pm_ops,
.of_match_table = flexcan_of_match, .of_match_table = flexcan_of_match,
}, },
.probe = flexcan_probe, .probe = flexcan_probe,
.remove = flexcan_remove, .remove = flexcan_remove,
.suspend = flexcan_suspend,
.resume = flexcan_resume,
.id_table = flexcan_id_table, .id_table = flexcan_id_table,
}; };
......
...@@ -1646,7 +1646,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev, ...@@ -1646,7 +1646,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev,
if (err) if (err)
goto exit_free_candev; goto exit_free_candev;
dev_set_drvdata(&ofdev->dev, dev); platform_set_drvdata(ofdev, dev);
/* Reset device to allow bit-timing to be set. No need to call /* Reset device to allow bit-timing to be set. No need to call
* grcan_reset at this stage. That is done in grcan_open. * grcan_reset at this stage. That is done in grcan_open.
...@@ -1715,13 +1715,12 @@ static int grcan_probe(struct platform_device *ofdev) ...@@ -1715,13 +1715,12 @@ static int grcan_probe(struct platform_device *ofdev)
static int grcan_remove(struct platform_device *ofdev) static int grcan_remove(struct platform_device *ofdev)
{ {
struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct net_device *dev = platform_get_drvdata(ofdev);
struct grcan_priv *priv = netdev_priv(dev); struct grcan_priv *priv = netdev_priv(dev);
unregister_candev(dev); /* Will in turn call grcan_close */ unregister_candev(dev); /* Will in turn call grcan_close */
irq_dispose_mapping(dev->irq); irq_dispose_mapping(dev->irq);
dev_set_drvdata(&ofdev->dev, NULL);
netif_napi_del(&priv->napi); netif_napi_del(&priv->napi);
free_candev(dev); free_candev(dev);
......
...@@ -302,7 +302,7 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev) ...@@ -302,7 +302,7 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)
goto exit_free_mscan; goto exit_free_mscan;
} }
dev_set_drvdata(&ofdev->dev, dev); platform_set_drvdata(ofdev, dev);
dev_info(&ofdev->dev, "MSCAN at 0x%p, irq %d, clock %d Hz\n", dev_info(&ofdev->dev, "MSCAN at 0x%p, irq %d, clock %d Hz\n",
priv->reg_base, dev->irq, priv->can.clock.freq); priv->reg_base, dev->irq, priv->can.clock.freq);
...@@ -321,11 +321,9 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev) ...@@ -321,11 +321,9 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)
static int mpc5xxx_can_remove(struct platform_device *ofdev) static int mpc5xxx_can_remove(struct platform_device *ofdev)
{ {
struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct net_device *dev = platform_get_drvdata(ofdev);
struct mscan_priv *priv = netdev_priv(dev); struct mscan_priv *priv = netdev_priv(dev);
dev_set_drvdata(&ofdev->dev, NULL);
unregister_mscandev(dev); unregister_mscandev(dev);
iounmap(priv->reg_base); iounmap(priv->reg_base);
irq_dispose_mapping(dev->irq); irq_dispose_mapping(dev->irq);
...@@ -338,7 +336,7 @@ static int mpc5xxx_can_remove(struct platform_device *ofdev) ...@@ -338,7 +336,7 @@ static int mpc5xxx_can_remove(struct platform_device *ofdev)
static struct mscan_regs saved_regs; static struct mscan_regs saved_regs;
static int mpc5xxx_can_suspend(struct platform_device *ofdev, pm_message_t state) static int mpc5xxx_can_suspend(struct platform_device *ofdev, pm_message_t state)
{ {
struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct net_device *dev = platform_get_drvdata(ofdev);
struct mscan_priv *priv = netdev_priv(dev); struct mscan_priv *priv = netdev_priv(dev);
struct mscan_regs *regs = (struct mscan_regs *)priv->reg_base; struct mscan_regs *regs = (struct mscan_regs *)priv->reg_base;
...@@ -349,7 +347,7 @@ static int mpc5xxx_can_suspend(struct platform_device *ofdev, pm_message_t state ...@@ -349,7 +347,7 @@ static int mpc5xxx_can_suspend(struct platform_device *ofdev, pm_message_t state
static int mpc5xxx_can_resume(struct platform_device *ofdev) static int mpc5xxx_can_resume(struct platform_device *ofdev)
{ {
struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct net_device *dev = platform_get_drvdata(ofdev);
struct mscan_priv *priv = netdev_priv(dev); struct mscan_priv *priv = netdev_priv(dev);
struct mscan_regs *regs = (struct mscan_regs *)priv->reg_base; struct mscan_regs *regs = (struct mscan_regs *)priv->reg_base;
......
...@@ -197,7 +197,7 @@ static int sja1000_isa_probe(struct platform_device *pdev) ...@@ -197,7 +197,7 @@ static int sja1000_isa_probe(struct platform_device *pdev)
else else
priv->cdr = CDR_DEFAULT; priv->cdr = CDR_DEFAULT;
dev_set_drvdata(&pdev->dev, dev); platform_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
err = register_sja1000dev(dev); err = register_sja1000dev(dev);
...@@ -225,12 +225,11 @@ static int sja1000_isa_probe(struct platform_device *pdev) ...@@ -225,12 +225,11 @@ static int sja1000_isa_probe(struct platform_device *pdev)
static int sja1000_isa_remove(struct platform_device *pdev) static int sja1000_isa_remove(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct sja1000_priv *priv = netdev_priv(dev); struct sja1000_priv *priv = netdev_priv(dev);
int idx = pdev->id; int idx = pdev->id;
unregister_sja1000dev(dev); unregister_sja1000dev(dev);
dev_set_drvdata(&pdev->dev, NULL);
if (mem[idx]) { if (mem[idx]) {
iounmap(priv->reg_base); iounmap(priv->reg_base);
......
...@@ -72,13 +72,11 @@ static void sja1000_ofp_write_reg(const struct sja1000_priv *priv, ...@@ -72,13 +72,11 @@ static void sja1000_ofp_write_reg(const struct sja1000_priv *priv,
static int sja1000_ofp_remove(struct platform_device *ofdev) static int sja1000_ofp_remove(struct platform_device *ofdev)
{ {
struct net_device *dev = dev_get_drvdata(&ofdev->dev); struct net_device *dev = platform_get_drvdata(ofdev);
struct sja1000_priv *priv = netdev_priv(dev); struct sja1000_priv *priv = netdev_priv(dev);
struct device_node *np = ofdev->dev.of_node; struct device_node *np = ofdev->dev.of_node;
struct resource res; struct resource res;
dev_set_drvdata(&ofdev->dev, NULL);
unregister_sja1000dev(dev); unregister_sja1000dev(dev);
free_sja1000dev(dev); free_sja1000dev(dev);
iounmap(priv->reg_base); iounmap(priv->reg_base);
...@@ -181,7 +179,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev) ...@@ -181,7 +179,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
priv->reg_base, dev->irq, priv->can.clock.freq, priv->reg_base, dev->irq, priv->can.clock.freq,
priv->ocr, priv->cdr); priv->ocr, priv->cdr);
dev_set_drvdata(&ofdev->dev, dev); platform_set_drvdata(ofdev, dev);
SET_NETDEV_DEV(dev, &ofdev->dev); SET_NETDEV_DEV(dev, &ofdev->dev);
err = register_sja1000dev(dev); err = register_sja1000dev(dev);
......
...@@ -135,7 +135,7 @@ static int sp_probe(struct platform_device *pdev) ...@@ -135,7 +135,7 @@ static int sp_probe(struct platform_device *pdev)
break; break;
} }
dev_set_drvdata(&pdev->dev, dev); platform_set_drvdata(pdev, dev);
SET_NETDEV_DEV(dev, &pdev->dev); SET_NETDEV_DEV(dev, &pdev->dev);
err = register_sja1000dev(dev); err = register_sja1000dev(dev);
...@@ -161,12 +161,11 @@ static int sp_probe(struct platform_device *pdev) ...@@ -161,12 +161,11 @@ static int sp_probe(struct platform_device *pdev)
static int sp_remove(struct platform_device *pdev) static int sp_remove(struct platform_device *pdev)
{ {
struct net_device *dev = dev_get_drvdata(&pdev->dev); struct net_device *dev = platform_get_drvdata(pdev);
struct sja1000_priv *priv = netdev_priv(dev); struct sja1000_priv *priv = netdev_priv(dev);
struct resource *res; struct resource *res;
unregister_sja1000dev(dev); unregister_sja1000dev(dev);
dev_set_drvdata(&pdev->dev, NULL);
if (priv->reg_base) if (priv->reg_base)
iounmap(priv->reg_base); iounmap(priv->reg_base);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment