Commit 2624d5fa67a5d3d720613a4ab0672e8c387ba806

Authored by Mark Brown
1 parent 529697c546

ASoC: Move sysfs and debugfs functions to head of soc-core.c

A fairly hefty change in diff terms but no actual code changes, will be
used by the next commit.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Showing 1 changed file with 167 additions and 167 deletions Side-by-side Diff

sound/soc/soc-core.c
... ... @@ -80,6 +80,173 @@
80 80 return ret;
81 81 }
82 82  
  83 +/* codec register dump */
  84 +static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
  85 +{
  86 + int i, step = 1, count = 0;
  87 +
  88 + if (!codec->reg_cache_size)
  89 + return 0;
  90 +
  91 + if (codec->reg_cache_step)
  92 + step = codec->reg_cache_step;
  93 +
  94 + count += sprintf(buf, "%s registers\n", codec->name);
  95 + for (i = 0; i < codec->reg_cache_size; i += step) {
  96 + if (codec->readable_register && !codec->readable_register(i))
  97 + continue;
  98 +
  99 + count += sprintf(buf + count, "%2x: ", i);
  100 + if (count >= PAGE_SIZE - 1)
  101 + break;
  102 +
  103 + if (codec->display_register)
  104 + count += codec->display_register(codec, buf + count,
  105 + PAGE_SIZE - count, i);
  106 + else
  107 + count += snprintf(buf + count, PAGE_SIZE - count,
  108 + "%4x", codec->read(codec, i));
  109 +
  110 + if (count >= PAGE_SIZE - 1)
  111 + break;
  112 +
  113 + count += snprintf(buf + count, PAGE_SIZE - count, "\n");
  114 + if (count >= PAGE_SIZE - 1)
  115 + break;
  116 + }
  117 +
  118 + /* Truncate count; min() would cause a warning */
  119 + if (count >= PAGE_SIZE)
  120 + count = PAGE_SIZE - 1;
  121 +
  122 + return count;
  123 +}
  124 +static ssize_t codec_reg_show(struct device *dev,
  125 + struct device_attribute *attr, char *buf)
  126 +{
  127 + struct snd_soc_device *devdata = dev_get_drvdata(dev);
  128 + return soc_codec_reg_show(devdata->card->codec, buf);
  129 +}
  130 +
  131 +static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
  132 +
  133 +#ifdef CONFIG_DEBUG_FS
  134 +static int codec_reg_open_file(struct inode *inode, struct file *file)
  135 +{
  136 + file->private_data = inode->i_private;
  137 + return 0;
  138 +}
  139 +
  140 +static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf,
  141 + size_t count, loff_t *ppos)
  142 +{
  143 + ssize_t ret;
  144 + struct snd_soc_codec *codec = file->private_data;
  145 + char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
  146 + if (!buf)
  147 + return -ENOMEM;
  148 + ret = soc_codec_reg_show(codec, buf);
  149 + if (ret >= 0)
  150 + ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
  151 + kfree(buf);
  152 + return ret;
  153 +}
  154 +
  155 +static ssize_t codec_reg_write_file(struct file *file,
  156 + const char __user *user_buf, size_t count, loff_t *ppos)
  157 +{
  158 + char buf[32];
  159 + int buf_size;
  160 + char *start = buf;
  161 + unsigned long reg, value;
  162 + int step = 1;
  163 + struct snd_soc_codec *codec = file->private_data;
  164 +
  165 + buf_size = min(count, (sizeof(buf)-1));
  166 + if (copy_from_user(buf, user_buf, buf_size))
  167 + return -EFAULT;
  168 + buf[buf_size] = 0;
  169 +
  170 + if (codec->reg_cache_step)
  171 + step = codec->reg_cache_step;
  172 +
  173 + while (*start == ' ')
  174 + start++;
  175 + reg = simple_strtoul(start, &start, 16);
  176 + if ((reg >= codec->reg_cache_size) || (reg % step))
  177 + return -EINVAL;
  178 + while (*start == ' ')
  179 + start++;
  180 + if (strict_strtoul(start, 16, &value))
  181 + return -EINVAL;
  182 + codec->write(codec, reg, value);
  183 + return buf_size;
  184 +}
  185 +
  186 +static const struct file_operations codec_reg_fops = {
  187 + .open = codec_reg_open_file,
  188 + .read = codec_reg_read_file,
  189 + .write = codec_reg_write_file,
  190 +};
  191 +
  192 +static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
  193 +{
  194 + char codec_root[128];
  195 +
  196 + if (codec->dev)
  197 + snprintf(codec_root, sizeof(codec_root),
  198 + "%s.%s", codec->name, dev_name(codec->dev));
  199 + else
  200 + snprintf(codec_root, sizeof(codec_root),
  201 + "%s", codec->name);
  202 +
  203 + codec->debugfs_codec_root = debugfs_create_dir(codec_root,
  204 + debugfs_root);
  205 + if (!codec->debugfs_codec_root) {
  206 + printk(KERN_WARNING
  207 + "ASoC: Failed to create codec debugfs directory\n");
  208 + return;
  209 + }
  210 +
  211 + codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
  212 + codec->debugfs_codec_root,
  213 + codec, &codec_reg_fops);
  214 + if (!codec->debugfs_reg)
  215 + printk(KERN_WARNING
  216 + "ASoC: Failed to create codec register debugfs file\n");
  217 +
  218 + codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
  219 + codec->debugfs_codec_root,
  220 + &codec->pop_time);
  221 + if (!codec->debugfs_pop_time)
  222 + printk(KERN_WARNING
  223 + "Failed to create pop time debugfs file\n");
  224 +
  225 + codec->debugfs_dapm = debugfs_create_dir("dapm",
  226 + codec->debugfs_codec_root);
  227 + if (!codec->debugfs_dapm)
  228 + printk(KERN_WARNING
  229 + "Failed to create DAPM debugfs directory\n");
  230 +
  231 + snd_soc_dapm_debugfs_init(codec);
  232 +}
  233 +
  234 +static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
  235 +{
  236 + debugfs_remove_recursive(codec->debugfs_codec_root);
  237 +}
  238 +
  239 +#else
  240 +
  241 +static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec)
  242 +{
  243 +}
  244 +
  245 +static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
  246 +{
  247 +}
  248 +#endif
  249 +
