diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_i2c.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_i2c.c | 38 |
1 files changed, 5 insertions, 33 deletions
diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c index 9dfedb0e00d4..43dde957a327 100644 --- a/drivers/gpu/drm/i915/intel_i2c.c +++ b/drivers/gpu/drm/i915/intel_i2c.c | |||
@@ -154,29 +154,18 @@ intel_gpio_create(struct intel_gmbus *bus, u32 pin) | |||
154 | 0, | 154 | 0, |
155 | GPIOF, | 155 | GPIOF, |
156 | }; | 156 | }; |
157 | struct i2c_adapter *adapter; | ||
158 | struct i2c_algo_bit_data *algo; | 157 | struct i2c_algo_bit_data *algo; |
159 | 158 | ||
160 | if (pin >= ARRAY_SIZE(map_pin_to_reg) || !map_pin_to_reg[pin]) | 159 | if (pin >= ARRAY_SIZE(map_pin_to_reg) || !map_pin_to_reg[pin]) |
161 | return NULL; | 160 | return NULL; |
162 | 161 | ||
163 | adapter = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL); | 162 | algo = &bus->bit_algo; |
164 | if (adapter == NULL) | ||
165 | return NULL; | ||
166 | |||
167 | algo = kzalloc(sizeof(struct i2c_algo_bit_data), GFP_KERNEL); | ||
168 | if (algo == NULL) | ||
169 | goto out_adap; | ||
170 | 163 | ||
171 | bus->gpio_reg = map_pin_to_reg[pin]; | 164 | bus->gpio_reg = map_pin_to_reg[pin]; |
172 | if (HAS_PCH_SPLIT(dev_priv->dev)) | 165 | if (HAS_PCH_SPLIT(dev_priv->dev)) |
173 | bus->gpio_reg += PCH_GPIOA - GPIOA; | 166 | bus->gpio_reg += PCH_GPIOA - GPIOA; |
174 | 167 | ||
175 | snprintf(adapter->name, sizeof(adapter->name), | 168 | bus->adapter.algo_data = algo; |
176 | "i915 GPIO%c", "?BACDE?F"[pin]); | ||
177 | adapter->owner = THIS_MODULE; | ||
178 | adapter->algo_data = algo; | ||
179 | adapter->dev.parent = &dev_priv->dev->pdev->dev; | ||
180 | algo->setsda = set_data; | 169 | algo->setsda = set_data; |
181 | algo->setscl = set_clock; | 170 | algo->setscl = set_clock; |
182 | algo->getsda = get_data; | 171 | algo->getsda = get_data; |
@@ -185,16 +174,7 @@ intel_gpio_create(struct intel_gmbus *bus, u32 pin) | |||
185 | algo->timeout = usecs_to_jiffies(2200); | 174 | algo->timeout = usecs_to_jiffies(2200); |
186 | algo->data = bus; | 175 | algo->data = bus; |
187 | 176 | ||
188 | if (i2c_bit_add_bus(adapter)) | 177 | return &bus->adapter; |
189 | goto out_algo; | ||
190 | |||
191 | return adapter; | ||
192 | |||
193 | out_algo: | ||
194 | kfree(algo); | ||
195 | out_adap: | ||
196 | kfree(adapter); | ||
197 | return NULL; | ||
198 | } | 178 | } |
199 | 179 | ||
200 | static int | 180 | static int |
@@ -213,7 +193,7 @@ intel_i2c_quirk_xfer(struct intel_gmbus *bus, | |||
213 | set_clock(bus, 1); | 193 | set_clock(bus, 1); |
214 | udelay(I2C_RISEFALL_TIME); | 194 | udelay(I2C_RISEFALL_TIME); |
215 | 195 | ||
216 | ret = adapter->algo->master_xfer(adapter, msgs, num); | 196 | ret = i2c_bit_algo.master_xfer(adapter, msgs, num); |
217 | 197 | ||
218 | set_data(bus, 1); | 198 | set_data(bus, 1); |
219 | set_clock(bus, 1); | 199 | set_clock(bus, 1); |
@@ -353,7 +333,7 @@ static u32 gmbus_func(struct i2c_adapter *adapter) | |||
353 | adapter); | 333 | adapter); |
354 | 334 | ||
355 | if (bus->force_bit) | 335 | if (bus->force_bit) |
356 | bus->force_bit->algo->functionality(bus->force_bit); | 336 | i2c_bit_algo.functionality(bus->force_bit); |
357 | 337 | ||
358 | return (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | | 338 | return (I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | |
359 | /* I2C_FUNC_10BIT_ADDR | */ | 339 | /* I2C_FUNC_10BIT_ADDR | */ |
@@ -449,9 +429,6 @@ void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit) | |||
449 | } | 429 | } |
450 | } else { | 430 | } else { |
451 | if (bus->force_bit) { | 431 | if (bus->force_bit) { |
452 | i2c_del_adapter(bus->force_bit); | ||
453 | kfree(bus->force_bit->algo); | ||
454 | kfree(bus->force_bit); | ||
455 | bus->force_bit = NULL; | 432 | bus->force_bit = NULL; |
456 | } | 433 | } |
457 | } | 434 | } |
@@ -467,11 +444,6 @@ void intel_teardown_gmbus(struct drm_device *dev) | |||
467 | 444 | ||
468 | for (i = 0; i < GMBUS_NUM_PORTS; i++) { | 445 | for (i = 0; i < GMBUS_NUM_PORTS; i++) { |
469 | struct intel_gmbus *bus = &dev_priv->gmbus[i]; | 446 | struct intel_gmbus *bus = &dev_priv->gmbus[i]; |
470 | if (bus->force_bit) { | ||
471 | i2c_del_adapter(bus->force_bit); | ||
472 | kfree(bus->force_bit->algo); | ||
473 | kfree(bus->force_bit); | ||
474 | } | ||
475 | i2c_del_adapter(&bus->adapter); | 447 | i2c_del_adapter(&bus->adapter); |
476 | } | 448 | } |
477 | 449 | ||