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
Kirill Smelkov
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
Show 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