Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
81f6075e
Commit
81f6075e
authored
Mar 23, 2006
by
Evgeniy Polyakov
Committed by
Greg Kroah-Hartman
Jun 22, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] w1: Replace dscore and ds_w1_bridge with ds2490 driver.
parent
f522d239
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
321 additions
and
505 deletions
+321
-505
Documentation/w1/masters/ds2490
Documentation/w1/masters/ds2490
+18
-0
drivers/w1/masters/Kconfig
drivers/w1/masters/Kconfig
+9
-18
drivers/w1/masters/Makefile
drivers/w1/masters/Makefile
+1
-6
drivers/w1/masters/ds2490.c
drivers/w1/masters/ds2490.c
+293
-141
drivers/w1/masters/ds_w1_bridge.c
drivers/w1/masters/ds_w1_bridge.c
+0
-174
drivers/w1/masters/dscore.h
drivers/w1/masters/dscore.h
+0
-166
No files found.
Documentation/w1/masters/ds2490
0 → 100644
View file @
81f6075e
Kernel driver ds2490
====================
Supported chips:
* Maxim DS2490 based
Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
Description
-----------
The Maixm/Dallas Semiconductor DS2490 is a chip
which allows to build USB <-> W1 bridges.
DS9490(R) is a USB <-> W1 bus master device
which has 0x81 family ID integrated chip and DS2490
low-level operational chip.
drivers/w1/masters/Kconfig
View file @
81f6075e
...
...
@@ -15,24 +15,15 @@ config W1_MASTER_MATROX
This support is also available as a module. If so, the module
will be called matrox_w1.ko.
config W1_MASTER_DS9490
tristate "DS9490R transport layer driver"
depends on W1 && USB
help
Say Y here if you want to have a driver for DS9490R UWB <-> W1 bridge.
This support is also available as a module. If so, the module
will be called ds9490r.ko.
config W1_MASTER_DS9490_BRIDGE
tristate "DS9490R USB <-> W1 transport layer for 1-wire"
depends on W1_MASTER_DS9490
help
Say Y here if you want to communicate with your 1-wire devices
using DS9490R USB bridge.
This support is also available as a module. If so, the module
will be called ds_w1_bridge.ko.
config W1_MASTER_DS2490
tristate "DS2490 USB <-> W1 transport layer for 1-wire"
depends on W1 && USB
help
Say Y here if you want to have a driver for DS2490 based USB <-> W1 bridges,
for example DS9490*.
This support is also available as a module. If so, the module
will be called ds2490.ko.
config W1_MASTER_DS2482
tristate "Maxim DS2482 I2C to 1-Wire bridge"
...
...
drivers/w1/masters/Makefile
View file @
81f6075e
...
...
@@ -3,11 +3,6 @@
#
obj-$(CONFIG_W1_MASTER_MATROX)
+=
matrox_w1.o
obj-$(CONFIG_W1_MASTER_DS9490)
+=
ds9490r.o
ds9490r-objs
:=
dscore.o
obj-$(CONFIG_W1_MASTER_DS9490_BRIDGE)
+=
ds_w1_bridge.o
obj-$(CONFIG_W1_MASTER_DS2490)
+=
ds2490.o
obj-$(CONFIG_W1_MASTER_DS2482)
+=
ds2482.o
drivers/w1/masters/ds
core
.c
→
drivers/w1/masters/ds
2490
.c
View file @
81f6075e
This diff is collapsed.
Click to expand it.
drivers/w1/masters/ds_w1_bridge.c
deleted
100644 → 0
View file @
f522d239
/*
* ds_w1_bridge.c
*
* Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/module.h>
#include <linux/types.h>
#include "../w1.h"
#include "../w1_int.h"
#include "dscore.h"
static
struct
ds_device
*
ds_dev
;
static
struct
w1_bus_master
*
ds_bus_master
;
static
u8
ds9490r_touch_bit
(
void
*
data
,
u8
bit
)
{
u8
ret
;
struct
ds_device
*
dev
=
data
;
if
(
ds_touch_bit
(
dev
,
bit
,
&
ret
))
return
0
;
return
ret
;
}
static
void
ds9490r_write_bit
(
void
*
data
,
u8
bit
)
{
struct
ds_device
*
dev
=
data
;
ds_write_bit
(
dev
,
bit
);
}
static
void
ds9490r_write_byte
(
void
*
data
,
u8
byte
)
{
struct
ds_device
*
dev
=
data
;
ds_write_byte
(
dev
,
byte
);
}
static
u8
ds9490r_read_bit
(
void
*
data
)
{
struct
ds_device
*
dev
=
data
;
int
err
;
u8
bit
=
0
;
err
=
ds_touch_bit
(
dev
,
1
,
&
bit
);
if
(
err
)
return
0
;
//err = ds_read_bit(dev, &bit);
//if (err)
// return 0;
return
bit
&
1
;
}
static
u8
ds9490r_read_byte
(
void
*
data
)
{
struct
ds_device
*
dev
=
data
;
int
err
;
u8
byte
=
0
;
err
=
ds_read_byte
(
dev
,
&
byte
);
if
(
err
)
return
0
;
return
byte
;
}
static
void
ds9490r_write_block
(
void
*
data
,
const
u8
*
buf
,
int
len
)
{
struct
ds_device
*
dev
=
data
;
ds_write_block
(
dev
,
(
u8
*
)
buf
,
len
);
}
static
u8
ds9490r_read_block
(
void
*
data
,
u8
*
buf
,
int
len
)
{
struct
ds_device
*
dev
=
data
;
int
err
;
err
=
ds_read_block
(
dev
,
buf
,
len
);
if
(
err
<
0
)
return
0
;
return
len
;
}
static
u8
ds9490r_reset
(
void
*
data
)
{
struct
ds_device
*
dev
=
data
;
struct
ds_status
st
;
int
err
;
memset
(
&
st
,
0
,
sizeof
(
st
));
err
=
ds_reset
(
dev
,
&
st
);
if
(
err
)
return
1
;
return
0
;
}
static
int
__devinit
ds_w1_init
(
void
)
{
int
err
;
ds_bus_master
=
kmalloc
(
sizeof
(
*
ds_bus_master
),
GFP_KERNEL
);
if
(
!
ds_bus_master
)
{
printk
(
KERN_ERR
"Failed to allocate DS9490R USB<->W1 bus_master structure.
\n
"
);
return
-
ENOMEM
;
}
ds_dev
=
ds_get_device
();
if
(
!
ds_dev
)
{
printk
(
KERN_ERR
"DS9490R is not registered.
\n
"
);
err
=
-
ENODEV
;
goto
err_out_free_bus_master
;
}
memset
(
ds_bus_master
,
0
,
sizeof
(
*
ds_bus_master
));
ds_bus_master
->
data
=
ds_dev
;
ds_bus_master
->
touch_bit
=
&
ds9490r_touch_bit
;
ds_bus_master
->
read_bit
=
&
ds9490r_read_bit
;
ds_bus_master
->
write_bit
=
&
ds9490r_write_bit
;
ds_bus_master
->
read_byte
=
&
ds9490r_read_byte
;
ds_bus_master
->
write_byte
=
&
ds9490r_write_byte
;
ds_bus_master
->
read_block
=
&
ds9490r_read_block
;
ds_bus_master
->
write_block
=
&
ds9490r_write_block
;
ds_bus_master
->
reset_bus
=
&
ds9490r_reset
;
err
=
w1_add_master_device
(
ds_bus_master
);
if
(
err
)
goto
err_out_put_device
;
return
0
;
err_out_put_device:
ds_put_device
(
ds_dev
);
err_out_free_bus_master:
kfree
(
ds_bus_master
);
return
err
;
}
static
void
__devexit
ds_w1_fini
(
void
)
{
w1_remove_master_device
(
ds_bus_master
);
ds_put_device
(
ds_dev
);
kfree
(
ds_bus_master
);
}
module_init
(
ds_w1_init
);
module_exit
(
ds_w1_fini
);
MODULE_LICENSE
(
"GPL"
);
MODULE_AUTHOR
(
"Evgeniy Polyakov <johnpol@2ka.mipt.ru>"
);
drivers/w1/masters/dscore.h
deleted
100644 → 0
View file @
f522d239
/*
* dscore.h
*
* Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __DSCORE_H
#define __DSCORE_H
#include <linux/usb.h>
#include <asm/atomic.h>
/* COMMAND TYPE CODES */
#define CONTROL_CMD 0x00
#define COMM_CMD 0x01
#define MODE_CMD 0x02
/* CONTROL COMMAND CODES */
#define CTL_RESET_DEVICE 0x0000
#define CTL_START_EXE 0x0001
#define CTL_RESUME_EXE 0x0002
#define CTL_HALT_EXE_IDLE 0x0003
#define CTL_HALT_EXE_DONE 0x0004
#define CTL_FLUSH_COMM_CMDS 0x0007
#define CTL_FLUSH_RCV_BUFFER 0x0008
#define CTL_FLUSH_XMT_BUFFER 0x0009
#define CTL_GET_COMM_CMDS 0x000A
/* MODE COMMAND CODES */
#define MOD_PULSE_EN 0x0000
#define MOD_SPEED_CHANGE_EN 0x0001
#define MOD_1WIRE_SPEED 0x0002
#define MOD_STRONG_PU_DURATION 0x0003
#define MOD_PULLDOWN_SLEWRATE 0x0004
#define MOD_PROG_PULSE_DURATION 0x0005
#define MOD_WRITE1_LOWTIME 0x0006
#define MOD_DSOW0_TREC 0x0007
/* COMMUNICATION COMMAND CODES */
#define COMM_ERROR_ESCAPE 0x0601
#define COMM_SET_DURATION 0x0012
#define COMM_BIT_IO 0x0020
#define COMM_PULSE 0x0030
#define COMM_1_WIRE_RESET 0x0042
#define COMM_BYTE_IO 0x0052
#define COMM_MATCH_ACCESS 0x0064
#define COMM_BLOCK_IO 0x0074
#define COMM_READ_STRAIGHT 0x0080
#define COMM_DO_RELEASE 0x6092
#define COMM_SET_PATH 0x00A2
#define COMM_WRITE_SRAM_PAGE 0x00B2
#define COMM_WRITE_EPROM 0x00C4
#define COMM_READ_CRC_PROT_PAGE 0x00D4
#define COMM_READ_REDIRECT_PAGE_CRC 0x21E4
#define COMM_SEARCH_ACCESS 0x00F4
/* Communication command bits */
#define COMM_TYPE 0x0008
#define COMM_SE 0x0008
#define COMM_D 0x0008
#define COMM_Z 0x0008
#define COMM_CH 0x0008
#define COMM_SM 0x0008
#define COMM_R 0x0008
#define COMM_IM 0x0001
#define COMM_PS 0x4000
#define COMM_PST 0x4000
#define COMM_CIB 0x4000
#define COMM_RTS 0x4000
#define COMM_DT 0x2000
#define COMM_SPU 0x1000
#define COMM_F 0x0800
#define COMM_NTP 0x0400
#define COMM_ICP 0x0200
#define COMM_RST 0x0100
#define PULSE_PROG 0x01
#define PULSE_SPUE 0x02
#define BRANCH_MAIN 0xCC
#define BRANCH_AUX 0x33
/*
* Duration of the strong pull-up pulse in milliseconds.
*/
#define PULLUP_PULSE_DURATION 750
/* Status flags */
#define ST_SPUA 0x01
/* Strong Pull-up is active */
#define ST_PRGA 0x02
/* 12V programming pulse is being generated */
#define ST_12VP 0x04
/* external 12V programming voltage is present */
#define ST_PMOD 0x08
/* DS2490 powered from USB and external sources */
#define ST_HALT 0x10
/* DS2490 is currently halted */
#define ST_IDLE 0x20
/* DS2490 is currently idle */
#define ST_EPOF 0x80
#define SPEED_NORMAL 0x00
#define SPEED_FLEXIBLE 0x01
#define SPEED_OVERDRIVE 0x02
#define NUM_EP 4
#define EP_CONTROL 0
#define EP_STATUS 1
#define EP_DATA_OUT 2
#define EP_DATA_IN 3
struct
ds_device
{
struct
usb_device
*
udev
;
struct
usb_interface
*
intf
;
int
ep
[
NUM_EP
];
atomic_t
refcnt
;
};
struct
ds_status
{
u8
enable
;
u8
speed
;
u8
pullup_dur
;
u8
ppuls_dur
;
u8
pulldown_slew
;
u8
write1_time
;
u8
write0_time
;
u8
reserved0
;
u8
status
;
u8
command0
;
u8
command1
;
u8
command_buffer_status
;
u8
data_out_buffer_status
;
u8
data_in_buffer_status
;
u8
reserved1
;
u8
reserved2
;
};
int
ds_touch_bit
(
struct
ds_device
*
,
u8
,
u8
*
);
int
ds_read_byte
(
struct
ds_device
*
,
u8
*
);
int
ds_read_bit
(
struct
ds_device
*
,
u8
*
);
int
ds_write_byte
(
struct
ds_device
*
,
u8
);
int
ds_write_bit
(
struct
ds_device
*
,
u8
);
int
ds_reset
(
struct
ds_device
*
,
struct
ds_status
*
);
struct
ds_device
*
ds_get_device
(
void
);
void
ds_put_device
(
struct
ds_device
*
);
int
ds_write_block
(
struct
ds_device
*
,
u8
*
,
int
);
int
ds_read_block
(
struct
ds_device
*
,
u8
*
,
int
);
#endif
/* __DSCORE_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment