diff options
-rw-r--r-- | arch/avr32/mach-at32ap/clock.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/arch/avr32/mach-at32ap/clock.c b/arch/avr32/mach-at32ap/clock.c index 23b1a97fae7a..52c179bec0cc 100644 --- a/arch/avr32/mach-at32ap/clock.c +++ b/arch/avr32/mach-at32ap/clock.c | |||
@@ -80,6 +80,9 @@ int clk_enable(struct clk *clk) | |||
80 | { | 80 | { |
81 | unsigned long flags; | 81 | unsigned long flags; |
82 | 82 | ||
83 | if (!clk) | ||
84 | return 0; | ||
85 | |||
83 | spin_lock_irqsave(&clk_lock, flags); | 86 | spin_lock_irqsave(&clk_lock, flags); |
84 | __clk_enable(clk); | 87 | __clk_enable(clk); |
85 | spin_unlock_irqrestore(&clk_lock, flags); | 88 | spin_unlock_irqrestore(&clk_lock, flags); |
@@ -106,6 +109,9 @@ void clk_disable(struct clk *clk) | |||
106 | { | 109 | { |
107 | unsigned long flags; | 110 | unsigned long flags; |
108 | 111 | ||
112 | if (IS_ERR_OR_NULL(clk)) | ||
113 | return; | ||
114 | |||
109 | spin_lock_irqsave(&clk_lock, flags); | 115 | spin_lock_irqsave(&clk_lock, flags); |
110 | __clk_disable(clk); | 116 | __clk_disable(clk); |
111 | spin_unlock_irqrestore(&clk_lock, flags); | 117 | spin_unlock_irqrestore(&clk_lock, flags); |
@@ -117,6 +123,9 @@ unsigned long clk_get_rate(struct clk *clk) | |||
117 | unsigned long flags; | 123 | unsigned long flags; |
118 | unsigned long rate; | 124 | unsigned long rate; |
119 | 125 | ||
126 | if (!clk) | ||
127 | return 0; | ||
128 | |||
120 | spin_lock_irqsave(&clk_lock, flags); | 129 | spin_lock_irqsave(&clk_lock, flags); |
121 | rate = clk->get_rate(clk); | 130 | rate = clk->get_rate(clk); |
122 | spin_unlock_irqrestore(&clk_lock, flags); | 131 | spin_unlock_irqrestore(&clk_lock, flags); |
@@ -129,6 +138,9 @@ long clk_round_rate(struct clk *clk, unsigned long rate) | |||
129 | { | 138 | { |
130 | unsigned long flags, actual_rate; | 139 | unsigned long flags, actual_rate; |
131 | 140 | ||
141 | if (!clk) | ||
142 | return 0; | ||
143 | |||
132 | if (!clk->set_rate) | 144 | if (!clk->set_rate) |
133 | return -ENOSYS; | 145 | return -ENOSYS; |
134 | 146 | ||
@@ -145,6 +157,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate) | |||
145 | unsigned long flags; | 157 | unsigned long flags; |
146 | long ret; | 158 | long ret; |
147 | 159 | ||
160 | if (!clk) | ||
161 | return 0; | ||
162 | |||
148 | if (!clk->set_rate) | 163 | if (!clk->set_rate) |
149 | return -ENOSYS; | 164 | return -ENOSYS; |
150 | 165 | ||
@@ -161,6 +176,9 @@ int clk_set_parent(struct clk *clk, struct clk *parent) | |||
161 | unsigned long flags; | 176 | unsigned long flags; |
162 | int ret; | 177 | int ret; |
163 | 178 | ||
179 | if (!clk) | ||
180 | return 0; | ||
181 | |||
164 | if (!clk->set_parent) | 182 | if (!clk->set_parent) |
165 | return -ENOSYS; | 183 | return -ENOSYS; |
166 | 184 | ||
@@ -174,7 +192,7 @@ EXPORT_SYMBOL(clk_set_parent); | |||
174 | 192 | ||
175 | struct clk *clk_get_parent(struct clk *clk) | 193 | struct clk *clk_get_parent(struct clk *clk) |
176 | { | 194 | { |
177 | return clk->parent; | 195 | return !clk ? NULL : clk->parent; |
178 | } | 196 | } |
179 | EXPORT_SYMBOL(clk_get_parent); | 197 | EXPORT_SYMBOL(clk_get_parent); |
180 | 198 | ||