|
4 | 4 | *
|
5 | 5 | * Copyright (C) 2010, 2011 Ericsson AB.
|
6 | 6 | * Copyright (C) 2011 Guenter Roeck.
|
7 |
| - * Copyright (C) 2011 - 2013 Xilinx Inc. |
| 7 | + * Copyright (C) 2011 - 2021 Xilinx Inc. |
8 | 8 | *
|
9 | 9 | * Author: Guenter Roeck <[email protected]>
|
10 | 10 | * Sören Brinkmann <[email protected]>
|
@@ -123,14 +123,18 @@ static int si570_get_divs(struct clk_si570 *data, u64 *rfreq,
|
123 | 123 | * si570_get_defaults() - Get default values
|
124 | 124 | * @data: Driver data structure
|
125 | 125 | * @fout: Factory frequency output
|
| 126 | + * @skip_recall: If true, don't recall NVM into RAM |
126 | 127 | * Returns 0 on success, negative errno otherwise.
|
127 | 128 | */
|
128 |
| -static int si570_get_defaults(struct clk_si570 *data, u64 fout) |
| 129 | +static int si570_get_defaults(struct clk_si570 *data, u64 fout, |
| 130 | + bool skip_recall) |
129 | 131 | {
|
130 | 132 | int err;
|
131 | 133 | u64 fdco;
|
132 | 134 |
|
133 |
| - regmap_write(data->regmap, SI570_REG_CONTROL, SI570_CNTRL_RECALL); |
| 135 | + if (!skip_recall) |
| 136 | + regmap_write(data->regmap, SI570_REG_CONTROL, |
| 137 | + SI570_CNTRL_RECALL); |
134 | 138 |
|
135 | 139 | err = si570_get_divs(data, &data->rfreq, &data->n1, &data->hs_div);
|
136 | 140 | if (err)
|
@@ -400,6 +404,7 @@ static int si570_probe(struct i2c_client *client,
|
400 | 404 | struct clk_si570 *data;
|
401 | 405 | struct clk_init_data init;
|
402 | 406 | u32 initial_fout, factory_fout, stability;
|
| 407 | + bool skip_recall; |
403 | 408 | int err;
|
404 | 409 | enum clk_si570_variant variant = id->driver_data;
|
405 | 410 |
|
@@ -441,14 +446,17 @@ static int si570_probe(struct i2c_client *client,
|
441 | 446 | return err;
|
442 | 447 | }
|
443 | 448 |
|
| 449 | + skip_recall = of_property_read_bool(client->dev.of_node, |
| 450 | + "silabs,skip-recall"); |
| 451 | + |
444 | 452 | data->regmap = devm_regmap_init_i2c(client, &si570_regmap_config);
|
445 | 453 | if (IS_ERR(data->regmap)) {
|
446 | 454 | dev_err(&client->dev, "failed to allocate register map\n");
|
447 | 455 | return PTR_ERR(data->regmap);
|
448 | 456 | }
|
449 | 457 |
|
450 | 458 | i2c_set_clientdata(client, data);
|
451 |
| - err = si570_get_defaults(data, factory_fout); |
| 459 | + err = si570_get_defaults(data, factory_fout, skip_recall); |
452 | 460 | if (err)
|
453 | 461 | return err;
|
454 | 462 |
|
|
0 commit comments