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: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
6f45eba189
|
@ -111,7 +111,6 @@ config SOC_IMX25
|
|||
select ARCH_MXC_IOMUX_V3
|
||||
select COMMON_CLK
|
||||
select CPU_ARM926T
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
select MXC_AVIC
|
||||
|
||||
config SOC_IMX27
|
||||
|
@ -137,7 +136,6 @@ config SOC_IMX35
|
|||
select ARCH_MXC_IOMUX_V3
|
||||
select COMMON_CLK
|
||||
select CPU_V6K
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
select HAVE_EPIT
|
||||
select MXC_AVIC
|
||||
select SMP_ON_UP if SMP
|
||||
|
@ -776,7 +774,6 @@ comment "Device tree only"
|
|||
|
||||
config SOC_IMX53
|
||||
bool "i.MX53 support"
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
select HAVE_IMX_SRC
|
||||
select IMX_HAVE_PLATFORM_IMX2_WDT
|
||||
select PINCTRL
|
||||
|
@ -799,7 +796,6 @@ config SOC_IMX6Q
|
|||
select CPU_V7
|
||||
select HAVE_ARM_SCU if SMP
|
||||
select HAVE_ARM_TWD if LOCAL_TIMERS
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
select HAVE_IMX_ANATOP
|
||||
select HAVE_IMX_GPC
|
||||
select HAVE_IMX_MMDC
|
||||
|
|
|
@ -4,7 +4,6 @@ config IMX_HAVE_PLATFORM_FEC
|
|||
|
||||
config IMX_HAVE_PLATFORM_FLEXCAN
|
||||
bool
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
|
||||
config IMX_HAVE_PLATFORM_FSL_USB2_UDC
|
||||
bool
|
||||
|
|
|
@ -11,7 +11,6 @@ config SOC_IMX28
|
|||
select ARM_AMBA
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select CPU_ARM926T
|
||||
select HAVE_CAN_FLEXCAN if CAN
|
||||
select HAVE_PWM
|
||||
select PINCTRL_IMX28
|
||||
|
||||
|
|
|
@ -674,7 +674,6 @@ config SBUS
|
|||
|
||||
config FSL_SOC
|
||||
bool
|
||||
select HAVE_CAN_FLEXCAN if NET && CAN
|
||||
|
||||
config FSL_PCI
|
||||
bool
|
||||
|
|
|
@ -102,12 +102,9 @@ config CAN_JANZ_ICAN3
|
|||
This driver can also be built as a module. If so, the module will be
|
||||
called janz-ican3.ko.
|
||||
|
||||
config HAVE_CAN_FLEXCAN
|
||||
bool
|
||||
|
||||
config CAN_FLEXCAN
|
||||
tristate "Support for Freescale FLEXCAN based chips"
|
||||
depends on HAVE_CAN_FLEXCAN
|
||||
depends on ARM || PPC
|
||||
---help---
|
||||
Say Y here if you want to support for Freescale FlexCAN.
|
||||
|
||||
|
|
|
@ -580,7 +580,7 @@ static int bfin_can_probe(struct platform_device *pdev)
|
|||
priv->pin_list = pdata;
|
||||
priv->can.clock.freq = get_sclk();
|
||||
|
||||
dev_set_drvdata(&pdev->dev, dev);
|
||||
platform_set_drvdata(pdev, dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
dev->flags |= IFF_ECHO; /* we support local echo */
|
||||
|
@ -613,7 +613,7 @@ exit:
|
|||
|
||||
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 resource *res;
|
||||
|
||||
|
@ -621,8 +621,6 @@ static int bfin_can_remove(struct platform_device *pdev)
|
|||
|
||||
unregister_candev(dev);
|
||||
|
||||
dev_set_drvdata(&pdev->dev, NULL);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
|
||||
|
@ -635,7 +633,7 @@ static int bfin_can_remove(struct platform_device *pdev)
|
|||
#ifdef CONFIG_PM
|
||||
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_regs __iomem *reg = priv->membase;
|
||||
int timeout = BFIN_CAN_TIMEOUT;
|
||||
|
@ -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)
|
||||
{
|
||||
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_regs __iomem *reg = priv->membase;
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ static int cc770_isa_probe(struct platform_device *pdev)
|
|||
else
|
||||
priv->clkout = COR_DEFAULT;
|
||||
|
||||
dev_set_drvdata(&pdev->dev, dev);
|
||||
platform_set_drvdata(pdev, dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
err = register_cc770dev(dev);
|
||||
|
@ -293,12 +293,11 @@ static int cc770_isa_probe(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);
|
||||
int idx = pdev->id;
|
||||
|
||||
unregister_cc770dev(dev);
|
||||
dev_set_drvdata(&pdev->dev, NULL);
|
||||
|
||||
if (mem[idx]) {
|
||||
iounmap(priv->reg_base);
|
||||
|
|
|
@ -216,7 +216,7 @@ static int cc770_platform_probe(struct platform_device *pdev)
|
|||
priv->reg_base, dev->irq, priv->can.clock.freq,
|
||||
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);
|
||||
|
||||
err = register_cc770dev(dev);
|
||||
|
@ -240,7 +240,7 @@ exit_release_mem:
|
|||
|
||||
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 resource *mem;
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
||||
#define DRV_NAME "flexcan"
|
||||
|
||||
|
@ -1004,16 +1003,11 @@ static int flexcan_probe(struct platform_device *pdev)
|
|||
struct flexcan_priv *priv;
|
||||
struct resource *mem;
|
||||
struct clk *clk_ipg = NULL, *clk_per = NULL;
|
||||
struct pinctrl *pinctrl;
|
||||
void __iomem *base;
|
||||
resource_size_t mem_size;
|
||||
int err, irq;
|
||||
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)
|
||||
of_property_read_u32(pdev->dev.of_node,
|
||||
"clock-frequency", &clock_freq);
|
||||
|
@ -1137,10 +1131,10 @@ static int flexcan_remove(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int flexcan_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
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);
|
||||
|
||||
flexcan_chip_disable(priv);
|
||||
|
@ -1154,9 +1148,9 @@ static int flexcan_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
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);
|
||||
|
||||
priv->can.state = CAN_STATE_ERROR_ACTIVE;
|
||||
|
@ -1168,21 +1162,19 @@ static int flexcan_resume(struct platform_device *pdev)
|
|||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define flexcan_suspend NULL
|
||||
#define flexcan_resume NULL
|
||||
#endif
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(flexcan_pm_ops, flexcan_suspend, flexcan_resume);
|
||||
|
||||
static struct platform_driver flexcan_driver = {
|
||||
.driver = {
|
||||
.name = DRV_NAME,
|
||||
.owner = THIS_MODULE,
|
||||
.pm = &flexcan_pm_ops,
|
||||
.of_match_table = flexcan_of_match,
|
||||
},
|
||||
.probe = flexcan_probe,
|
||||
.remove = flexcan_remove,
|
||||
.suspend = flexcan_suspend,
|
||||
.resume = flexcan_resume,
|
||||
.id_table = flexcan_id_table,
|
||||
};
|
||||
|
||||
|
|
|
@ -1646,7 +1646,7 @@ static int grcan_setup_netdev(struct platform_device *ofdev,
|
|||
if (err)
|
||||
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
|
||||
* grcan_reset at this stage. That is done in grcan_open.
|
||||
|
@ -1715,13 +1715,12 @@ exit_error:
|
|||
|
||||
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);
|
||||
|
||||
unregister_candev(dev); /* Will in turn call grcan_close */
|
||||
|
||||
irq_dispose_mapping(dev->irq);
|
||||
dev_set_drvdata(&ofdev->dev, NULL);
|
||||
netif_napi_del(&priv->napi);
|
||||
free_candev(dev);
|
||||
|
||||
|
|
|
@ -302,7 +302,7 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)
|
|||
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",
|
||||
priv->reg_base, dev->irq, priv->can.clock.freq);
|
||||
|
@ -321,11 +321,9 @@ exit_unmap_mem:
|
|||
|
||||
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);
|
||||
|
||||
dev_set_drvdata(&ofdev->dev, NULL);
|
||||
|
||||
unregister_mscandev(dev);
|
||||
iounmap(priv->reg_base);
|
||||
irq_dispose_mapping(dev->irq);
|
||||
|
@ -338,7 +336,7 @@ static int mpc5xxx_can_remove(struct platform_device *ofdev)
|
|||
static struct mscan_regs saved_regs;
|
||||
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_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
|
|||
|
||||
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_regs *regs = (struct mscan_regs *)priv->reg_base;
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ static int sja1000_isa_probe(struct platform_device *pdev)
|
|||
else
|
||||
priv->cdr = CDR_DEFAULT;
|
||||
|
||||
dev_set_drvdata(&pdev->dev, dev);
|
||||
platform_set_drvdata(pdev, dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
err = register_sja1000dev(dev);
|
||||
|
@ -225,12 +225,11 @@ static int sja1000_isa_probe(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);
|
||||
int idx = pdev->id;
|
||||
|
||||
unregister_sja1000dev(dev);
|
||||
dev_set_drvdata(&pdev->dev, NULL);
|
||||
|
||||
if (mem[idx]) {
|
||||
iounmap(priv->reg_base);
|
||||
|
|
|
@ -72,13 +72,11 @@ static void sja1000_ofp_write_reg(const struct sja1000_priv *priv,
|
|||
|
||||
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 device_node *np = ofdev->dev.of_node;
|
||||
struct resource res;
|
||||
|
||||
dev_set_drvdata(&ofdev->dev, NULL);
|
||||
|
||||
unregister_sja1000dev(dev);
|
||||
free_sja1000dev(dev);
|
||||
iounmap(priv->reg_base);
|
||||
|
@ -181,7 +179,7 @@ static int sja1000_ofp_probe(struct platform_device *ofdev)
|
|||
priv->reg_base, dev->irq, priv->can.clock.freq,
|
||||
priv->ocr, priv->cdr);
|
||||
|
||||
dev_set_drvdata(&ofdev->dev, dev);
|
||||
platform_set_drvdata(ofdev, dev);
|
||||
SET_NETDEV_DEV(dev, &ofdev->dev);
|
||||
|
||||
err = register_sja1000dev(dev);
|
||||
|
|
|
@ -135,7 +135,7 @@ static int sp_probe(struct platform_device *pdev)
|
|||
break;
|
||||
}
|
||||
|
||||
dev_set_drvdata(&pdev->dev, dev);
|
||||
platform_set_drvdata(pdev, dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
err = register_sja1000dev(dev);
|
||||
|
@ -161,12 +161,11 @@ static int sp_probe(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 resource *res;
|
||||
|
||||
unregister_sja1000dev(dev);
|
||||
dev_set_drvdata(&pdev->dev, NULL);
|
||||
|
||||
if (priv->reg_base)
|
||||
iounmap(priv->reg_base);
|
||||
|
|
Загрузка…
Ссылка в новой задаче