@@ -176,21 +176,63 @@ static void bpck6_read_block(struct pi_adapter *pi, char *buf, int len)
176
176
177
177
static int bpck6_open (struct pi_adapter * pi )
178
178
{
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
+ }
188
231
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 );
192
234
193
- return ret ;
235
+ return 0 ; // FAIL
194
236
}
195
237
196
238
static void bpck6_wr_extout (struct pi_adapter * pi , u8 regdata )
0 commit comments