Skip to content

Commit cad40b2

Browse files
Ondrej ZaryDamien Le Moal
authored andcommitted
ata: pata_parport-bpck6: merge ppc6_select into bpck6_open
ppc6_select is only called by bpck6_open. Merge ppc6_select into bpck6_open. Signed-off-by: Ondrej Zary <[email protected]> Signed-off-by: Damien Le Moal <[email protected]>
1 parent 7c97e46 commit cad40b2

File tree

2 files changed

+55
-79
lines changed

2 files changed

+55
-79
lines changed

drivers/ata/pata_parport/bpck6.c

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -176,21 +176,63 @@ static void bpck6_read_block(struct pi_adapter *pi, char *buf, int len)
176176

177177
static int bpck6_open(struct pi_adapter *pi)
178178
{
179-
int ret = ppc6_select(pi);
180-
181-
if (ret == 0)
182-
return ret;
183-
184-
pi->private = 0;
185-
186-
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE);
187-
ppc6_wr_data_byte(pi, RAMSIZE_128K);
179+
u8 i, j, k;
180+
181+
pi->saved_r0 = parport_read_data(pi->pardev->port);
182+
pi->saved_r2 = parport_read_control(pi->pardev->port) & 0x5F;
183+
184+
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT,
185+
PARPORT_CONTROL_SELECT);
186+
if (pi->saved_r0 == 'b')
187+
parport_write_data(pi->pardev->port, 'x');
188+
parport_write_data(pi->pardev->port, 'b');
189+
parport_write_data(pi->pardev->port, 'p');
190+
parport_write_data(pi->pardev->port, pi->unit);
191+
parport_write_data(pi->pardev->port, ~pi->unit);
192+
193+
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0);
194+
parport_write_control(pi->pardev->port, PARPORT_CONTROL_INIT);
195+
196+
i = mode_map[pi->mode] & 0x0C;
197+
if (i == 0)
198+
i = (mode_map[pi->mode] & 2) | 1;
199+
parport_write_data(pi->pardev->port, i);
200+
201+
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT,
202+
PARPORT_CONTROL_SELECT);
203+
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD,
204+
PARPORT_CONTROL_AUTOFD);
205+
206+
j = ((i & 0x08) << 4) | ((i & 0x07) << 3);
207+
k = parport_read_status(pi->pardev->port) & 0xB8;
208+
if (j == k) {
209+
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, 0);
210+
k = (parport_read_status(pi->pardev->port) & 0xB8) ^ 0xB8;
211+
if (j == k) {
212+
if (i & 4) // EPP
213+
parport_frob_control(pi->pardev->port,
214+
PARPORT_CONTROL_SELECT | PARPORT_CONTROL_INIT, 0);
215+
else // PPC/ECP
216+
parport_frob_control(pi->pardev->port,
217+
PARPORT_CONTROL_SELECT, 0);
218+
219+
pi->private = 0;
220+
221+
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE);
222+
ppc6_wr_data_byte(pi, RAMSIZE_128K);
223+
224+
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_READ | REG_VERSION);
225+
if ((ppc6_rd_data_byte(pi) & 0x3F) == 0x0C)
226+
pi->private |= fifo_wait;
227+
228+
return 1;
229+
}
230+
}
188231

189-
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_READ | REG_VERSION);
190-
if ((ppc6_rd_data_byte(pi) & 0x3F) == 0x0C)
191-
pi->private |= fifo_wait;
232+
parport_write_control(pi->pardev->port, pi->saved_r2);
233+
parport_write_data(pi->pardev->port, pi->saved_r0);
192234

193-
return ret;
235+
return 0; // FAIL
194236
}
195237

196238
static void bpck6_wr_extout(struct pi_adapter *pi, u8 regdata)

drivers/ata/pata_parport/ppc6lnx.c

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767

6868
//***************************************************************************
6969

70-
static int ppc6_select(struct pi_adapter *pi);
7170
static void ppc6_deselect(struct pi_adapter *pi);
7271
static void ppc6_send_cmd(struct pi_adapter *pi, u8 cmd);
7372
static void ppc6_wr_data_byte(struct pi_adapter *pi, u8 data);
@@ -78,71 +77,6 @@ static u8 ppc6_rd_data_byte(struct pi_adapter *pi);
7877
int mode_map[] = { PPCMODE_UNI_FW, PPCMODE_BI_FW, PPCMODE_EPP_BYTE,
7978
PPCMODE_EPP_WORD, PPCMODE_EPP_DWORD };
8079

81-
static int ppc6_select(struct pi_adapter *pi)
82-
{
83-
u8 i, j, k;
84-
85-
pi->saved_r0 = parport_read_data(pi->pardev->port);
86-
87-
pi->saved_r2 = parport_read_control(pi->pardev->port) & 0x5F; // readback ctrl
88-
89-
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, PARPORT_CONTROL_SELECT);
90-
91-
if (pi->saved_r0 == 'b')
92-
parport_write_data(pi->pardev->port, 'x');
93-
94-
parport_write_data(pi->pardev->port, 'b');
95-
parport_write_data(pi->pardev->port, 'p');
96-
parport_write_data(pi->pardev->port, pi->unit);
97-
parport_write_data(pi->pardev->port, ~pi->unit);
98-
99-
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0);
100-
101-
parport_write_control(pi->pardev->port, PARPORT_CONTROL_INIT);
102-
103-
i = mode_map[pi->mode] & 0x0C;
104-
105-
if (i == 0)
106-
i = (mode_map[pi->mode] & 2) | 1;
107-
108-
parport_write_data(pi->pardev->port, i);
109-
110-
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, PARPORT_CONTROL_SELECT);
111-
112-
// DELAY
113-
114-
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, PARPORT_CONTROL_AUTOFD);
115-
116-
j = ((i & 0x08) << 4) | ((i & 0x07) << 3);
117-
118-
k = parport_read_status(pi->pardev->port) & 0xB8;
119-
120-
if (j == k)
121-
{
122-
parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, 0);
123-
124-
k = (parport_read_status(pi->pardev->port) & 0xB8) ^ 0xB8;
125-
126-
if (j == k)
127-
{
128-
if (i & 4) // EPP
129-
parport_frob_control(pi->pardev->port,
130-
PARPORT_CONTROL_SELECT | PARPORT_CONTROL_INIT, 0);
131-
else // PPC/ECP
132-
parport_frob_control(pi->pardev->port,
133-
PARPORT_CONTROL_SELECT, 0);
134-
135-
return(1);
136-
}
137-
}
138-
139-
parport_write_control(pi->pardev->port, pi->saved_r2);
140-
141-
parport_write_data(pi->pardev->port, pi->saved_r0);
142-
143-
return(0); // FAIL
144-
}
145-
14680
//***************************************************************************
14781

14882
static void ppc6_deselect(struct pi_adapter *pi)

0 commit comments

Comments
 (0)