.. | .. |
---|
22 | 22 | */ |
---|
23 | 23 | #define SY8106A_GO_BIT BIT(7) |
---|
24 | 24 | |
---|
25 | | -struct sy8106a { |
---|
26 | | - struct regulator_dev *rdev; |
---|
27 | | - struct regmap *regmap; |
---|
28 | | - u32 fixed_voltage; |
---|
29 | | -}; |
---|
30 | | - |
---|
31 | 25 | static const struct regmap_config sy8106a_regmap_config = { |
---|
32 | 26 | .reg_bits = 8, |
---|
33 | 27 | .val_bits = 8, |
---|
.. | .. |
---|
67 | 61 | /* |
---|
68 | 62 | * I2C driver interface functions |
---|
69 | 63 | */ |
---|
70 | | -static int sy8106a_i2c_probe(struct i2c_client *i2c, |
---|
71 | | - const struct i2c_device_id *id) |
---|
| 64 | +static int sy8106a_i2c_probe(struct i2c_client *i2c) |
---|
72 | 65 | { |
---|
73 | | - struct sy8106a *chip; |
---|
74 | 66 | struct device *dev = &i2c->dev; |
---|
75 | | - struct regulator_dev *rdev = NULL; |
---|
| 67 | + struct regulator_dev *rdev; |
---|
76 | 68 | struct regulator_config config = { }; |
---|
| 69 | + struct regmap *regmap; |
---|
77 | 70 | unsigned int reg, vsel; |
---|
| 71 | + u32 fixed_voltage; |
---|
78 | 72 | int error; |
---|
79 | 73 | |
---|
80 | | - chip = devm_kzalloc(&i2c->dev, sizeof(struct sy8106a), GFP_KERNEL); |
---|
81 | | - if (!chip) |
---|
82 | | - return -ENOMEM; |
---|
83 | | - |
---|
84 | 74 | error = of_property_read_u32(dev->of_node, "silergy,fixed-microvolt", |
---|
85 | | - &chip->fixed_voltage); |
---|
| 75 | + &fixed_voltage); |
---|
86 | 76 | if (error) |
---|
87 | 77 | return error; |
---|
88 | 78 | |
---|
89 | | - if (chip->fixed_voltage < SY8106A_MIN_MV * 1000 || |
---|
90 | | - chip->fixed_voltage > SY8106A_MAX_MV * 1000) |
---|
| 79 | + if (fixed_voltage < SY8106A_MIN_MV * 1000 || |
---|
| 80 | + fixed_voltage > SY8106A_MAX_MV * 1000) |
---|
91 | 81 | return -EINVAL; |
---|
92 | 82 | |
---|
93 | | - chip->regmap = devm_regmap_init_i2c(i2c, &sy8106a_regmap_config); |
---|
94 | | - if (IS_ERR(chip->regmap)) { |
---|
95 | | - error = PTR_ERR(chip->regmap); |
---|
| 83 | + regmap = devm_regmap_init_i2c(i2c, &sy8106a_regmap_config); |
---|
| 84 | + if (IS_ERR(regmap)) { |
---|
| 85 | + error = PTR_ERR(regmap); |
---|
96 | 86 | dev_err(dev, "Failed to allocate register map: %d\n", error); |
---|
97 | 87 | return error; |
---|
98 | 88 | } |
---|
99 | 89 | |
---|
100 | 90 | config.dev = &i2c->dev; |
---|
101 | | - config.regmap = chip->regmap; |
---|
102 | | - config.driver_data = chip; |
---|
| 91 | + config.regmap = regmap; |
---|
103 | 92 | |
---|
104 | 93 | config.of_node = dev->of_node; |
---|
105 | 94 | config.init_data = of_get_regulator_init_data(dev, dev->of_node, |
---|
.. | .. |
---|
109 | 98 | return -ENOMEM; |
---|
110 | 99 | |
---|
111 | 100 | /* Ensure GO_BIT is enabled when probing */ |
---|
112 | | - error = regmap_read(chip->regmap, SY8106A_REG_VOUT1_SEL, ®); |
---|
| 101 | + error = regmap_read(regmap, SY8106A_REG_VOUT1_SEL, ®); |
---|
113 | 102 | if (error) |
---|
114 | 103 | return error; |
---|
115 | 104 | |
---|
116 | 105 | if (!(reg & SY8106A_GO_BIT)) { |
---|
117 | | - vsel = (chip->fixed_voltage / 1000 - SY8106A_MIN_MV) / |
---|
| 106 | + vsel = (fixed_voltage / 1000 - SY8106A_MIN_MV) / |
---|
118 | 107 | SY8106A_STEP_MV; |
---|
119 | 108 | |
---|
120 | | - error = regmap_write(chip->regmap, SY8106A_REG_VOUT1_SEL, |
---|
| 109 | + error = regmap_write(regmap, SY8106A_REG_VOUT1_SEL, |
---|
121 | 110 | vsel | SY8106A_GO_BIT); |
---|
122 | 111 | if (error) |
---|
123 | 112 | return error; |
---|
.. | .. |
---|
131 | 120 | return error; |
---|
132 | 121 | } |
---|
133 | 122 | |
---|
134 | | - chip->rdev = rdev; |
---|
135 | | - |
---|
136 | | - i2c_set_clientdata(i2c, chip); |
---|
137 | | - |
---|
138 | 123 | return 0; |
---|
139 | 124 | } |
---|
140 | 125 | |
---|
141 | | -static const struct of_device_id sy8106a_i2c_of_match[] = { |
---|
| 126 | +static const struct of_device_id __maybe_unused sy8106a_i2c_of_match[] = { |
---|
142 | 127 | { .compatible = "silergy,sy8106a" }, |
---|
143 | 128 | { }, |
---|
144 | 129 | }; |
---|
.. | .. |
---|
155 | 140 | .name = "sy8106a", |
---|
156 | 141 | .of_match_table = of_match_ptr(sy8106a_i2c_of_match), |
---|
157 | 142 | }, |
---|
158 | | - .probe = sy8106a_i2c_probe, |
---|
| 143 | + .probe_new = sy8106a_i2c_probe, |
---|
159 | 144 | .id_table = sy8106a_i2c_id, |
---|
160 | 145 | }; |
---|
161 | 146 | |
---|