@@ -712,6 +712,7 @@ static int gbaudio_init_jack(struct gbaudio_module_info *module,
712
712
struct snd_soc_card * card )
713
713
{
714
714
int ret ;
715
+ struct gbaudio_jack * jack , * n ;
715
716
struct snd_soc_jack_pin * headset , * button ;
716
717
717
718
if (!module -> jack_mask )
@@ -726,14 +727,16 @@ static int gbaudio_init_jack(struct gbaudio_module_info *module,
726
727
727
728
headset -> pin = module -> jack_name ;
728
729
headset -> mask = module -> jack_mask ;
729
-
730
730
ret = snd_soc_card_jack_new (card , module -> jack_name , module -> jack_mask ,
731
- & module -> headset_jack , headset , 1 );
731
+ & module -> headset . jack , headset , 1 );
732
732
if (ret ) {
733
733
dev_err (module -> dev , "Failed to create new jack\n" );
734
734
return ret ;
735
735
}
736
736
737
+ /* Add to module's jack list */
738
+ list_add (& module -> headset .list , & module -> jack_list );
739
+
737
740
if (!module -> button_mask )
738
741
return 0 ;
739
742
@@ -742,20 +745,22 @@ static int gbaudio_init_jack(struct gbaudio_module_info *module,
742
745
button = devm_kzalloc (module -> dev , sizeof (* button ), GFP_KERNEL );
743
746
if (!button ) {
744
747
ret = - ENOMEM ;
745
- goto free_headset ;
748
+ goto free_jacks ;
746
749
}
747
750
748
751
button -> pin = module -> button_name ;
749
752
button -> mask = module -> button_mask ;
750
-
751
753
ret = snd_soc_card_jack_new (card , module -> button_name ,
752
- module -> button_mask , & module -> button_jack ,
754
+ module -> button_mask , & module -> button . jack ,
753
755
button , 1 );
754
756
if (ret ) {
755
757
dev_err (module -> dev , "Failed to create button jack\n" );
756
- goto free_headset ;
758
+ goto free_jacks ;
757
759
}
758
760
761
+ /* Add to module's jack list */
762
+ list_add (& module -> button .list , & module -> jack_list );
763
+
759
764
/*
760
765
* Currently, max 4 buttons are supported with following key mapping
761
766
* BTN_0 = KEY_MEDIA
@@ -765,56 +770,54 @@ static int gbaudio_init_jack(struct gbaudio_module_info *module,
765
770
*/
766
771
767
772
if (module -> button_mask & SND_JACK_BTN_0 ) {
768
- ret = snd_jack_set_key (module -> button_jack .jack , SND_JACK_BTN_0 ,
773
+ ret = snd_jack_set_key (module -> button . jack .jack , SND_JACK_BTN_0 ,
769
774
KEY_MEDIA );
770
775
if (ret ) {
771
776
dev_err (module -> dev , "Failed to set BTN_0\n" );
772
- goto free_button ;
777
+ goto free_jacks ;
773
778
}
774
779
}
775
780
776
781
if (module -> button_mask & SND_JACK_BTN_1 ) {
777
- ret = snd_jack_set_key (module -> button_jack .jack , SND_JACK_BTN_1 ,
782
+ ret = snd_jack_set_key (module -> button . jack .jack , SND_JACK_BTN_1 ,
778
783
KEY_VOICECOMMAND );
779
784
if (ret ) {
780
785
dev_err (module -> dev , "Failed to set BTN_1\n" );
781
- goto free_button ;
786
+ goto free_jacks ;
782
787
}
783
788
}
784
789
785
790
if (module -> button_mask & SND_JACK_BTN_2 ) {
786
- ret = snd_jack_set_key (module -> button_jack .jack , SND_JACK_BTN_2 ,
791
+ ret = snd_jack_set_key (module -> button . jack .jack , SND_JACK_BTN_2 ,
787
792
KEY_VOLUMEUP );
788
793
if (ret ) {
789
794
dev_err (module -> dev , "Failed to set BTN_2\n" );
790
- goto free_button ;
795
+ goto free_jacks ;
791
796
}
792
797
}
793
798
794
799
if (module -> button_mask & SND_JACK_BTN_3 ) {
795
- ret = snd_jack_set_key (module -> button_jack .jack , SND_JACK_BTN_3 ,
800
+ ret = snd_jack_set_key (module -> button . jack .jack , SND_JACK_BTN_3 ,
796
801
KEY_VOLUMEDOWN );
797
802
if (ret ) {
798
803
dev_err (module -> dev , "Failed to set BTN_0\n" );
799
- goto free_button ;
804
+ goto free_jacks ;
800
805
}
801
806
}
802
807
803
808
/* FIXME
804
809
* verify if this is really required
805
810
set_bit(INPUT_PROP_NO_DUMMY_RELEASE,
806
- module->button_jack .jack->input_dev->propbit);
811
+ module->button.jack .jack->input_dev->propbit);
807
812
*/
808
813
809
814
return 0 ;
810
815
811
- free_button :
812
- snd_device_free (card -> snd_card , module -> button_jack .jack );
813
- list_del (& module -> button_jack .list );
814
-
815
- free_headset :
816
- snd_device_free (card -> snd_card , module -> headset_jack .jack );
817
- list_del (& module -> headset_jack .list );
816
+ free_jacks :
817
+ list_for_each_entry_safe (jack , n , & module -> jack_list , list ) {
818
+ snd_device_free (card -> snd_card , jack -> jack .jack );
819
+ list_del (& jack -> list );
820
+ }
818
821
819
822
return ret ;
820
823
}
@@ -824,7 +827,7 @@ int gbaudio_register_module(struct gbaudio_module_info *module)
824
827
int ret ;
825
828
struct snd_soc_codec * codec ;
826
829
struct snd_card * card ;
827
- struct snd_soc_jack * jack = NULL ;
830
+ struct gbaudio_jack * jack = NULL ;
828
831
829
832
if (!gbcodec ) {
830
833
dev_err (module -> dev , "GB Codec not yet probed\n" );
@@ -869,11 +872,9 @@ int gbaudio_register_module(struct gbaudio_module_info *module)
869
872
* register jack devices for this module
870
873
* from codec->jack_list
871
874
*/
872
- list_for_each_entry (jack , & codec -> jack_list , list ) {
873
- if ((jack == & module -> headset_jack ) ||
874
- (jack == & module -> button_jack ))
875
- snd_device_register (codec -> card -> snd_card ,
876
- jack -> jack );
875
+ list_for_each_entry (jack , & module -> jack_list , list ) {
876
+ snd_device_register (codec -> card -> snd_card ,
877
+ jack -> jack .jack );
877
878
}
878
879
#endif
879
880
}
@@ -957,7 +958,7 @@ void gbaudio_unregister_module(struct gbaudio_module_info *module)
957
958
{
958
959
struct snd_soc_codec * codec = gbcodec -> codec ;
959
960
struct snd_card * card = codec -> card -> snd_card ;
960
- struct snd_soc_jack * jack , * next_j ;
961
+ struct gbaudio_jack * jack , * n ;
961
962
int mask ;
962
963
963
964
dev_dbg (codec -> dev , "Unregister %s module\n" , module -> name );
@@ -970,20 +971,19 @@ void gbaudio_unregister_module(struct gbaudio_module_info *module)
970
971
mutex_unlock (& gbcodec -> lock );
971
972
972
973
#ifdef CONFIG_SND_JACK
973
- /* free jack devices for this module from codec->jack_list */
974
- list_for_each_entry_safe (jack , next_j , & component -> card -> jack_list ,
975
- list ) {
976
- if (jack == & module -> headset_jack )
974
+ /* free jack devices for this module jack_list */
975
+ list_for_each_entry_safe (jack , n , & module -> jack_list , list ) {
976
+ if (jack == & module -> headset )
977
977
mask = GBCODEC_JACK_MASK ;
978
- else if (jack == & module -> button_jack )
978
+ else if (jack == & module -> button )
979
979
mask = GBCODEC_JACK_BUTTON_MASK ;
980
980
else
981
981
mask = 0 ;
982
982
if (mask ) {
983
983
dev_dbg (module -> dev , "Report %s removal\n" ,
984
- jack -> jack -> id );
985
- snd_soc_jack_report (jack , 0 , mask );
986
- snd_device_free (codec -> card -> snd_card , jack -> jack );
984
+ jack -> jack . jack -> id );
985
+ snd_soc_jack_report (& jack -> jack , 0 , mask );
986
+ snd_device_free (codec -> card -> snd_card , jack -> jack . jack );
987
987
list_del (& jack -> list );
988
988
}
989
989
}
0 commit comments