Merge branch 'rmobile-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6

* 'rmobile-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6:
  mmc: Add MMC_PROGRESS_*
  mmc, ARM: Rename SuperH Mobile ARM zboot helpers
  ARM: mach-shmobile: add coherent DMA mask to CEU camera devices
  ARM: mach-shmobile: Dynamic backlight control for Mackerel
This commit is contained in:
Linus Torvalds 2011-03-24 10:04:59 -07:00
commit 9598572536
9 changed files with 59 additions and 32 deletions

View File

@ -10,7 +10,8 @@
*/
#include <linux/mmc/sh_mmcif.h>
#include <mach/mmcif.h>
#include <linux/mmc/boot.h>
#include <mach/mmc.h>
#define MMCIF_BASE (void __iomem *)0xe6bd0000
@ -41,8 +42,8 @@
*/
asmlinkage void mmcif_loader(unsigned char *buf, unsigned long len)
{
mmcif_init_progress();
mmcif_update_progress(MMCIF_PROGRESS_ENTER);
mmc_init_progress();
mmc_update_progress(MMC_PROGRESS_ENTER);
/* Initialise MMC
* registers: PORT84CR-PORT92CR
@ -68,12 +69,12 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long len)
/* Enable clock to MMC hardware block */
__raw_writel(__raw_readl(SMSTPCR3) & ~(1 << 12), SMSTPCR3);
mmcif_update_progress(MMCIF_PROGRESS_INIT);
mmc_update_progress(MMC_PROGRESS_INIT);
/* setup MMCIF hardware */
sh_mmcif_boot_init(MMCIF_BASE);
mmcif_update_progress(MMCIF_PROGRESS_LOAD);
mmc_update_progress(MMC_PROGRESS_LOAD);
/* load kernel via MMCIF interface */
sh_mmcif_boot_do_read(MMCIF_BASE, 2, /* Kernel is at block 2 */
@ -83,5 +84,5 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long len)
/* Disable clock to MMC hardware block */
__raw_writel(__raw_readl(SMSTPCR3) & (1 << 12), SMSTPCR3);
mmcif_update_progress(MMCIF_PROGRESS_DONE);
mmc_update_progress(MMC_PROGRESS_DONE);
}

View File

@ -923,7 +923,8 @@ static struct platform_device ceu_device = {
.num_resources = ARRAY_SIZE(ceu_resources),
.resource = ceu_resources,
.dev = {
.platform_data = &sh_mobile_ceu_info,
.platform_data = &sh_mobile_ceu_info,
.coherent_dma_mask = 0xffffffff,
},
};

View File

