diff for duplicates of <002501cbda3a$b6f37d00$24da7700$@com> diff --git a/a/1.txt b/N1/1.txt index 2edaeac..976deeb 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -19,22 +19,22 @@ wrote: > > > > Signed-off-by: Sangbeom Kim <sbkim73@samsung.com> > > --- -> > arch/arm/plat-s5p/Makefile | 1 + -> > arch/arm/plat-s5p/include/plat/s5p-time.h | 40 +++ -> > arch/arm/plat-s5p/s5p-time.c | 452 +> > ?arch/arm/plat-s5p/Makefile ? ? ? ? ? ? ? ?| ? ?1 + +> > ?arch/arm/plat-s5p/include/plat/s5p-time.h | ? 40 +++ +> > ?arch/arm/plat-s5p/s5p-time.c ? ? ? ? ? ? ?| ?452 > +++++++++++++++++++++++++++++ -> > 3 files changed, 493 insertions(+), 0 deletions(-) -> > create mode 100644 arch/arm/plat-s5p/include/plat/s5p-time.h -> > create mode 100644 arch/arm/plat-s5p/s5p-time.c +> > ?3 files changed, 493 insertions(+), 0 deletions(-) +> > ?create mode 100644 arch/arm/plat-s5p/include/plat/s5p-time.h +> > ?create mode 100644 arch/arm/plat-s5p/s5p-time.c > > > > diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile > > index 4bd5cf9..3b8cc2f 100644 > > --- a/arch/arm/plat-s5p/Makefile > > +++ b/arch/arm/plat-s5p/Makefile -> > @@ -22,6 +22,7 @@ obj-$(CONFIG_S5P_GPIO_INT) += irq-gpioint.o -> > obj-$(CONFIG_S5P_SYSTEM_MMU) += sysmmu.o -> > obj-$(CONFIG_PM) += pm.o -> > obj-$(CONFIG_PM) += irq-pm.o +> > @@ -22,6 +22,7 @@ obj-$(CONFIG_S5P_GPIO_INT) ? ?+= irq-gpioint.o +> > ?obj-$(CONFIG_S5P_SYSTEM_MMU) ? += sysmmu.o +> > ?obj-$(CONFIG_PM) ? ? ? ? ? ? ? += pm.o +> > ?obj-$(CONFIG_PM) ? ? ? ? ? ? ? += irq-pm.o > > +obj-$(CONFIG_GENERIC_CLOCKEVENTS) += s5p-time.o > > Do you test it with exynos4 configuration? it's affect the exynos compile. @@ -47,7 +47,7 @@ wrote: > Thank you, > Kyungmin Park > > -> > # devices +> > ?# devices > > > > diff --git a/arch/arm/plat-s5p/include/plat/s5p-time.h b/arch/arm/plat- > s5p/include/plat/s5p-time.h @@ -59,7 +59,7 @@ wrote: > > +/* linux/arch/arm/plat-s5p/include/plat/s5p-time.h > > + * > > + * Copyright 2011 Samsung Electronics Co., Ltd. -> > + * http://www.samsung.com/ +> > + * ? ? ? ? ? ? http://www.samsung.com/ > > + * > > + * Header file for s5p time support > > + * @@ -73,27 +73,27 @@ wrote: > > + > > +/* S5P HR-Timer Clock mode */ > > +enum s5p_timer_mode { -> > + S5P_PWM0, -> > + S5P_PWM1, -> > + S5P_PWM2, -> > + S5P_PWM3, -> > + S5P_PWM4, +> > + ? ? ? S5P_PWM0, +> > + ? ? ? S5P_PWM1, +> > + ? ? ? S5P_PWM2, +> > + ? ? ? S5P_PWM3, +> > + ? ? ? S5P_PWM4, > > +}; > > + > > +struct s5p_timer_source { -> > + unsigned int event_id; -> > + unsigned int source_id; +> > + ? ? ? unsigned int event_id; +> > + ? ? ? unsigned int source_id; > > +}; > > + > > +/* Be able to sleep for atleast 4 seconds (usually more) */ -> > +#define S5PTIMER_MIN_RANGE 4 +> > +#define S5PTIMER_MIN_RANGE ? ? 4 > > + -> > +#define TCNT_MAX 0xffffffff -> > +#define NON_PERIODIC 0 -> > +#define PERIODIC 1 +> > +#define TCNT_MAX ? ? ? ? ? ? ? 0xffffffff +> > +#define NON_PERIODIC ? ? ? ? ? 0 +> > +#define PERIODIC ? ? ? ? ? ? ? 1 > > + > > +extern void __init s5p_set_timer_source(enum s5p_timer_mode event, -> > + enum s5p_timer_mode source); +> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enum s5p_timer_mode source); > > +extern struct sys_timer s5p_timer; > > +#endif /* __ASM_PLAT_S5P_TIME_H */ > > diff --git a/arch/arm/plat-s5p/s5p-time.c b/arch/arm/plat-s5p/s5p-time.c @@ -105,7 +105,7 @@ wrote: > > +/* linux/arch/arm/plat-s5p/s5p-time.c > > + * > > + * Copyright (c) 2011 Samsung Electronics Co., Ltd. -> > + * http://www.samsung.com/ +> > + * ? ? ? ? ? ? http://www.samsung.com/ > > + * > > + * S5P - Common hr-timer support > > + * @@ -144,283 +144,283 @@ wrote: > > + > > +static void s5p_time_stop(enum s5p_timer_mode mode) > > +{ -> > + unsigned long tcon; +> > + ? ? ? unsigned long tcon; > > + -> > + tcon = __raw_readl(S3C2410_TCON); +> > + ? ? ? tcon = __raw_readl(S3C2410_TCON); > > + -> > + switch (mode) { -> > + case S5P_PWM0: -> > + tcon &= ~S3C2410_TCON_T0START; -> > + break; +> > + ? ? ? switch (mode) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0START; +> > + ? ? ? ? ? ? ? break; > > + -> > + case S5P_PWM1: -> > + tcon &= ~S3C2410_TCON_T1START; -> > + break; +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1START; +> > + ? ? ? ? ? ? ? break; > > + -> > + case S5P_PWM2: -> > + tcon &= ~S3C2410_TCON_T2START; -> > + break; +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2START; +> > + ? ? ? ? ? ? ? break; > > + -> > + case S5P_PWM3: -> > + tcon &= ~S3C2410_TCON_T3START; -> > + break; +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3START; +> > + ? ? ? ? ? ? ? break; > > + -> > + case S5P_PWM4: -> > + tcon &= ~S3C2410_TCON_T4START; -> > + break; +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4START; +> > + ? ? ? ? ? ? ? break; > > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", mode); -> > + break; -> > + } -> > + __raw_writel(tcon, S3C2410_TCON); +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", mode); +> > + ? ? ? ? ? ? ? break; +> > + ? ? ? } +> > + ? ? ? __raw_writel(tcon, S3C2410_TCON); > > +} > > + > > +static void s5p_time_setup(enum s5p_timer_mode mode, unsigned long tcnt) > > +{ -> > + unsigned long tcon; -> > + -> > + tcon = __raw_readl(S3C2410_TCON); -> > + -> > + tcnt--; -> > + -> > + switch (mode) { -> > + case S5P_PWM0: -> > + tcon &= ~(0x0f << 0); -> > + tcon |= S3C2410_TCON_T0MANUALUPD; -> > + break; -> > + -> > + case S5P_PWM1: -> > + tcon &= ~(0x0f << 8); -> > + tcon |= S3C2410_TCON_T1MANUALUPD; -> > + break; -> > + -> > + case S5P_PWM2: -> > + tcon &= ~(0x0f << 12); -> > + tcon |= S3C2410_TCON_T2MANUALUPD; -> > + break; -> > + -> > + case S5P_PWM3: -> > + tcon &= ~(0x0f << 16); -> > + tcon |= S3C2410_TCON_T3MANUALUPD; -> > + break; -> > + -> > + case S5P_PWM4: -> > + tcon &= ~(0x07 << 20); -> > + tcon |= S3C2410_TCON_T4MANUALUPD; -> > + break; -> > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", mode); -> > + break; -> > + } -> > + -> > + __raw_writel(tcnt, S3C2410_TCNTB(mode)); -> > + __raw_writel(tcnt, S3C2410_TCMPB(mode)); -> > + __raw_writel(tcon, S3C2410_TCON); +> > + ? ? ? unsigned long tcon; +> > + +> > + ? ? ? tcon = __raw_readl(S3C2410_TCON); +> > + +> > + ? ? ? tcnt--; +> > + +> > + ? ? ? switch (mode) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 0); +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0MANUALUPD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 8); +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1MANUALUPD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 12); +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2MANUALUPD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 16); +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3MANUALUPD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? tcon &= ~(0x07 << 20); +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4MANUALUPD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", mode); +> > + ? ? ? ? ? ? ? break; +> > + ? ? ? } +> > + +> > + ? ? ? __raw_writel(tcnt, S3C2410_TCNTB(mode)); +> > + ? ? ? __raw_writel(tcnt, S3C2410_TCMPB(mode)); +> > + ? ? ? __raw_writel(tcon, S3C2410_TCON); > > +} > > + > > +static void s5p_time_start(enum s5p_timer_mode mode, bool periodic) > > +{ -> > + unsigned long tcon; -> > + -> > + tcon = __raw_readl(S3C2410_TCON); -> > + -> > + switch (mode) { -> > + case S5P_PWM0: -> > + tcon |= S3C2410_TCON_T0START; -> > + tcon &= ~S3C2410_TCON_T0MANUALUPD; -> > + -> > + if (periodic) -> > + tcon |= S3C2410_TCON_T0RELOAD; -> > + else -> > + tcon &= ~S3C2410_TCON_T0RELOAD; -> > + break; -> > + -> > + case S5P_PWM1: -> > + tcon |= S3C2410_TCON_T1START; -> > + tcon &= ~S3C2410_TCON_T1MANUALUPD; -> > + -> > + if (periodic) -> > + tcon |= S3C2410_TCON_T1RELOAD; -> > + else -> > + tcon &= ~S3C2410_TCON_T1RELOAD; -> > + break; -> > + -> > + case S5P_PWM2: -> > + tcon |= S3C2410_TCON_T2START; -> > + tcon &= ~S3C2410_TCON_T2MANUALUPD; -> > + -> > + if (periodic) -> > + tcon |= S3C2410_TCON_T2RELOAD; -> > + else -> > + tcon &= ~S3C2410_TCON_T2RELOAD; -> > + break; -> > + -> > + case S5P_PWM3: -> > + tcon |= S3C2410_TCON_T3START; -> > + tcon &= ~S3C2410_TCON_T3MANUALUPD; -> > + -> > + if (periodic) -> > + tcon |= S3C2410_TCON_T3RELOAD; -> > + else -> > + tcon &= ~S3C2410_TCON_T3RELOAD; -> > + break; -> > + -> > + case S5P_PWM4: -> > + tcon |= S3C2410_TCON_T4START; -> > + tcon &= ~S3C2410_TCON_T4MANUALUPD; -> > + -> > + if (periodic) -> > + tcon |= S3C2410_TCON_T4RELOAD; -> > + else -> > + tcon &= ~S3C2410_TCON_T4RELOAD; -> > + break; -> > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", mode); -> > + break; -> > + } -> > + __raw_writel(tcon, S3C2410_TCON); +> > + ? ? ? unsigned long tcon; +> > + +> > + ? ? ? tcon ?= __raw_readl(S3C2410_TCON); +> > + +> > + ? ? ? switch (mode) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0START; +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0MANUALUPD; +> > + +> > + ? ? ? ? ? ? ? if (periodic) +> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0RELOAD; +> > + ? ? ? ? ? ? ? else +> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0RELOAD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1START; +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1MANUALUPD; +> > + +> > + ? ? ? ? ? ? ? if (periodic) +> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1RELOAD; +> > + ? ? ? ? ? ? ? else +> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1RELOAD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2START; +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2MANUALUPD; +> > + +> > + ? ? ? ? ? ? ? if (periodic) +> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2RELOAD; +> > + ? ? ? ? ? ? ? else +> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2RELOAD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3START; +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3MANUALUPD; +> > + +> > + ? ? ? ? ? ? ? if (periodic) +> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3RELOAD; +> > + ? ? ? ? ? ? ? else +> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3RELOAD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4START; +> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4MANUALUPD; +> > + +> > + ? ? ? ? ? ? ? if (periodic) +> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4RELOAD; +> > + ? ? ? ? ? ? ? else +> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4RELOAD; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", mode); +> > + ? ? ? ? ? ? ? break; +> > + ? ? ? } +> > + ? ? ? __raw_writel(tcon, S3C2410_TCON); > > +} > > + > > +static int s5p_set_next_event(unsigned long cycles, -> > + struct clock_event_device *evt) +> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct clock_event_device *evt) > > +{ -> > + s5p_time_setup(timer_source.event_id, cycles); -> > + s5p_time_start(timer_source.event_id, NON_PERIODIC); +> > + ? ? ? s5p_time_setup(timer_source.event_id, cycles); +> > + ? ? ? s5p_time_start(timer_source.event_id, NON_PERIODIC); > > + -> > + return 0; +> > + ? ? ? return 0; > > +} > > + > > +static void s5p_set_mode(enum clock_event_mode mode, -> > + struct clock_event_device *evt) +> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct clock_event_device *evt) > > +{ -> > + s5p_time_stop(timer_source.event_id); +> > + ? ? ? s5p_time_stop(timer_source.event_id); > > + -> > + switch (mode) { -> > + case CLOCK_EVT_MODE_PERIODIC: -> > + s5p_time_setup(timer_source.event_id, +> > + ? ? ? switch (mode) { +> > + ? ? ? case CLOCK_EVT_MODE_PERIODIC: +> > + ? ? ? ? ? ? ? s5p_time_setup(timer_source.event_id, > clock_count_per_tick); -> > + s5p_time_start(timer_source.event_id, PERIODIC); -> > + break; +> > + ? ? ? ? ? ? ? s5p_time_start(timer_source.event_id, PERIODIC); +> > + ? ? ? ? ? ? ? break; > > + -> > + case CLOCK_EVT_MODE_ONESHOT: -> > + break; +> > + ? ? ? case CLOCK_EVT_MODE_ONESHOT: +> > + ? ? ? ? ? ? ? break; > > + -> > + case CLOCK_EVT_MODE_UNUSED: -> > + case CLOCK_EVT_MODE_SHUTDOWN: -> > + break; +> > + ? ? ? case CLOCK_EVT_MODE_UNUSED: +> > + ? ? ? case CLOCK_EVT_MODE_SHUTDOWN: +> > + ? ? ? ? ? ? ? break; > > + -> > + case CLOCK_EVT_MODE_RESUME: -> > + s5p_timer_resume(); -> > + break; -> > + } +> > + ? ? ? case CLOCK_EVT_MODE_RESUME: +> > + ? ? ? ? ? ? ? s5p_timer_resume(); +> > + ? ? ? ? ? ? ? break; +> > + ? ? ? } > > +} > > + > > +static void s5p_timer_resume(void) > > +{ -> > + /* event timer restart */ -> > + s5p_time_setup(timer_source.event_id, clock_count_per_tick); -> > + s5p_time_start(timer_source.event_id, PERIODIC); +> > + ? ? ? /* event timer restart */ +> > + ? ? ? s5p_time_setup(timer_source.event_id, clock_count_per_tick); +> > + ? ? ? s5p_time_start(timer_source.event_id, PERIODIC); > > + -> > + /* source timer restart */ -> > + s5p_time_setup(timer_source.source_id, TCNT_MAX); -> > + s5p_time_start(timer_source.source_id, PERIODIC); +> > + ? ? ? /* source timer restart */ +> > + ? ? ? s5p_time_setup(timer_source.source_id, TCNT_MAX); +> > + ? ? ? s5p_time_start(timer_source.source_id, PERIODIC); > > +} > > + > > +void __init s5p_set_timer_source(enum s5p_timer_mode event, -> > + enum s5p_timer_mode source) +> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?enum s5p_timer_mode source) > > +{ -> > + s3c_device_timer[event].dev.bus = &platform_bus_type; -> > + s3c_device_timer[source].dev.bus = &platform_bus_type; +> > + ? ? ? s3c_device_timer[event].dev.bus = &platform_bus_type; +> > + ? ? ? s3c_device_timer[source].dev.bus = &platform_bus_type; > > + -> > + timer_source.event_id = event; -> > + timer_source.source_id = source; +> > + ? ? ? timer_source.event_id = event; +> > + ? ? ? timer_source.source_id = source; > > +} > > + > > +static struct clock_event_device time_event_device = { -> > + .name = "s5p_event_timer", -> > + .features = CLOCK_EVT_FEAT_PERIODIC | +> > + ? ? ? .name ? ? ? ? ? = "s5p_event_timer", +> > + ? ? ? .features ? ? ? = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, -> > + .rating = 200, -> > + .shift = 32, -> > + .set_next_event = s5p_set_next_event, -> > + .set_mode = s5p_set_mode, +> > + ? ? ? .rating ? ? ? ? = 200, +> > + ? ? ? .shift ? ? ? ? ?= 32, +> > + ? ? ? .set_next_event = s5p_set_next_event, +> > + ? ? ? .set_mode ? ? ? = s5p_set_mode, > > +}; > > + > > +static irqreturn_t s5p_clock_event_isr(int irq, void *dev_id) > > +{ -> > + struct clock_event_device *evt = dev_id; +> > + ? ? ? struct clock_event_device *evt = dev_id; > > + -> > + evt->event_handler(evt); +> > + ? ? ? evt->event_handler(evt); > > + -> > + return IRQ_HANDLED; +> > + ? ? ? return IRQ_HANDLED; > > +} > > + > > +static struct irqaction s5p_clock_event_irq = { -> > + .name = "s5p_time_irq", -> > + .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, -> > + .handler = s5p_clock_event_isr, -> > + .dev_id = &time_event_device, +> > + ? ? ? .name ? ? ? ? ? = "s5p_time_irq", +> > + ? ? ? .flags ? ? ? ? ?= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, +> > + ? ? ? .handler ? ? ? ?= s5p_clock_event_isr, +> > + ? ? ? .dev_id ? ? ? ? = &time_event_device, > > +}; > > + > > +static void __init s5p_clockevent_init(void) > > +{ -> > + unsigned long pclk; -> > + unsigned long clock_rate; -> > + unsigned int irq_number; -> > + struct clk *tscaler; +> > + ? ? ? unsigned long pclk; +> > + ? ? ? unsigned long clock_rate; +> > + ? ? ? unsigned int irq_number; +> > + ? ? ? struct clk *tscaler; > > + -> > + pclk = clk_get_rate(timerclk); +> > + ? ? ? pclk = clk_get_rate(timerclk); > > + -> > + tscaler = clk_get_parent(tdiv_event); +> > + ? ? ? tscaler = clk_get_parent(tdiv_event); > > + -> > + clk_set_rate(tscaler, pclk / 2); -> > + clk_set_rate(tdiv_event, pclk / 2); -> > + clk_set_parent(tin_event, tdiv_event); +> > + ? ? ? clk_set_rate(tscaler, pclk / 2); +> > + ? ? ? clk_set_rate(tdiv_event, pclk / 2); +> > + ? ? ? clk_set_parent(tin_event, tdiv_event); > > + -> > + clock_rate = clk_get_rate(tin_event); -> > + clock_count_per_tick = clock_rate / HZ; +> > + ? ? ? clock_rate = clk_get_rate(tin_event); +> > + ? ? ? clock_count_per_tick = clock_rate / HZ; > > + -> > + clockevents_calc_mult_shift(&time_event_device, -> > + clock_rate, S5PTIMER_MIN_RANGE); -> > + time_event_device.max_delta_ns = -> > + clockevent_delta2ns(-1, &time_event_device); -> > + time_event_device.min_delta_ns = -> > + clockevent_delta2ns(1, &time_event_device); +> > + ? ? ? clockevents_calc_mult_shift(&time_event_device, +> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? clock_rate, S5PTIMER_MIN_RANGE); +> > + ? ? ? time_event_device.max_delta_ns = +> > + ? ? ? ? ? ? ? clockevent_delta2ns(-1, &time_event_device); +> > + ? ? ? time_event_device.min_delta_ns = +> > + ? ? ? ? ? ? ? clockevent_delta2ns(1, &time_event_device); > > + -> > + time_event_device.cpumask = cpumask_of(0); -> > + clockevents_register_device(&time_event_device); +> > + ? ? ? time_event_device.cpumask = cpumask_of(0); +> > + ? ? ? clockevents_register_device(&time_event_device); > > + -> > + irq_number = timer_source.event_id + IRQ_TIMER0; -> > + setup_irq(irq_number, &s5p_clock_event_irq); +> > + ? ? ? irq_number = timer_source.event_id + IRQ_TIMER0; +> > + ? ? ? setup_irq(irq_number, &s5p_clock_event_irq); > > +} > > + > > +static cycle_t s5p_timer_read(struct clocksource *cs) > > +{ -> > + unsigned long offset = 0; -> > + -> > + switch (timer_source.source_id) { -> > + case S5P_PWM0: -> > + case S5P_PWM1: -> > + case S5P_PWM2: -> > + case S5P_PWM3: -> > + offset = (timer_source.source_id * 0x0c) + 0x14; -> > + break; -> > + -> > + case S5P_PWM4: -> > + offset = 0x40; -> > + break; -> > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", +> > + ? ? ? unsigned long offset = 0; +> > + +> > + ? ? ? switch (timer_source.source_id) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? offset = 0x40; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", > timer_source.source_id); -> > + return 0; -> > + } +> > + ? ? ? ? ? ? ? return 0; +> > + ? ? ? } > > + -> > + return (cycle_t) ~__raw_readl(S3C_TIMERREG(offset)); +> > + ? ? ? return (cycle_t) ~__raw_readl(S3C_TIMERREG(offset)); > > +} > > + > > +/* @@ -434,135 +434,135 @@ CLOCK_EVT_FEAT_ONESHOT, > > + > > +unsigned long long notrace sched_clock(void) > > +{ -> > + u32 cyc; -> > + unsigned long offset = 0; -> > + -> > + switch (timer_source.source_id) { -> > + case S5P_PWM0: -> > + case S5P_PWM1: -> > + case S5P_PWM2: -> > + case S5P_PWM3: -> > + offset = (timer_source.source_id * 0x0c) + 0x14; -> > + break; -> > + -> > + case S5P_PWM4: -> > + offset = 0x40; -> > + break; -> > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", +> > + ? ? ? u32 cyc; +> > + ? ? ? unsigned long offset = 0; +> > + +> > + ? ? ? switch (timer_source.source_id) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? offset = 0x40; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", > timer_source.source_id); -> > + return 0; -> > + } +> > + ? ? ? ? ? ? ? return 0; +> > + ? ? ? } > > + -> > + cyc = ~__raw_readl(S3C_TIMERREG(offset)); -> > + return cyc_to_sched_clock(&cd, cyc, (u32)~0); +> > + ? ? ? cyc = ~__raw_readl(S3C_TIMERREG(offset)); +> > + ? ? ? return cyc_to_sched_clock(&cd, cyc, (u32)~0); > > +} > > + > > +static void notrace s5p_update_sched_clock(void) > > +{ -> > + u32 cyc; -> > + unsigned long offset = 0; -> > + -> > + switch (timer_source.source_id) { -> > + case S5P_PWM0: -> > + case S5P_PWM1: -> > + case S5P_PWM2: -> > + case S5P_PWM3: -> > + offset = (timer_source.source_id * 0x0c) + 0x14; -> > + break; -> > + -> > + case S5P_PWM4: -> > + offset = 0x40; -> > + break; -> > + -> > + default: -> > + printk(KERN_ERR "Invalid Timer %d\n", +> > + ? ? ? u32 cyc; +> > + ? ? ? unsigned long offset = 0; +> > + +> > + ? ? ? switch (timer_source.source_id) { +> > + ? ? ? case S5P_PWM0: +> > + ? ? ? case S5P_PWM1: +> > + ? ? ? case S5P_PWM2: +> > + ? ? ? case S5P_PWM3: +> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? case S5P_PWM4: +> > + ? ? ? ? ? ? ? offset = 0x40; +> > + ? ? ? ? ? ? ? break; +> > + +> > + ? ? ? default: +> > + ? ? ? ? ? ? ? printk(KERN_ERR "Invalid Timer %d\n", > timer_source.source_id); -> > + } +> > + ? ? ? } > > + -> > + cyc = ~__raw_readl(S3C_TIMERREG(offset)); -> > + update_sched_clock(&cd, cyc, (u32)~0); +> > + ? ? ? cyc = ~__raw_readl(S3C_TIMERREG(offset)); +> > + ? ? ? update_sched_clock(&cd, cyc, (u32)~0); > > +} > > + > > +struct clocksource time_clocksource = { -> > + .name = "s5p_clocksource_timer", -> > + .rating = 250, -> > + .read = s5p_timer_read, -> > + .mask = CLOCKSOURCE_MASK(32), -> > + .flags = CLOCK_SOURCE_IS_CONTINUOUS, +> > + ? ? ? .name ? ? ? ? ? = "s5p_clocksource_timer", +> > + ? ? ? .rating ? ? ? ? = 250, +> > + ? ? ? .read ? ? ? ? ? = s5p_timer_read, +> > + ? ? ? .mask ? ? ? ? ? = CLOCKSOURCE_MASK(32), +> > + ? ? ? .flags ? ? ? ? ?= CLOCK_SOURCE_IS_CONTINUOUS, > > +}; > > + > > +static void __init s5p_clocksource_init(void) > > +{ -> > + unsigned long pclk; -> > + unsigned long clock_rate; +> > + ? ? ? unsigned long pclk; +> > + ? ? ? unsigned long clock_rate; > > + -> > + pclk = clk_get_rate(timerclk); +> > + ? ? ? pclk = clk_get_rate(timerclk); > > + -> > + clk_set_rate(tdiv_source, pclk / 2); -> > + clk_set_parent(tin_source, tdiv_source); +> > + ? ? ? clk_set_rate(tdiv_source, pclk / 2); +> > + ? ? ? clk_set_parent(tin_source, tdiv_source); > > + -> > + clock_rate = clk_get_rate(tin_source); +> > + ? ? ? clock_rate = clk_get_rate(tin_source); > > + -> > + init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate); +> > + ? ? ? init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate); > > + -> > + s5p_time_setup(timer_source.source_id, TCNT_MAX); -> > + s5p_time_start(timer_source.source_id, PERIODIC); +> > + ? ? ? s5p_time_setup(timer_source.source_id, TCNT_MAX); +> > + ? ? ? s5p_time_start(timer_source.source_id, PERIODIC); > > + -> > + if (clocksource_register_hz(&time_clocksource, clock_rate)) -> > + panic("%s: can't register clocksource\n", +> > + ? ? ? if (clocksource_register_hz(&time_clocksource, clock_rate)) +> > + ? ? ? ? ? ? ? panic("%s: can't register clocksource\n", > time_clocksource.name); > > +} > > + > > +static void __init s5p_timer_resources(void) > > +{ > > + -> > + unsigned long event_id = timer_source.event_id; -> > + unsigned long source_id = timer_source.source_id; +> > + ? ? ? unsigned long event_id = timer_source.event_id; +> > + ? ? ? unsigned long source_id = timer_source.source_id; > > + -> > + timerclk = clk_get(NULL, "timers"); +> > + ? ? ? timerclk = clk_get(NULL, "timers"); > > + -> > + clk_enable(timerclk); +> > + ? ? ? clk_enable(timerclk); > > + -> > + if (IS_ERR(timerclk)) -> > + panic("failed to get timers clock for timer"); +> > + ? ? ? if (IS_ERR(timerclk)) +> > + ? ? ? ? ? ? ? panic("failed to get timers clock for timer"); > > + -> > + tin_event = clk_get(&s3c_device_timer[event_id].dev, "pwm-tin"); +> > + ? ? ? tin_event = clk_get(&s3c_device_timer[event_id].dev, "pwm-tin"); > > + -> > + if (IS_ERR(tin_event)) -> > + panic("failed to get pwm-tin clock for event timer"); +> > + ? ? ? if (IS_ERR(tin_event)) +> > + ? ? ? ? ? ? ? panic("failed to get pwm-tin clock for event timer"); > > + -> > + tdiv_event = clk_get(&s3c_device_timer[event_id].dev, +> > + ? ? ? tdiv_event = clk_get(&s3c_device_timer[event_id].dev, "pwm-tdiv"); > > + -> > + if (IS_ERR(tdiv_event)) -> > + panic("failed to get pwm-tdiv clock for event timer"); +> > + ? ? ? if (IS_ERR(tdiv_event)) +> > + ? ? ? ? ? ? ? panic("failed to get pwm-tdiv clock for event timer"); > > + -> > + clk_enable(tin_event); +> > + ? ? ? clk_enable(tin_event); > > + -> > + tin_source = clk_get(&s3c_device_timer[source_id].dev, +> > + ? ? ? tin_source = clk_get(&s3c_device_timer[source_id].dev, "pwm-tin"); -> > + if (IS_ERR(tin_source)) -> > + panic("failed to get pwm-tin clock for source timer"); +> > + ? ? ? if (IS_ERR(tin_source)) +> > + ? ? ? ? ? ? ? panic("failed to get pwm-tin clock for source timer"); > > + -> > + tdiv_source = clk_get(&s3c_device_timer[source_id].dev, "pwm- +> > + ? ? ? tdiv_source = clk_get(&s3c_device_timer[source_id].dev, "pwm- > tdiv"); -> > + if (IS_ERR(tdiv_source)) -> > + panic("failed to get pwm-tdiv clock for source timer"); +> > + ? ? ? if (IS_ERR(tdiv_source)) +> > + ? ? ? ? ? ? ? panic("failed to get pwm-tdiv clock for source timer"); > > + -> > + clk_enable(tin_source); +> > + ? ? ? clk_enable(tin_source); > > +} > > + > > +static void __init s5p_timer_init(void) > > +{ -> > + s5p_timer_resources(); -> > + s5p_clockevent_init(); -> > + s5p_clocksource_init(); +> > + ? ? ? s5p_timer_resources(); +> > + ? ? ? s5p_clockevent_init(); +> > + ? ? ? s5p_clocksource_init(); > > +} > > + > > +struct sys_timer s5p_timer = { -> > + .init = s5p_timer_init, +> > + ? ? ? .init ? ? ? ? ? = s5p_timer_init, > > +}; > > -- > > 1.7.1 @@ -570,11 +570,11 @@ CLOCK_EVT_FEAT_ONESHOT, > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-samsung- > soc" in -> > the body of a message to majordomo@vger.kernel.org -> > More majordomo info at http://vger.kernel.org/majordomo-info.html +> > the body of a message to majordomo at vger.kernel.org +> > More majordomo info at ?http://vger.kernel.org/majordomo-info.html > > > > _______________________________________________ > linux-arm-kernel mailing list -> linux-arm-kernel@lists.infradead.org +> linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel diff --git a/a/content_digest b/N1/content_digest index 3765c76..633e81e 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,14 +1,10 @@ "ref\01299216099-7709-1-git-send-email-sbkim73@samsung.com\0" "ref\01299216099-7709-2-git-send-email-sbkim73@samsung.com\0" "ref\0AANLkTikywhikDP1a4cMb=SYDhVROn_mk+zkHVLcg92T+@mail.gmail.com\0" - "From\0Sangbeom Kim <sbkim73@samsung.com>\0" - "Subject\0RE: [PATCH V2 1/3] ARM: S5P: Add s5p_timer support for HRT\0" + "From\0sbkim73@samsung.com (Sangbeom Kim)\0" + "Subject\0[PATCH V2 1/3] ARM: S5P: Add s5p_timer support for HRT\0" "Date\0Fri, 04 Mar 2011 16:06:34 +0900\0" - "To\0'Kyungmin Park' <kmpark@infradead.org>\0" - "Cc\0kgene.kim@samsung.com" - linux-samsung-soc@vger.kernel.org - ben-linux@fluff.org - " linux-arm-kernel@lists.infradead.org\0" + "To\0linux-arm-kernel@lists.infradead.org\0" "\00:1\0" "b\0" "Hi Kyungmin!\n" @@ -32,22 +28,22 @@ "> >\n" "> > Signed-off-by: Sangbeom Kim <sbkim73@samsung.com>\n" "> > ---\n" - "> > \302\240arch/arm/plat-s5p/Makefile \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240| \302\240 \302\2401 +\n" - "> > \302\240arch/arm/plat-s5p/include/plat/s5p-time.h | \302\240 40 +++\n" - "> > \302\240arch/arm/plat-s5p/s5p-time.c \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240| \302\240452\n" + "> > ?arch/arm/plat-s5p/Makefile ? ? ? ? ? ? ? ?| ? ?1 +\n" + "> > ?arch/arm/plat-s5p/include/plat/s5p-time.h | ? 40 +++\n" + "> > ?arch/arm/plat-s5p/s5p-time.c ? ? ? ? ? ? ?| ?452\n" "> +++++++++++++++++++++++++++++\n" - "> > \302\2403 files changed, 493 insertions(+), 0 deletions(-)\n" - "> > \302\240create mode 100644 arch/arm/plat-s5p/include/plat/s5p-time.h\n" - "> > \302\240create mode 100644 arch/arm/plat-s5p/s5p-time.c\n" + "> > ?3 files changed, 493 insertions(+), 0 deletions(-)\n" + "> > ?create mode 100644 arch/arm/plat-s5p/include/plat/s5p-time.h\n" + "> > ?create mode 100644 arch/arm/plat-s5p/s5p-time.c\n" "> >\n" "> > diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile\n" "> > index 4bd5cf9..3b8cc2f 100644\n" "> > --- a/arch/arm/plat-s5p/Makefile\n" "> > +++ b/arch/arm/plat-s5p/Makefile\n" - "> > @@ -22,6 +22,7 @@ obj-$(CONFIG_S5P_GPIO_INT) \302\240 \302\240+= irq-gpioint.o\n" - "> > \302\240obj-$(CONFIG_S5P_SYSTEM_MMU) \302\240 += sysmmu.o\n" - "> > \302\240obj-$(CONFIG_PM) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 += pm.o\n" - "> > \302\240obj-$(CONFIG_PM) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 += irq-pm.o\n" + "> > @@ -22,6 +22,7 @@ obj-$(CONFIG_S5P_GPIO_INT) ? ?+= irq-gpioint.o\n" + "> > ?obj-$(CONFIG_S5P_SYSTEM_MMU) ? += sysmmu.o\n" + "> > ?obj-$(CONFIG_PM) ? ? ? ? ? ? ? += pm.o\n" + "> > ?obj-$(CONFIG_PM) ? ? ? ? ? ? ? += irq-pm.o\n" "> > +obj-$(CONFIG_GENERIC_CLOCKEVENTS) += s5p-time.o\n" "> \n" "> Do you test it with exynos4 configuration? it's affect the exynos compile.\n" @@ -60,7 +56,7 @@ "> Thank you,\n" "> Kyungmin Park\n" "> >\n" - "> > \302\240# devices\n" + "> > ?# devices\n" "> >\n" "> > diff --git a/arch/arm/plat-s5p/include/plat/s5p-time.h b/arch/arm/plat-\n" "> s5p/include/plat/s5p-time.h\n" @@ -72,7 +68,7 @@ "> > +/* linux/arch/arm/plat-s5p/include/plat/s5p-time.h\n" "> > + *\n" "> > + * Copyright 2011 Samsung Electronics Co., Ltd.\n" - "> > + * \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 http://www.samsung.com/\n" + "> > + * ? ? ? ? ? ? http://www.samsung.com/\n" "> > + *\n" "> > + * Header file for s5p time support\n" "> > + *\n" @@ -86,27 +82,27 @@ "> > +\n" "> > +/* S5P HR-Timer Clock mode */\n" "> > +enum s5p_timer_mode {\n" - "> > + \302\240 \302\240 \302\240 S5P_PWM0,\n" - "> > + \302\240 \302\240 \302\240 S5P_PWM1,\n" - "> > + \302\240 \302\240 \302\240 S5P_PWM2,\n" - "> > + \302\240 \302\240 \302\240 S5P_PWM3,\n" - "> > + \302\240 \302\240 \302\240 S5P_PWM4,\n" + "> > + ? ? ? S5P_PWM0,\n" + "> > + ? ? ? S5P_PWM1,\n" + "> > + ? ? ? S5P_PWM2,\n" + "> > + ? ? ? S5P_PWM3,\n" + "> > + ? ? ? S5P_PWM4,\n" "> > +};\n" "> > +\n" "> > +struct s5p_timer_source {\n" - "> > + \302\240 \302\240 \302\240 unsigned int event_id;\n" - "> > + \302\240 \302\240 \302\240 unsigned int source_id;\n" + "> > + ? ? ? unsigned int event_id;\n" + "> > + ? ? ? unsigned int source_id;\n" "> > +};\n" "> > +\n" "> > +/* Be able to sleep for atleast 4 seconds (usually more) */\n" - "> > +#define S5PTIMER_MIN_RANGE \302\240 \302\240 4\n" + "> > +#define S5PTIMER_MIN_RANGE ? ? 4\n" "> > +\n" - "> > +#define TCNT_MAX \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 0xffffffff\n" - "> > +#define NON_PERIODIC \302\240 \302\240 \302\240 \302\240 \302\240 0\n" - "> > +#define PERIODIC \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 1\n" + "> > +#define TCNT_MAX ? ? ? ? ? ? ? 0xffffffff\n" + "> > +#define NON_PERIODIC ? ? ? ? ? 0\n" + "> > +#define PERIODIC ? ? ? ? ? ? ? 1\n" "> > +\n" "> > +extern void __init s5p_set_timer_source(enum s5p_timer_mode event,\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 enum s5p_timer_mode source);\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enum s5p_timer_mode source);\n" "> > +extern struct sys_timer s5p_timer;\n" "> > +#endif /* __ASM_PLAT_S5P_TIME_H */\n" "> > diff --git a/arch/arm/plat-s5p/s5p-time.c b/arch/arm/plat-s5p/s5p-time.c\n" @@ -118,7 +114,7 @@ "> > +/* linux/arch/arm/plat-s5p/s5p-time.c\n" "> > + *\n" "> > + * Copyright (c) 2011 Samsung Electronics Co., Ltd.\n" - "> > + * \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 http://www.samsung.com/\n" + "> > + * ? ? ? ? ? ? http://www.samsung.com/\n" "> > + *\n" "> > + * S5P - Common hr-timer support\n" "> > + *\n" @@ -157,283 +153,283 @@ "> > +\n" "> > +static void s5p_time_stop(enum s5p_timer_mode mode)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long tcon;\n" + "> > + ? ? ? unsigned long tcon;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tcon = __raw_readl(S3C2410_TCON);\n" + "> > + ? ? ? tcon = __raw_readl(S3C2410_TCON);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (mode) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T0START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? switch (mode) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0START;\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T1START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1START;\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T2START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2START;\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T3START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3START;\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T4START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4START;\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > + \302\240 \302\240 \302\240 }\n" - "> > + \302\240 \302\240 \302\240 __raw_writel(tcon, S3C2410_TCON);\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > + ? ? ? }\n" + "> > + ? ? ? __raw_writel(tcon, S3C2410_TCON);\n" "> > +}\n" "> > +\n" "> > +static void s5p_time_setup(enum s5p_timer_mode mode, unsigned long\n" "tcnt)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long tcon;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 tcon = __raw_readl(S3C2410_TCON);\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 tcnt--;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (mode) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~(0x0f << 0);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T0MANUALUPD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~(0x0f << 8);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T1MANUALUPD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~(0x0f << 12);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T2MANUALUPD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~(0x0f << 16);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T3MANUALUPD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~(0x07 << 20);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T4MANUALUPD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > + \302\240 \302\240 \302\240 }\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 __raw_writel(tcnt, S3C2410_TCNTB(mode));\n" - "> > + \302\240 \302\240 \302\240 __raw_writel(tcnt, S3C2410_TCMPB(mode));\n" - "> > + \302\240 \302\240 \302\240 __raw_writel(tcon, S3C2410_TCON);\n" + "> > + ? ? ? unsigned long tcon;\n" + "> > +\n" + "> > + ? ? ? tcon = __raw_readl(S3C2410_TCON);\n" + "> > +\n" + "> > + ? ? ? tcnt--;\n" + "> > +\n" + "> > + ? ? ? switch (mode) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 0);\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0MANUALUPD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 8);\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1MANUALUPD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 12);\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2MANUALUPD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~(0x0f << 16);\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3MANUALUPD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? tcon &= ~(0x07 << 20);\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4MANUALUPD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > + ? ? ? }\n" + "> > +\n" + "> > + ? ? ? __raw_writel(tcnt, S3C2410_TCNTB(mode));\n" + "> > + ? ? ? __raw_writel(tcnt, S3C2410_TCMPB(mode));\n" + "> > + ? ? ? __raw_writel(tcon, S3C2410_TCON);\n" "> > +}\n" "> > +\n" "> > +static void s5p_time_start(enum s5p_timer_mode mode, bool periodic)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long tcon;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 tcon \302\240= __raw_readl(S3C2410_TCON);\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (mode) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T0START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T0MANUALUPD;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (periodic)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T0RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 else\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T0RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T1START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T1MANUALUPD;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (periodic)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T1RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 else\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T1RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T2START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T2MANUALUPD;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (periodic)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T2RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 else\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T2RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T3START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T3MANUALUPD;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (periodic)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T3RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 else\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T3RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T4START;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T4MANUALUPD;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (periodic)\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon |= S3C2410_TCON_T4RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 else\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 tcon &= ~S3C2410_TCON_T4RELOAD;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > + \302\240 \302\240 \302\240 }\n" - "> > + \302\240 \302\240 \302\240 __raw_writel(tcon, S3C2410_TCON);\n" + "> > + ? ? ? unsigned long tcon;\n" + "> > +\n" + "> > + ? ? ? tcon ?= __raw_readl(S3C2410_TCON);\n" + "> > +\n" + "> > + ? ? ? switch (mode) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0START;\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0MANUALUPD;\n" + "> > +\n" + "> > + ? ? ? ? ? ? ? if (periodic)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T0RELOAD;\n" + "> > + ? ? ? ? ? ? ? else\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T0RELOAD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1START;\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1MANUALUPD;\n" + "> > +\n" + "> > + ? ? ? ? ? ? ? if (periodic)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T1RELOAD;\n" + "> > + ? ? ? ? ? ? ? else\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T1RELOAD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2START;\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2MANUALUPD;\n" + "> > +\n" + "> > + ? ? ? ? ? ? ? if (periodic)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T2RELOAD;\n" + "> > + ? ? ? ? ? ? ? else\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T2RELOAD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3START;\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3MANUALUPD;\n" + "> > +\n" + "> > + ? ? ? ? ? ? ? if (periodic)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T3RELOAD;\n" + "> > + ? ? ? ? ? ? ? else\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T3RELOAD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4START;\n" + "> > + ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4MANUALUPD;\n" + "> > +\n" + "> > + ? ? ? ? ? ? ? if (periodic)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon |= S3C2410_TCON_T4RELOAD;\n" + "> > + ? ? ? ? ? ? ? else\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? tcon &= ~S3C2410_TCON_T4RELOAD;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\", mode);\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > + ? ? ? }\n" + "> > + ? ? ? __raw_writel(tcon, S3C2410_TCON);\n" "> > +}\n" "> > +\n" "> > +static int s5p_set_next_event(unsigned long cycles,\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct clock_event_device *evt)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct clock_event_device *evt)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 s5p_time_setup(timer_source.event_id, cycles);\n" - "> > + \302\240 \302\240 \302\240 s5p_time_start(timer_source.event_id, NON_PERIODIC);\n" + "> > + ? ? ? s5p_time_setup(timer_source.event_id, cycles);\n" + "> > + ? ? ? s5p_time_start(timer_source.event_id, NON_PERIODIC);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 return 0;\n" + "> > + ? ? ? return 0;\n" "> > +}\n" "> > +\n" "> > +static void s5p_set_mode(enum clock_event_mode mode,\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 struct clock_event_device *evt)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct clock_event_device *evt)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 s5p_time_stop(timer_source.event_id);\n" + "> > + ? ? ? s5p_time_stop(timer_source.event_id);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (mode) {\n" - "> > + \302\240 \302\240 \302\240 case CLOCK_EVT_MODE_PERIODIC:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 s5p_time_setup(timer_source.event_id,\n" + "> > + ? ? ? switch (mode) {\n" + "> > + ? ? ? case CLOCK_EVT_MODE_PERIODIC:\n" + "> > + ? ? ? ? ? ? ? s5p_time_setup(timer_source.event_id,\n" "> clock_count_per_tick);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 s5p_time_start(timer_source.event_id, PERIODIC);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? ? ? ? ? s5p_time_start(timer_source.event_id, PERIODIC);\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case CLOCK_EVT_MODE_ONESHOT:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case CLOCK_EVT_MODE_ONESHOT:\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case CLOCK_EVT_MODE_UNUSED:\n" - "> > + \302\240 \302\240 \302\240 case CLOCK_EVT_MODE_SHUTDOWN:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" + "> > + ? ? ? case CLOCK_EVT_MODE_UNUSED:\n" + "> > + ? ? ? case CLOCK_EVT_MODE_SHUTDOWN:\n" + "> > + ? ? ? ? ? ? ? break;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 case CLOCK_EVT_MODE_RESUME:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 s5p_timer_resume();\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > + \302\240 \302\240 \302\240 }\n" + "> > + ? ? ? case CLOCK_EVT_MODE_RESUME:\n" + "> > + ? ? ? ? ? ? ? s5p_timer_resume();\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > + ? ? ? }\n" "> > +}\n" "> > +\n" "> > +static void s5p_timer_resume(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 /* event timer restart */\n" - "> > + \302\240 \302\240 \302\240 s5p_time_setup(timer_source.event_id, clock_count_per_tick);\n" - "> > + \302\240 \302\240 \302\240 s5p_time_start(timer_source.event_id, PERIODIC);\n" + "> > + ? ? ? /* event timer restart */\n" + "> > + ? ? ? s5p_time_setup(timer_source.event_id, clock_count_per_tick);\n" + "> > + ? ? ? s5p_time_start(timer_source.event_id, PERIODIC);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 /* source timer restart */\n" - "> > + \302\240 \302\240 \302\240 s5p_time_setup(timer_source.source_id, TCNT_MAX);\n" - "> > + \302\240 \302\240 \302\240 s5p_time_start(timer_source.source_id, PERIODIC);\n" + "> > + ? ? ? /* source timer restart */\n" + "> > + ? ? ? s5p_time_setup(timer_source.source_id, TCNT_MAX);\n" + "> > + ? ? ? s5p_time_start(timer_source.source_id, PERIODIC);\n" "> > +}\n" "> > +\n" "> > +void __init s5p_set_timer_source(enum s5p_timer_mode event,\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240enum s5p_timer_mode source)\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?enum s5p_timer_mode source)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 s3c_device_timer[event].dev.bus = &platform_bus_type;\n" - "> > + \302\240 \302\240 \302\240 s3c_device_timer[source].dev.bus = &platform_bus_type;\n" + "> > + ? ? ? s3c_device_timer[event].dev.bus = &platform_bus_type;\n" + "> > + ? ? ? s3c_device_timer[source].dev.bus = &platform_bus_type;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 timer_source.event_id = event;\n" - "> > + \302\240 \302\240 \302\240 timer_source.source_id = source;\n" + "> > + ? ? ? timer_source.event_id = event;\n" + "> > + ? ? ? timer_source.source_id = source;\n" "> > +}\n" "> > +\n" "> > +static struct clock_event_device time_event_device = {\n" - "> > + \302\240 \302\240 \302\240 .name \302\240 \302\240 \302\240 \302\240 \302\240 = \"s5p_event_timer\",\n" - "> > + \302\240 \302\240 \302\240 .features \302\240 \302\240 \302\240 = CLOCK_EVT_FEAT_PERIODIC |\n" + "> > + ? ? ? .name ? ? ? ? ? = \"s5p_event_timer\",\n" + "> > + ? ? ? .features ? ? ? = CLOCK_EVT_FEAT_PERIODIC |\n" "CLOCK_EVT_FEAT_ONESHOT,\n" - "> > + \302\240 \302\240 \302\240 .rating \302\240 \302\240 \302\240 \302\240 = 200,\n" - "> > + \302\240 \302\240 \302\240 .shift \302\240 \302\240 \302\240 \302\240 \302\240= 32,\n" - "> > + \302\240 \302\240 \302\240 .set_next_event = s5p_set_next_event,\n" - "> > + \302\240 \302\240 \302\240 .set_mode \302\240 \302\240 \302\240 = s5p_set_mode,\n" + "> > + ? ? ? .rating ? ? ? ? = 200,\n" + "> > + ? ? ? .shift ? ? ? ? ?= 32,\n" + "> > + ? ? ? .set_next_event = s5p_set_next_event,\n" + "> > + ? ? ? .set_mode ? ? ? = s5p_set_mode,\n" "> > +};\n" "> > +\n" "> > +static irqreturn_t s5p_clock_event_isr(int irq, void *dev_id)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 struct clock_event_device *evt = dev_id;\n" + "> > + ? ? ? struct clock_event_device *evt = dev_id;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 evt->event_handler(evt);\n" + "> > + ? ? ? evt->event_handler(evt);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 return IRQ_HANDLED;\n" + "> > + ? ? ? return IRQ_HANDLED;\n" "> > +}\n" "> > +\n" "> > +static struct irqaction s5p_clock_event_irq = {\n" - "> > + \302\240 \302\240 \302\240 .name \302\240 \302\240 \302\240 \302\240 \302\240 = \"s5p_time_irq\",\n" - "> > + \302\240 \302\240 \302\240 .flags \302\240 \302\240 \302\240 \302\240 \302\240= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,\n" - "> > + \302\240 \302\240 \302\240 .handler \302\240 \302\240 \302\240 \302\240= s5p_clock_event_isr,\n" - "> > + \302\240 \302\240 \302\240 .dev_id \302\240 \302\240 \302\240 \302\240 = &time_event_device,\n" + "> > + ? ? ? .name ? ? ? ? ? = \"s5p_time_irq\",\n" + "> > + ? ? ? .flags ? ? ? ? ?= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,\n" + "> > + ? ? ? .handler ? ? ? ?= s5p_clock_event_isr,\n" + "> > + ? ? ? .dev_id ? ? ? ? = &time_event_device,\n" "> > +};\n" "> > +\n" "> > +static void __init s5p_clockevent_init(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long pclk;\n" - "> > + \302\240 \302\240 \302\240 unsigned long clock_rate;\n" - "> > + \302\240 \302\240 \302\240 unsigned int irq_number;\n" - "> > + \302\240 \302\240 \302\240 struct clk *tscaler;\n" + "> > + ? ? ? unsigned long pclk;\n" + "> > + ? ? ? unsigned long clock_rate;\n" + "> > + ? ? ? unsigned int irq_number;\n" + "> > + ? ? ? struct clk *tscaler;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 pclk = clk_get_rate(timerclk);\n" + "> > + ? ? ? pclk = clk_get_rate(timerclk);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tscaler = clk_get_parent(tdiv_event);\n" + "> > + ? ? ? tscaler = clk_get_parent(tdiv_event);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clk_set_rate(tscaler, pclk / 2);\n" - "> > + \302\240 \302\240 \302\240 clk_set_rate(tdiv_event, pclk / 2);\n" - "> > + \302\240 \302\240 \302\240 clk_set_parent(tin_event, tdiv_event);\n" + "> > + ? ? ? clk_set_rate(tscaler, pclk / 2);\n" + "> > + ? ? ? clk_set_rate(tdiv_event, pclk / 2);\n" + "> > + ? ? ? clk_set_parent(tin_event, tdiv_event);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clock_rate = clk_get_rate(tin_event);\n" - "> > + \302\240 \302\240 \302\240 clock_count_per_tick = clock_rate / HZ;\n" + "> > + ? ? ? clock_rate = clk_get_rate(tin_event);\n" + "> > + ? ? ? clock_count_per_tick = clock_rate / HZ;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clockevents_calc_mult_shift(&time_event_device,\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 clock_rate, S5PTIMER_MIN_RANGE);\n" - "> > + \302\240 \302\240 \302\240 time_event_device.max_delta_ns =\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 clockevent_delta2ns(-1, &time_event_device);\n" - "> > + \302\240 \302\240 \302\240 time_event_device.min_delta_ns =\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 clockevent_delta2ns(1, &time_event_device);\n" + "> > + ? ? ? clockevents_calc_mult_shift(&time_event_device,\n" + "> > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? clock_rate, S5PTIMER_MIN_RANGE);\n" + "> > + ? ? ? time_event_device.max_delta_ns =\n" + "> > + ? ? ? ? ? ? ? clockevent_delta2ns(-1, &time_event_device);\n" + "> > + ? ? ? time_event_device.min_delta_ns =\n" + "> > + ? ? ? ? ? ? ? clockevent_delta2ns(1, &time_event_device);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 time_event_device.cpumask = cpumask_of(0);\n" - "> > + \302\240 \302\240 \302\240 clockevents_register_device(&time_event_device);\n" + "> > + ? ? ? time_event_device.cpumask = cpumask_of(0);\n" + "> > + ? ? ? clockevents_register_device(&time_event_device);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 irq_number = timer_source.event_id + IRQ_TIMER0;\n" - "> > + \302\240 \302\240 \302\240 setup_irq(irq_number, &s5p_clock_event_irq);\n" + "> > + ? ? ? irq_number = timer_source.event_id + IRQ_TIMER0;\n" + "> > + ? ? ? setup_irq(irq_number, &s5p_clock_event_irq);\n" "> > +}\n" "> > +\n" "> > +static cycle_t s5p_timer_read(struct clocksource *cs)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long offset = 0;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (timer_source.source_id) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = (timer_source.source_id * 0x0c) + 0x14;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = 0x40;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\",\n" + "> > + ? ? ? unsigned long offset = 0;\n" + "> > +\n" + "> > + ? ? ? switch (timer_source.source_id) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? offset = 0x40;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\",\n" "> timer_source.source_id);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 return 0;\n" - "> > + \302\240 \302\240 \302\240 }\n" + "> > + ? ? ? ? ? ? ? return 0;\n" + "> > + ? ? ? }\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 return (cycle_t) ~__raw_readl(S3C_TIMERREG(offset));\n" + "> > + ? ? ? return (cycle_t) ~__raw_readl(S3C_TIMERREG(offset));\n" "> > +}\n" "> > +\n" "> > +/*\n" @@ -447,135 +443,135 @@ "> > +\n" "> > +unsigned long long notrace sched_clock(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 u32 cyc;\n" - "> > + \302\240 \302\240 \302\240 unsigned long offset = 0;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (timer_source.source_id) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = (timer_source.source_id * 0x0c) + 0x14;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = 0x40;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\",\n" + "> > + ? ? ? u32 cyc;\n" + "> > + ? ? ? unsigned long offset = 0;\n" + "> > +\n" + "> > + ? ? ? switch (timer_source.source_id) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? offset = 0x40;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\",\n" "> timer_source.source_id);\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 return 0;\n" - "> > + \302\240 \302\240 \302\240 }\n" + "> > + ? ? ? ? ? ? ? return 0;\n" + "> > + ? ? ? }\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 cyc = ~__raw_readl(S3C_TIMERREG(offset));\n" - "> > + \302\240 \302\240 \302\240 return cyc_to_sched_clock(&cd, cyc, (u32)~0);\n" + "> > + ? ? ? cyc = ~__raw_readl(S3C_TIMERREG(offset));\n" + "> > + ? ? ? return cyc_to_sched_clock(&cd, cyc, (u32)~0);\n" "> > +}\n" "> > +\n" "> > +static void notrace s5p_update_sched_clock(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 u32 cyc;\n" - "> > + \302\240 \302\240 \302\240 unsigned long offset = 0;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 switch (timer_source.source_id) {\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM0:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM1:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM2:\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM3:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = (timer_source.source_id * 0x0c) + 0x14;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 case S5P_PWM4:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 offset = 0x40;\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n" - "> > +\n" - "> > + \302\240 \302\240 \302\240 default:\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 printk(KERN_ERR \"Invalid Timer %d\\n\",\n" + "> > + ? ? ? u32 cyc;\n" + "> > + ? ? ? unsigned long offset = 0;\n" + "> > +\n" + "> > + ? ? ? switch (timer_source.source_id) {\n" + "> > + ? ? ? case S5P_PWM0:\n" + "> > + ? ? ? case S5P_PWM1:\n" + "> > + ? ? ? case S5P_PWM2:\n" + "> > + ? ? ? case S5P_PWM3:\n" + "> > + ? ? ? ? ? ? ? offset = (timer_source.source_id * 0x0c) + 0x14;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? case S5P_PWM4:\n" + "> > + ? ? ? ? ? ? ? offset = 0x40;\n" + "> > + ? ? ? ? ? ? ? break;\n" + "> > +\n" + "> > + ? ? ? default:\n" + "> > + ? ? ? ? ? ? ? printk(KERN_ERR \"Invalid Timer %d\\n\",\n" "> timer_source.source_id);\n" - "> > + \302\240 \302\240 \302\240 }\n" + "> > + ? ? ? }\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 cyc = ~__raw_readl(S3C_TIMERREG(offset));\n" - "> > + \302\240 \302\240 \302\240 update_sched_clock(&cd, cyc, (u32)~0);\n" + "> > + ? ? ? cyc = ~__raw_readl(S3C_TIMERREG(offset));\n" + "> > + ? ? ? update_sched_clock(&cd, cyc, (u32)~0);\n" "> > +}\n" "> > +\n" "> > +struct clocksource time_clocksource = {\n" - "> > + \302\240 \302\240 \302\240 .name \302\240 \302\240 \302\240 \302\240 \302\240 = \"s5p_clocksource_timer\",\n" - "> > + \302\240 \302\240 \302\240 .rating \302\240 \302\240 \302\240 \302\240 = 250,\n" - "> > + \302\240 \302\240 \302\240 .read \302\240 \302\240 \302\240 \302\240 \302\240 = s5p_timer_read,\n" - "> > + \302\240 \302\240 \302\240 .mask \302\240 \302\240 \302\240 \302\240 \302\240 = CLOCKSOURCE_MASK(32),\n" - "> > + \302\240 \302\240 \302\240 .flags \302\240 \302\240 \302\240 \302\240 \302\240= CLOCK_SOURCE_IS_CONTINUOUS,\n" + "> > + ? ? ? .name ? ? ? ? ? = \"s5p_clocksource_timer\",\n" + "> > + ? ? ? .rating ? ? ? ? = 250,\n" + "> > + ? ? ? .read ? ? ? ? ? = s5p_timer_read,\n" + "> > + ? ? ? .mask ? ? ? ? ? = CLOCKSOURCE_MASK(32),\n" + "> > + ? ? ? .flags ? ? ? ? ?= CLOCK_SOURCE_IS_CONTINUOUS,\n" "> > +};\n" "> > +\n" "> > +static void __init s5p_clocksource_init(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 unsigned long pclk;\n" - "> > + \302\240 \302\240 \302\240 unsigned long clock_rate;\n" + "> > + ? ? ? unsigned long pclk;\n" + "> > + ? ? ? unsigned long clock_rate;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 pclk = clk_get_rate(timerclk);\n" + "> > + ? ? ? pclk = clk_get_rate(timerclk);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clk_set_rate(tdiv_source, pclk / 2);\n" - "> > + \302\240 \302\240 \302\240 clk_set_parent(tin_source, tdiv_source);\n" + "> > + ? ? ? clk_set_rate(tdiv_source, pclk / 2);\n" + "> > + ? ? ? clk_set_parent(tin_source, tdiv_source);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clock_rate = clk_get_rate(tin_source);\n" + "> > + ? ? ? clock_rate = clk_get_rate(tin_source);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate);\n" + "> > + ? ? ? init_sched_clock(&cd, s5p_update_sched_clock, 32, clock_rate);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 s5p_time_setup(timer_source.source_id, TCNT_MAX);\n" - "> > + \302\240 \302\240 \302\240 s5p_time_start(timer_source.source_id, PERIODIC);\n" + "> > + ? ? ? s5p_time_setup(timer_source.source_id, TCNT_MAX);\n" + "> > + ? ? ? s5p_time_start(timer_source.source_id, PERIODIC);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 if (clocksource_register_hz(&time_clocksource, clock_rate))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"%s: can't register clocksource\\n\",\n" + "> > + ? ? ? if (clocksource_register_hz(&time_clocksource, clock_rate))\n" + "> > + ? ? ? ? ? ? ? panic(\"%s: can't register clocksource\\n\",\n" "> time_clocksource.name);\n" "> > +}\n" "> > +\n" "> > +static void __init s5p_timer_resources(void)\n" "> > +{\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 unsigned long event_id = timer_source.event_id;\n" - "> > + \302\240 \302\240 \302\240 unsigned long source_id = timer_source.source_id;\n" + "> > + ? ? ? unsigned long event_id = timer_source.event_id;\n" + "> > + ? ? ? unsigned long source_id = timer_source.source_id;\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 timerclk = clk_get(NULL, \"timers\");\n" + "> > + ? ? ? timerclk = clk_get(NULL, \"timers\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clk_enable(timerclk);\n" + "> > + ? ? ? clk_enable(timerclk);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 if (IS_ERR(timerclk))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"failed to get timers clock for timer\");\n" + "> > + ? ? ? if (IS_ERR(timerclk))\n" + "> > + ? ? ? ? ? ? ? panic(\"failed to get timers clock for timer\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tin_event = clk_get(&s3c_device_timer[event_id].dev, \"pwm-tin\");\n" + "> > + ? ? ? tin_event = clk_get(&s3c_device_timer[event_id].dev, \"pwm-tin\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 if (IS_ERR(tin_event))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"failed to get pwm-tin clock for event timer\");\n" + "> > + ? ? ? if (IS_ERR(tin_event))\n" + "> > + ? ? ? ? ? ? ? panic(\"failed to get pwm-tin clock for event timer\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tdiv_event = clk_get(&s3c_device_timer[event_id].dev,\n" + "> > + ? ? ? tdiv_event = clk_get(&s3c_device_timer[event_id].dev,\n" "\"pwm-tdiv\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 if (IS_ERR(tdiv_event))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"failed to get pwm-tdiv clock for event timer\");\n" + "> > + ? ? ? if (IS_ERR(tdiv_event))\n" + "> > + ? ? ? ? ? ? ? panic(\"failed to get pwm-tdiv clock for event timer\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clk_enable(tin_event);\n" + "> > + ? ? ? clk_enable(tin_event);\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tin_source = clk_get(&s3c_device_timer[source_id].dev,\n" + "> > + ? ? ? tin_source = clk_get(&s3c_device_timer[source_id].dev,\n" "\"pwm-tin\");\n" - "> > + \302\240 \302\240 \302\240 if (IS_ERR(tin_source))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"failed to get pwm-tin clock for source timer\");\n" + "> > + ? ? ? if (IS_ERR(tin_source))\n" + "> > + ? ? ? ? ? ? ? panic(\"failed to get pwm-tin clock for source timer\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 tdiv_source = clk_get(&s3c_device_timer[source_id].dev, \"pwm-\n" + "> > + ? ? ? tdiv_source = clk_get(&s3c_device_timer[source_id].dev, \"pwm-\n" "> tdiv\");\n" - "> > + \302\240 \302\240 \302\240 if (IS_ERR(tdiv_source))\n" - "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 panic(\"failed to get pwm-tdiv clock for source timer\");\n" + "> > + ? ? ? if (IS_ERR(tdiv_source))\n" + "> > + ? ? ? ? ? ? ? panic(\"failed to get pwm-tdiv clock for source timer\");\n" "> > +\n" - "> > + \302\240 \302\240 \302\240 clk_enable(tin_source);\n" + "> > + ? ? ? clk_enable(tin_source);\n" "> > +}\n" "> > +\n" "> > +static void __init s5p_timer_init(void)\n" "> > +{\n" - "> > + \302\240 \302\240 \302\240 s5p_timer_resources();\n" - "> > + \302\240 \302\240 \302\240 s5p_clockevent_init();\n" - "> > + \302\240 \302\240 \302\240 s5p_clocksource_init();\n" + "> > + ? ? ? s5p_timer_resources();\n" + "> > + ? ? ? s5p_clockevent_init();\n" + "> > + ? ? ? s5p_clocksource_init();\n" "> > +}\n" "> > +\n" "> > +struct sys_timer s5p_timer = {\n" - "> > + \302\240 \302\240 \302\240 .init \302\240 \302\240 \302\240 \302\240 \302\240 = s5p_timer_init,\n" + "> > + ? ? ? .init ? ? ? ? ? = s5p_timer_init,\n" "> > +};\n" "> > --\n" "> > 1.7.1\n" @@ -583,13 +579,13 @@ "> > --\n" "> > To unsubscribe from this list: send the line \"unsubscribe linux-samsung-\n" "> soc\" in\n" - "> > the body of a message to majordomo@vger.kernel.org\n" - "> > More majordomo info at \302\240http://vger.kernel.org/majordomo-info.html\n" + "> > the body of a message to majordomo at vger.kernel.org\n" + "> > More majordomo info at ?http://vger.kernel.org/majordomo-info.html\n" "> >\n" "> \n" "> _______________________________________________\n" "> linux-arm-kernel mailing list\n" - "> linux-arm-kernel@lists.infradead.org\n" + "> linux-arm-kernel at lists.infradead.org\n" > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -cc20bc1f3f8874dbe76bf1e4f2a2cc9d0418660f1e0a9c3b970018ce41eb07d1 +1a465785bd6c6fb7eecb4d6e7eccf5491792008dfaae0e82c1dc81ef5b1b88fb
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.