diff options
-rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 28 |
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 | ||
773 | static struct drm_dp_aux *i2c_to_aux(struct i2c_adapter *i2c) | ||
774 | { | ||
775 | return container_of(i2c, struct drm_dp_aux, ddc); | ||
776 | } | ||
777 | |||
778 | static void lock_bus(struct i2c_adapter *i2c, unsigned int flags) | ||
779 | { | ||
780 | mutex_lock(&i2c_to_aux(i2c)->hw_mutex); | ||
781 | } | ||
782 | |||
783 | static int trylock_bus(struct i2c_adapter *i2c, unsigned int flags) | ||
784 | { | ||
785 | return mutex_trylock(&i2c_to_aux(i2c)->hw_mutex); | ||
786 | } | ||
787 | |||
788 | static 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; |