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 @@
#include "hw/tdc_regs.h"
/* XXX: Check that the value is properly written? */
void tdc_set_utc_time(struct spec_tdc *tdc)
void tdc_set_utc_time(struct spec_tdc *tdc, u32 value)
{
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;
do_gettimeofday(&utc_time);
writel(utc_time.tv_sec, tdc->base + TDC_START_UTC_R);
writel(TDC_CTRL_LOAD_UTC, tdc->base + TDC_CTRL_REG);
tdc_set_utc_time(tdc, utc_time.tv_sec);
}
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);
}
/* 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)
{
writel(val, tdc->base + TDC_IRQ_TSTAMP_THRESH_R);
......@@ -47,7 +49,6 @@ u32 tdc_get_irq_tstamp_thresh(struct spec_tdc *tdc)
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)
{
writel(val, tdc->base + TDC_IRQ_TIME_THRESH_R);
......@@ -58,7 +59,6 @@ u32 tdc_get_irq_time_thresh(struct spec_tdc *tdc)
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)
{
writel(val, tdc->base + TDC_DAC_WORD_R);
......
......@@ -243,7 +243,7 @@ int tdc_fmc_probe(struct fmc_device *dev)
/* Reset ACAM chip */
tdc_acam_reset(tdc);
/* Initialice UTC time */
tdc_set_utc_time(tdc);
tdc_set_local_utc_time(tdc);
/* Prepare the irq work */
INIT_WORK(&tdc->irq_work, tdc_fmc_irq_work);
/* Request the IRQ */
......
......@@ -124,7 +124,10 @@ static int tdc_zio_conf_set(struct device *dev,
case TDC_ATTR_DEV_CURRENT_UTC:
break;
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;
case TDC_ATTR_DEV_INPUT_ENABLED:
usr_val |= TDC_INPUT_ENABLE_FLAG;
......
......@@ -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_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_irq_tstamp_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