Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
- index 5c7d769aee3f..aa14744847af 100644
- --- a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
- +++ b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
- @@ -117,8 +117,7 @@ static void smu_v11_0_i2c_set_address(struct i2c_adapter *control, uint8_t addre
- {
- struct amdgpu_device *adev = to_amdgpu_device(control);
- - /* Convert fromr 8-bit to 7-bit address */
- - address >>= 1;
- + /* We take 7-bit addresses raw */
- WREG32_SOC15(SMUIO, 0, mmCKSVII2C_IC_TAR, (address & 0xFF));
- }
- @@ -531,22 +530,14 @@ static bool smu_v11_0_i2c_bus_unlock(struct i2c_adapter *control)
- /***************************** I2C GLUE ****************************/
- static uint32_t smu_v11_0_i2c_read_data(struct i2c_adapter *control,
- - uint8_t address,
- - uint8_t *data,
- - uint32_t numbytes)
- + struct i2c_msg *msg)
- {
- uint32_t ret = 0;
- - /* First 2 bytes are dummy write to set EEPROM address */
- - ret = smu_v11_0_i2c_transmit(control, address, data, 2, I2C_NO_STOP);
- - if (ret != I2C_OK)
- - goto Fail;
- -
- /* Now read data starting with that address */
- - ret = smu_v11_0_i2c_receive(control, address, data + 2, numbytes - 2,
- + ret = smu_v11_0_i2c_receive(control, msg->addr, msg->buf, msg->len,
- I2C_RESTART);
- -Fail:
- if (ret != I2C_OK)
- DRM_ERROR("ReadData() - I2C error occurred :%x", ret);
- @@ -554,28 +545,16 @@ static uint32_t smu_v11_0_i2c_read_data(struct i2c_adapter *control,
- }
- static uint32_t smu_v11_0_i2c_write_data(struct i2c_adapter *control,
- - uint8_t address,
- - uint8_t *data,
- - uint32_t numbytes)
- + struct i2c_msg *msg)
- {
- uint32_t ret;
- - ret = smu_v11_0_i2c_transmit(control, address, data, numbytes, 0);
- + /* Send I2C_NO_STOP unless requested to stop. */
- + ret = smu_v11_0_i2c_transmit(control, msg->addr, msg->buf, msg->len, ((msg->flags & I2C_M_STOP) ? 0 : I2C_NO_STOP));
- if (ret != I2C_OK)
- DRM_ERROR("WriteI2CData() - I2C error occurred :%x", ret);
- - else
- - /*
- - * According to EEPROM spec there is a MAX of 10 ms required for
- - * EEPROM to flush internal RX buffer after STOP was issued at the
- - * end of write transaction. During this time the EEPROM will not be
- - * responsive to any more commands - so wait a bit more.
- - *
- - * TODO Improve to wait for first ACK for slave address after
- - * internal write cycle done.
- - */
- - msleep(10);
- -
- +
- return ret;
- }
- @@ -622,22 +601,15 @@ static int smu_v11_0_i2c_xfer(struct i2c_adapter *i2c_adap,
- int i, ret;
- struct amdgpu_device *adev = to_amdgpu_device(i2c_adap);
- - if (!adev->pm.bus_locked) {
- - DRM_ERROR("I2C bus unlocked, stopping transaction!");
- - return -EIO;
- - }
- -
- smu_v11_0_i2c_init(i2c_adap);
- for (i = 0; i < num; i++) {
- if (msgs[i].flags & I2C_M_RD)
- ret = smu_v11_0_i2c_read_data(i2c_adap,
- - (uint8_t)msgs[i].addr,
- - msgs[i].buf, msgs[i].len);
- + msgs + i);
- else
- ret = smu_v11_0_i2c_write_data(i2c_adap,
- - (uint8_t)msgs[i].addr,
- - msgs[i].buf, msgs[i].len);
- + msgs + i);
- if (ret != I2C_OK) {
- num = -EIO;
- @@ -666,7 +638,7 @@ int smu_v11_0_i2c_control_init(struct i2c_adapter *control)
- int res;
- control->owner = THIS_MODULE;
- - control->class = I2C_CLASS_SPD;
- + control->class = I2C_CLASS_HWMON;
- control->dev.parent = &adev->pdev->dev;
- control->algo = &smu_v11_0_i2c_algo;
- snprintf(control->name, sizeof(control->name), "AMDGPU SMU");
Advertisement
Add Comment
Please, Sign In to add comment