diff options
Diffstat (limited to 'drivers/net/can/rcar_can.c')
-rw-r--r-- | drivers/net/can/rcar_can.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c index c02fcf369afd..1abe133d1594 100644 --- a/drivers/net/can/rcar_can.c +++ b/drivers/net/can/rcar_can.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/can/dev.h> | 20 | #include <linux/can/dev.h> |
21 | #include <linux/clk.h> | 21 | #include <linux/clk.h> |
22 | #include <linux/can/platform/rcar_can.h> | 22 | #include <linux/can/platform/rcar_can.h> |
23 | #include <linux/of.h> | ||
23 | 24 | ||
24 | #define RCAR_CAN_DRV_NAME "rcar_can" | 25 | #define RCAR_CAN_DRV_NAME "rcar_can" |
25 | 26 | ||
@@ -738,16 +739,21 @@ static int rcar_can_probe(struct platform_device *pdev) | |||
738 | struct net_device *ndev; | 739 | struct net_device *ndev; |
739 | struct resource *mem; | 740 | struct resource *mem; |
740 | void __iomem *addr; | 741 | void __iomem *addr; |
741 | u32 clock_select; | 742 | u32 clock_select = CLKR_CLKP1; |
742 | int err = -ENODEV; | 743 | int err = -ENODEV; |
743 | int irq; | 744 | int irq; |
744 | 745 | ||
745 | pdata = dev_get_platdata(&pdev->dev); | 746 | if (pdev->dev.of_node) { |
746 | if (!pdata) { | 747 | of_property_read_u32(pdev->dev.of_node, |
747 | dev_err(&pdev->dev, "No platform data provided!\n"); | 748 | "renesas,can-clock-select", &clock_select); |
748 | goto fail; | 749 | } else { |
750 | pdata = dev_get_platdata(&pdev->dev); | ||
751 | if (!pdata) { | ||
752 | dev_err(&pdev->dev, "No platform data provided!\n"); | ||
753 | goto fail; | ||
754 | } | ||
755 | clock_select = pdata->clock_select; | ||
749 | } | 756 | } |
750 | clock_select = pdata->clock_select; | ||
751 | 757 | ||
752 | irq = platform_get_irq(pdev, 0); | 758 | irq = platform_get_irq(pdev, 0); |
753 | if (!irq) { | 759 | if (!irq) { |
@@ -888,10 +894,20 @@ static int __maybe_unused rcar_can_resume(struct device *dev) | |||
888 | 894 | ||
889 | static SIMPLE_DEV_PM_OPS(rcar_can_pm_ops, rcar_can_suspend, rcar_can_resume); | 895 | static SIMPLE_DEV_PM_OPS(rcar_can_pm_ops, rcar_can_suspend, rcar_can_resume); |
890 | 896 | ||
897 | static const struct of_device_id rcar_can_of_table[] __maybe_unused = { | ||
898 | { .compatible = "renesas,can-r8a7778" }, | ||
899 | { .compatible = "renesas,can-r8a7779" }, | ||
900 | { .compatible = "renesas,can-r8a7790" }, | ||
901 | { .compatible = "renesas,can-r8a7791" }, | ||
902 | { } | ||
903 | }; | ||
904 | MODULE_DEVICE_TABLE(of, rcar_can_of_table); | ||
905 | |||
891 | static struct platform_driver rcar_can_driver = { | 906 | static struct platform_driver rcar_can_driver = { |
892 | .driver = { | 907 | .driver = { |
893 | .name = RCAR_CAN_DRV_NAME, | 908 | .name = RCAR_CAN_DRV_NAME, |
894 | .owner = THIS_MODULE, | 909 | .owner = THIS_MODULE, |
910 | .of_match_table = of_match_ptr(rcar_can_of_table), | ||
895 | .pm = &rcar_can_pm_ops, | 911 | .pm = &rcar_can_pm_ops, |
896 | }, | 912 | }, |
897 | .probe = rcar_can_probe, | 913 | .probe = rcar_can_probe, |