Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb/misc/usb3503: Always read refclk frequency from DT

This is necessary to set REF_SEL appropriately in uses where refclk is
always available.

Signed-off-by: Ben Gamari <ben@smart-cactus.org>
Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Ben Gamari and committed by
Greg Kroah-Hartman
c0ab6bb0 76cb03e7

+24 -23
+24 -23
drivers/usb/misc/usb3503.c
··· 186 186 hub->mode = pdata->initial_mode; 187 187 } else if (np) { 188 188 struct clk *clk; 189 + u32 rate = 0; 189 190 hub->port_off_mask = 0; 191 + 192 + if (!of_property_read_u32(np, "refclk-frequency", &rate)) { 193 + switch (rate) { 194 + case 38400000: 195 + case 26000000: 196 + case 19200000: 197 + case 12000000: 198 + hub->secondary_ref_clk = 0; 199 + break; 200 + case 24000000: 201 + case 27000000: 202 + case 25000000: 203 + case 50000000: 204 + hub->secondary_ref_clk = 1; 205 + break; 206 + default: 207 + dev_err(dev, 208 + "unsupported reference clock rate (%d)\n", 209 + (int) rate); 210 + return -EINVAL; 211 + } 212 + } 190 213 191 214 clk = devm_clk_get(dev, "refclk"); 192 215 if (IS_ERR(clk) && PTR_ERR(clk) != -ENOENT) { ··· 219 196 } 220 197 221 198 if (!IS_ERR(clk)) { 222 - u32 rate = 0; 223 199 hub->clk = clk; 224 200 225 - if (!of_property_read_u32(np, "refclk-frequency", 226 - &rate)) { 227 - 228 - switch (rate) { 229 - case 38400000: 230 - case 26000000: 231 - case 19200000: 232 - case 12000000: 233 - hub->secondary_ref_clk = 0; 234 - break; 235 - case 24000000: 236 - case 27000000: 237 - case 25000000: 238 - case 50000000: 239 - hub->secondary_ref_clk = 1; 240 - break; 241 - default: 242 - dev_err(dev, 243 - "unsupported reference clock rate (%d)\n", 244 - (int) rate); 245 - return -EINVAL; 246 - } 201 + if (rate != 0) { 247 202 err = clk_set_rate(hub->clk, rate); 248 203 if (err) { 249 204 dev_err(dev,