ALSA: hda - Use regmap for codec parameter reads
authorTakashi Iwai <tiwai@suse.de>
Thu, 26 Feb 2015 12:57:47 +0000 (13:57 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 23 Mar 2015 12:19:37 +0000 (13:19 +0100)
Let's start converting the access functions to regmap.
The first one is the simplest, just converting the codec parameter
read helper function snd_hda_param_read().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/hdaudio.h
sound/hda/hdac_device.c
sound/pci/hda/hda_codec.h

index 47e20b741c51e1d6d7d7abf7892db2a3b38dbc6a..ddfcc44970fac236b44c0088d53adb059a16d227 100644 (file)
@@ -105,12 +105,30 @@ int snd_hdac_exec_verb(struct hdac_device *codec, unsigned int cmd,
                       unsigned int flags, unsigned int *res);
 int snd_hdac_read(struct hdac_device *codec, hda_nid_t nid,
                  unsigned int verb, unsigned int parm, unsigned int *res);
-int snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid, int parm);
+int _snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid, int parm,
+                       unsigned int *res);
 int snd_hdac_get_connections(struct hdac_device *codec, hda_nid_t nid,
                             hda_nid_t *conn_list, int max_conns);
 int snd_hdac_get_sub_nodes(struct hdac_device *codec, hda_nid_t nid,
                           hda_nid_t *start_id);
 
+/**
+ * snd_hdac_read_parm - read a codec parameter
+ * @codec: the codec object
+ * @nid: NID to read a parameter
+ * @parm: parameter to read
+ *
+ * Returns -1 for error.  If you need to distinguish the error more
+ * strictly, use _snd_hdac_read_parm() directly.
+ */
+static inline int snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid,
+                                    int parm)
+{
+       unsigned int val;
+
+       return _snd_hdac_read_parm(codec, nid, parm, &val) < 0 ? -1 : val;
+}
+
 #ifdef CONFIG_PM
 void snd_hdac_power_up(struct hdac_device *codec);
 void snd_hdac_power_down(struct hdac_device *codec);
index 6e8ee1d6974a2322fb9eb94b7ffe8f1bdb4625d7..ba9c1fc6e3ea1b1d1864c56cf4e24845fb3a8026 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/export.h>
 #include <linux/pm_runtime.h>
 #include <sound/hdaudio.h>
+#include <sound/hda_regmap.h>
 #include "local.h"
 
 static void setup_fg_nodes(struct hdac_device *codec);
@@ -234,23 +235,19 @@ int snd_hdac_read(struct hdac_device *codec, hda_nid_t nid,
 EXPORT_SYMBOL_GPL(snd_hdac_read);
 
 /**
- * snd_hdac_read_parm - read a codec parameter
- * @codec: the codec object
- * @nid: NID to read a parameter
- * @parm: parameter to read
+ * _snd_hdac_read_parm - read a parmeter
  *
- * Returns -1 for error.  If you need to distinguish the error more
- * strictly, use snd_hdac_read() directly.
+ * This function returns zero or an error unlike snd_hdac_read_parm().
  */
-int snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid, int parm)
+int _snd_hdac_read_parm(struct hdac_device *codec, hda_nid_t nid, int parm,
+                       unsigned int *res)
 {
-       int val;
+       unsigned int cmd;
 
-       if (snd_hdac_read(codec, nid, AC_VERB_PARAMETERS, parm, &val))
-               return -1;
-       return val;
+       cmd = snd_hdac_regmap_encode_verb(nid, AC_VERB_PARAMETERS) | parm;
+       return snd_hdac_regmap_read_raw(codec, cmd, res);
 }
-EXPORT_SYMBOL_GPL(snd_hdac_read_parm);
+EXPORT_SYMBOL_GPL(_snd_hdac_read_parm);
 
 /**
  * snd_hdac_get_sub_nodes - get start NID and number of subtree nodes
index 0f5749ca1600c53ab631c408d9f7fff9f4e4922b..135b70f066f1ad17bd177449a9a16632ec8971a8 100644 (file)
@@ -369,7 +369,7 @@ unsigned int snd_hda_codec_read(struct hda_codec *codec, hda_nid_t nid,
 int snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int flags,
                        unsigned int verb, unsigned int parm);
 #define snd_hda_param_read(codec, nid, param) \
-       snd_hda_codec_read(codec, nid, 0, AC_VERB_PARAMETERS, param)
+       snd_hdac_read_parm(&(codec)->core, nid, param)
 #define snd_hda_get_sub_nodes(codec, nid, start_nid) \
        snd_hdac_get_sub_nodes(&(codec)->core, nid, start_nid)
 int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid,