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
3ee3f454
Commit
3ee3f454
authored
Dec 08, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/cache' into asoc-next
parents
063e01a2
427d204c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
12 additions
and
185 deletions
+12
-185
include/sound/soc.h
include/sound/soc.h
+12
-7
include/trace/events/asoc.h
include/trace/events/asoc.h
+0
-25
sound/soc/soc-cache.c
sound/soc/soc-cache.c
+0
-149
sound/soc/soc-core.c
sound/soc/soc-core.c
+0
-4
No files found.
include/sound/soc.h
View file @
3ee3f454
...
...
@@ -409,13 +409,9 @@ int devm_snd_soc_register_component(struct device *dev,
const
struct
snd_soc_component_driver
*
cmpnt_drv
,
struct
snd_soc_dai_driver
*
dai_drv
,
int
num_dai
);
void
snd_soc_unregister_component
(
struct
device
*
dev
);
int
snd_soc_cache_sync
(
struct
snd_soc_codec
*
codec
);
int
snd_soc_cache_init
(
struct
snd_soc_codec
*
codec
);
int
snd_soc_cache_exit
(
struct
snd_soc_codec
*
codec
);
int
snd_soc_cache_write
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
value
);
int
snd_soc_cache_read
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
*
value
);
int
snd_soc_platform_read
(
struct
snd_soc_platform
*
platform
,
unsigned
int
reg
);
int
snd_soc_platform_write
(
struct
snd_soc_platform
*
platform
,
...
...
@@ -791,13 +787,11 @@ struct snd_soc_codec {
unsigned
int
ac97_registered
:
1
;
/* Codec has been AC97 registered */
unsigned
int
ac97_created
:
1
;
/* Codec has been created by SoC */
unsigned
int
cache_init
:
1
;
/* codec cache has been initialized */
u32
cache_sync
;
/* Cache needs to be synced to hardware */
/* codec IO */
void
*
control_data
;
/* codec control (i2c/3wire) data */
hw_write_t
hw_write
;
void
*
reg_cache
;
struct
mutex
cache_rw_mutex
;
/* component */
struct
snd_soc_component
component
;
...
...
@@ -1264,6 +1258,17 @@ unsigned int snd_soc_read(struct snd_soc_codec *codec, unsigned int reg);
int
snd_soc_write
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
val
);
/**
* snd_soc_cache_sync() - Sync the register cache with the hardware
* @codec: CODEC to sync
*
* Note: This function will call regcache_sync()
*/
static
inline
int
snd_soc_cache_sync
(
struct
snd_soc_codec
*
codec
)
{
return
regcache_sync
(
codec
->
component
.
regmap
);
}
/* component IO */
int
snd_soc_component_read
(
struct
snd_soc_component
*
component
,
unsigned
int
reg
,
unsigned
int
*
val
);
...
...
include/trace/events/asoc.h
View file @
3ee3f454
...
...
@@ -288,31 +288,6 @@ TRACE_EVENT(snd_soc_jack_notify,
TP_printk
(
"jack=%s %x"
,
__get_str
(
name
),
(
int
)
__entry
->
val
)
);
TRACE_EVENT
(
snd_soc_cache_sync
,
TP_PROTO
(
struct
snd_soc_codec
*
codec
,
const
char
*
type
,
const
char
*
status
),
TP_ARGS
(
codec
,
type
,
status
),
TP_STRUCT__entry
(
__string
(
name
,
codec
->
component
.
name
)
__string
(
status
,
status
)
__string
(
type
,
type
)
__field
(
int
,
id
)
),
TP_fast_assign
(
__assign_str
(
name
,
codec
->
component
.
name
);
__assign_str
(
status
,
status
);
__assign_str
(
type
,
type
);
__entry
->
id
=
codec
->
component
.
id
;
),
TP_printk
(
"codec=%s.%d type=%s status=%s"
,
__get_str
(
name
),
(
int
)
__entry
->
id
,
__get_str
(
type
),
__get_str
(
status
))
);
#endif
/* _TRACE_ASOC_H */
/* This part must be outside protection */
...
...
sound/soc/soc-cache.c
View file @
3ee3f454
...
...
@@ -15,56 +15,6 @@
#include <linux/export.h>
#include <linux/slab.h>
#include <trace/events/asoc.h>
static
bool
snd_soc_set_cache_val
(
void
*
base
,
unsigned
int
idx
,
unsigned
int
val
,
unsigned
int
word_size
)
{
switch
(
word_size
)
{
case
1
:
{
u8
*
cache
=
base
;
if
(
cache
[
idx
]
==
val
)
return
true
;
cache
[
idx
]
=
val
;
break
;
}
case
2
:
{
u16
*
cache
=
base
;
if
(
cache
[
idx
]
==
val
)
return
true
;
cache
[
idx
]
=
val
;
break
;
}
default:
WARN
(
1
,
"Invalid word_size %d
\n
"
,
word_size
);
break
;
}
return
false
;
}
static
unsigned
int
snd_soc_get_cache_val
(
const
void
*
base
,
unsigned
int
idx
,
unsigned
int
word_size
)
{
if
(
!
base
)
return
-
1
;
switch
(
word_size
)
{
case
1
:
{
const
u8
*
cache
=
base
;
return
cache
[
idx
];
}
case
2
:
{
const
u16
*
cache
=
base
;
return
cache
[
idx
];
}
default:
WARN
(
1
,
"Invalid word_size %d
\n
"
,
word_size
);
break
;
}
/* unreachable */
return
-
1
;
}
int
snd_soc_cache_init
(
struct
snd_soc_codec
*
codec
)
{
const
struct
snd_soc_codec_driver
*
codec_drv
=
codec
->
driver
;
...
...
@@ -75,8 +25,6 @@ int snd_soc_cache_init(struct snd_soc_codec *codec)
if
(
!
reg_size
)
return
0
;
mutex_init
(
&
codec
->
cache_rw_mutex
);
dev_dbg
(
codec
->
dev
,
"ASoC: Initializing cache for %s codec
\n
"
,
codec
->
component
.
name
);
...
...
@@ -103,100 +51,3 @@ int snd_soc_cache_exit(struct snd_soc_codec *codec)
codec
->
reg_cache
=
NULL
;
return
0
;
}
/**
* snd_soc_cache_read: Fetch the value of a given register from the cache.
*
* @codec: CODEC to configure.
* @reg: The register index.
* @value: The value to be returned.
*/
int
snd_soc_cache_read
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
*
value
)
{
if
(
!
value
)
return
-
EINVAL
;
mutex_lock
(
&
codec
->
cache_rw_mutex
);
if
(
!
ZERO_OR_NULL_PTR
(
codec
->
reg_cache
))
*
value
=
snd_soc_get_cache_val
(
codec
->
reg_cache
,
reg
,
codec
->
driver
->
reg_word_size
);
mutex_unlock
(
&
codec
->
cache_rw_mutex
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_cache_read
);
/**
* snd_soc_cache_write: Set the value of a given register in the cache.
*
* @codec: CODEC to configure.
* @reg: The register index.
* @value: The new register value.
*/
int
snd_soc_cache_write
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
value
)
{
mutex_lock
(
&
codec
->
cache_rw_mutex
);
if
(
!
ZERO_OR_NULL_PTR
(
codec
->
reg_cache
))
snd_soc_set_cache_val
(
codec
->
reg_cache
,
reg
,
value
,
codec
->
driver
->
reg_word_size
);
mutex_unlock
(
&
codec
->
cache_rw_mutex
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_cache_write
);
static
int
snd_soc_flat_cache_sync
(
struct
snd_soc_codec
*
codec
)
{
int
i
;
int
ret
;
const
struct
snd_soc_codec_driver
*
codec_drv
;
unsigned
int
val
;
codec_drv
=
codec
->
driver
;
for
(
i
=
0
;
i
<
codec_drv
->
reg_cache_size
;
++
i
)
{
ret
=
snd_soc_cache_read
(
codec
,
i
,
&
val
);
if
(
ret
)
return
ret
;
if
(
codec_drv
->
reg_cache_default
)
if
(
snd_soc_get_cache_val
(
codec_drv
->
reg_cache_default
,
i
,
codec_drv
->
reg_word_size
)
==
val
)
continue
;
ret
=
snd_soc_write
(
codec
,
i
,
val
);
if
(
ret
)
return
ret
;
dev_dbg
(
codec
->
dev
,
"ASoC: Synced register %#x, value = %#x
\n
"
,
i
,
val
);
}
return
0
;
}
/**
* snd_soc_cache_sync: Sync the register cache with the hardware.
*
* @codec: CODEC to configure.
*
* Any registers that should not be synced should be marked as
* volatile. In general drivers can choose not to use the provided
* syncing functionality if they so require.
*/
int
snd_soc_cache_sync
(
struct
snd_soc_codec
*
codec
)
{
const
char
*
name
=
"flat"
;
int
ret
;
if
(
!
codec
->
cache_sync
)
return
0
;
dev_dbg
(
codec
->
dev
,
"ASoC: Syncing cache for %s codec
\n
"
,
codec
->
component
.
name
);
trace_snd_soc_cache_sync
(
codec
,
name
,
"start"
);
ret
=
snd_soc_flat_cache_sync
(
codec
);
if
(
!
ret
)
codec
->
cache_sync
=
0
;
trace_snd_soc_cache_sync
(
codec
,
name
,
"end"
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_cache_sync
);
sound/soc/soc-core.c
View file @
3ee3f454
...
...
@@ -309,9 +309,6 @@ static void soc_init_codec_debugfs(struct snd_soc_component *component)
{
struct
snd_soc_codec
*
codec
=
snd_soc_component_to_codec
(
component
);
debugfs_create_bool
(
"cache_sync"
,
0444
,
codec
->
component
.
debugfs_root
,
&
codec
->
cache_sync
);
codec
->
debugfs_reg
=
debugfs_create_file
(
"codec_reg"
,
0644
,
codec
->
component
.
debugfs_root
,
codec
,
&
codec_reg_fops
);
...
...
@@ -656,7 +653,6 @@ int snd_soc_suspend(struct device *dev)
if
(
codec
->
driver
->
suspend
)
codec
->
driver
->
suspend
(
codec
);
codec
->
suspended
=
1
;
codec
->
cache_sync
=
1
;
if
(
codec
->
component
.
regmap
)
regcache_mark_dirty
(
codec
->
component
.
regmap
);
/* deactivate pins to sleep state */
...
...
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