aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_dp_helper.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index eeaf5a7c3aa7..4b088afa21b2 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -708,8 +708,6 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
708 708
709 memset(&msg, 0, sizeof(msg)); 709 memset(&msg, 0, sizeof(msg));
710 710
711 mutex_lock(&aux->hw_mutex);
712
713 for (i = 0; i < num; i++) { 711 for (i = 0; i < num; i++) {
714 msg.address = msgs[i].addr; 712 msg.address = msgs[i].addr;
715 drm_dp_i2c_msg_set_request(&msg, &msgs[i]); 713 drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
@@ -764,8 +762,6 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
764 msg.size = 0; 762 msg.size = 0;
765 (void)drm_dp_i2c_do_msg(aux, &msg); 763 (void)drm_dp_i2c_do_msg(aux, &msg);
766 764
767 mutex_unlock(&aux->hw_mutex);
768
769 return err; 765 return err;
770} 766}
771 767
@@ -774,6 +770,26 @@ static const struct i2c_algorithm drm_dp_i2c_algo = {
774 .master_xfer = drm_dp_i2c_xfer, 770 .master_xfer = drm_dp_i2c_xfer,
775}; 771};
776 772
773static struct drm_dp_aux *i2c_to_aux(struct i2c_adapter *i2c)
774{
775 return container_of(i2c, struct drm_dp_aux, ddc);
776}
777
778static void lock_bus(struct i2c_adapter *i2c, unsigned int flags)
779{
780 mutex_lock(&i2c_to_aux(i2c)->hw_mutex);
781}
782
783static int trylock_bus(struct i2c_adapter *i2c, unsigned int flags)
784{
785 return mutex_trylock(&i2c_to_aux(i2c)->hw_mutex);
786}
787
788static void unlock_bus(struct i2c_adapter *i2c, unsigned int flags)
789{
790 mutex_unlock(&i2c_to_aux(i2c)->hw_mutex);
791}
792
777/** 793/**
778 * drm_dp_aux_register() - initialise and register aux channel 794 * drm_dp_aux_register() - initialise and register aux channel
779 * @aux: DisplayPort AUX channel 795 * @aux: DisplayPort AUX channel
@@ -790,6 +806,10 @@ int drm_dp_aux_register(struct drm_dp_aux *aux)
790 aux->ddc.algo_data = aux; 806 aux->ddc.algo_data = aux;
791 aux->ddc.retries = 3; 807 aux->ddc.retries = 3;
792 808
809 aux->ddc.lock_bus = lock_bus;
810 aux->ddc.trylock_bus = trylock_bus;
811 aux->ddc.unlock_bus = unlock_bus;
812
793 aux->ddc.class = I2C_CLASS_DDC; 813 aux->ddc.class = I2C_CLASS_DDC;
794 aux->ddc.owner = THIS_MODULE; 814 aux->ddc.owner = THIS_MODULE;
795 aux->ddc.dev.parent = aux->dev; 815 aux->ddc.dev.parent = aux->dev;