Staging: comedi: Added reading of board serial number from eeprom for m-series boards
Nothing is done with it yet, eventually it will be made available to user-space via a readable file in sysfs. From: Frank Mori Hess <fmhess@users.sourceforge.net> Cc: David Schleef <ds@schleef.org> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
75c794f0d2
commit
f8db88ef1f
@@ -111,6 +111,7 @@ Bugs:
|
|||||||
|
|
||||||
#include "../comedidev.h"
|
#include "../comedidev.h"
|
||||||
|
|
||||||
|
#include <asm/byteorder.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#include "ni_stc.h"
|
#include "ni_stc.h"
|
||||||
@@ -1526,6 +1527,8 @@ static void m_series_init_eeprom_buffer(comedi_device * dev)
|
|||||||
{
|
{
|
||||||
static const int Start_Cal_EEPROM = 0x400;
|
static const int Start_Cal_EEPROM = 0x400;
|
||||||
static const unsigned window_size = 10;
|
static const unsigned window_size = 10;
|
||||||
|
static const int serial_number_eeprom_offset = 0x4;
|
||||||
|
static const int serial_number_eeprom_length = 0x4;
|
||||||
unsigned old_iodwbsr_bits;
|
unsigned old_iodwbsr_bits;
|
||||||
unsigned old_iodwbsr1_bits;
|
unsigned old_iodwbsr1_bits;
|
||||||
unsigned old_iodwcr1_bits;
|
unsigned old_iodwcr1_bits;
|
||||||
@@ -1537,9 +1540,16 @@ static void m_series_init_eeprom_buffer(comedi_device * dev)
|
|||||||
writel(0x0, devpriv->mite->mite_io_addr + MITE_IODWBSR);
|
writel(0x0, devpriv->mite->mite_io_addr + MITE_IODWBSR);
|
||||||
writel(((0x80 | window_size) | devpriv->mite->daq_phys_addr),
|
writel(((0x80 | window_size) | devpriv->mite->daq_phys_addr),
|
||||||
devpriv->mite->mite_io_addr + MITE_IODWBSR_1);
|
devpriv->mite->mite_io_addr + MITE_IODWBSR_1);
|
||||||
writel(0x0, devpriv->mite->mite_io_addr + MITE_IODWCR_1);
|
writel(0x1 | old_iodwcr1_bits, devpriv->mite->mite_io_addr + MITE_IODWCR_1);
|
||||||
writel(0xf, devpriv->mite->mite_io_addr + 0x30);
|
writel(0xf, devpriv->mite->mite_io_addr + 0x30);
|
||||||
|
|
||||||
|
BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number));
|
||||||
|
for (i = 0; i < serial_number_eeprom_length; ++i) {
|
||||||
|
char *byte_ptr = (char*)&devpriv->serial_number + i;
|
||||||
|
*byte_ptr = ni_readb(serial_number_eeprom_offset + i);
|
||||||
|
}
|
||||||
|
devpriv->serial_number = be32_to_cpu(devpriv->serial_number);
|
||||||
|
|
||||||
for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) {
|
for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) {
|
||||||
devpriv->eeprom_buffer[i] = ni_readb(Start_Cal_EEPROM + i);
|
devpriv->eeprom_buffer[i] = ni_readb(Start_Cal_EEPROM + i);
|
||||||
}
|
}
|
||||||
|
@@ -1484,6 +1484,7 @@ typedef struct ni_board_struct {
|
|||||||
\
|
\
|
||||||
sampl_t ai_fifo_buffer[0x2000]; \
|
sampl_t ai_fifo_buffer[0x2000]; \
|
||||||
uint8_t eeprom_buffer[M_SERIES_EEPROM_SIZE]; \
|
uint8_t eeprom_buffer[M_SERIES_EEPROM_SIZE]; \
|
||||||
|
uint32_t serial_number; \
|
||||||
\
|
\
|
||||||
struct mite_struct *mite; \
|
struct mite_struct *mite; \
|
||||||
struct mite_channel *ai_mite_chan; \
|
struct mite_channel *ai_mite_chan; \
|
||||||
|
Reference in New Issue
Block a user