tdc: added support for user-specified utc time

Signed-off-by: Samuel Iglesias Gonsálvez's avatarSamuel Iglesias Gonsálvez <siglesias@igalia.com>
parent 4ff5fd73
...@@ -20,15 +20,18 @@ ...@@ -20,15 +20,18 @@
#include "hw/tdc_regs.h" #include "hw/tdc_regs.h"
/* XXX: Check that the value is properly written? */ void tdc_set_utc_time(struct spec_tdc *tdc, u32 value)
void tdc_set_utc_time(struct spec_tdc *tdc) {
writel(value, tdc->base + TDC_START_UTC_R);
writel(TDC_CTRL_LOAD_UTC, tdc->base + TDC_CTRL_REG);
}
void tdc_set_local_utc_time(struct spec_tdc *tdc)
{ {
struct timeval utc_time; struct timeval utc_time;
do_gettimeofday(&utc_time); do_gettimeofday(&utc_time);
tdc_set_utc_time(tdc, utc_time.tv_sec);
writel(utc_time.tv_sec, tdc->base + TDC_START_UTC_R);
writel(TDC_CTRL_LOAD_UTC, tdc->base + TDC_CTRL_REG);
} }
u32 tdc_get_current_utc_time(struct spec_tdc *tdc) u32 tdc_get_current_utc_time(struct spec_tdc *tdc)
...@@ -36,7 +39,6 @@ u32 tdc_get_current_utc_time(struct spec_tdc *tdc) ...@@ -36,7 +39,6 @@ u32 tdc_get_current_utc_time(struct spec_tdc *tdc)
return readl(tdc->base + TDC_CURRENT_UTC_R); return readl(tdc->base + TDC_CURRENT_UTC_R);
} }
/* XXX: void-function or I should check that the value is properly written? */
void tdc_set_irq_tstamp_thresh(struct spec_tdc *tdc, u32 val) void tdc_set_irq_tstamp_thresh(struct spec_tdc *tdc, u32 val)
{ {
writel(val, tdc->base + TDC_IRQ_TSTAMP_THRESH_R); writel(val, tdc->base + TDC_IRQ_TSTAMP_THRESH_R);
...@@ -47,7 +49,6 @@ u32 tdc_get_irq_tstamp_thresh(struct spec_tdc *tdc) ...@@ -47,7 +49,6 @@ u32 tdc_get_irq_tstamp_thresh(struct spec_tdc *tdc)
return readl(tdc->base + TDC_IRQ_TSTAMP_THRESH_R); return readl(tdc->base + TDC_IRQ_TSTAMP_THRESH_R);
} }
/* XXX: void-function or I should check that the value is properly written? */
void tdc_set_irq_time_thresh(struct spec_tdc *tdc, u32 val) void tdc_set_irq_time_thresh(struct spec_tdc *tdc, u32 val)
{ {
writel(val, tdc->base + TDC_IRQ_TIME_THRESH_R); writel(val, tdc->base + TDC_IRQ_TIME_THRESH_R);
...@@ -58,7 +59,6 @@ u32 tdc_get_irq_time_thresh(struct spec_tdc *tdc) ...@@ -58,7 +59,6 @@ u32 tdc_get_irq_time_thresh(struct spec_tdc *tdc)
return readl(tdc->base + TDC_IRQ_TIME_THRESH_R); return readl(tdc->base + TDC_IRQ_TIME_THRESH_R);
} }
/* XXX: void-function or I should check that the value is properly written? */
void tdc_set_dac_word(struct spec_tdc *tdc, u32 val) void tdc_set_dac_word(struct spec_tdc *tdc, u32 val)
{ {
writel(val, tdc->base + TDC_DAC_WORD_R); writel(val, tdc->base + TDC_DAC_WORD_R);
......
...@@ -243,7 +243,7 @@ int tdc_fmc_probe(struct fmc_device *dev) ...@@ -243,7 +243,7 @@ int tdc_fmc_probe(struct fmc_device *dev)
/* Reset ACAM chip */ /* Reset ACAM chip */
tdc_acam_reset(tdc); tdc_acam_reset(tdc);
/* Initialice UTC time */ /* Initialice UTC time */
tdc_set_utc_time(tdc); tdc_set_local_utc_time(tdc);
/* Prepare the irq work */ /* Prepare the irq work */
INIT_WORK(&tdc->irq_work, tdc_fmc_irq_work); INIT_WORK(&tdc->irq_work, tdc_fmc_irq_work);
/* Request the IRQ */ /* Request the IRQ */
......
...@@ -124,7 +124,10 @@ static int tdc_zio_conf_set(struct device *dev, ...@@ -124,7 +124,10 @@ static int tdc_zio_conf_set(struct device *dev,
case TDC_ATTR_DEV_CURRENT_UTC: case TDC_ATTR_DEV_CURRENT_UTC:
break; break;
case TDC_ATTR_DEV_SET_UTC: case TDC_ATTR_DEV_SET_UTC:
tdc_set_utc_time(tdc); if (usr_val == -1)
tdc_set_local_utc_time(tdc);
else
tdc_set_utc_time(tdc, usr_val);
break; break;
case TDC_ATTR_DEV_INPUT_ENABLED: case TDC_ATTR_DEV_INPUT_ENABLED:
usr_val |= TDC_INPUT_ENABLE_FLAG; usr_val |= TDC_INPUT_ENABLE_FLAG;
......
...@@ -92,7 +92,8 @@ extern int tdc_dma_start(struct spec_tdc *tdc); ...@@ -92,7 +92,8 @@ extern int tdc_dma_start(struct spec_tdc *tdc);
extern int tdc_fmc_probe(struct fmc_device *dev); extern int tdc_fmc_probe(struct fmc_device *dev);
extern int tdc_fmc_remove(struct fmc_device *dev); extern int tdc_fmc_remove(struct fmc_device *dev);
extern void tdc_set_utc_time(struct spec_tdc *tdc); extern void tdc_set_local_utc_time(struct spec_tdc *tdc);
extern void tdc_set_utc_time(struct spec_tdc *tdc, u32 value);
extern void tdc_set_input_enable(struct spec_tdc *tdc, u32 value); extern void tdc_set_input_enable(struct spec_tdc *tdc, u32 value);
extern void tdc_set_irq_tstamp_thresh(struct spec_tdc *tdc, u32 val); extern void tdc_set_irq_tstamp_thresh(struct spec_tdc *tdc, u32 val);
extern void tdc_set_irq_time_thresh(struct spec_tdc *tdc, u32 val); extern void tdc_set_irq_time_thresh(struct spec_tdc *tdc, u32 val);
......
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