@ -295,6 +295,18 @@ static struct fb_videomode mackerel_lcdc_modes[] = {
},
};
static int mackerel_set_brightness(void *board_data, int brightness)
{
gpio_set_value(GPIO_PORT31, brightness);
return 0;
}
static int mackerel_get_brightness(void *board_data)
{
return gpio_get_value(GPIO_PORT31);
}
static struct sh_mobile_lcdc_info lcdc_info = {
.clock_source = LCDC_CLK_BUS,
.ch[0] = {
@ -307,6 +319,14 @@ static struct sh_mobile_lcdc_info lcdc_info = {
.flags = 0,
.lcd_size_cfg.width = 152,
.lcd_size_cfg.height = 91,
.board_cfg = {
.set_brightness = mackerel_set_brightness,
.get_brightness = mackerel_get_brightness,
},
.bl_info = {
.name = "sh_mobile_lcdc_bl",
.max_brightness = 1,
},
}
};
@ -901,7 +921,8 @@ static struct platform_device ceu_device = {
.num_resources = ARRAY_SIZE(ceu_resources),
.resource = ceu_resources,
.dev = {
.platform_data = &sh_mobile_ceu_info,
.platform_data = &sh_mobile_ceu_info,
.coherent_dma_mask = 0xffffffff,
},
};
@ -1059,7 +1080,7 @@ static void __init mackerel_init(void)
gpio_request(GPIO_FN_LCDDCK, NULL);
gpio_request(GPIO_PORT31, NULL); /* backlight */
gpio_direction_output(GPIO_PORT31, 1);
gpio_direction_output(GPIO_PORT31, 0); /* off by default */
gpio_request(GPIO_PORT151, NULL); /* LCDDON */
gpio_direction_output(GPIO_PORT151, 1);

View File

@ -1,5 +1,5 @@
#ifndef MMCIF_AP4EB_H
#define MMCIF_AP4EB_H
#ifndef MMC_AP4EB_H
#define MMC_AP4EB_H
#define PORT185CR (void __iomem *)0xe60520b9
#define PORT186CR (void __iomem *)0xe60520ba
@ -8,7 +8,7 @@
#define PORTR191_160DR (void __iomem *)0xe6056014
static inline void mmcif_init_progress(void)
static inline void mmc_init_progress(void)
{
/* Initialise LEDS1-4
* registers: PORT185CR-PORT188CR (LED1-LED4 Control)
@ -20,10 +20,10 @@ static inline void mmcif_init_progress(void)
__raw_writeb(0x10, PORT188CR);
}
static inline void mmcif_update_progress(int n)
static inline void mmc_update_progress(int n)
{
__raw_writel((__raw_readl(PORTR191_160DR) & ~(0xf << 25)) |
(1 << (25 + n)), PORTR191_160DR);
}
#endif /* MMCIF_AP4EB_H */
#endif /* MMC_AP4EB_H */

View File

@ -1,5 +1,5 @@
#ifndef MMCIF_MACKEREL_H
#define MMCIF_MACKEREL_H
#ifndef MMC_MACKEREL_H
#define MMC_MACKEREL_H
#define PORT0CR (void __iomem *)0xe6051000
#define PORT1CR (void __iomem *)0xe6051001
@ -9,7 +9,7 @@
#define PORTR031_000DR (void __iomem *)0xe6055000
#define PORTL159_128DR (void __iomem *)0xe6054010
static inline void mmcif_init_progress(void)
static inline void mmc_init_progress(void)
{
/* Initialise LEDS0-3
* registers: PORT0CR-PORT2CR,PORT159CR (LED0-LED3 Control)
@ -21,7 +21,7 @@ static inline void mmcif_init_progress(void)
__raw_writeb(0x10, PORT159CR);
}
static inline void mmcif_update_progress(int n)
static inline void mmc_update_progress(int n)
{
unsigned a = 0, b = 0;
@ -35,5 +35,4 @@ static inline void mmcif_update_progress(int n)
__raw_writel((__raw_readl(PORTL159_128DR) & ~(1 << 31)) | b,
PORTL159_128DR);
}
#endif /* MMCIF_MACKEREL_H */
#endif /* MMC_MACKEREL_H */

View File

@ -1,5 +1,5 @@
#ifndef MMCIF_H
#define MMCIF_H
#ifndef MMC_H
#define MMC_H
/**************************************************
*
@ -8,11 +8,11 @@
**************************************************/
#ifdef CONFIG_MACH_AP4EVB
#include "mach/mmcif-ap4eb.h"
#include "mach/mmc-ap4eb.h"
#elif CONFIG_MACH_MACKEREL
#include "mach/mmcif-mackerel.h"
#include "mach/mmc-mackerel.h"
#else
#error "unsupported board."
#endif
#endif /* MMCIF_H */
#endif /* MMC_H */

View File

@ -9,6 +9,7 @@
*/
#include <linux/mmc/sh_mmcif.h>
#include <linux/mmc/boot.h>
#include <mach/romimage.h>
#define MMCIF_BASE (void __iomem *)0xa4ca0000
@ -29,7 +30,7 @@
*/
asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)
{
mmcif_update_progress(MMCIF_PROGRESS_ENTER);
mmcif_update_progress(MMC_PROGRESS_ENTER);
/* enable clock to the MMCIF hardware block */
__raw_writel(__raw_readl(MSTPCR2) & ~0x20000000, MSTPCR2);
@ -52,12 +53,12 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)
/* high drive capability for MMC pins */
__raw_writew(__raw_readw(DRVCRA) | 0x3000, DRVCRA);
mmcif_update_progress(MMCIF_PROGRESS_INIT);
mmcif_update_progress(MMC_PROGRESS_INIT);
/* setup MMCIF hardware */
sh_mmcif_boot_init(MMCIF_BASE);
mmcif_update_progress(MMCIF_PROGRESS_LOAD);
mmcif_update_progress(MMC_PROGRESS_LOAD);
/* load kernel via MMCIF interface */
sh_mmcif_boot_do_read(MMCIF_BASE, 512,
@ -67,5 +68,5 @@ asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes)
/* disable clock to the MMCIF hardware block */
__raw_writel(__raw_readl(MSTPCR2) | 0x20000000, MSTPCR2);
mmcif_update_progress(MMCIF_PROGRESS_DONE);
mmcif_update_progress(MMC_PROGRESS_DONE);
}

7
include/linux/mmc/boot.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef MMC_BOOT_H
#define MMC_BOOT_H
enum { MMC_PROGRESS_ENTER, MMC_PROGRESS_INIT,
MMC_PROGRESS_LOAD, MMC_PROGRESS_DONE };
#endif

View File

@ -104,9 +104,6 @@ static inline void sh_mmcif_writel(void __iomem *addr, int reg, u32 val)
#define SH_MMCIF_BBS 512 /* boot block size */
enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT,
MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE };
static inline void sh_mmcif_boot_cmd_send(void __iomem *base,
unsigned long cmd, unsigned long arg)
{