| .. | .. |
|---|
| 1313 | 1313 | continue; |
|---|
| 1314 | 1314 | |
|---|
| 1315 | 1315 | rate = clk_get_rate(clk); |
|---|
| 1316 | | - if (!rate) |
|---|
| 1316 | + if (!rate) { |
|---|
| 1317 | + dev_err(ourport->port.dev, |
|---|
| 1318 | + "Failed to get clock rate for %s.\n", clkname); |
|---|
| 1319 | + clk_put(clk); |
|---|
| 1317 | 1320 | continue; |
|---|
| 1321 | + } |
|---|
| 1318 | 1322 | |
|---|
| 1319 | 1323 | if (ourport->info->has_divslot) { |
|---|
| 1320 | 1324 | unsigned long div = rate / req_baud; |
|---|
| .. | .. |
|---|
| 1340 | 1344 | calc_deviation = -calc_deviation; |
|---|
| 1341 | 1345 | |
|---|
| 1342 | 1346 | if (calc_deviation < deviation) { |
|---|
| 1347 | + /* |
|---|
| 1348 | + * If we find a better clk, release the previous one, if |
|---|
| 1349 | + * any. |
|---|
| 1350 | + */ |
|---|
| 1351 | + if (!IS_ERR(*best_clk)) |
|---|
| 1352 | + clk_put(*best_clk); |
|---|
| 1343 | 1353 | *best_clk = clk; |
|---|
| 1344 | 1354 | best_quot = quot; |
|---|
| 1345 | 1355 | *clk_num = cnt; |
|---|
| 1346 | 1356 | deviation = calc_deviation; |
|---|
| 1357 | + } else { |
|---|
| 1358 | + clk_put(clk); |
|---|
| 1347 | 1359 | } |
|---|
| 1348 | 1360 | } |
|---|
| 1349 | 1361 | |
|---|