Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: sh: fsi: free from NULL pointer of struct sh_fsi_platform_info

Current FSI driver assumed master->info is not NULL.
This patch allow NULL in master->info

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

authored by

Kuninori Morimoto and committed by
Mark Brown
d7c5762b 160afa7f

+17 -4
+17 -4
sound/soc/sh/fsi.c
··· 113 113 114 114 #define FSI_FMTS (SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S16_LE) 115 115 116 + typedef int (*set_rate_func)(struct device *dev, int is_porta, int rate, int enable); 117 + 116 118 /* 117 119 * FSI driver use below type name for variable 118 120 * ··· 271 269 return fsi_get_priv_frm_dai(fsi_get_dai(substream)); 272 270 } 273 271 272 + static set_rate_func fsi_get_info_set_rate(struct fsi_master *master) 273 + { 274 + if (!master->info) 275 + return NULL; 276 + 277 + return master->info->set_rate; 278 + } 279 + 274 280 static u32 fsi_get_info_flags(struct fsi_priv *fsi) 275 281 { 276 282 int is_porta = fsi_is_port_a(fsi); 277 283 struct fsi_master *master = fsi_get_master(fsi); 284 + 285 + if (!master->info) 286 + return 0; 278 287 279 288 return is_porta ? master->info->porta_flags : 280 289 master->info->portb_flags; ··· 843 830 struct fsi_priv *fsi = fsi_get_priv(substream); 844 831 int is_play = fsi_is_play(substream); 845 832 struct fsi_master *master = fsi_get_master(fsi); 846 - int (*set_rate)(struct device *dev, int is_porta, int rate, int enable); 833 + set_rate_func set_rate; 847 834 848 835 fsi_irq_disable(fsi, is_play); 849 836 fsi_clk_ctrl(fsi, 0); 850 837 851 - set_rate = master->info->set_rate; 838 + set_rate = fsi_get_info_set_rate(master); 852 839 if (set_rate && fsi->rate) 853 840 set_rate(dai->dev, fsi_is_port_a(fsi), fsi->rate, 0); 854 841 fsi->rate = 0; ··· 915 902 { 916 903 struct fsi_priv *fsi = fsi_get_priv(substream); 917 904 struct fsi_master *master = fsi_get_master(fsi); 918 - int (*set_rate)(struct device *dev, int is_porta, int rate, int enable); 905 + set_rate_func set_rate; 919 906 int fsi_ver = master->core->ver; 920 907 long rate = params_rate(params); 921 908 int ret; 922 909 923 - set_rate = master->info->set_rate; 910 + set_rate = fsi_get_info_set_rate(master); 924 911 if (!set_rate) 925 912 return 0; 926 913