summaryrefslogtreecommitdiffstats
path: root/sys/arm/at91/at91_ssc.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2006-10-20 07:08:59 +0000
committerimp <imp@FreeBSD.org>2006-10-20 07:08:59 +0000
commit105dd71b1627fd12ce54b2d2f115760031c70407 (patch)
treee20079c919ff2a9c22f341f60f01a8110f300bc6 /sys/arm/at91/at91_ssc.c
parentdbcd7809d115d0bcf3c7338c8d6f9c25e7df7758 (diff)
downloadFreeBSD-src-105dd71b1627fd12ce54b2d2f115760031c70407.zip
FreeBSD-src-105dd71b1627fd12ce54b2d2f115760031c70407.tar.gz
Commit WIP SSC driver, more work is needed here, but it configures
things OK.
Diffstat (limited to 'sys/arm/at91/at91_ssc.c')
-rw-r--r--sys/arm/at91/at91_ssc.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/sys/arm/at91/at91_ssc.c b/sys/arm/at91/at91_ssc.c
index 517d837..f4db0d1 100644
--- a/sys/arm/at91/at91_ssc.c
+++ b/sys/arm/at91/at91_ssc.c
@@ -88,14 +88,16 @@ static void at91_ssc_deactivate(device_t dev);
/* cdev routines */
static d_open_t at91_ssc_open;
static d_close_t at91_ssc_close;
-static d_ioctl_t at91_ssc_ioctl;
+static d_read_t at91_ssc_read;
+static d_write_t at91_ssc_write;
static struct cdevsw at91_ssc_cdevsw =
{
.d_version = D_VERSION,
.d_open = at91_ssc_open,
.d_close = at91_ssc_close,
- .d_ioctl = at91_ssc_ioctl
+ .d_read = at91_ssc_read,
+ .d_write = at91_ssc_write,
};
static int
@@ -134,6 +136,19 @@ at91_ssc_attach(device_t dev)
goto out;
}
sc->cdev->si_drv1 = sc;
+
+ // Init for TSC needs
+ WR4(sc, SSC_CR, SSC_CR_SWRST);
+ WR4(sc, SSC_CMR, 0); // clock divider unused
+ WR4(sc, SSC_RCMR,
+ SSC_RCMR_CKS_RK | SSC_RCMR_CKO_NONE | SSC_RCMR_START_FALL_EDGE_RF);
+ WR4(sc, SSC_RFMR,
+ 0x1f | SSC_RFMR_MSFBF | SSC_RFMR_FSOS_NONE);
+ WR4(sc, SSC_TCMR,
+ SSC_TCMR_CKS_TK | SSC_TCMR_CKO_NONE | SSC_RCMR_START_CONT);
+ WR4(sc, SSC_TFMR,
+ 0x1f | SSC_TFMR_DATDEF | SSC_TFMR_MSFBF | SSC_TFMR_FSOS_NEG_PULSE);
+
out:;
if (err)
at91_ssc_deactivate(dev);
@@ -161,7 +176,7 @@ at91_ssc_activate(device_t dev)
rid = 0;
sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE);
- if (sc->mem_res == NULL)
+ if (sc->irq_res == NULL)
goto errout;
return (0);
errout:
@@ -241,10 +256,15 @@ at91_ssc_close(struct cdev *dev, int fflag, int devtype, struct thread *td)
}
static int
-at91_ssc_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
- struct thread *td)
+at91_ssc_read(struct cdev *dev, struct uio *uio, int flag)
+{
+ return EIO;
+}
+
+static int
+at91_ssc_write(struct cdev *dev, struct uio *uio, int flag)
{
- return (ENXIO);
+ return EIO;
}
static device_method_t at91_ssc_methods[] = {
OpenPOWER on IntegriCloud