Skip to content

Commit cd48b97

Browse files
Bob Zhoualexdeucher
authored andcommitted
drm/amdgpu: add return result for amdgpu_i2c_{get/put}_byte
After amdgpu_i2c_get_byte fail, amdgpu_i2c_put_byte shouldn't be conducted to put wrong value. So return and check the i2c transfer result. Signed-off-by: Bob Zhou <[email protected]> Reviewed-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 8b2faf1 commit cd48b97

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.c

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ amdgpu_i2c_lookup(struct amdgpu_device *adev,
279279
return NULL;
280280
}
281281

282-
static void amdgpu_i2c_get_byte(struct amdgpu_i2c_chan *i2c_bus,
282+
static int amdgpu_i2c_get_byte(struct amdgpu_i2c_chan *i2c_bus,
283283
u8 slave_addr,
284284
u8 addr,
285285
u8 *val)
@@ -304,16 +304,18 @@ static void amdgpu_i2c_get_byte(struct amdgpu_i2c_chan *i2c_bus,
304304
out_buf[0] = addr;
305305
out_buf[1] = 0;
306306

307-
if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) {
308-
*val = in_buf[0];
309-
DRM_DEBUG("val = 0x%02x\n", *val);
310-
} else {
311-
DRM_DEBUG("i2c 0x%02x 0x%02x read failed\n",
312-
addr, *val);
307+
if (i2c_transfer(&i2c_bus->adapter, msgs, 2) != 2) {
308+
DRM_DEBUG("i2c 0x%02x read failed\n", addr);
309+
return -EIO;
313310
}
311+
312+
*val = in_buf[0];
313+
DRM_DEBUG("val = 0x%02x\n", *val);
314+
315+
return 0;
314316
}
315317

316-
static void amdgpu_i2c_put_byte(struct amdgpu_i2c_chan *i2c_bus,
318+
static int amdgpu_i2c_put_byte(struct amdgpu_i2c_chan *i2c_bus,
317319
u8 slave_addr,
318320
u8 addr,
319321
u8 val)
@@ -329,9 +331,12 @@ static void amdgpu_i2c_put_byte(struct amdgpu_i2c_chan *i2c_bus,
329331
out_buf[0] = addr;
330332
out_buf[1] = val;
331333

332-
if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1)
333-
DRM_DEBUG("i2c 0x%02x 0x%02x write failed\n",
334-
addr, val);
334+
if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1) {
335+
DRM_DEBUG("i2c 0x%02x 0x%02x write failed\n", addr, val);
336+
return -EIO;
337+
}
338+
339+
return 0;
335340
}
336341

337342
/* ddc router switching */
@@ -346,16 +351,18 @@ amdgpu_i2c_router_select_ddc_port(const struct amdgpu_connector *amdgpu_connecto
346351
if (!amdgpu_connector->router_bus)
347352
return;
348353

349-
amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
354+
if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
350355
amdgpu_connector->router.i2c_addr,
351-
0x3, &val);
356+
0x3, &val))
357+
return;
352358
val &= ~amdgpu_connector->router.ddc_mux_control_pin;
353359
amdgpu_i2c_put_byte(amdgpu_connector->router_bus,
354360
amdgpu_connector->router.i2c_addr,
355361
0x3, val);
356-
amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
362+
if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
357363
amdgpu_connector->router.i2c_addr,
358-
0x1, &val);
364+
0x1, &val))
365+
return;
359366
val &= ~amdgpu_connector->router.ddc_mux_control_pin;
360367
val |= amdgpu_connector->router.ddc_mux_state;
361368
amdgpu_i2c_put_byte(amdgpu_connector->router_bus,
@@ -375,16 +382,18 @@ amdgpu_i2c_router_select_cd_port(const struct amdgpu_connector *amdgpu_connector
375382
if (!amdgpu_connector->router_bus)
376383
return;
377384

378-
amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
385+
if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
379386
amdgpu_connector->router.i2c_addr,
380-
0x3, &val);
387+
0x3, &val))
388+
return;
381389
val &= ~amdgpu_connector->router.cd_mux_control_pin;
382390
amdgpu_i2c_put_byte(amdgpu_connector->router_bus,
383391
amdgpu_connector->router.i2c_addr,
384392
0x3, val);
385-
amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
393+
if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus,
386394
amdgpu_connector->router.i2c_addr,
387-
0x1, &val);
395+
0x1, &val))
396+
return;
388397
val &= ~amdgpu_connector->router.cd_mux_control_pin;
389398
val |= amdgpu_connector->router.cd_mux_state;
390399
amdgpu_i2c_put_byte(amdgpu_connector->router_bus,

0 commit comments

Comments
 (0)