Esempio n. 1
0
static unsigned int ds1302_readbyte(unsigned int addr)
{
	unsigned int	val;
	unsigned long	flags;

	local_irq_save(flags);
	set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK);
	set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));

	set_dp(get_dp() | RTC_RESET);
	ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_READ);
	set_dirp(get_dirp() & ~RTC_IODATA);
	val = ds1302_recvbits();
	set_dp(get_dp() & ~RTC_RESET);
	local_irq_restore(flags);

	return(val);
}
Esempio n. 2
0
static void ds1302_writebyte(unsigned int addr, unsigned int val)
{
    unsigned long	flags;

#if 0
    printk("SnapGear RTC: ds1302_writebyte(addr=%x)\n", addr);
#endif

    save_flags(flags);
    cli();
    set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK);
    set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));
    set_dp(get_dp() | RTC_RESET);
    ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_WRITE);
    ds1302_sendbits(val);
    set_dp(get_dp() & ~RTC_RESET);
    restore_flags(flags);
}
Esempio n. 3
0
static void ds1302_reset(void)
{
	unsigned long	flags;
	/* Hardware dependent reset/init */
	local_irq_save(flags);
	set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK);
	set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));
	local_irq_restore(flags);
}
Esempio n. 4
0
static void ds1302_reset(void)
{
    unsigned long	flags;
    /* Hardware dependant reset/init */
    save_flags(flags);
    cli();
    set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK);
    set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));
    restore_flags(flags);
}
Esempio n. 5
0
static unsigned int ds1302_readbyte(unsigned int addr)
{
    unsigned int	val;
    unsigned long	flags;

#if 0
    printk("SnapGear RTC: ds1302_readbyte(addr=%x)\n", addr);
#endif

    save_flags(flags);
    cli();
    set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK);
    set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));

    set_dp(get_dp() | RTC_RESET);
    ds1302_sendbits(((addr & 0x3f) << 1) | RTC_CMD_READ);
    set_dirp(get_dirp() & ~RTC_IODATA);
    val = ds1302_recvbits();
    set_dp(get_dp() & ~RTC_RESET);
    restore_flags(flags);

    return(val);
}
Esempio n. 6
0
/*
 * This initialization routine requires at least one
 * vring i.e. vr0. vr1 is optional.
 */
static void *
init_vr(struct mic_info *mic, int fd, int type,
	struct mic_vring *vr0, struct mic_vring *vr1, int num_vq)
{
	int vr_size;
	char *va;

	vr_size = PAGE_ALIGN(_vring_size(MIC_VRING_ENTRIES,
					 MIC_VIRTIO_RING_ALIGN) +
			     sizeof(struct _mic_vring_info));
	va = mmap(NULL, MIC_DEVICE_PAGE_END + vr_size * num_vq,
		PROT_READ, MAP_SHARED, fd, 0);
	if (MAP_FAILED == va) {
		mpsslog("%s %s %d mmap failed errno %s\n",
			mic->name, __func__, __LINE__,
			strerror(errno));
		goto done;
	}
	set_dp(mic, type, va);
	vr0->va = (struct mic_vring *)&va[MIC_DEVICE_PAGE_END];
	vr0->info = vr0->va +
		_vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN);
	vring_init(&vr0->vr,
		   MIC_VRING_ENTRIES, vr0->va, MIC_VIRTIO_RING_ALIGN);
	mpsslog("%s %s vr0 %p vr0->info %p vr_size 0x%x vring 0x%x ",
		__func__, mic->name, vr0->va, vr0->info, vr_size,
		_vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
	mpsslog("magic 0x%x expected 0x%x\n",
		le32toh(vr0->info->magic), MIC_MAGIC + type);
	assert(le32toh(vr0->info->magic) == MIC_MAGIC + type);
	if (vr1) {
		vr1->va = (struct mic_vring *)
			&va[MIC_DEVICE_PAGE_END + vr_size];
		vr1->info = vr1->va + _vring_size(MIC_VRING_ENTRIES,
			MIC_VIRTIO_RING_ALIGN);
		vring_init(&vr1->vr,
			   MIC_VRING_ENTRIES, vr1->va, MIC_VIRTIO_RING_ALIGN);
		mpsslog("%s %s vr1 %p vr1->info %p vr_size 0x%x vring 0x%x ",
			__func__, mic->name, vr1->va, vr1->info, vr_size,
			_vring_size(MIC_VRING_ENTRIES, MIC_VIRTIO_RING_ALIGN));
		mpsslog("magic 0x%x expected 0x%x\n",
			le32toh(vr1->info->magic), MIC_MAGIC + type + 1);
		assert(le32toh(vr1->info->magic) == MIC_MAGIC + type + 1);
	}
done:
	return va;
}
Esempio n. 7
0
static int __init ds1302_rtc_probe(struct platform_device *pdev)
{
	struct rtc_device *rtc;

	/* Reset */
	set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));

	/* Write a magic value to the DS1302 RAM, and see if it sticks. */
	ds1302_writebyte(RTC_ADDR_RAM0, 0x42);
	if (ds1302_readbyte(RTC_ADDR_RAM0) != 0x42)
		return -ENODEV;

	rtc = rtc_device_register("ds1302", &pdev->dev,
					   &ds1302_rtc_ops, THIS_MODULE);
	if (IS_ERR(rtc))
		return PTR_ERR(rtc);

	platform_set_drvdata(pdev, rtc);

	return 0;
}
Esempio n. 8
0
static inline void ds1302_txbit(int bit)
{
	set_dp((get_dp() & ~RTC_IODATA) | (bit ? RTC_IODATA : 0));
}
Esempio n. 9
0
static inline void ds1302_stop(void)
{
	set_dp(get_dp() & ~RTC_RESET);
}
Esempio n. 10
0
static inline void ds1302_start(void)
{
	set_dp(get_dp() | RTC_RESET);
}
Esempio n. 11
0
static inline void ds1302_clock(void)
{
	set_dp(get_dp() | RTC_SCLK);	/* clock high */
	set_dp(get_dp() & ~RTC_SCLK);	/* clock low */
}
Esempio n. 12
0
static inline void ds1302_reset(void)
{
	set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK));
}