Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
19142ae6
Commit
19142ae6
authored
Mar 13, 2016
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/pcm179x' into asoc-next
parents
fc122f63
e0236f54
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
196 additions
and
49 deletions
+196
-49
Documentation/devicetree/bindings/sound/pcm179x.txt
Documentation/devicetree/bindings/sound/pcm179x.txt
+10
-1
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+18
-2
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+4
-0
sound/soc/codecs/pcm179x-i2c.c
sound/soc/codecs/pcm179x-i2c.c
+73
-0
sound/soc/codecs/pcm179x-spi.c
sound/soc/codecs/pcm179x-spi.c
+72
-0
sound/soc/codecs/pcm179x.c
sound/soc/codecs/pcm179x.c
+14
-42
sound/soc/codecs/pcm179x.h
sound/soc/codecs/pcm179x.h
+5
-4
No files found.
Documentation/devicetree/bindings/sound/pcm179x.txt
View file @
19142ae6
Texas Instruments pcm179x DT bindings
This driver supports
the
SPI bus.
This driver supports
both the I2C and
SPI bus.
Required properties:
...
...
@@ -9,6 +9,11 @@ Required properties:
For required properties on SPI, please consult
Documentation/devicetree/bindings/spi/spi-bus.txt
Required properties on I2C:
- reg: the I2C address
Examples:
codec_spi: 1792a@0 {
...
...
@@ -16,3 +21,7 @@ Examples:
spi-max-frequency = <600000>;
};
codec_i2c: 1792a@4c {
compatible = "ti,pcm1792a";
reg = <0x4c>;
};
sound/soc/codecs/Kconfig
View file @
19142ae6
...
...
@@ -87,7 +87,8 @@ config SND_SOC_ALL_CODECS
select SND_SOC_ML26124 if I2C
select SND_SOC_NAU8825 if I2C
select SND_SOC_PCM1681 if I2C
select SND_SOC_PCM179X if SPI_MASTER
select SND_SOC_PCM179X_I2C if I2C
select SND_SOC_PCM179X_SPI if SPI_MASTER
select SND_SOC_PCM3008
select SND_SOC_PCM3168A_I2C if I2C
select SND_SOC_PCM3168A_SPI if SPI_MASTER
...
...
@@ -528,8 +529,23 @@ config SND_SOC_PCM1681
depends on I2C
config SND_SOC_PCM179X
tristate "Texas Instruments PCM179X CODEC"
tristate
config SND_SOC_PCM179X_I2C
tristate "Texas Instruments PCM179X CODEC (I2C)"
depends on I2C
select SND_SOC_PCM179X
help
Enable support for Texas Instruments PCM179x CODEC.
Select this if your PCM179x is connected via an I2C bus.
config SND_SOC_PCM179X_SPI
tristate "Texas Instruments PCM179X CODEC (SPI)"
depends on SPI_MASTER
select SND_SOC_PCM179X
help
Enable support for Texas Instruments PCM179x CODEC.
Select this if your PCM179x is connected via an SPI bus.
config SND_SOC_PCM3008
tristate
...
...
sound/soc/codecs/Makefile
View file @
19142ae6
...
...
@@ -81,6 +81,8 @@ snd-soc-ml26124-objs := ml26124.o
snd-soc-nau8825-objs
:=
nau8825.o
snd-soc-pcm1681-objs
:=
pcm1681.o
snd-soc-pcm179x-codec-objs
:=
pcm179x.o
snd-soc-pcm179x-i2c-objs
:=
pcm179x-i2c.o
snd-soc-pcm179x-spi-objs
:=
pcm179x-spi.o
snd-soc-pcm3008-objs
:=
pcm3008.o
snd-soc-pcm3168a-objs
:=
pcm3168a.o
snd-soc-pcm3168a-i2c-objs
:=
pcm3168a-i2c.o
...
...
@@ -285,6 +287,8 @@ obj-$(CONFIG_SND_SOC_ML26124) += snd-soc-ml26124.o
obj-$(CONFIG_SND_SOC_NAU8825)
+=
snd-soc-nau8825.o
obj-$(CONFIG_SND_SOC_PCM1681)
+=
snd-soc-pcm1681.o
obj-$(CONFIG_SND_SOC_PCM179X)
+=
snd-soc-pcm179x-codec.o
obj-$(CONFIG_SND_SOC_PCM179X_I2C)
+=
snd-soc-pcm179x-i2c.o
obj-$(CONFIG_SND_SOC_PCM179X_SPI)
+=
snd-soc-pcm179x-spi.o
obj-$(CONFIG_SND_SOC_PCM3008)
+=
snd-soc-pcm3008.o
obj-$(CONFIG_SND_SOC_PCM3168A)
+=
snd-soc-pcm3168a.o
obj-$(CONFIG_SND_SOC_PCM3168A_I2C)
+=
snd-soc-pcm3168a-i2c.o
...
...
sound/soc/codecs/pcm179x-i2c.c
0 → 100644
View file @
19142ae6
/*
* PCM179X ASoC I2C driver
*
* Copyright (c) Teenage Engineering AB 2016
*
* Jacob Siverskog <jacob@teenage.engineering>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/module.h>
#include <linux/of.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
#include "pcm179x.h"
static
int
pcm179x_i2c_probe
(
struct
i2c_client
*
client
,
const
struct
i2c_device_id
*
id
)
{
struct
regmap
*
regmap
;
int
ret
;
regmap
=
devm_regmap_init_i2c
(
client
,
&
pcm179x_regmap_config
);
if
(
IS_ERR
(
regmap
))
{
ret
=
PTR_ERR
(
regmap
);
dev_err
(
&
client
->
dev
,
"Failed to allocate regmap: %d
\n
"
,
ret
);
return
ret
;
}
return
pcm179x_common_init
(
&
client
->
dev
,
regmap
);
}
static
int
pcm179x_i2c_remove
(
struct
i2c_client
*
client
)
{
return
pcm179x_common_exit
(
&
client
->
dev
);
}
static
const
struct
of_device_id
pcm179x_of_match
[]
=
{
{
.
compatible
=
"ti,pcm1792a"
,
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
pcm179x_of_match
);
static
const
struct
i2c_device_id
pcm179x_i2c_ids
[]
=
{
{
"pcm179x"
,
0
},
{
}
};
MODULE_DEVICE_TABLE
(
i2c
,
pcm179x_i2c_ids
);
static
struct
i2c_driver
pcm179x_i2c_driver
=
{
.
driver
=
{
.
name
=
"pcm179x"
,
.
of_match_table
=
of_match_ptr
(
pcm179x_of_match
),
},
.
id_table
=
pcm179x_i2c_ids
,
.
probe
=
pcm179x_i2c_probe
,
.
remove
=
pcm179x_i2c_remove
,
};
module_i2c_driver
(
pcm179x_i2c_driver
);
MODULE_DESCRIPTION
(
"ASoC PCM179X I2C driver"
);
MODULE_AUTHOR
(
"Jacob Siverskog <jacob@teenage.engineering>"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/codecs/pcm179x-spi.c
0 → 100644
View file @
19142ae6
/*
* PCM179X ASoC SPI driver
*
* Copyright (c) Amarula Solutions B.V. 2013
*
* Michael Trimarchi <michael@amarulasolutions.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/module.h>
#include <linux/of.h>
#include <linux/spi/spi.h>
#include <linux/regmap.h>
#include "pcm179x.h"
static
int
pcm179x_spi_probe
(
struct
spi_device
*
spi
)
{
struct
regmap
*
regmap
;
int
ret
;
regmap
=
devm_regmap_init_spi
(
spi
,
&
pcm179x_regmap_config
);
if
(
IS_ERR
(
regmap
))
{
ret
=
PTR_ERR
(
regmap
);
dev_err
(
&
spi
->
dev
,
"Failed to allocate regmap: %d
\n
"
,
ret
);
return
ret
;
}
return
pcm179x_common_init
(
&
spi
->
dev
,
regmap
);
}
static
int
pcm179x_spi_remove
(
struct
spi_device
*
spi
)
{
return
pcm179x_common_exit
(
&
spi
->
dev
);
}
static
const
struct
of_device_id
pcm179x_of_match
[]
=
{
{
.
compatible
=
"ti,pcm1792a"
,
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
pcm179x_of_match
);
static
const
struct
spi_device_id
pcm179x_spi_ids
[]
=
{
{
"pcm179x"
,
0
},
{
},
};
MODULE_DEVICE_TABLE
(
spi
,
pcm179x_spi_ids
);
static
struct
spi_driver
pcm179x_spi_driver
=
{
.
driver
=
{
.
name
=
"pcm179x"
,
.
of_match_table
=
of_match_ptr
(
pcm179x_of_match
),
},
.
id_table
=
pcm179x_spi_ids
,
.
probe
=
pcm179x_spi_probe
,
.
remove
=
pcm179x_spi_remove
,
};
module_spi_driver
(
pcm179x_spi_driver
);
MODULE_DESCRIPTION
(
"ASoC PCM179X SPI driver"
);
MODULE_AUTHOR
(
"Michael Trimarchi <michael@amarulasolutions.com>"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/codecs/pcm179x.c
View file @
19142ae6
...
...
@@ -20,7 +20,6 @@
#include <linux/slab.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/spi/spi.h>
#include <sound/core.h>
#include <sound/pcm.h>
...
...
@@ -29,7 +28,6 @@
#include <sound/soc.h>
#include <sound/tlv.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include "pcm179x.h"
...
...
@@ -189,18 +187,14 @@ static struct snd_soc_dai_driver pcm179x_dai = {
.
stream_name
=
"Playback"
,
.
channels_min
=
2
,
.
channels_max
=
2
,
.
rates
=
PCM1792A_RATES
,
.
rates
=
SNDRV_PCM_RATE_CONTINUOUS
,
.
rate_min
=
10000
,
.
rate_max
=
200000
,
.
formats
=
PCM1792A_FORMATS
,
},
.
ops
=
&
pcm179x_dai_ops
,
};
static
const
struct
of_device_id
pcm179x_of_match
[]
=
{
{
.
compatible
=
"ti,pcm1792a"
,
},
{
}
};
MODULE_DEVICE_TABLE
(
of
,
pcm179x_of_match
);
static
const
struct
regmap_config
pcm179x_regmap
=
{
const
struct
regmap_config
pcm179x_regmap_config
=
{
.
reg_bits
=
8
,
.
val_bits
=
8
,
.
max_register
=
23
,
...
...
@@ -209,6 +203,7 @@ static const struct regmap_config pcm179x_regmap = {
.
writeable_reg
=
pcm179x_writeable_reg
,
.
readable_reg
=
pcm179x_accessible_reg
,
};
EXPORT_SYMBOL_GPL
(
pcm179x_regmap_config
);
static
struct
snd_soc_codec_driver
soc_codec_dev_pcm179x
=
{
.
controls
=
pcm179x_controls
,
...
...
@@ -219,52 +214,29 @@ static struct snd_soc_codec_driver soc_codec_dev_pcm179x = {
.
num_dapm_routes
=
ARRAY_SIZE
(
pcm179x_dapm_routes
),
};
static
int
pcm179x_spi_probe
(
struct
spi_device
*
spi
)
int
pcm179x_common_init
(
struct
device
*
dev
,
struct
regmap
*
regmap
)
{
struct
pcm179x_private
*
pcm179x
;
int
ret
;
pcm179x
=
devm_kzalloc
(
&
spi
->
dev
,
sizeof
(
struct
pcm179x_private
),
pcm179x
=
devm_kzalloc
(
dev
,
sizeof
(
struct
pcm179x_private
),
GFP_KERNEL
);
if
(
!
pcm179x
)
return
-
ENOMEM
;
spi_set_drvdata
(
spi
,
pcm179x
);
pcm179x
->
regmap
=
devm_regmap_init_spi
(
spi
,
&
pcm179x_regmap
);
if
(
IS_ERR
(
pcm179x
->
regmap
))
{
ret
=
PTR_ERR
(
pcm179x
->
regmap
);
dev_err
(
&
spi
->
dev
,
"Failed to register regmap: %d
\n
"
,
ret
);
return
ret
;
}
pcm179x
->
regmap
=
regmap
;
dev_set_drvdata
(
dev
,
pcm179x
);
return
snd_soc_register_codec
(
&
spi
->
dev
,
return
snd_soc_register_codec
(
dev
,
&
soc_codec_dev_pcm179x
,
&
pcm179x_dai
,
1
);
}
EXPORT_SYMBOL_GPL
(
pcm179x_common_init
);
static
int
pcm179x_spi_remove
(
struct
spi_device
*
spi
)
int
pcm179x_common_exit
(
struct
device
*
dev
)
{
snd_soc_unregister_codec
(
&
spi
->
dev
);
snd_soc_unregister_codec
(
dev
);
return
0
;
}
static
const
struct
spi_device_id
pcm179x_spi_ids
[]
=
{
{
"pcm179x"
,
0
},
{
},
};
MODULE_DEVICE_TABLE
(
spi
,
pcm179x_spi_ids
);
static
struct
spi_driver
pcm179x_codec_driver
=
{
.
driver
=
{
.
name
=
"pcm179x"
,
.
of_match_table
=
of_match_ptr
(
pcm179x_of_match
),
},
.
id_table
=
pcm179x_spi_ids
,
.
probe
=
pcm179x_spi_probe
,
.
remove
=
pcm179x_spi_remove
,
};
module_spi_driver
(
pcm179x_codec_driver
);
EXPORT_SYMBOL_GPL
(
pcm179x_common_exit
);
MODULE_DESCRIPTION
(
"ASoC PCM179X driver"
);
MODULE_AUTHOR
(
"Michael Trimarchi <michael@amarulasolutions.com>"
);
...
...
sound/soc/codecs/pcm179x.h
View file @
19142ae6
...
...
@@ -17,11 +17,12 @@
#ifndef __PCM179X_H__
#define __PCM179X_H__
#define PCM1792A_RATES (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_8000_48000 | \
SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \
SNDRV_PCM_RATE_192000)
#define PCM1792A_FORMATS (SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S16_LE)
extern
const
struct
regmap_config
pcm179x_regmap_config
;
int
pcm179x_common_init
(
struct
device
*
dev
,
struct
regmap
*
regmap
);
int
pcm179x_common_exit
(
struct
device
*
dev
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment