From 089f44f2bee5497e4180f9fa7984748564bbd69d Mon Sep 17 00:00:00 2001
From: "Wesley W. Terpstra" <w.terpstra@gsi.de>
Date: Fri, 25 Oct 2013 16:33:34 +0200
Subject: [PATCH] w1: remove duplicated code

---
 tools/w1-host/Makefile    |   8 ---
 tools/w1-host/w1-eeprom.c | 137 ------------------------------------
 tools/w1-host/w1-hw.c     |  65 -----------------
 tools/w1-host/w1-temp.c   |  77 --------------------
 tools/w1-host/w1.c        | 144 --------------------------------------
 tools/w1-host/w1.h        |  86 -----------------------
 6 files changed, 517 deletions(-)
 delete mode 100644 tools/w1-host/Makefile
 delete mode 100644 tools/w1-host/w1-eeprom.c
 delete mode 100644 tools/w1-host/w1-hw.c
 delete mode 100644 tools/w1-host/w1-temp.c
 delete mode 100644 tools/w1-host/w1.c
 delete mode 100644 tools/w1-host/w1.h

diff --git a/tools/w1-host/Makefile b/tools/w1-host/Makefile
deleted file mode 100644
index 6baa947..0000000
--- a/tools/w1-host/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-
-all: libw1.a
-
-libw1.a: w1.o w1-eeprom.o w1-hw.o w1-temp.o
-	ar r $@ $^
-
-clean:
-	rm -f *.o *.a *~
\ No newline at end of file
diff --git a/tools/w1-host/w1-eeprom.c b/tools/w1-host/w1-eeprom.c
deleted file mode 100644
index 2a7514f..0000000
--- a/tools/w1-host/w1-eeprom.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Eeprom support (family 0x43)
- * Cesar Prados, Alessandro Rubini, 2013. GNU GPL2 or later
- */
-#include <stdlib.h>
-#include <string.h>
-#include "w1.h"
-
-#define LSB_ADDR(X) ((X) & 0xFF)
-#define MSB_ADDR(X) (((X) & 0xFF00)>>8)
-
-static int w1_write_page(struct w1_dev *dev, int offset, const uint8_t *buffer,
-			 int blen)
-{
-	int i, j, es;
-
-	/* First, write scratchpad */
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDR_W_SPAD);
-	w1_write_byte(dev->bus, LSB_ADDR(offset));
-	w1_write_byte(dev->bus, MSB_ADDR(offset));
-	for(i = 0; i < blen; i++)
-		w1_write_byte(dev->bus, buffer[i]);
-
-	/* Then, read it back, and remember the return E/S */
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDR_R_SPAD);
-	if (w1_read_byte(dev->bus) != LSB_ADDR(offset))
-		return -1;
-	if (w1_read_byte(dev->bus) != MSB_ADDR(offset))
-		return -2;
-	es = w1_read_byte(dev->bus);
-	for(i = 0; i < blen; i++) {
-		j = w1_read_byte(dev->bus);
-		if (j != buffer[i])
-			return -3;
-	}
-
-	/* Finally, "copy scratchpad" to actually write */
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDR_C_SPAD);
-	w1_write_byte(dev->bus, LSB_ADDR(offset));
-	w1_write_byte(dev->bus, MSB_ADDR(offset));
-	w1_write_byte(dev->bus, es);
-	usleep(10000); /* 10ms, in theory */
-
-	/* Don't read back, as nothing useful is there (I get 0xf9, why?) */
-	return blen;
-}
-
-int w1_write_eeprom(struct w1_dev *dev, int offset, const uint8_t *buffer,
-		    int blen)
-{
-	int i, page, endpage;
-	int ret = 0;
-
-	/* Split the write into several page-local writes */
-	page = offset / 32;
-	endpage = (offset + blen - 1) / 32;
-
-	/* Traling part of first page */
-	if (offset % 32) {
-		if (endpage != page)
-			i = 32 - (offset % 32);
-		else
-			i = blen;
-		ret += w1_write_page(dev, offset, buffer, i);
-		if (ret < 0)
-			return ret;
-		buffer += i;
-		offset += i;
-		blen -= i;
-	}
-
-	/* Whole pages and leading part of last page */
-	while (blen > 0 ) {
-		i = blen;
-		if (blen > 32)
-			i = 32;
-		i = w1_write_page(dev, offset, buffer, i);
-		if (i < 0)
-			return i;
-		ret += i;
-		buffer += 32;
-		offset += 32;
-		blen -= 32;
-	}
-	return ret;
-}
-
-int w1_read_eeprom(struct w1_dev *dev, int offset, uint8_t *buffer, int blen)
-{
-	int i;
-
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDR_R_MEMORY);
-
-	w1_write_byte(dev->bus, LSB_ADDR(offset));
-	w1_write_byte(dev->bus, MSB_ADDR(offset));
-
-	/* There is no page-size limit in reading, just go on at will */
-	for(i = 0; i < blen; i++)
-		buffer[i] = w1_read_byte(dev->bus);
-
-	return blen;
-}
-
-
-int w1_read_eeprom_bus(struct w1_bus *bus,
-			    int offset, uint8_t *buffer, int blen)
-{
-	int i, class;
-
-	for (i = 0; i < W1_MAX_DEVICES; i++) {
-		class = w1_class(bus->devs + i);
-		if (class == 0x43)
-			return w1_read_eeprom(bus->devs + i, offset,
-					      buffer, blen);
-	}
-	/* not found */
-	return -1;
-}
-
-int w1_write_eeprom_bus(struct w1_bus *bus,
-			int offset, const uint8_t *buffer, int blen)
-{
-	int i, class;
-
-	for (i = 0; i < W1_MAX_DEVICES; i++) {
-		class = w1_class(bus->devs + i);
-		if (class == 0x43)
-			return w1_write_eeprom(bus->devs + i, offset,
-					       buffer, blen);
-	}
-	/* not found */
-	return -1;
-}
diff --git a/tools/w1-host/w1-hw.c b/tools/w1-host/w1-hw.c
deleted file mode 100644
index 447b19a..0000000
--- a/tools/w1-host/w1-hw.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * This work is part of the White Rabbit project
- *
- * Copyright (C) 2013 CERN (www.cern.ch)
- * Author: Alessandro Rubini <rubini@gnudd.com>
- *
- * Released according to the GNU GPL, version 2 or any later version.
- */
-#include <string.h>
-#include "w1.h"
-#include "../../include/hw/sockit_owm_regs.h"
-
-extern void *BASE_ONEWIRE;
-
-static inline uint32_t __wait_cycle(void *base)
-{
-	uint32_t reg;
-
-	while ((reg = IORD_SOCKIT_OWM_CTL(base)) & SOCKIT_OWM_CTL_CYC_MSK)
-		;
-	return reg;
-}
-
-static int w1_reset(struct w1_bus *bus)
-{
-	int portnum = bus->detail;
-	uint32_t reg;
-
-	IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE, (portnum << SOCKIT_OWM_CTL_SEL_OFST)
-			    | (SOCKIT_OWM_CTL_CYC_MSK)
-			    | (SOCKIT_OWM_CTL_RST_MSK));
-	reg = __wait_cycle(BASE_ONEWIRE);
-	/* return presence-detect pulse (1 if true) */
-	return (reg & SOCKIT_OWM_CTL_DAT_MSK) ? 0 : 1;
-}
-
-static int w1_read_bit(struct w1_bus *bus)
-{
-	int portnum = bus->detail;
-	uint32_t reg;
-
-	IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE, (portnum << SOCKIT_OWM_CTL_SEL_OFST)
-			    | (SOCKIT_OWM_CTL_CYC_MSK)
-			    | (SOCKIT_OWM_CTL_DAT_MSK));
-	reg = __wait_cycle(BASE_ONEWIRE);
-	return (reg & SOCKIT_OWM_CTL_DAT_MSK) ? 1 : 0;
-}
-
-static void w1_write_bit(struct w1_bus *bus, int bit)
-{
-	int portnum = bus->detail;
-
-	IOWR_SOCKIT_OWM_CTL(BASE_ONEWIRE, (portnum << SOCKIT_OWM_CTL_SEL_OFST)
-			    | (SOCKIT_OWM_CTL_CYC_MSK)
-			    | (bit ? SOCKIT_OWM_CTL_DAT_MSK : 0));
-	__wait_cycle(BASE_ONEWIRE);
-}
-
-struct w1_ops wrpc_w1_ops = {
-	.reset = w1_reset,
-	.read_bit = w1_read_bit,
-	.write_bit = w1_write_bit,
-};
-
-struct w1_bus wrpc_w1_bus;
diff --git a/tools/w1-host/w1-temp.c b/tools/w1-host/w1-temp.c
deleted file mode 100644
index cd5dbc9..0000000
--- a/tools/w1-host/w1-temp.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Temperature input for DS18S20 (family 0x10)
- * Alessandro Rubini, 2013 GNU GPL2 or later
- */
-#include "w1.h"
-
-int32_t w1_read_temp(struct w1_dev *dev, unsigned long flags)
-{
-	static uint8_t scratchpad[8];
-	int class = w1_class(dev);
-	int32_t res;
-	int16_t cval;
-	int i;
-
-	/* The caller is expected to have checked the class. but still... */
-	switch(class) {
-	case 0x10: case 0x28: case 0x42:
-		break; /* Supported, at least for temperature input */
-	default:
-		return 1<<31; /* very negative */
-	}
-
-	/* If so asked, jump over start-conversion and only collect result */
-	if (flags & W1_FLAG_COLLECT)
-		goto collect;
-
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDT_CONVERT);
-
-	/* If so asked, don't wait for the conversion to be over */
-	if (flags & W1_FLAG_NOWAIT)
-		return 0;
-
-	while(wrpc_w1_ops.read_bit(dev->bus) == 0)
-		;
-collect:
-	w1_match_rom(dev);
-	w1_write_byte(dev->bus, W1_CMDT_R_SPAD);
-	for (i = 0; i < sizeof(scratchpad); i++)
-		scratchpad[i] = w1_read_byte(dev->bus);
-
-	res = 0;
-	cval = scratchpad[1] << 8 | scratchpad[0];
-
-	switch(class) {
-	case 0x10:
-		/* 18S20: two bytes plus "count remain" value */
-		res = (int32_t)cval << 15; /* 1 decimal points */
-		res -= 0x4000; /* - 0.25 degrees */
-		res |= scratchpad[6] << 12; /* 1/16th of degree each */
-		break;
-
-	case 0x28:
-	case 0x42:
-		/* 18B20 and DS28EA00: only the two bytes */
-		res = (int32_t)cval << 12; /* 4 decimal points */
-		break;
-	}
-	return res;
-}
-
-int32_t w1_read_temp_bus(struct w1_bus *bus, unsigned long flags)
-{
-	int i, class;
-
-	for (i = 0; i < W1_MAX_DEVICES; i++) {
-		class = w1_class(bus->devs + i);
-		switch(class) {
-		case 0x10: case 0x28: case 0x42:
-			return w1_read_temp(bus->devs + i, flags);
-		default:
-			break;
-		}
-	}
-	/* not found */
-	return 1 << 31;
-}
diff --git a/tools/w1-host/w1.c b/tools/w1-host/w1.c
deleted file mode 100644
index 20bb9a2..0000000
--- a/tools/w1-host/w1.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Onewire generic interface
- * Alessandro Rubini, 2013 GNU GPL2 or later
- */
-#include <string.h>
-#include "w1.h"
-
-static const struct w1_ops *ops = &wrpc_w1_ops; /* local shorter name */
-
-void w1_write_byte(struct w1_bus *bus, int byte)
-{
-	int i;
-
-	for (i = 1; i < 0x100; i <<= 1)
-		ops->write_bit(bus, byte & i ? 1 : 0);
-}
-
-int w1_read_byte(struct w1_bus *bus)
-{
-	int i, res = 0;
-
-	for (i = 1; i < 0x100; i <<= 1)
-		res |= ops->read_bit(bus) ? i : 0;
-	usleep(100); /* inter-byte, for my eyes only */
-	return res;
-
-}
-
-/* scan_bus requires this di-bit helper */
-enum __bits {B_0, B_1, B_BOTH};
-
-/* return what we get, select it if unambiguous or the one passed */
-static enum __bits __get_dibit(struct w1_bus *bus, int select)
-{
-	int a, b;
-
-	a = ops->read_bit(bus);
-	b = ops->read_bit(bus);
-	if (a != b) {
-		ops->write_bit(bus, a);
-		return a ? B_1 : B_0;
-	}
-	ops->write_bit(bus, select);
-	return B_BOTH;
-}
-
-/*
- * This identifies one. Returns 0 if not found, -1 on error. The current mask
- * is used to return the conflicts we found: on each conflict, we follow
- *  what's already in our id->rom, but remember it for later scans.
- */
-static int __w1_scan_one(struct w1_bus *bus, uint64_t *rom, uint64_t *cmask)
-{
-	uint64_t mask;
-	int select;
-	enum __bits b;
-
-	if (ops->reset(bus) != 1)
-		return -1;
-	w1_write_byte(bus, 0xf0); /* search rom */
-
-	/*
-	 * Send all bits we have (initially, zero).
-	 * On a conflict, follow what we have in rom and possibly mark it.
-	 */
-	*cmask = 0;
-	for (mask = 1; mask; mask <<= 1) {
-		select = *rom & mask;
-		b = __get_dibit(bus, select);
-
-		switch(b) {
-		case B_1:
-			*rom |= mask;
-		case B_0:
-			break;
-		case B_BOTH:
-			/* if we follow 1, it's resolved, else mark it */
-			if (!select)
-				*cmask |= mask;
-			break;
-		}
-	}
-	return 0;
-}
-
-int w1_scan_bus(struct w1_bus *bus)
-{
-	uint64_t mask;
-	uint64_t cmask; /* current */
-	struct w1_dev *d;
-	int i;
-
-	memset(bus->devs, 0, sizeof(bus->devs));
-
-	if (!ops->reset)
-		return 0; /* no devices */
-	for (i = 0, cmask = 0; i < W1_MAX_DEVICES; i++) {
-		d = bus->devs + i;
-		d->bus = bus;
-
-		if (i) { /* Not first: scan conflicts and resolve last */
-			d->rom = bus->devs[i-1].rom;
-			for (mask = (1ULL<<63); mask; mask >>= 1) {
-				/*
-				 * Warning: lm32 compiter treats as signed!
-				 *
-				 * Even if mask is uint64_t, the shift in the
-				 * for loop above is signed, so fix it.
-				 * I prefer not to change the loop, as the
-				 * code is in use elsewhere and I prefer to
-				 * keep differences to a minimum
-				 */
-				if (mask & (1ULL<<62))
-					mask = (1ULL<<62);
-
-				if (cmask & mask)
-					break;
-				d->rom &= ~mask;
-			}
-			if (!mask) {
-				/* no conflicts to solve: done */
-				return i;
-			}
-			d->rom |= mask; /* we'll reply 1 next loop */
-			cmask &= ~mask;
-		}
-		if (__w1_scan_one(bus, &d->rom, &cmask)) {
-			/* error on this one */
-			return i;
-		}
-	}
-	return i;
-}
-
-void w1_match_rom(struct w1_dev *dev)
-{
-	int i;
-
-	ops->reset(dev->bus);
-	w1_write_byte(dev->bus, W1_CMD_MATCH_ROM); /* match rom */
-	for (i = 0; i < 64; i+=8) {
-		w1_write_byte(dev->bus, (int)(dev->rom >> i) );
-	}
-}
diff --git a/tools/w1-host/w1.h b/tools/w1-host/w1.h
deleted file mode 100644
index 5605d11..0000000
--- a/tools/w1-host/w1.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Onewire generic interface
- * Alessandro Rubini, 2013 GNU GPL2 or later
- */
-#ifndef __BATHOS_W1_H__
-#define __BATHOS_W1_H__
-
-#include <stdint.h>
-
-#define W1_MAX_DEVICES 8 /* we have no alloc */
-
-struct w1_dev {
-	struct w1_bus *bus;
-	uint64_t rom;
-};
-
-static inline int w1_class(struct w1_dev *dev)
-{
-	return dev->rom & 0xff;
-}
-
-
-struct w1_bus {
-	unsigned long detail; /* gpio bit or whatever (driver-specific) */
-	struct w1_dev devs[W1_MAX_DEVICES];
-};
-
-/*
- * The low-level driver is based on this set of operations. We expect to
- * only have one set of such operations in each build. (i.e., no bus-specific
- * operations, to keep the thing simple and small).
- */
-struct w1_ops {
-	int (*reset)(struct w1_bus *bus);	/* returns 1 on "present" */
-	int (*read_bit)(struct w1_bus *bus);
-	void (*write_bit)(struct w1_bus *bus, int bit);
-};
-
-/* Library functions */
-extern int w1_scan_bus(struct w1_bus *bus);
-extern void w1_write_byte(struct w1_bus *bus, int byte);
-extern int w1_read_byte(struct w1_bus *bus);
-extern void w1_match_rom(struct w1_dev *dev);
-
-#define W1_CMD_SEARCH_ROM	0xf0
-#define W1_CMD_READ_ROM		0x33
-#define W1_CMD_MATCH_ROM	0x55
-#define W1_CMD_SKIP_ROM		0xcc
-#define W1_CMD_ASEARCH		0xec
-
-/* commands for specific families */
-#define W1_CMDT_CONVERT		0x44
-#define W1_CMDT_W_SPAD		0x4e
-#define W1_CMDT_R_SPAD		0xbe
-#define W1_CMDT_CP_SPAD		0x48
-#define W1_CMDT_RECALL		0xb8
-#define W1_CMDT_R_PS		0xb4
-/* EEPROM DS28EC20 */
-#define W1_CMDR_W_SPAD		0x0f
-#define W1_CMDR_R_SPAD		0xaa
-#define W1_CMDR_C_SPAD		0x55
-#define W1_CMDR_R_MEMORY	0xf0
-#define W1_CMDR_EXT_R_MEMORY	0xa5
-
-/* Temperature conversion takes time: by default wait, but allow flags */
-#define W1_FLAG_NOWAIT		0x01	/* start conversion only*/
-#define W1_FLAG_COLLECT		0x02	/* don't start, just get output */
-
-/* These functions are dev-specific */
-extern int32_t w1_read_temp(struct w1_dev *dev, unsigned long flags);
-extern int w1_read_eeprom(struct w1_dev *dev,
-			  int offset, uint8_t *buffer, int blen);
-extern int w1_write_eeprom(struct w1_dev *dev,
-			   int offset, const uint8_t *buffer, int blen);
-
-/* These are generic, using the first suitable device in the bus */
-extern int32_t w1_read_temp_bus(struct w1_bus *bus, unsigned long flags);
-extern int w1_read_eeprom_bus(struct w1_bus *bus,
-			    int offset, uint8_t *buffer, int blen);
-extern int w1_write_eeprom_bus(struct w1_bus *bus,
-			     int offset, const uint8_t *buffer, int blen);
-
-extern struct w1_ops wrpc_w1_ops;
-extern struct w1_bus wrpc_w1_bus;
-
-#endif /* __BATHOS_W1_H__ */
-- 
GitLab