diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_i2c.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_i2c.c | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c index e24ca6ab96de..7b944142a9fd 100644 --- a/drivers/gpu/drm/radeon/radeon_i2c.c +++ b/drivers/gpu/drm/radeon/radeon_i2c.c | |||
@@ -64,8 +64,7 @@ bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux) | |||
64 | radeon_router_select_ddc_port(radeon_connector); | 64 | radeon_router_select_ddc_port(radeon_connector); |
65 | 65 | ||
66 | if (use_aux) { | 66 | if (use_aux) { |
67 | struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; | 67 | ret = i2c_transfer(&radeon_connector->ddc_bus->aux.ddc, msgs, 2); |
68 | ret = i2c_transfer(&dig->dp_i2c_bus->adapter, msgs, 2); | ||
69 | } else { | 68 | } else { |
70 | ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2); | 69 | ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2); |
71 | } | 70 | } |
@@ -950,16 +949,16 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev, | |||
950 | /* set the radeon bit adapter */ | 949 | /* set the radeon bit adapter */ |
951 | snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), | 950 | snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), |
952 | "Radeon i2c bit bus %s", name); | 951 | "Radeon i2c bit bus %s", name); |
953 | i2c->adapter.algo_data = &i2c->algo.bit; | 952 | i2c->adapter.algo_data = &i2c->bit; |
954 | i2c->algo.bit.pre_xfer = pre_xfer; | 953 | i2c->bit.pre_xfer = pre_xfer; |
955 | i2c->algo.bit.post_xfer = post_xfer; | 954 | i2c->bit.post_xfer = post_xfer; |
956 | i2c->algo.bit.setsda = set_data; | 955 | i2c->bit.setsda = set_data; |
957 | i2c->algo.bit.setscl = set_clock; | 956 | i2c->bit.setscl = set_clock; |
958 | i2c->algo.bit.getsda = get_data; | 957 | i2c->bit.getsda = get_data; |
959 | i2c->algo.bit.getscl = get_clock; | 958 | i2c->bit.getscl = get_clock; |
960 | i2c->algo.bit.udelay = 10; | 959 | i2c->bit.udelay = 10; |
961 | i2c->algo.bit.timeout = usecs_to_jiffies(2200); /* from VESA */ | 960 | i2c->bit.timeout = usecs_to_jiffies(2200); /* from VESA */ |
962 | i2c->algo.bit.data = i2c; | 961 | i2c->bit.data = i2c; |
963 | ret = i2c_bit_add_bus(&i2c->adapter); | 962 | ret = i2c_bit_add_bus(&i2c->adapter); |
964 | if (ret) { | 963 | if (ret) { |
965 | DRM_ERROR("Failed to register bit i2c %s\n", name); | 964 | DRM_ERROR("Failed to register bit i2c %s\n", name); |
@@ -974,46 +973,13 @@ out_free: | |||
974 | 973 | ||
975 | } | 974 | } |
976 | 975 | ||
977 | struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev, | ||
978 | struct radeon_i2c_bus_rec *rec, | ||
979 | const char *name) | ||
980 | { | ||
981 | struct radeon_i2c_chan *i2c; | ||
982 | int ret; | ||
983 | |||
984 | i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL); | ||
985 | if (i2c == NULL) | ||
986 | return NULL; | ||
987 | |||
988 | i2c->rec = *rec; | ||
989 | i2c->adapter.owner = THIS_MODULE; | ||
990 | i2c->adapter.class = I2C_CLASS_DDC; | ||
991 | i2c->adapter.dev.parent = &dev->pdev->dev; | ||
992 | i2c->dev = dev; | ||
993 | snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), | ||
994 | "Radeon aux bus %s", name); | ||
995 | i2c_set_adapdata(&i2c->adapter, i2c); | ||
996 | i2c->adapter.algo_data = &i2c->algo.dp; | ||
997 | i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch; | ||
998 | i2c->algo.dp.address = 0; | ||
999 | ret = i2c_dp_aux_add_bus(&i2c->adapter); | ||
1000 | if (ret) { | ||
1001 | DRM_INFO("Failed to register i2c %s\n", name); | ||
1002 | goto out_free; | ||
1003 | } | ||
1004 | |||
1005 | return i2c; | ||
1006 | out_free: | ||
1007 | kfree(i2c); | ||
1008 | return NULL; | ||
1009 | |||
1010 | } | ||
1011 | |||
1012 | void radeon_i2c_destroy(struct radeon_i2c_chan *i2c) | 976 | void radeon_i2c_destroy(struct radeon_i2c_chan *i2c) |
1013 | { | 977 | { |
1014 | if (!i2c) | 978 | if (!i2c) |
1015 | return; | 979 | return; |
1016 | i2c_del_adapter(&i2c->adapter); | 980 | i2c_del_adapter(&i2c->adapter); |
981 | if (i2c->has_aux) | ||
982 | drm_dp_aux_unregister_i2c_bus(&i2c->aux); | ||
1017 | kfree(i2c); | 983 | kfree(i2c); |
1018 | } | 984 | } |
1019 | 985 | ||