Commit c8d5ea8c authored by Michael Hennerich's avatar Michael Hennerich Committed by Mike Frysinger

Blackfin: update gptimers API

First we fix the prototypes for functions that return boolean values by
using "int" rather than "uint16_t".  Then we introduce a get_gptimer_run()
function for checking the current run status of a timer, and then we add a
disable_gptimers_sync() function which parallels disable_gptimers() with
corresponding normal "_sync" behavior.
Signed-off-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
parent 9ba3c24f
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
# else # else
# define MAX_BLACKFIN_GPTIMERS 11 # define MAX_BLACKFIN_GPTIMERS 11
# define TIMER8_GROUP_REG TIMER_ENABLE1 # define TIMER8_GROUP_REG TIMER_ENABLE1
# define TIMER_GROUP2 1
# endif # endif
# define TIMER0_GROUP_REG TIMER_ENABLE0 # define TIMER0_GROUP_REG TIMER_ENABLE0
#endif #endif
...@@ -40,10 +41,12 @@ ...@@ -40,10 +41,12 @@
# define MAX_BLACKFIN_GPTIMERS 12 # define MAX_BLACKFIN_GPTIMERS 12
# define TIMER0_GROUP_REG TMRS8_ENABLE # define TIMER0_GROUP_REG TMRS8_ENABLE
# define TIMER8_GROUP_REG TMRS4_ENABLE # define TIMER8_GROUP_REG TMRS4_ENABLE
# define TIMER_GROUP2 1
#endif #endif
/* /*
* All others: 3 timers: * All others: 3 timers:
*/ */
#define TIMER_GROUP1 0
#if !defined(MAX_BLACKFIN_GPTIMERS) #if !defined(MAX_BLACKFIN_GPTIMERS)
# define MAX_BLACKFIN_GPTIMERS 3 # define MAX_BLACKFIN_GPTIMERS 3
# define TIMER0_GROUP_REG TIMER_ENABLE # define TIMER0_GROUP_REG TIMER_ENABLE
...@@ -109,8 +112,8 @@ ...@@ -109,8 +112,8 @@
#define TIMER_ERR_PROG_PER 0x8000 #define TIMER_ERR_PROG_PER 0x8000
#define TIMER_ERR_PROG_PW 0xC000 #define TIMER_ERR_PROG_PW 0xC000
#define TIMER_EMU_RUN 0x0200 #define TIMER_EMU_RUN 0x0200
#define TIMER_TOGGLE_HI 0x0100 #define TIMER_TOGGLE_HI 0x0100
#define TIMER_CLK_SEL 0x0080 #define TIMER_CLK_SEL 0x0080
#define TIMER_OUT_DIS 0x0040 #define TIMER_OUT_DIS 0x0040
#define TIMER_TIN_SEL 0x0020 #define TIMER_TIN_SEL 0x0020
#define TIMER_IRQ_ENA 0x0010 #define TIMER_IRQ_ENA 0x0010
...@@ -169,23 +172,25 @@ ...@@ -169,23 +172,25 @@
/* The actual gptimer API */ /* The actual gptimer API */
void set_gptimer_pwidth (int timer_id, uint32_t width); void set_gptimer_pwidth(int timer_id, uint32_t width);
uint32_t get_gptimer_pwidth (int timer_id); uint32_t get_gptimer_pwidth(int timer_id);
void set_gptimer_period (int timer_id, uint32_t period); void set_gptimer_period(int timer_id, uint32_t period);
uint32_t get_gptimer_period (int timer_id); uint32_t get_gptimer_period(int timer_id);
uint32_t get_gptimer_count (int timer_id); uint32_t get_gptimer_count(int timer_id);
uint16_t get_gptimer_intr (int timer_id); int get_gptimer_intr(int timer_id);
void clear_gptimer_intr (int timer_id); void clear_gptimer_intr(int timer_id);
uint16_t get_gptimer_over (int timer_id); int get_gptimer_over(int timer_id);
void clear_gptimer_over (int timer_id); void clear_gptimer_over(int timer_id);
void set_gptimer_config (int timer_id, uint16_t config); void set_gptimer_config(int timer_id, uint16_t config);
uint16_t get_gptimer_config (int timer_id); uint16_t get_gptimer_config(int timer_id);
void set_gptimer_pulse_hi (int timer_id); int get_gptimer_run(int timer_id);
void set_gptimer_pulse_hi(int timer_id);
void clear_gptimer_pulse_hi(int timer_id); void clear_gptimer_pulse_hi(int timer_id);
void enable_gptimers (uint16_t mask); void enable_gptimers(uint16_t mask);
void disable_gptimers (uint16_t mask); void disable_gptimers(uint16_t mask);
uint16_t get_enabled_gptimers (void); void disable_gptimers_sync(uint16_t mask);
uint32_t get_gptimer_status (int group); uint16_t get_enabled_gptimers(void);
void set_gptimer_status (int group, uint32_t value); uint32_t get_gptimer_status(int group);
void set_gptimer_status(int group, uint32_t value);
#endif #endif
...@@ -189,10 +189,10 @@ void set_gptimer_status(int group, uint32_t value) ...@@ -189,10 +189,10 @@ void set_gptimer_status(int group, uint32_t value)
} }
EXPORT_SYMBOL(set_gptimer_status); EXPORT_SYMBOL(set_gptimer_status);
uint16_t get_gptimer_intr(int timer_id) int get_gptimer_intr(int timer_id)
{ {
tassert(timer_id < MAX_BLACKFIN_GPTIMERS); tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & timil_mask[timer_id]) ? 1 : 0; return !!(group_regs[BFIN_TIMER_OCTET(timer_id)]->status & timil_mask[timer_id]);
} }
EXPORT_SYMBOL(get_gptimer_intr); EXPORT_SYMBOL(get_gptimer_intr);
...@@ -203,10 +203,10 @@ void clear_gptimer_intr(int timer_id) ...@@ -203,10 +203,10 @@ void clear_gptimer_intr(int timer_id)
} }
EXPORT_SYMBOL(clear_gptimer_intr); EXPORT_SYMBOL(clear_gptimer_intr);
uint16_t get_gptimer_over(int timer_id) int get_gptimer_over(int timer_id)
{ {
tassert(timer_id < MAX_BLACKFIN_GPTIMERS); tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & tovf_mask[timer_id]) ? 1 : 0; return !!(group_regs[BFIN_TIMER_OCTET(timer_id)]->status & tovf_mask[timer_id]);
} }
EXPORT_SYMBOL(get_gptimer_over); EXPORT_SYMBOL(get_gptimer_over);
...@@ -217,6 +217,13 @@ void clear_gptimer_over(int timer_id) ...@@ -217,6 +217,13 @@ void clear_gptimer_over(int timer_id)
} }
EXPORT_SYMBOL(clear_gptimer_over); EXPORT_SYMBOL(clear_gptimer_over);
int get_gptimer_run(int timer_id)
{
tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
return !!(group_regs[BFIN_TIMER_OCTET(timer_id)]->status & trun_mask[timer_id]);
}
EXPORT_SYMBOL(get_gptimer_run);
void set_gptimer_config(int timer_id, uint16_t config) void set_gptimer_config(int timer_id, uint16_t config)
{ {
tassert(timer_id < MAX_BLACKFIN_GPTIMERS); tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
...@@ -244,7 +251,7 @@ void enable_gptimers(uint16_t mask) ...@@ -244,7 +251,7 @@ void enable_gptimers(uint16_t mask)
} }
EXPORT_SYMBOL(enable_gptimers); EXPORT_SYMBOL(enable_gptimers);
void disable_gptimers(uint16_t mask) static void _disable_gptimers(uint16_t mask)
{ {
int i; int i;
uint16_t m = mask; uint16_t m = mask;
...@@ -253,6 +260,12 @@ void disable_gptimers(uint16_t mask) ...@@ -253,6 +260,12 @@ void disable_gptimers(uint16_t mask)
group_regs[i]->disable = m & 0xFF; group_regs[i]->disable = m & 0xFF;
m >>= 8; m >>= 8;
} }
}
void disable_gptimers(uint16_t mask)
{
int i;
_disable_gptimers(mask);
for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i) for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i)
if (mask & (1 << i)) if (mask & (1 << i))
group_regs[BFIN_TIMER_OCTET(i)]->status |= trun_mask[i]; group_regs[BFIN_TIMER_OCTET(i)]->status |= trun_mask[i];
...@@ -260,6 +273,13 @@ void disable_gptimers(uint16_t mask) ...@@ -260,6 +273,13 @@ void disable_gptimers(uint16_t mask)
} }
EXPORT_SYMBOL(disable_gptimers); EXPORT_SYMBOL(disable_gptimers);
void disable_gptimers_sync(uint16_t mask)
{
_disable_gptimers(mask);
SSYNC();
}
EXPORT_SYMBOL(disable_gptimers_sync);
void set_gptimer_pulse_hi(int timer_id) void set_gptimer_pulse_hi(int timer_id)
{ {
tassert(timer_id < MAX_BLACKFIN_GPTIMERS); tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment