diff options
-rw-r--r-- | drivers/clocksource/sh_cmt.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c index 0779bf194aea..f94db327ac7c 100644 --- a/drivers/clocksource/sh_cmt.c +++ b/drivers/clocksource/sh_cmt.c | |||
@@ -62,7 +62,8 @@ struct sh_cmt_device { | |||
62 | void __iomem *mapbase; | 62 | void __iomem *mapbase; |
63 | struct clk *clk; | 63 | struct clk *clk; |
64 | 64 | ||
65 | struct sh_cmt_channel channel; | 65 | struct sh_cmt_channel *channels; |
66 | unsigned int num_channels; | ||
66 | 67 | ||
67 | unsigned long width; /* 16 or 32 bit version of hardware block */ | 68 | unsigned long width; /* 16 or 32 bit version of hardware block */ |
68 | unsigned long overflow_bit; | 69 | unsigned long overflow_bit; |
@@ -822,7 +823,15 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev) | |||
822 | cmt->clear_bits = ~0xc000; | 823 | cmt->clear_bits = ~0xc000; |
823 | } | 824 | } |
824 | 825 | ||
825 | ret = sh_cmt_setup_channel(&cmt->channel, cfg->timer_bit, cmt); | 826 | cmt->channels = kzalloc(sizeof(*cmt->channels), GFP_KERNEL); |
827 | if (cmt->channels == NULL) { | ||
828 | ret = -ENOMEM; | ||
829 | goto err4; | ||
830 | } | ||
831 | |||
832 | cmt->num_channels = 1; | ||
833 | |||
834 | ret = sh_cmt_setup_channel(&cmt->channels[0], cfg->timer_bit, cmt); | ||
826 | if (ret < 0) | 835 | if (ret < 0) |
827 | goto err4; | 836 | goto err4; |
828 | 837 | ||
@@ -830,6 +839,7 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev) | |||
830 | 839 | ||
831 | return 0; | 840 | return 0; |
832 | err4: | 841 | err4: |
842 | kfree(cmt->channels); | ||
833 | clk_unprepare(cmt->clk); | 843 | clk_unprepare(cmt->clk); |
834 | err3: | 844 | err3: |
835 | clk_put(cmt->clk); | 845 | clk_put(cmt->clk); |