@@ -1080,21 +1080,25 @@ static int sii902x_init(struct sii902x *sii902x)
1080
1080
return ret ;
1081
1081
}
1082
1082
1083
- sii902x_audio_codec_init (sii902x , dev );
1083
+ ret = sii902x_audio_codec_init (sii902x , dev );
1084
+ if (ret )
1085
+ return ret ;
1084
1086
1085
1087
i2c_set_clientdata (sii902x -> i2c , sii902x );
1086
1088
1087
1089
sii902x -> i2cmux = i2c_mux_alloc (sii902x -> i2c -> adapter , dev ,
1088
1090
1 , 0 , I2C_MUX_GATE ,
1089
1091
sii902x_i2c_bypass_select ,
1090
1092
sii902x_i2c_bypass_deselect );
1091
- if (!sii902x -> i2cmux )
1092
- return - ENOMEM ;
1093
+ if (!sii902x -> i2cmux ) {
1094
+ ret = - ENOMEM ;
1095
+ goto err_unreg_audio ;
1096
+ }
1093
1097
1094
1098
sii902x -> i2cmux -> priv = sii902x ;
1095
1099
ret = i2c_mux_add_adapter (sii902x -> i2cmux , 0 , 0 , 0 );
1096
1100
if (ret )
1097
- return ret ;
1101
+ goto err_unreg_audio ;
1098
1102
1099
1103
sii902x -> bridge .funcs = & sii902x_bridge_funcs ;
1100
1104
sii902x -> bridge .of_node = dev -> of_node ;
@@ -1107,6 +1111,12 @@ static int sii902x_init(struct sii902x *sii902x)
1107
1111
drm_bridge_add (& sii902x -> bridge );
1108
1112
1109
1113
return 0 ;
1114
+
1115
+ err_unreg_audio :
1116
+ if (!PTR_ERR_OR_ZERO (sii902x -> audio .pdev ))
1117
+ platform_device_unregister (sii902x -> audio .pdev );
1118
+
1119
+ return ret ;
1110
1120
}
1111
1121
1112
1122
static int sii902x_probe (struct i2c_client * client )
@@ -1179,6 +1189,9 @@ static void sii902x_remove(struct i2c_client *client)
1179
1189
1180
1190
drm_bridge_remove (& sii902x -> bridge );
1181
1191
i2c_mux_del_adapters (sii902x -> i2cmux );
1192
+
1193
+ if (!PTR_ERR_OR_ZERO (sii902x -> audio .pdev ))
1194
+ platform_device_unregister (sii902x -> audio .pdev );
1182
1195
}
1183
1196
1184
1197
static const struct of_device_id sii902x_dt_ids [] = {
0 commit comments