mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM updates from Russell King:
"The major updates included in this update are:
- Clang compatible stack pointer accesses by Behan Webster.
- SA11x0 updates from Dmitry Eremin-Solenikov.
- kgdb handling of breakpoints with read-only text/modules
- Support for Privileged-no-execute feature on ARMv7 to prevent
userspace code execution by the kernel.
- AMBA primecell bus handling of irq-safe runtime PM
- Unwinding support for memset/memzero/memmove/memcpy functions
- VFP fixes for Krait CPUs and improvements in detecting the VFP
architecture
- A number of code cleanups (using pr_*, removing or reducing the
severity of a couple of kernel messages, splitting ftrace asm code
out to a separate file, etc.)
- Add machine name to stack dump output"
* 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: (62 commits)
ARM: 8247/2: pcmcia: sa1100: make use of device clock
ARM: 8246/2: pcmcia: sa1111: provide device clock
ARM: 8245/1: pcmcia: soc-common: enable/disable socket clocks
ARM: 8244/1: fbdev: sa1100fb: make use of device clock
ARM: 8243/1: sa1100: add a clock alias for sa1111 pcmcia device
ARM: 8242/1: sa1100: add cpu clock
ARM: 8221/1: PJ4: allow building in Thumb-2 mode
ARM: 8234/1: sa1100: reorder IRQ handling code
ARM: 8233/1: sa1100: switch to hwirq usage
ARM: 8232/1: sa1100: merge GPIO multiplexer IRQ to "normal" irq domain
ARM: 8231/1: sa1100: introduce irqdomains support
ARM: 8230/1: sa1100: shift IRQs by one
ARM: 8229/1: sa1100: replace irq numbers with names in irq driver
ARM: 8228/1: sa1100: drop entry-macro.S
ARM: 8227/1: sa1100: switch to MULTI_IRQ_HANDLER
ARM: 8241/1: Update processor_modes for hyp and monitor mode
ARM: 8240/1: MCPM: document mcpm_sync_init()
ARM: 8239/1: Introduce {set,clear}_pte_bit
ARM: 8238/1: mm: Refine set_memory_* functions
ARM: 8237/1: fix flush_pfn_alias
...
This commit is contained in:
commit
26ceb127f7
92 changed files with 1592 additions and 850 deletions
|
|
@ -178,6 +178,7 @@
|
|||
#include <linux/dma-mapping.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <video/sa1100fb.h>
|
||||
|
||||
|
|
@ -416,9 +417,9 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
|||
var->transp.offset);
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
dev_dbg(fbi->dev, "dma period = %d ps, clock = %d kHz\n",
|
||||
dev_dbg(fbi->dev, "dma period = %d ps, clock = %ld kHz\n",
|
||||
sa1100fb_display_dma_period(var),
|
||||
cpufreq_get(smp_processor_id()));
|
||||
clk_get_rate(fbi->clk) / 1000);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
|
@ -592,9 +593,10 @@ static struct fb_ops sa1100fb_ops = {
|
|||
* Calculate the PCD value from the clock rate (in picoseconds).
|
||||
* We take account of the PPCR clock setting.
|
||||
*/
|
||||
static inline unsigned int get_pcd(unsigned int pixclock, unsigned int cpuclock)
|
||||
static inline unsigned int get_pcd(struct sa1100fb_info *fbi,
|
||||
unsigned int pixclock)
|
||||
{
|
||||
unsigned int pcd = cpuclock / 100;
|
||||
unsigned int pcd = clk_get_rate(fbi->clk) / 100 / 1000;
|
||||
|
||||
pcd *= pixclock;
|
||||
pcd /= 10000000;
|
||||
|
|
@ -673,7 +675,7 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_
|
|||
LCCR2_BegFrmDel(var->upper_margin) +
|
||||
LCCR2_EndFrmDel(var->lower_margin);
|
||||
|
||||
pcd = get_pcd(var->pixclock, cpufreq_get(0));
|
||||
pcd = get_pcd(fbi, var->pixclock);
|
||||
new_regs.lccr3 = LCCR3_PixClkDiv(pcd) | fbi->inf->lccr3 |
|
||||
(var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) |
|
||||
(var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL);
|
||||
|
|
@ -787,6 +789,9 @@ static void sa1100fb_enable_controller(struct sa1100fb_info *fbi)
|
|||
fbi->palette_cpu[0] &= 0xcfff;
|
||||
fbi->palette_cpu[0] |= palette_pbs(&fbi->fb.var);
|
||||
|
||||
/* enable LCD controller clock */
|
||||
clk_prepare_enable(fbi->clk);
|
||||
|
||||
/* Sequence from 11.7.10 */
|
||||
writel_relaxed(fbi->reg_lccr3, fbi->base + LCCR3);
|
||||
writel_relaxed(fbi->reg_lccr2, fbi->base + LCCR2);
|
||||
|
|
@ -831,6 +836,9 @@ static void sa1100fb_disable_controller(struct sa1100fb_info *fbi)
|
|||
|
||||
schedule_timeout(20 * HZ / 1000);
|
||||
remove_wait_queue(&fbi->ctrlr_wait, &wait);
|
||||
|
||||
/* disable LCD controller clock */
|
||||
clk_disable_unprepare(fbi->clk);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1009,7 +1017,6 @@ sa1100fb_freq_transition(struct notifier_block *nb, unsigned long val,
|
|||
void *data)
|
||||
{
|
||||
struct sa1100fb_info *fbi = TO_INF(nb, freq_transition);
|
||||
struct cpufreq_freqs *f = data;
|
||||
u_int pcd;
|
||||
|
||||
switch (val) {
|
||||
|
|
@ -1018,7 +1025,7 @@ sa1100fb_freq_transition(struct notifier_block *nb, unsigned long val,
|
|||
break;
|
||||
|
||||
case CPUFREQ_POSTCHANGE:
|
||||
pcd = get_pcd(fbi->fb.var.pixclock, f->new);
|
||||
pcd = get_pcd(fbi, fbi->fb.var.pixclock);
|
||||
fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
|
||||
set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
|
||||
break;
|
||||
|
|
@ -1225,6 +1232,13 @@ static int sa1100fb_probe(struct platform_device *pdev)
|
|||
if (!fbi)
|
||||
goto failed;
|
||||
|
||||
fbi->clk = clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(fbi->clk)) {
|
||||
ret = PTR_ERR(fbi->clk);
|
||||
fbi->clk = NULL;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
fbi->base = ioremap(res->start, resource_size(res));
|
||||
if (!fbi->base)
|
||||
goto failed;
|
||||
|
|
@ -1277,6 +1291,8 @@ static int sa1100fb_probe(struct platform_device *pdev)
|
|||
failed:
|
||||
if (fbi)
|
||||
iounmap(fbi->base);
|
||||
if (fbi->clk)
|
||||
clk_put(fbi->clk);
|
||||
kfree(fbi);
|
||||
release_mem_region(res->start, resource_size(res));
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ struct sa1100fb_info {
|
|||
#endif
|
||||
|
||||
const struct sa1100fb_mach_info *inf;
|
||||
struct clk *clk;
|
||||
};
|
||||
|
||||
#define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member)
|
||||
|
|
|
|||
Loading…
Reference in a new issue