drm/radeon/kms: Simplify I2C post_xfer function
There is no point in re-doing in post_xfer all the initialization that was already done by pre_xfer. Instead, only do the work which differs from pre_xfer. Signed-off-by: Jean Delvare <jdelvare@suse.de> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
a88cab2bb1
commit
43e5f61257
1 changed files with 22 additions and 26 deletions
|
@ -81,8 +81,9 @@ bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool requires_e
|
||||||
|
|
||||||
/* bit banging i2c */
|
/* bit banging i2c */
|
||||||
|
|
||||||
static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
|
static int pre_xfer(struct i2c_adapter *i2c_adap)
|
||||||
{
|
{
|
||||||
|
struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
|
||||||
struct radeon_device *rdev = i2c->dev->dev_private;
|
struct radeon_device *rdev = i2c->dev->dev_private;
|
||||||
struct radeon_i2c_bus_rec *rec = &i2c->rec;
|
struct radeon_i2c_bus_rec *rec = &i2c->rec;
|
||||||
uint32_t temp;
|
uint32_t temp;
|
||||||
|
@ -137,19 +138,30 @@ static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
|
||||||
WREG32(rec->en_data_reg, temp);
|
WREG32(rec->en_data_reg, temp);
|
||||||
|
|
||||||
/* mask the gpio pins for software use */
|
/* mask the gpio pins for software use */
|
||||||
temp = RREG32(rec->mask_clk_reg);
|
temp = RREG32(rec->mask_clk_reg) | rec->mask_clk_mask;
|
||||||
if (lock_state)
|
|
||||||
temp |= rec->mask_clk_mask;
|
|
||||||
else
|
|
||||||
temp &= ~rec->mask_clk_mask;
|
|
||||||
WREG32(rec->mask_clk_reg, temp);
|
WREG32(rec->mask_clk_reg, temp);
|
||||||
temp = RREG32(rec->mask_clk_reg);
|
temp = RREG32(rec->mask_clk_reg);
|
||||||
|
|
||||||
|
temp = RREG32(rec->mask_data_reg) | rec->mask_data_mask;
|
||||||
|
WREG32(rec->mask_data_reg, temp);
|
||||||
temp = RREG32(rec->mask_data_reg);
|
temp = RREG32(rec->mask_data_reg);
|
||||||
if (lock_state)
|
|
||||||
temp |= rec->mask_data_mask;
|
return 0;
|
||||||
else
|
}
|
||||||
temp &= ~rec->mask_data_mask;
|
|
||||||
|
static void post_xfer(struct i2c_adapter *i2c_adap)
|
||||||
|
{
|
||||||
|
struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
|
||||||
|
struct radeon_device *rdev = i2c->dev->dev_private;
|
||||||
|
struct radeon_i2c_bus_rec *rec = &i2c->rec;
|
||||||
|
uint32_t temp;
|
||||||
|
|
||||||
|
/* unmask the gpio pins for software use */
|
||||||
|
temp = RREG32(rec->mask_clk_reg) & ~rec->mask_clk_mask;
|
||||||
|
WREG32(rec->mask_clk_reg, temp);
|
||||||
|
temp = RREG32(rec->mask_clk_reg);
|
||||||
|
|
||||||
|
temp = RREG32(rec->mask_data_reg) & ~rec->mask_data_mask;
|
||||||
WREG32(rec->mask_data_reg, temp);
|
WREG32(rec->mask_data_reg, temp);
|
||||||
temp = RREG32(rec->mask_data_reg);
|
temp = RREG32(rec->mask_data_reg);
|
||||||
}
|
}
|
||||||
|
@ -209,22 +221,6 @@ static void set_data(void *i2c_priv, int data)
|
||||||
WREG32(rec->en_data_reg, val);
|
WREG32(rec->en_data_reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pre_xfer(struct i2c_adapter *i2c_adap)
|
|
||||||
{
|
|
||||||
struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
|
|
||||||
|
|
||||||
radeon_i2c_do_lock(i2c, 1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void post_xfer(struct i2c_adapter *i2c_adap)
|
|
||||||
{
|
|
||||||
struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
|
|
||||||
|
|
||||||
radeon_i2c_do_lock(i2c, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* hw i2c */
|
/* hw i2c */
|
||||||
|
|
||||||
static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
|
static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
|
||||||
|
|
Loading…
Reference in a new issue