83 250 #ifdef CONFIG_SND_SOC_AC97_BUS
84 251 /* unregister ac97 codec */
85 252 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
... ... @@ -1110,173 +1277,6 @@
1110 1277 return 0;
1111 1278 }
1112 1279 EXPORT_SYMBOL_GPL(snd_soc_codec_volatile_register);
1113   -
1114   -/* codec register dump */
1115   -static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
1116   -{
1117   - int i, step = 1, count = 0;
1118   -
1119   - if (!codec->reg_cache_size)
1120   - return 0;
1121   -
1122   - if (codec->reg_cache_step)
1123   - step = codec->reg_cache_step;
1124   -
1125   - count += sprintf(buf, "%s registers\n", codec->name);
1126   - for (i = 0; i < codec->reg_cache_size; i += step) {
1127   - if (codec->readable_register && !codec->readable_register(i))
1128   - continue;
1129   -
1130   - count += sprintf(buf + count, "%2x: ", i);
1131   - if (count >= PAGE_SIZE - 1)
1132   - break;
1133   -
1134   - if (codec->display_register)
1135   - count += codec->display_register(codec, buf + count,
1136   - PAGE_SIZE - count, i);
1137   - else
1138   - count += snprintf(buf + count, PAGE_SIZE - count,
1139   - "%4x", codec->read(codec, i));
1140   -
1141   - if (count >= PAGE_SIZE - 1)
1142   - break;
1143   -
1144   - count += snprintf(buf + count, PAGE_SIZE - count, "\n");
1145   - if (count >= PAGE_SIZE - 1)
1146   - break;
1147   - }
1148   -
1149   - /* Truncate count; min() would cause a warning */
1150   - if (count >= PAGE_SIZE)
1151   - count = PAGE_SIZE - 1;
1152   -
1153   - return count;
1154   -}
1155   -static ssize_t codec_reg_show(struct device *dev,
1156   - struct device_attribute *attr, char *buf)
1157   -{
1158   - struct snd_soc_device *devdata = dev_get_drvdata(dev);
1159   - return soc_codec_reg_show(devdata->card->codec, buf);
1160   -}
1161   -
1162   -static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
1163   -
1164   -#ifdef CONFIG_DEBUG_FS
1165   -static int codec_reg_open_file(struct inode *inode, struct file *file)
1166   -{
1167   - file->private_data = inode->i_private;
1168   - return 0;
1169   -}
1170   -
1171   -static ssize_t codec_reg_read_file(struct file *file, char __user *user_buf,
1172   - size_t count, loff_t *ppos)
1173   -{
1174   - ssize_t ret;
1175   - struct snd_soc_codec *codec = file->private_data;
1176   - char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
1177   - if (!buf)
1178   - return -ENOMEM;
1179   - ret = soc_codec_reg_show(codec, buf);
1180   - if (ret >= 0)
1181   - ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
1182   - kfree(buf);
1183   - return ret;
1184   -}
1185   -
1186   -static ssize_t codec_reg_write_file(struct file *file,
1187   - const char __user *user_buf, size_t count, loff_t *ppos)
1188   -{
1189   - char buf[32];
1190   - int buf_size;
1191   - char *start = buf;
1192   - unsigned long reg, value;
1193   - int step = 1;
1194   - struct snd_soc_codec *codec = file->private_data;
1195   -
1196   - buf_size = min(count, (sizeof(buf)-1));
1197   - if (copy_from_user(buf, user_buf, buf_size))
1198   - return -EFAULT;
1199   - buf[buf_size] = 0;
1200   -
1201   - if (codec->reg_cache_step)
1202   - step = codec->reg_cache_step;
1203   -
1204   - while (*start == ' ')
1205   - start++;
1206   - reg = simple_strtoul(start, &start, 16);
1207   - if ((reg >= codec->reg_cache_size) || (reg % step))
1208   - return -EINVAL;
1209   - while (*start == ' ')
1210   - start++;
1211   - if (strict_strtoul(start, 16, &value))
1212   - return -EINVAL;
1213   - codec->write(codec, reg, value);
1214   - return buf_size;
1215   -}
1216   -
1217   -static const struct file_operations codec_reg_fops = {
1218   - .open = codec_reg_open_file,
1219   - .read = codec_reg_read_file,
1220   - .write = codec_reg_write_file,
1221   -};
1222   -
1223   -static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
1224   -{
1225   - char codec_root[128];
1226   -
1227   - if (codec->dev)
1228   - snprintf(codec_root, sizeof(codec_root),
1229   - "%s.%s", codec->name, dev_name(codec->dev));
1230   - else
1231   - snprintf(codec_root, sizeof(codec_root),
1232   - "%s", codec->name);
1233   -
1234   - codec->debugfs_codec_root = debugfs_create_dir(codec_root,
1235   - debugfs_root);
1236   - if (!codec->debugfs_codec_root) {
1237   - printk(KERN_WARNING
1238   - "ASoC: Failed to create codec debugfs directory\n");
1239   - return;
1240   - }
1241   -
1242   - codec->debugfs_reg = debugfs_create_file("codec_reg", 0644,
1243   - codec->debugfs_codec_root,
1244   - codec, &codec_reg_fops);
1245   - if (!codec->debugfs_reg)
1246   - printk(KERN_WARNING
1247   - "ASoC: Failed to create codec register debugfs file\n");
1248   -
1249   - codec->debugfs_pop_time = debugfs_create_u32("dapm_pop_time", 0744,
1250   - codec->debugfs_codec_root,
1251   - &codec->pop_time);
1252   - if (!codec->debugfs_pop_time)
1253   - printk(KERN_WARNING
1254   - "Failed to create pop time debugfs file\n");
1255   -
1256   - codec->debugfs_dapm = debugfs_create_dir("dapm",
1257   - codec->debugfs_codec_root);
1258   - if (!codec->debugfs_dapm)
1259   - printk(KERN_WARNING
1260   - "Failed to create DAPM debugfs directory\n");
1261   -
1262   - snd_soc_dapm_debugfs_init(codec);
1263   -}
1264   -
1265   -static void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
1266   -{
1267   - debugfs_remove_recursive(codec->debugfs_codec_root);
1268   -}
1269   -
1270   -#else
1271   -
1272   -static inline void soc_init_codec_debugfs(struct snd_soc_codec *codec)
1273   -{
1274   -}
1275   -
1276   -static inline void soc_cleanup_codec_debugfs(struct snd_soc_codec *codec)
1277   -{
1278   -}
1279   -#endif
1280 1280  
1281 1281 /**
1282 1282 * snd_soc_new_ac97_codec - initailise AC97 device