Lines Matching +full:bit +full:- +full:banging

2  * Copyright 2007-8 Advanced Micro Devices, Inc.
38 /* bit banging i2c */
42 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_pre_xfer()
43 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_pre_xfer()
46 mutex_lock(&i2c->mutex); in amdgpu_i2c_pre_xfer()
49 if (rec->hw_capable) { in amdgpu_i2c_pre_xfer()
50 temp = RREG32(rec->mask_clk_reg); in amdgpu_i2c_pre_xfer()
52 WREG32(rec->mask_clk_reg, temp); in amdgpu_i2c_pre_xfer()
56 temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask; in amdgpu_i2c_pre_xfer()
57 WREG32(rec->a_clk_reg, temp); in amdgpu_i2c_pre_xfer()
59 temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask; in amdgpu_i2c_pre_xfer()
60 WREG32(rec->a_data_reg, temp); in amdgpu_i2c_pre_xfer()
63 temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask; in amdgpu_i2c_pre_xfer()
64 WREG32(rec->en_clk_reg, temp); in amdgpu_i2c_pre_xfer()
66 temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask; in amdgpu_i2c_pre_xfer()
67 WREG32(rec->en_data_reg, temp); in amdgpu_i2c_pre_xfer()
70 temp = RREG32(rec->mask_clk_reg) | rec->mask_clk_mask; in amdgpu_i2c_pre_xfer()
71 WREG32(rec->mask_clk_reg, temp); in amdgpu_i2c_pre_xfer()
72 temp = RREG32(rec->mask_clk_reg); in amdgpu_i2c_pre_xfer()
74 temp = RREG32(rec->mask_data_reg) | rec->mask_data_mask; in amdgpu_i2c_pre_xfer()
75 WREG32(rec->mask_data_reg, temp); in amdgpu_i2c_pre_xfer()
76 temp = RREG32(rec->mask_data_reg); in amdgpu_i2c_pre_xfer()
84 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_post_xfer()
85 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_post_xfer()
89 temp = RREG32(rec->mask_clk_reg) & ~rec->mask_clk_mask; in amdgpu_i2c_post_xfer()
90 WREG32(rec->mask_clk_reg, temp); in amdgpu_i2c_post_xfer()
91 temp = RREG32(rec->mask_clk_reg); in amdgpu_i2c_post_xfer()
93 temp = RREG32(rec->mask_data_reg) & ~rec->mask_data_mask; in amdgpu_i2c_post_xfer()
94 WREG32(rec->mask_data_reg, temp); in amdgpu_i2c_post_xfer()
95 temp = RREG32(rec->mask_data_reg); in amdgpu_i2c_post_xfer()
97 mutex_unlock(&i2c->mutex); in amdgpu_i2c_post_xfer()
103 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_get_clock()
104 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_get_clock()
108 val = RREG32(rec->y_clk_reg); in amdgpu_i2c_get_clock()
109 val &= rec->y_clk_mask; in amdgpu_i2c_get_clock()
118 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_get_data()
119 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_get_data()
123 val = RREG32(rec->y_data_reg); in amdgpu_i2c_get_data()
124 val &= rec->y_data_mask; in amdgpu_i2c_get_data()
132 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_set_clock()
133 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_set_clock()
137 val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask; in amdgpu_i2c_set_clock()
138 val |= clock ? 0 : rec->en_clk_mask; in amdgpu_i2c_set_clock()
139 WREG32(rec->en_clk_reg, val); in amdgpu_i2c_set_clock()
145 struct amdgpu_device *adev = drm_to_adev(i2c->dev); in amdgpu_i2c_set_data()
146 struct amdgpu_i2c_bus_rec *rec = &i2c->rec; in amdgpu_i2c_set_data()
150 val = RREG32(rec->en_data_reg) & ~rec->en_data_mask; in amdgpu_i2c_set_data()
151 val |= data ? 0 : rec->en_data_mask; in amdgpu_i2c_set_data()
152 WREG32(rec->en_data_reg, val); in amdgpu_i2c_set_data()
168 if (rec->mm_i2c && (amdgpu_hw_i2c == 0)) in amdgpu_i2c_create()
175 i2c->rec = *rec; in amdgpu_i2c_create()
176 i2c->adapter.owner = THIS_MODULE; in amdgpu_i2c_create()
177 i2c->adapter.dev.parent = dev->dev; in amdgpu_i2c_create()
178 i2c->dev = dev; in amdgpu_i2c_create()
179 i2c_set_adapdata(&i2c->adapter, i2c); in amdgpu_i2c_create()
180 mutex_init(&i2c->mutex); in amdgpu_i2c_create()
181 if (rec->hw_capable && in amdgpu_i2c_create()
184 snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), in amdgpu_i2c_create()
186 i2c->adapter.algo = &amdgpu_atombios_i2c_algo; in amdgpu_i2c_create()
187 ret = devm_i2c_add_adapter(dev->dev, &i2c->adapter); in amdgpu_i2c_create()
191 /* set the amdgpu bit adapter */ in amdgpu_i2c_create()
192 snprintf(i2c->adapter.name, sizeof(i2c->adapter.name), in amdgpu_i2c_create()
193 "AMDGPU i2c bit bus %s", name); in amdgpu_i2c_create()
194 i2c->adapter.algo_data = &i2c->bit; in amdgpu_i2c_create()
195 i2c->bit.pre_xfer = amdgpu_i2c_pre_xfer; in amdgpu_i2c_create()
196 i2c->bit.post_xfer = amdgpu_i2c_post_xfer; in amdgpu_i2c_create()
197 i2c->bit.setsda = amdgpu_i2c_set_data; in amdgpu_i2c_create()
198 i2c->bit.setscl = amdgpu_i2c_set_clock; in amdgpu_i2c_create()
199 i2c->bit.getsda = amdgpu_i2c_get_data; in amdgpu_i2c_create()
200 i2c->bit.getscl = amdgpu_i2c_get_clock; in amdgpu_i2c_create()
201 i2c->bit.udelay = 10; in amdgpu_i2c_create()
202 i2c->bit.timeout = usecs_to_jiffies(2200); /* from VESA */ in amdgpu_i2c_create()
203 i2c->bit.data = i2c; in amdgpu_i2c_create()
204 ret = i2c_bit_add_bus(&i2c->adapter); in amdgpu_i2c_create()
206 DRM_ERROR("Failed to register bit i2c %s\n", name); in amdgpu_i2c_create()
220 if (!adev->is_atom_fw) { in amdgpu_i2c_init()
224 switch (adev->asic_type) { in amdgpu_i2c_init()
243 if (adev->i2c_bus[i]) in amdgpu_i2c_fini()
244 adev->i2c_bus[i] = NULL; in amdgpu_i2c_fini()
255 if (adev->i2c_bus[i] && in amdgpu_i2c_lookup()
256 (adev->i2c_bus[i]->rec.i2c_id == i2c_bus->i2c_id)) { in amdgpu_i2c_lookup()
257 return adev->i2c_bus[i]; in amdgpu_i2c_lookup()
288 if (i2c_transfer(&i2c_bus->adapter, msgs, 2) != 2) { in amdgpu_i2c_get_byte()
290 return -EIO; in amdgpu_i2c_get_byte()
315 if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1) { in amdgpu_i2c_put_byte()
317 return -EIO; in amdgpu_i2c_put_byte()
329 if (!amdgpu_connector->router.ddc_valid) in amdgpu_i2c_router_select_ddc_port()
332 if (!amdgpu_connector->router_bus) in amdgpu_i2c_router_select_ddc_port()
335 if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_ddc_port()
336 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_ddc_port()
339 val &= ~amdgpu_connector->router.ddc_mux_control_pin; in amdgpu_i2c_router_select_ddc_port()
340 amdgpu_i2c_put_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_ddc_port()
341 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_ddc_port()
343 if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_ddc_port()
344 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_ddc_port()
347 val &= ~amdgpu_connector->router.ddc_mux_control_pin; in amdgpu_i2c_router_select_ddc_port()
348 val |= amdgpu_connector->router.ddc_mux_state; in amdgpu_i2c_router_select_ddc_port()
349 amdgpu_i2c_put_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_ddc_port()
350 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_ddc_port()
360 if (!amdgpu_connector->router.cd_valid) in amdgpu_i2c_router_select_cd_port()
363 if (!amdgpu_connector->router_bus) in amdgpu_i2c_router_select_cd_port()
366 if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_cd_port()
367 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_cd_port()
370 val &= ~amdgpu_connector->router.cd_mux_control_pin; in amdgpu_i2c_router_select_cd_port()
371 amdgpu_i2c_put_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_cd_port()
372 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_cd_port()
374 if (amdgpu_i2c_get_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_cd_port()
375 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_cd_port()
378 val &= ~amdgpu_connector->router.cd_mux_control_pin; in amdgpu_i2c_router_select_cd_port()
379 val |= amdgpu_connector->router.cd_mux_state; in amdgpu_i2c_router_select_cd_port()
380 amdgpu_i2c_put_byte(amdgpu_connector->router_bus, in amdgpu_i2c_router_select_cd_port()
381 amdgpu_connector->router.i2c_addr, in amdgpu_i2c_router_select_cd_port()