[alsa-devel] [PATCH 0/5] [RFC] ALSA ASoC Support for TLVaic23b audio codec
Troy Kisky
troy.kisky at boundarydevices.com
Mon Sep 29 21:07:53 CEST 2008
Mark Brown wrote:
> On Mon, Sep 29, 2008 at 10:58:43AM -0700, Troy Kisky wrote:
> In the device model the board registers the *device*, the codec (or
> whatever) driver registers the *driver* - the two are separated. The
> driver core then instantiates the drivers based on what the board
> specifies. There's not really any overlap between the two areas that I
> can see.
>
> Otherwise could you explain in more detail where you see the code
> duplication coming from?
My point, though admittedly a minor one, was that the I2C device
or spi device could be initialized before the codec is probed.
That would be moving code from codec files into board files.
Better would be moving the code into a common soc directory file.
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+/*
+ * If the i2c layer weren't so broken, we could pass this kind of data
+ * around
+ */
+static int aic23_codec_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *i2c_id)
+{
+ struct snd_soc_device *socdev = aic23_socdev;
+ struct snd_soc_codec *codec = socdev->codec;
+ int ret;
+
+ if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
+ return -EINVAL;
+
+
+ i2c_set_clientdata(i2c, codec);
+ codec->control_data = i2c;
+
....
+ ret = aic23_init(socdev);
+ if (ret < 0) {
+ printk(KERN_ERR "aic23: failed to initialise AIC23\n");
+ goto err;
+ }
... The above would move to codec probe
+ return ret;
+
+err:
+ kfree(codec);
+ kfree(i2c);
+ return ret;
+}
+static int __exit aic23_i2c_remove(struct i2c_client *i2c)
+{
+
+ put_device(&i2c->dev);
+ return 0;
+}
+
+static const struct i2c_device_id tlvaic23b_id[] = {
+ {"tlvaic23b", 0},
+ {}
+};
+
+MODULE_DEVICE_TABLE(i2c, tlvaic23b_id);
+
+static struct i2c_driver aic23b_i2c_driver = {
+ .driver = {
+ .name = "tlvaic23b",
+ },
+ .probe = aic23_codec_probe,
+ .remove = __exit_p(aic23_i2c_remove),
+ .id_table = tlvaic23b_id,
+};
+
+#endif
If this code could be generalized to be useable by most
codecs, I think the code would look better. This is the
"almost" duplication to which I'm referring.
Troy
More information about the Alsa-devel
mailing list