-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'omap-devel-c-for-3.5' of git://git.kernel.org/pub/scm/linu…
…x/kernel/git/pjw/omap-pending into devel-hwmod-data Some OMAP IP block data additions for 3.5, along with a fix for a longstanding watchdog timer integration problem.
- Loading branch information
Showing
16 changed files
with
562 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* IP block integration code for the HDQ1W/1-wire IP block | ||
* | ||
* Copyright (C) 2012 Texas Instruments, Inc. | ||
* Paul Walmsley | ||
* | ||
* Based on the I2C reset code in arch/arm/mach-omap2/i2c.c by | ||
* Avinash.H.M <avinashhm@ti.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* version 2 as published by the Free Software Foundation. | ||
* | ||
* 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., 51 Franklin St, Fifth Floor, Boston, MA | ||
* 02110-1301 USA | ||
*/ | ||
|
||
#include <plat/omap_hwmod.h> | ||
#include <plat/hdq1w.h> | ||
|
||
#include "common.h" | ||
|
||
/* Maximum microseconds to wait for OMAP module to softreset */ | ||
#define MAX_MODULE_SOFTRESET_WAIT 10000 | ||
|
||
/** | ||
* omap_hdq1w_reset - reset the OMAP HDQ1W module | ||
* @oh: struct omap_hwmod * | ||
* | ||
* OCP soft reset the HDQ1W IP block. Section 20.6.1.4 "HDQ1W/1-Wire | ||
* Software Reset" of the OMAP34xx Technical Reference Manual Revision | ||
* ZR (SWPU223R) does not include the rather important fact that, for | ||
* the reset to succeed, the HDQ1W module's internal clock gate must be | ||
* programmed to allow the clock to propagate to the rest of the | ||
* module. In this sense, it's rather similar to the I2C custom reset | ||
* function. Returns 0. | ||
*/ | ||
int omap_hdq1w_reset(struct omap_hwmod *oh) | ||
{ | ||
u32 v; | ||
int c = 0; | ||
|
||
/* Write to the SOFTRESET bit */ | ||
omap_hwmod_softreset(oh); | ||
|
||
/* Enable the module's internal clocks */ | ||
v = omap_hwmod_read(oh, HDQ_CTRL_STATUS_OFFSET); | ||
v |= 1 << HDQ_CTRL_STATUS_CLOCKENABLE_SHIFT; | ||
omap_hwmod_write(v, oh, HDQ_CTRL_STATUS_OFFSET); | ||
|
||
/* Poll on RESETDONE bit */ | ||
omap_test_timeout((omap_hwmod_read(oh, | ||
oh->class->sysc->syss_offs) | ||
& SYSS_RESETDONE_MASK), | ||
MAX_MODULE_SOFTRESET_WAIT, c); | ||
|
||
if (c == MAX_MODULE_SOFTRESET_WAIT) | ||
pr_warning("%s: %s: softreset failed (waited %d usec)\n", | ||
__func__, oh->name, MAX_MODULE_SOFTRESET_WAIT); | ||
else | ||
pr_debug("%s: %s: softreset in %d usec\n", __func__, | ||
oh->name, c); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
/* | ||
* MSDI IP block reset | ||
* | ||
* Copyright (C) 2012 Texas Instruments, Inc. | ||
* Paul Walmsley | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* version 2 as published by the Free Software Foundation. | ||
* | ||
* 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., 51 Franklin St, Fifth Floor, Boston, MA | ||
* 02110-1301 USA | ||
* | ||
* XXX What about pad muxing? | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
|
||
#include <plat/omap_hwmod.h> | ||
#include <plat/mmc.h> | ||
|
||
#include "common.h" | ||
|
||
/* | ||
* MSDI_CON_OFFSET: offset in bytes of the MSDI IP block's CON register | ||
* from the IP block's base address | ||
*/ | ||
#define MSDI_CON_OFFSET 0x0c | ||
|
||
/* Register bitfields in the CON register */ | ||
#define MSDI_CON_POW_MASK BIT(11) | ||
#define MSDI_CON_CLKD_MASK (0x3f << 0) | ||
#define MSDI_CON_CLKD_SHIFT 0 | ||
|
||
/* Maximum microseconds to wait for OMAP module to softreset */ | ||
#define MAX_MODULE_SOFTRESET_WAIT 10000 | ||
|
||
/* MSDI_TARGET_RESET_CLKD: clock divisor to use throughout the reset */ | ||
#define MSDI_TARGET_RESET_CLKD 0x3ff | ||
|
||
/** | ||
* omap_msdi_reset - reset the MSDI IP block | ||
* @oh: struct omap_hwmod * | ||
* | ||
* The MSDI IP block on OMAP2420 has to have both the POW and CLKD | ||
* fields set inside its CON register for a reset to complete | ||
* successfully. This is not documented in the TRM. For CLKD, we use | ||
* the value that results in the lowest possible clock rate, to attempt | ||
* to avoid disturbing any cards. | ||
*/ | ||
int omap_msdi_reset(struct omap_hwmod *oh) | ||
{ | ||
u16 v = 0; | ||
int c = 0; | ||
|
||
/* Write to the SOFTRESET bit */ | ||
omap_hwmod_softreset(oh); | ||
|
||
/* Enable the MSDI core and internal clock */ | ||
v |= MSDI_CON_POW_MASK; | ||
v |= MSDI_TARGET_RESET_CLKD << MSDI_CON_CLKD_SHIFT; | ||
omap_hwmod_write(v, oh, MSDI_CON_OFFSET); | ||
|
||
/* Poll on RESETDONE bit */ | ||
omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs) | ||
& SYSS_RESETDONE_MASK), | ||
MAX_MODULE_SOFTRESET_WAIT, c); | ||
|
||
if (c == MAX_MODULE_SOFTRESET_WAIT) | ||
pr_warning("%s: %s: softreset failed (waited %d usec)\n", | ||
__func__, oh->name, MAX_MODULE_SOFTRESET_WAIT); | ||
else | ||
pr_debug("%s: %s: softreset in %d usec\n", __func__, | ||
oh->name, c); | ||
|
||
/* Disable the MSDI internal clock */ | ||
v &= ~MSDI_CON_CLKD_MASK; | ||
omap_hwmod_write(v, oh, MSDI_CON_OFFSET); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.