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
9eedbdf1
Commit
9eedbdf1
authored
Oct 29, 2009
by
Sascha Hauer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MXC: Add a digital audio multiplexer driver
Signed-off-by:
Sascha Hauer
<
s.hauer@pengutronix.de
>
parent
d8d982b1
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
192 additions
and
0 deletions
+192
-0
arch/arm/mach-mx2/Kconfig
arch/arm/mach-mx2/Kconfig
+2
-0
arch/arm/mach-mx3/Kconfig
arch/arm/mach-mx3/Kconfig
+2
-0
arch/arm/plat-mxc/Kconfig
arch/arm/plat-mxc/Kconfig
+7
-0
arch/arm/plat-mxc/Makefile
arch/arm/plat-mxc/Makefile
+2
-0
arch/arm/plat-mxc/audmux-v1.c
arch/arm/plat-mxc/audmux-v1.c
+53
-0
arch/arm/plat-mxc/audmux-v2.c
arch/arm/plat-mxc/audmux-v2.c
+74
-0
arch/arm/plat-mxc/include/mach/audmux.h
arch/arm/plat-mxc/include/mach/audmux.h
+52
-0
No files found.
arch/arm/mach-mx2/Kconfig
View file @
9eedbdf1
...
...
@@ -6,11 +6,13 @@ choice
config MACH_MX21
bool "i.MX21 support"
select ARCH_MXC_AUDMUX_V1
help
This enables support for Freescale's MX2 based i.MX21 processor.
config MACH_MX27
bool "i.MX27 support"
select ARCH_MXC_AUDMUX_V1
help
This enables support for Freescale's MX2 based i.MX27 processor.
...
...
arch/arm/mach-mx3/Kconfig
View file @
9eedbdf1
...
...
@@ -2,11 +2,13 @@ if ARCH_MX3
config ARCH_MX31
select ARCH_HAS_RNGA
select ARCH_MXC_AUDMUX_V2
bool
config ARCH_MX35
bool
select ARCH_MXC_IOMUX_V3
select ARCH_MXC_AUDMUX_V2
comment "MX3 platforms:"
...
...
arch/arm/plat-mxc/Kconfig
View file @
9eedbdf1
...
...
@@ -78,4 +78,11 @@ config ARCH_HAS_RNGA
config ARCH_MXC_IOMUX_V3
bool
config ARCH_MXC_AUDMUX_V1
bool
config ARCH_MXC_AUDMUX_V2
bool
endif
arch/arm/plat-mxc/Makefile
View file @
9eedbdf1
...
...
@@ -10,3 +10,5 @@ obj-$(CONFIG_ARCH_MX2) += iomux-mx1-mx2.o dma-mx1-mx2.o
obj-$(CONFIG_ARCH_MXC_IOMUX_V3)
+=
iomux-v3.o
obj-$(CONFIG_MXC_PWM)
+=
pwm.o
obj-$(CONFIG_MXC_ULPI)
+=
ulpi.o
obj-$(CONFIG_ARCH_MXC_AUDMUX_V1)
+=
audmux-v1.o
obj-$(CONFIG_ARCH_MXC_AUDMUX_V2)
+=
audmux-v2.o
arch/arm/plat-mxc/audmux-v1.c
0 → 100644
View file @
9eedbdf1
/*
* Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
* Initial development of this code was funded by
* Phytec Messtechnik GmbH, http://www.phytec.de
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <mach/audmux.h>
#include <mach/hardware.h>
static
void
__iomem
*
audmux_base
;
#define MXC_AUDMUX_V1_PCR(x) ((x) * 4)
int
mxc_audmux_v1_configure_port
(
unsigned
int
port
,
unsigned
int
pcr
)
{
if
(
!
audmux_base
)
{
printk
(
"%s: not configured
\n
"
,
__func__
);
return
-
ENOSYS
;
}
writel
(
pcr
,
audmux_base
+
MXC_AUDMUX_V1_PCR
(
port
));
return
0
;
}
EXPORT_SYMBOL_GPL
(
mxc_audmux_v1_configure_port
);
static
int
mxc_audmux_v1_init
(
void
)
{
if
(
cpu_is_mx27
()
||
cpu_is_mx21
())
audmux_base
=
IO_ADDRESS
(
AUDMUX_BASE_ADDR
);
return
0
;
}
postcore_initcall
(
mxc_audmux_v1_init
);
arch/arm/plat-mxc/audmux-v2.c
0 → 100644
View file @
9eedbdf1
/*
* Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de>
*
* Initial development of this code was funded by
* Phytec Messtechnik GmbH, http://www.phytec.de
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <mach/audmux.h>
#include <mach/hardware.h>
static
struct
clk
*
audmux_clk
;
static
void
__iomem
*
audmux_base
;
#define MXC_AUDMUX_V2_PTCR(x) ((x) * 8)
#define MXC_AUDMUX_V2_PDCR(x) ((x) * 8 + 4)
int
mxc_audmux_v2_configure_port
(
unsigned
int
port
,
unsigned
int
ptcr
,
unsigned
int
pdcr
)
{
if
(
!
audmux_base
)
return
-
ENOSYS
;
if
(
audmux_clk
)
clk_enable
(
audmux_clk
);
writel
(
ptcr
,
audmux_base
+
MXC_AUDMUX_V2_PTCR
(
port
));
writel
(
pdcr
,
audmux_base
+
MXC_AUDMUX_V2_PDCR
(
port
));
if
(
audmux_clk
)
clk_disable
(
audmux_clk
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
mxc_audmux_v2_configure_port
);
static
int
mxc_audmux_v2_init
(
void
)
{
int
ret
;
if
(
cpu_is_mx35
())
{
audmux_clk
=
clk_get
(
NULL
,
"audmux"
);
if
(
IS_ERR
(
audmux_clk
))
{
ret
=
PTR_ERR
(
audmux_clk
);
printk
(
KERN_ERR
"%s: cannot get clock: %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
}
if
(
cpu_is_mx31
()
||
cpu_is_mx35
())
audmux_base
=
IO_ADDRESS
(
AUDMUX_BASE_ADDR
);
return
0
;
}
postcore_initcall
(
mxc_audmux_v2_init
);
arch/arm/plat-mxc/include/mach/audmux.h
0 → 100644
View file @
9eedbdf1
#ifndef __MACH_AUDMUX_H
#define __MACH_AUDMUX_H
#define MX27_AUDMUX_HPCR1_SSI0 0
#define MX27_AUDMUX_HPCR2_SSI1 1
#define MX27_AUDMUX_HPCR3_SSI_PINS_4 2
#define MX27_AUDMUX_PPCR1_SSI_PINS_1 3
#define MX27_AUDMUX_PPCR2_SSI_PINS_2 4
#define MX27_AUDMUX_PPCR3_SSI_PINS_3 5
#define MX31_AUDMUX_PORT1_SSI0 0
#define MX31_AUDMUX_PORT2_SSI1 1
#define MX31_AUDMUX_PORT3_SSI_PINS_3 2
#define MX31_AUDMUX_PORT4_SSI_PINS_4 3
#define MX31_AUDMUX_PORT5_SSI_PINS_5 4
#define MX31_AUDMUX_PORT6_SSI_PINS_6 5
/* Register definitions for the i.MX21/27 Digital Audio Multiplexer */
#define MXC_AUDMUX_V1_PCR_INMMASK(x) ((x) & 0xff)
#define MXC_AUDMUX_V1_PCR_INMEN (1 << 8)
#define MXC_AUDMUX_V1_PCR_TXRXEN (1 << 10)
#define MXC_AUDMUX_V1_PCR_SYN (1 << 12)
#define MXC_AUDMUX_V1_PCR_RXDSEL(x) (((x) & 0x7) << 13)
#define MXC_AUDMUX_V1_PCR_RFCSEL(x) (((x) & 0xf) << 20)
#define MXC_AUDMUX_V1_PCR_RCLKDIR (1 << 24)
#define MXC_AUDMUX_V1_PCR_RFSDIR (1 << 25)
#define MXC_AUDMUX_V1_PCR_TFCSEL(x) (((x) & 0xf) << 26)
#define MXC_AUDMUX_V1_PCR_TCLKDIR (1 << 30)
#define MXC_AUDMUX_V1_PCR_TFSDIR (1 << 31)
/* Register definitions for the i.MX25/31/35 Digital Audio Multiplexer */
#define MXC_AUDMUX_V2_PTCR_TFSDIR (1 << 31)
#define MXC_AUDMUX_V2_PTCR_TFSEL(x) (((x) & 0xf) << 27)
#define MXC_AUDMUX_V2_PTCR_TCLKDIR (1 << 26)
#define MXC_AUDMUX_V2_PTCR_TCSEL(x) (((x) & 0xf) << 22)
#define MXC_AUDMUX_V2_PTCR_RFSDIR (1 << 21)
#define MXC_AUDMUX_V2_PTCR_RFSEL(x) (((x) & 0xf) << 17)
#define MXC_AUDMUX_V2_PTCR_RCLKDIR (1 << 16)
#define MXC_AUDMUX_V2_PTCR_RCSEL(x) (((x) & 0xf) << 12)
#define MXC_AUDMUX_V2_PTCR_SYN (1 << 11)
#define MXC_AUDMUX_V2_PDCR_RXDSEL(x) (((x) & 0x7) << 13)
#define MXC_AUDMUX_V2_PDCR_TXRXEN (1 << 12)
#define MXC_AUDMUX_V2_PDCR_MODE(x) (((x) & 0x3) << 8)
#define MXC_AUDMUX_V2_PDCR_INMMASK(x) ((x) & 0xff)
int
mxc_audmux_v1_configure_port
(
unsigned
int
port
,
unsigned
int
pcr
);
int
mxc_audmux_v2_configure_port
(
unsigned
int
port
,
unsigned
int
ptcr
,
unsigned
int
pdcr
);
#endif
/* __MACH_AUDMUX_H */
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