Searched refs:dev (Results 1 - 200 of 13285) sorted by relevance

1234567891011>>

/linux-4.4.14/drivers/net/wireless/b43/
H A Dwa.c33 static void b43_wa_papd(struct b43_wldev *dev) b43_wa_papd() argument
37 backup = b43_ofdmtab_read16(dev, B43_OFDMTAB_PWRDYN2, 0); b43_wa_papd()
38 b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, 7); b43_wa_papd()
39 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_APHY, 0, 0); b43_wa_papd()
40 b43_dummy_transmission(dev, true, true); b43_wa_papd()
41 b43_ofdmtab_write16(dev, B43_OFDMTAB_PWRDYN2, 0, backup); b43_wa_papd()
44 static void b43_wa_auxclipthr(struct b43_wldev *dev) b43_wa_auxclipthr() argument
46 b43_phy_write(dev, B43_PHY_OFDM(0x8E), 0x3800); b43_wa_auxclipthr()
49 static void b43_wa_afcdac(struct b43_wldev *dev) b43_wa_afcdac() argument
51 b43_phy_write(dev, 0x0035, 0x03FF); b43_wa_afcdac()
52 b43_phy_write(dev, 0x0036, 0x0400); b43_wa_afcdac()
55 static void b43_wa_txdc_offset(struct b43_wldev *dev) b43_wa_txdc_offset() argument
57 b43_ofdmtab_write16(dev, B43_OFDMTAB_DC, 0, 0x0051); b43_wa_txdc_offset()
60 void b43_wa_initgains(struct b43_wldev *dev) b43_wa_initgains() argument
62 struct b43_phy *phy = &dev->phy; b43_wa_initgains()
64 b43_phy_write(dev, B43_PHY_LNAHPFCTL, 0x1FF9); b43_wa_initgains()
65 b43_phy_mask(dev, B43_PHY_LPFGAINCTL, 0xFF0F); b43_wa_initgains()
67 b43_ofdmtab_write16(dev, B43_OFDMTAB_LPFGAIN, 0, 0x1FBF); b43_wa_initgains()
68 b43_radio_write16(dev, 0x0002, 0x1FBF); b43_wa_initgains()
70 b43_phy_write(dev, 0x0024, 0x4680); b43_wa_initgains()
71 b43_phy_write(dev, 0x0020, 0x0003); b43_wa_initgains()
72 b43_phy_write(dev, 0x001D, 0x0F40); b43_wa_initgains()
73 b43_phy_write(dev, 0x001F, 0x1C00); b43_wa_initgains()
75 b43_phy_maskset(dev, 0x002A, 0x00FF, 0x0400); b43_wa_initgains()
77 b43_phy_maskset(dev, 0x002A, 0x00FF, 0x1A00); b43_wa_initgains()
78 b43_phy_write(dev, 0x00CC, 0x2121); b43_wa_initgains()
81 b43_phy_write(dev, 0x00BA, 0x3ED5); b43_wa_initgains()
84 static void b43_wa_divider(struct b43_wldev *dev) b43_wa_divider() argument
86 b43_phy_mask(dev, 0x002B, ~0x0100); b43_wa_divider()
87 b43_phy_write(dev, 0x008E, 0x58C1); b43_wa_divider()
90 static void b43_wa_gt(struct b43_wldev *dev) /* Gain table. */ b43_wa_gt() argument
92 if (dev->phy.rev <= 2) { b43_wa_gt()
93 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN2, 0, 15); b43_wa_gt()
94 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN2, 1, 31); b43_wa_gt()
95 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN2, 2, 42); b43_wa_gt()
96 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN2, 3, 48); b43_wa_gt()
97 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN2, 4, 58); b43_wa_gt()
98 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 0, 19); b43_wa_gt()
99 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 1, 19); b43_wa_gt()
100 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 2, 19); b43_wa_gt()
101 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 3, 19); b43_wa_gt()
102 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 4, 21); b43_wa_gt()
103 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 5, 21); b43_wa_gt()
104 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 6, 25); b43_wa_gt()
105 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN1, 0, 3); b43_wa_gt()
106 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN1, 1, 3); b43_wa_gt()
107 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN1, 2, 7); b43_wa_gt()
109 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 0, 19); b43_wa_gt()
110 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 1, 19); b43_wa_gt()
111 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 2, 19); b43_wa_gt()
112 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 3, 19); b43_wa_gt()
113 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 4, 21); b43_wa_gt()
114 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 5, 21); b43_wa_gt()
115 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAIN0, 6, 25); b43_wa_gt()
119 static void b43_wa_rssi_lt(struct b43_wldev *dev) /* RSSI lookup table */ b43_wa_rssi_lt() argument
125 b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i + 8); b43_wa_rssi_lt()
127 b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i - 8); b43_wa_rssi_lt()
130 b43_ofdmtab_write16(dev, B43_OFDMTAB_RSSI, i, i); b43_wa_rssi_lt()
134 static void b43_wa_analog(struct b43_wldev *dev) b43_wa_analog() argument
136 struct b43_phy *phy = &dev->phy; b43_wa_analog()
139 ofdmrev = b43_phy_read(dev, B43_PHY_VERSION_OFDM) & B43_PHYVER_VERSION; b43_wa_analog()
142 b43_phy_write(dev, B43_PHY_PWRDOWN, 0x1808); b43_wa_analog()
144 b43_phy_write(dev, B43_PHY_PWRDOWN, 0x1000); b43_wa_analog()
146 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 3, 0x1044); b43_wa_analog()
147 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 4, 0x7201); b43_wa_analog()
148 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 6, 0x0040); b43_wa_analog()
152 static void b43_wa_dac(struct b43_wldev *dev) b43_wa_dac() argument
154 if (dev->phy.analog == 1) b43_wa_dac()
155 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 1, b43_wa_dac()
156 (b43_ofdmtab_read16(dev, B43_OFDMTAB_DAC, 1) & ~0x0034) | 0x0008); b43_wa_dac()
158 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 1, b43_wa_dac()
159 (b43_ofdmtab_read16(dev, B43_OFDMTAB_DAC, 1) & ~0x0078) | 0x0010); b43_wa_dac()
162 static void b43_wa_fft(struct b43_wldev *dev) /* Fine frequency table */ b43_wa_fft() argument
166 if (dev->phy.type == B43_PHYTYPE_A) b43_wa_fft()
168 b43_ofdmtab_write16(dev, B43_OFDMTAB_DACRFPABB, i, b43_tab_finefreqa[i]); b43_wa_fft()
171 b43_ofdmtab_write16(dev, B43_OFDMTAB_DACRFPABB, i, b43_tab_finefreqg[i]); b43_wa_fft()
174 static void b43_wa_nft(struct b43_wldev *dev) /* Noise figure table */ b43_wa_nft() argument
176 struct b43_phy *phy = &dev->phy; b43_wa_nft()
182 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, i, b43_tab_noisea2[i]); b43_wa_nft()
185 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, i, b43_tab_noisea3[i]); b43_wa_nft()
189 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, i, b43_tab_noiseg1[i]); b43_wa_nft()
192 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, i, b43_tab_noiseg2[i]); b43_wa_nft()
196 static void b43_wa_rt(struct b43_wldev *dev) /* Rotor table */ b43_wa_rt() argument
201 b43_ofdmtab_write32(dev, B43_OFDMTAB_ROTOR, i, b43_tab_rotor[i]); b43_wa_rt()
204 static void b43_write_null_nst(struct b43_wldev *dev) b43_write_null_nst() argument
209 b43_ofdmtab_write16(dev, B43_OFDMTAB_NOISESCALE, i, 0); b43_write_null_nst()
212 static void b43_write_nst(struct b43_wldev *dev, const u16 *nst) b43_write_nst() argument
217 b43_ofdmtab_write16(dev, B43_OFDMTAB_NOISESCALE, i, nst[i]); b43_write_nst()
220 static void b43_wa_nst(struct b43_wldev *dev) /* Noise scale table */ b43_wa_nst() argument
222 struct b43_phy *phy = &dev->phy; b43_wa_nst()
226 b43_write_null_nst(dev); b43_wa_nst()
228 b43_write_nst(dev, b43_tab_noisescalea2); b43_wa_nst()
230 b43_write_nst(dev, b43_tab_noisescalea3); b43_wa_nst()
232 b43_write_nst(dev, b43_tab_noisescaleg3); b43_wa_nst()
235 if (b43_phy_read(dev, B43_PHY_ENCORE) & B43_PHY_ENCORE_EN) b43_wa_nst()
236 b43_write_nst(dev, b43_tab_noisescaleg3); b43_wa_nst()
238 b43_write_nst(dev, b43_tab_noisescaleg2); b43_wa_nst()
240 b43_write_nst(dev, b43_tab_noisescaleg1); b43_wa_nst()
245 static void b43_wa_art(struct b43_wldev *dev) /* ADV retard table */ b43_wa_art() argument
250 b43_ofdmtab_write32(dev, B43_OFDMTAB_ADVRETARD, b43_wa_art()
254 static void b43_wa_txlna_gain(struct b43_wldev *dev) b43_wa_txlna_gain() argument
256 b43_ofdmtab_write16(dev, B43_OFDMTAB_DC, 13, 0x0000); b43_wa_txlna_gain()
259 static void b43_wa_crs_reset(struct b43_wldev *dev) b43_wa_crs_reset() argument
261 b43_phy_write(dev, 0x002C, 0x0064); b43_wa_crs_reset()
264 static void b43_wa_2060txlna_gain(struct b43_wldev *dev) b43_wa_2060txlna_gain() argument
266 b43_hf_write(dev, b43_hf_read(dev) | b43_wa_2060txlna_gain()
270 static void b43_wa_lms(struct b43_wldev *dev) b43_wa_lms() argument
272 b43_phy_maskset(dev, 0x0055, 0xFFC0, 0x0004); b43_wa_lms()
275 static void b43_wa_mixedsignal(struct b43_wldev *dev) b43_wa_mixedsignal() argument
277 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 1, 3); b43_wa_mixedsignal()
280 static void b43_wa_msst(struct b43_wldev *dev) /* Min sigma square table */ b43_wa_msst() argument
282 struct b43_phy *phy = &dev->phy; b43_wa_msst()
296 b43_ofdmtab_write16(dev, B43_OFDMTAB_MINSIGSQ, b43_wa_msst()
301 static void b43_wa_iqadc(struct b43_wldev *dev) b43_wa_iqadc() argument
303 if (dev->phy.analog == 4) b43_wa_iqadc()
304 b43_ofdmtab_write16(dev, B43_OFDMTAB_DAC, 0, b43_wa_iqadc()
305 b43_ofdmtab_read16(dev, B43_OFDMTAB_DAC, 0) & ~0xF000); b43_wa_iqadc()
308 static void b43_wa_crs_ed(struct b43_wldev *dev) b43_wa_crs_ed() argument
310 struct b43_phy *phy = &dev->phy; b43_wa_crs_ed()
313 b43_phy_write(dev, B43_PHY_CRSTHRES1_R1, 0x4F19); b43_wa_crs_ed()
315 b43_phy_write(dev, B43_PHY_CRSTHRES1, 0x1861); b43_wa_crs_ed()
316 b43_phy_write(dev, B43_PHY_CRSTHRES2, 0x0271); b43_wa_crs_ed()
317 b43_phy_set(dev, B43_PHY_ANTDWELL, 0x0800); b43_wa_crs_ed()
319 b43_phy_write(dev, B43_PHY_CRSTHRES1, 0x0098); b43_wa_crs_ed()
320 b43_phy_write(dev, B43_PHY_CRSTHRES2, 0x0070); b43_wa_crs_ed()
321 b43_phy_write(dev, B43_PHY_OFDM(0xC9), 0x0080); b43_wa_crs_ed()
322 b43_phy_set(dev, B43_PHY_ANTDWELL, 0x0800); b43_wa_crs_ed()
326 static void b43_wa_crs_thr(struct b43_wldev *dev) b43_wa_crs_thr() argument
328 b43_phy_maskset(dev, B43_PHY_CRS0, ~0x03C0, 0xD000); b43_wa_crs_thr()
331 static void b43_wa_crs_blank(struct b43_wldev *dev) b43_wa_crs_blank() argument
333 b43_phy_write(dev, B43_PHY_OFDM(0x2C), 0x005A); b43_wa_crs_blank()
336 static void b43_wa_cck_shiftbits(struct b43_wldev *dev) b43_wa_cck_shiftbits() argument
338 b43_phy_write(dev, B43_PHY_CCKSHIFTBITS, 0x0026); b43_wa_cck_shiftbits()
341 static void b43_wa_wrssi_offset(struct b43_wldev *dev) b43_wa_wrssi_offset() argument
345 if (dev->phy.rev == 1) { b43_wa_wrssi_offset()
347 b43_ofdmtab_write16(dev, B43_OFDMTAB_WRSSI_R1, b43_wa_wrssi_offset()
352 b43_ofdmtab_write16(dev, B43_OFDMTAB_WRSSI, b43_wa_wrssi_offset()
358 static void b43_wa_txpuoff_rxpuon(struct b43_wldev *dev) b43_wa_txpuoff_rxpuon() argument
360 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_0F, 2, 15); b43_wa_txpuoff_rxpuon()
361 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_0F, 3, 20); b43_wa_txpuoff_rxpuon()
364 static void b43_wa_altagc(struct b43_wldev *dev) b43_wa_altagc() argument
366 struct b43_phy *phy = &dev->phy; b43_wa_altagc()
369 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1_R1, 0, 254); b43_wa_altagc()
370 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1_R1, 1, 13); b43_wa_altagc()
371 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1_R1, 2, 19); b43_wa_altagc()
372 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1_R1, 3, 25); b43_wa_altagc()
373 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, 0, 0x2710); b43_wa_altagc()
374 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, 1, 0x9B83); b43_wa_altagc()
375 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, 2, 0x9B83); b43_wa_altagc()
376 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC2, 3, 0x0F8D); b43_wa_altagc()
377 b43_phy_write(dev, B43_PHY_LMS, 4); b43_wa_altagc()
379 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 0, 254); b43_wa_altagc()
380 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 1, 13); b43_wa_altagc()
381 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 2, 19); b43_wa_altagc()
382 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 3, 25); b43_wa_altagc()
385 b43_phy_maskset(dev, B43_PHY_CCKSHIFTBITS_WA, 0x00FF, 0x5700); b43_wa_altagc()
386 b43_phy_maskset(dev, B43_PHY_OFDM(0x1A), ~0x007F, 0x000F); b43_wa_altagc()
387 b43_phy_maskset(dev, B43_PHY_OFDM(0x1A), ~0x3F80, 0x2B80); b43_wa_altagc()
388 b43_phy_maskset(dev, B43_PHY_ANTWRSETT, 0xF0FF, 0x0300); b43_wa_altagc()
389 b43_radio_set(dev, 0x7A, 0x0008); b43_wa_altagc()
390 b43_phy_maskset(dev, B43_PHY_N1P1GAIN, ~0x000F, 0x0008); b43_wa_altagc()
391 b43_phy_maskset(dev, B43_PHY_P1P2GAIN, ~0x0F00, 0x0600); b43_wa_altagc()
392 b43_phy_maskset(dev, B43_PHY_N1N2GAIN, ~0x0F00, 0x0700); b43_wa_altagc()
393 b43_phy_maskset(dev, B43_PHY_N1P1GAIN, ~0x0F00, 0x0100); b43_wa_altagc()
395 b43_phy_maskset(dev, B43_PHY_N1N2GAIN, ~0x000F, 0x0007); b43_wa_altagc()
397 b43_phy_maskset(dev, B43_PHY_OFDM(0x88), ~0x00FF, 0x001C); b43_wa_altagc()
398 b43_phy_maskset(dev, B43_PHY_OFDM(0x88), ~0x3F00, 0x0200); b43_wa_altagc()
399 b43_phy_maskset(dev, B43_PHY_OFDM(0x96), ~0x00FF, 0x001C); b43_wa_altagc()
400 b43_phy_maskset(dev, B43_PHY_OFDM(0x89), ~0x00FF, 0x0020); b43_wa_altagc()
401 b43_phy_maskset(dev, B43_PHY_OFDM(0x89), ~0x3F00, 0x0200); b43_wa_altagc()
402 b43_phy_maskset(dev, B43_PHY_OFDM(0x82), ~0x00FF, 0x002E); b43_wa_altagc()
403 b43_phy_maskset(dev, B43_PHY_OFDM(0x96), 0x00FF, 0x1A00); b43_wa_altagc()
404 b43_phy_maskset(dev, B43_PHY_OFDM(0x81), ~0x00FF, 0x0028); b43_wa_altagc()
405 b43_phy_maskset(dev, B43_PHY_OFDM(0x81), 0x00FF, 0x2C00); b43_wa_altagc()
407 b43_phy_write(dev, B43_PHY_PEAK_COUNT, 0x092B); b43_wa_altagc()
408 b43_phy_maskset(dev, B43_PHY_OFDM(0x1B), ~0x001E, 0x0002); b43_wa_altagc()
410 b43_phy_mask(dev, B43_PHY_OFDM(0x1B), ~0x001E); b43_wa_altagc()
411 b43_phy_write(dev, B43_PHY_OFDM(0x1F), 0x287A); b43_wa_altagc()
412 b43_phy_maskset(dev, B43_PHY_LPFGAINCTL, ~0x000F, 0x0004); b43_wa_altagc()
414 b43_phy_write(dev, B43_PHY_OFDM(0x22), 0x287A); b43_wa_altagc()
415 b43_phy_maskset(dev, B43_PHY_LPFGAINCTL, 0x0FFF, 0x3000); b43_wa_altagc()
418 b43_phy_maskset(dev, B43_PHY_DIVSRCHIDX, 0x8080, 0x7874); b43_wa_altagc()
419 b43_phy_write(dev, B43_PHY_OFDM(0x8E), 0x1C00); b43_wa_altagc()
421 b43_phy_maskset(dev, B43_PHY_DIVP1P2GAIN, ~0x0F00, 0x0600); b43_wa_altagc()
422 b43_phy_write(dev, B43_PHY_OFDM(0x8B), 0x005E); b43_wa_altagc()
423 b43_phy_maskset(dev, B43_PHY_ANTWRSETT, ~0x00FF, 0x001E); b43_wa_altagc()
424 b43_phy_write(dev, B43_PHY_OFDM(0x8D), 0x0002); b43_wa_altagc()
425 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3_R1, 0, 0); b43_wa_altagc()
426 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3_R1, 1, 7); b43_wa_altagc()
427 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3_R1, 2, 16); b43_wa_altagc()
428 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3_R1, 3, 28); b43_wa_altagc()
430 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3, 0, 0); b43_wa_altagc()
431 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3, 1, 7); b43_wa_altagc()
432 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3, 2, 16); b43_wa_altagc()
433 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC3, 3, 28); b43_wa_altagc()
436 b43_phy_mask(dev, B43_PHY_OFDM(0x26), ~0x0003); b43_wa_altagc()
437 b43_phy_mask(dev, B43_PHY_OFDM(0x26), ~0x1000); b43_wa_altagc()
439 b43_phy_read(dev, B43_PHY_VERSION_OFDM); /* Dummy read */ b43_wa_altagc()
442 static void b43_wa_tr_ltov(struct b43_wldev *dev) /* TR Lookup Table Original Values */ b43_wa_tr_ltov() argument
444 b43_gtab_write(dev, B43_GTAB_ORIGTR, 0, 0x7654); b43_wa_tr_ltov()
447 static void b43_wa_cpll_nonpilot(struct b43_wldev *dev) b43_wa_cpll_nonpilot() argument
449 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_11, 0, 0); b43_wa_cpll_nonpilot()
450 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_11, 1, 0); b43_wa_cpll_nonpilot()
453 static void b43_wa_rssi_adc(struct b43_wldev *dev) b43_wa_rssi_adc() argument
455 if (dev->phy.analog == 4) b43_wa_rssi_adc()
456 b43_phy_write(dev, 0x00DC, 0x7454); b43_wa_rssi_adc()
459 static void b43_wa_boards_a(struct b43_wldev *dev) b43_wa_boards_a() argument
461 if (dev->dev->board_vendor == SSB_BOARDVENDOR_BCM && b43_wa_boards_a()
462 dev->dev->board_type == SSB_BOARD_BU4306 && b43_wa_boards_a()
463 dev->dev->board_rev < 0x30) { b43_wa_boards_a()
464 b43_phy_write(dev, 0x0010, 0xE000); b43_wa_boards_a()
465 b43_phy_write(dev, 0x0013, 0x0140); b43_wa_boards_a()
466 b43_phy_write(dev, 0x0014, 0x0280); b43_wa_boards_a()
468 if (dev->dev->board_type == SSB_BOARD_MP4318 && b43_wa_boards_a()
469 dev->dev->board_rev < 0x20) { b43_wa_boards_a()
470 b43_phy_write(dev, 0x0013, 0x0210); b43_wa_boards_a()
471 b43_phy_write(dev, 0x0014, 0x0840); b43_wa_boards_a()
473 b43_phy_write(dev, 0x0013, 0x0140); b43_wa_boards_a()
474 b43_phy_write(dev, 0x0014, 0x0280); b43_wa_boards_a()
476 if (dev->phy.rev <= 4) b43_wa_boards_a()
477 b43_phy_write(dev, 0x0010, 0xE000); b43_wa_boards_a()
479 b43_phy_write(dev, 0x0010, 0x2000); b43_wa_boards_a()
480 b43_ofdmtab_write16(dev, B43_OFDMTAB_DC, 1, 0x0039); b43_wa_boards_a()
481 b43_ofdmtab_write16(dev, B43_OFDMTAB_UNKNOWN_APHY, 7, 0x0040); b43_wa_boards_a()
485 static void b43_wa_boards_g(struct b43_wldev *dev) b43_wa_boards_g() argument
487 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_wa_boards_g()
488 struct b43_phy *phy = &dev->phy; b43_wa_boards_g()
490 if (dev->dev->board_vendor != SSB_BOARDVENDOR_BCM || b43_wa_boards_g()
491 dev->dev->board_type != SSB_BOARD_BU4306 || b43_wa_boards_g()
492 dev->dev->board_rev != 0x17) { b43_wa_boards_g()
494 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX_R1, 1, 0x0002); b43_wa_boards_g()
495 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX_R1, 2, 0x0001); b43_wa_boards_g()
497 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 1, 0x0002); b43_wa_boards_g()
498 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 2, 0x0001); b43_wa_boards_g()
501 b43_phy_mask(dev, B43_PHY_EXTG(0x11), 0xF7FF); b43_wa_boards_g()
502 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0020, 0x0001); b43_wa_boards_g()
503 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0021, 0x0001); b43_wa_boards_g()
504 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0022, 0x0001); b43_wa_boards_g()
505 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0023, 0x0000); b43_wa_boards_g()
506 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0000, 0x0000); b43_wa_boards_g()
507 b43_ofdmtab_write16(dev, B43_OFDMTAB_GAINX, 0x0003, 0x0002); b43_wa_boards_g()
512 b43_phy_write(dev, B43_PHY_GTABCTL, 0x3120); b43_wa_boards_g()
513 b43_phy_write(dev, B43_PHY_GTABDATA, 0xC480); b43_wa_boards_g()
517 void b43_wa_all(struct b43_wldev *dev) b43_wa_all() argument
519 struct b43_phy *phy = &dev->phy; b43_wa_all()
524 b43_wa_papd(dev); b43_wa_all()
525 b43_wa_auxclipthr(dev); b43_wa_all()
526 b43_wa_afcdac(dev); b43_wa_all()
527 b43_wa_txdc_offset(dev); b43_wa_all()
528 b43_wa_initgains(dev); b43_wa_all()
529 b43_wa_divider(dev); b43_wa_all()
530 b43_wa_gt(dev); b43_wa_all()
531 b43_wa_rssi_lt(dev); b43_wa_all()
532 b43_wa_analog(dev); b43_wa_all()
533 b43_wa_dac(dev); b43_wa_all()
534 b43_wa_fft(dev); b43_wa_all()
535 b43_wa_nft(dev); b43_wa_all()
536 b43_wa_rt(dev); b43_wa_all()
537 b43_wa_nst(dev); b43_wa_all()
538 b43_wa_art(dev); b43_wa_all()
539 b43_wa_txlna_gain(dev); b43_wa_all()
540 b43_wa_crs_reset(dev); b43_wa_all()
541 b43_wa_2060txlna_gain(dev); b43_wa_all()
542 b43_wa_lms(dev); b43_wa_all()
545 b43_wa_papd(dev); b43_wa_all()
546 b43_wa_mixedsignal(dev); b43_wa_all()
547 b43_wa_rssi_lt(dev); b43_wa_all()
548 b43_wa_txdc_offset(dev); b43_wa_all()
549 b43_wa_initgains(dev); b43_wa_all()
550 b43_wa_dac(dev); b43_wa_all()
551 b43_wa_nft(dev); b43_wa_all()
552 b43_wa_nst(dev); b43_wa_all()
553 b43_wa_msst(dev); b43_wa_all()
554 b43_wa_analog(dev); b43_wa_all()
555 b43_wa_gt(dev); b43_wa_all()
556 b43_wa_txpuoff_rxpuon(dev); b43_wa_all()
557 b43_wa_txlna_gain(dev); b43_wa_all()
560 b43_wa_iqadc(dev); b43_wa_all()
562 b43_wa_papd(dev); b43_wa_all()
563 b43_wa_rssi_lt(dev); b43_wa_all()
564 b43_wa_txdc_offset(dev); b43_wa_all()
565 b43_wa_initgains(dev); b43_wa_all()
566 b43_wa_dac(dev); b43_wa_all()
567 b43_wa_nft(dev); b43_wa_all()
568 b43_wa_nst(dev); b43_wa_all()
569 b43_wa_msst(dev); b43_wa_all()
570 b43_wa_analog(dev); b43_wa_all()
571 b43_wa_gt(dev); b43_wa_all()
572 b43_wa_txpuoff_rxpuon(dev); b43_wa_all()
573 b43_wa_txlna_gain(dev); b43_wa_all()
576 b43_wa_iqadc(dev); b43_wa_all()
577 b43_wa_papd(dev); b43_wa_all()
578 b43_wa_rssi_lt(dev); b43_wa_all()
579 b43_wa_txdc_offset(dev); b43_wa_all()
580 b43_wa_initgains(dev); b43_wa_all()
581 b43_wa_dac(dev); b43_wa_all()
582 b43_wa_nft(dev); b43_wa_all()
583 b43_wa_nst(dev); b43_wa_all()
584 b43_wa_msst(dev); b43_wa_all()
585 b43_wa_analog(dev); b43_wa_all()
586 b43_wa_gt(dev); b43_wa_all()
587 b43_wa_txpuoff_rxpuon(dev); b43_wa_all()
588 b43_wa_txlna_gain(dev); b43_wa_all()
589 b43_wa_rssi_adc(dev); b43_wa_all()
593 b43_wa_boards_a(dev); b43_wa_all()
597 b43_wa_crs_ed(dev); b43_wa_all()
598 b43_wa_crs_thr(dev); b43_wa_all()
599 b43_wa_crs_blank(dev); b43_wa_all()
600 b43_wa_cck_shiftbits(dev); b43_wa_all()
601 b43_wa_fft(dev); b43_wa_all()
602 b43_wa_nft(dev); b43_wa_all()
603 b43_wa_rt(dev); b43_wa_all()
604 b43_wa_nst(dev); b43_wa_all()
605 b43_wa_art(dev); b43_wa_all()
606 b43_wa_wrssi_offset(dev); b43_wa_all()
607 b43_wa_altagc(dev); b43_wa_all()
614 b43_wa_tr_ltov(dev); b43_wa_all()
615 b43_wa_crs_ed(dev); b43_wa_all()
616 b43_wa_rssi_lt(dev); b43_wa_all()
617 b43_wa_nft(dev); b43_wa_all()
618 b43_wa_nst(dev); b43_wa_all()
619 b43_wa_msst(dev); b43_wa_all()
620 b43_wa_wrssi_offset(dev); b43_wa_all()
621 b43_wa_altagc(dev); b43_wa_all()
622 b43_wa_analog(dev); b43_wa_all()
623 b43_wa_txpuoff_rxpuon(dev); b43_wa_all()
628 b43_wa_boards_g(dev); b43_wa_all()
633 b43_wa_cpll_nonpilot(dev); b43_wa_all()
H A Dwa.h4 void b43_wa_initgains(struct b43_wldev *dev);
5 void b43_wa_all(struct b43_wldev *dev);
H A Dphy_lcn.c62 static void b43_radio_2064_channel_setup(struct b43_wldev *dev) b43_radio_2064_channel_setup() argument
66 b43_radio_set(dev, 0x09d, 0x4); b43_radio_2064_channel_setup()
67 b43_radio_write(dev, 0x09e, 0xf); b43_radio_2064_channel_setup()
70 b43_radio_write(dev, 0x02a, 0xb); b43_radio_2064_channel_setup()
71 b43_radio_maskset(dev, 0x030, ~0x3, 0xa); b43_radio_2064_channel_setup()
72 b43_radio_maskset(dev, 0x091, ~0x3, 0); b43_radio_2064_channel_setup()
73 b43_radio_maskset(dev, 0x038, ~0xf, 0x7); b43_radio_2064_channel_setup()
74 b43_radio_maskset(dev, 0x030, ~0xc, 0x8); b43_radio_2064_channel_setup()
75 b43_radio_maskset(dev, 0x05e, ~0xf, 0x8); b43_radio_2064_channel_setup()
76 b43_radio_maskset(dev, 0x05e, ~0xf0, 0x80); b43_radio_2064_channel_setup()
77 b43_radio_write(dev, 0x06c, 0x80); b43_radio_2064_channel_setup()
79 save[0] = b43_radio_read(dev, 0x044); b43_radio_2064_channel_setup()
80 save[1] = b43_radio_read(dev, 0x12b); b43_radio_2064_channel_setup()
82 b43_radio_set(dev, 0x044, 0x7); b43_radio_2064_channel_setup()
83 b43_radio_set(dev, 0x12b, 0xe); b43_radio_2064_channel_setup()
87 b43_radio_write(dev, 0x040, 0xfb); b43_radio_2064_channel_setup()
89 b43_radio_write(dev, 0x041, 0x9a); b43_radio_2064_channel_setup()
90 b43_radio_write(dev, 0x042, 0xa3); b43_radio_2064_channel_setup()
91 b43_radio_write(dev, 0x043, 0x0c); b43_radio_2064_channel_setup()
95 b43_radio_set(dev, 0x044, 0x0c); b43_radio_2064_channel_setup()
98 b43_radio_write(dev, 0x044, save[0]); b43_radio_2064_channel_setup()
99 b43_radio_write(dev, 0x12b, save[1]); b43_radio_2064_channel_setup()
101 if (dev->phy.rev == 1) { b43_radio_2064_channel_setup()
103 b43_radio_write(dev, 0x038, 0x0); b43_radio_2064_channel_setup()
104 b43_radio_write(dev, 0x091, 0x7); b43_radio_2064_channel_setup()
109 static void b43_radio_2064_init(struct b43_wldev *dev) b43_radio_2064_init() argument
111 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_radio_2064_init()
112 b43_radio_write(dev, 0x09c, 0x0020); b43_radio_2064_init()
113 b43_radio_write(dev, 0x105, 0x0008); b43_radio_2064_init()
117 b43_radio_write(dev, 0x032, 0x0062); b43_radio_2064_init()
118 b43_radio_write(dev, 0x033, 0x0019); b43_radio_2064_init()
119 b43_radio_write(dev, 0x090, 0x0010); b43_radio_2064_init()
120 b43_radio_write(dev, 0x010, 0x0000); b43_radio_2064_init()
121 if (dev->phy.rev == 1) { b43_radio_2064_init()
122 b43_radio_write(dev, 0x060, 0x007f); b43_radio_2064_init()
123 b43_radio_write(dev, 0x061, 0x0072); b43_radio_2064_init()
124 b43_radio_write(dev, 0x062, 0x007f); b43_radio_2064_init()
126 b43_radio_write(dev, 0x01d, 0x0002); b43_radio_2064_init()
127 b43_radio_write(dev, 0x01e, 0x0006); b43_radio_2064_init()
129 b43_phy_write(dev, 0x4ea, 0x4688); b43_radio_2064_init()
130 b43_phy_maskset(dev, 0x4eb, ~0x7, 0x2); b43_radio_2064_init()
131 b43_phy_mask(dev, 0x4eb, ~0x01c0); b43_radio_2064_init()
132 b43_phy_maskset(dev, 0x46a, 0xff00, 0x19); b43_radio_2064_init()
134 b43_lcntab_write(dev, B43_LCNTAB16(0x00, 0x55), 0); b43_radio_2064_init()
136 b43_radio_mask(dev, 0x05b, (u16) ~0xff02); b43_radio_2064_init()
137 b43_radio_set(dev, 0x004, 0x40); b43_radio_2064_init()
138 b43_radio_set(dev, 0x120, 0x10); b43_radio_2064_init()
139 b43_radio_set(dev, 0x078, 0x80); b43_radio_2064_init()
140 b43_radio_set(dev, 0x129, 0x2); b43_radio_2064_init()
141 b43_radio_set(dev, 0x057, 0x1); b43_radio_2064_init()
142 b43_radio_set(dev, 0x05b, 0x2); b43_radio_2064_init()
145 b43_radio_read(dev, 0x05c); b43_radio_2064_init()
147 b43_radio_mask(dev, 0x05b, (u16) ~0xff02); b43_radio_2064_init()
148 b43_radio_mask(dev, 0x057, (u16) ~0xff01); b43_radio_2064_init()
150 b43_phy_write(dev, 0x933, 0x2d6b); b43_radio_2064_init()
151 b43_phy_write(dev, 0x934, 0x2d6b); b43_radio_2064_init()
152 b43_phy_write(dev, 0x935, 0x2d6b); b43_radio_2064_init()
153 b43_phy_write(dev, 0x936, 0x2d6b); b43_radio_2064_init()
154 b43_phy_write(dev, 0x937, 0x016b); b43_radio_2064_init()
156 b43_radio_mask(dev, 0x057, (u16) ~0xff02); b43_radio_2064_init()
157 b43_radio_write(dev, 0x0c2, 0x006f); b43_radio_2064_init()
165 static void b43_phy_lcn_afe_set_unset(struct b43_wldev *dev) b43_phy_lcn_afe_set_unset() argument
167 u16 afe_ctl2 = b43_phy_read(dev, B43_PHY_LCN_AFE_CTL2); b43_phy_lcn_afe_set_unset()
168 u16 afe_ctl1 = b43_phy_read(dev, B43_PHY_LCN_AFE_CTL1); b43_phy_lcn_afe_set_unset()
170 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL2, afe_ctl2 | 0x1); b43_phy_lcn_afe_set_unset()
171 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL1, afe_ctl1 | 0x1); b43_phy_lcn_afe_set_unset()
173 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL2, afe_ctl2 & ~0x1); b43_phy_lcn_afe_set_unset()
174 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL1, afe_ctl1 & ~0x1); b43_phy_lcn_afe_set_unset()
176 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL2, afe_ctl2); b43_phy_lcn_afe_set_unset()
177 b43_phy_write(dev, B43_PHY_LCN_AFE_CTL1, afe_ctl1); b43_phy_lcn_afe_set_unset()
181 static u16 b43_phy_lcn_get_pa_gain(struct b43_wldev *dev) b43_phy_lcn_get_pa_gain() argument
183 return (b43_phy_read(dev, 0x4fb) & 0x7f00) >> 8; b43_phy_lcn_get_pa_gain()
187 static void b43_phy_lcn_set_dac_gain(struct b43_wldev *dev, u16 dac_gain) b43_phy_lcn_set_dac_gain() argument
191 dac_ctrl = b43_phy_read(dev, 0x439); b43_phy_lcn_set_dac_gain()
194 b43_phy_maskset(dev, 0x439, ~0xfff, dac_ctrl); b43_phy_lcn_set_dac_gain()
198 static void b43_phy_lcn_set_bbmult(struct b43_wldev *dev, u8 m0) b43_phy_lcn_set_bbmult() argument
200 b43_lcntab_write(dev, B43_LCNTAB16(0x00, 0x57), m0 << 8); b43_phy_lcn_set_bbmult()
204 static void b43_phy_lcn_clear_tx_power_offsets(struct b43_wldev *dev) b43_phy_lcn_clear_tx_power_offsets() argument
209 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, (0x7 << 10) | 0x340); b43_phy_lcn_clear_tx_power_offsets()
211 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATAHI, 0); b43_phy_lcn_clear_tx_power_offsets()
212 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, 0); b43_phy_lcn_clear_tx_power_offsets()
216 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, (0x7 << 10) | 0x80); b43_phy_lcn_clear_tx_power_offsets()
218 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATAHI, 0); b43_phy_lcn_clear_tx_power_offsets()
219 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, 0); b43_phy_lcn_clear_tx_power_offsets()
224 static void b43_phy_lcn_rev0_baseband_init(struct b43_wldev *dev) b43_phy_lcn_rev0_baseband_init() argument
226 b43_radio_write(dev, 0x11c, 0); b43_phy_lcn_rev0_baseband_init()
228 b43_phy_write(dev, 0x43b, 0); b43_phy_lcn_rev0_baseband_init()
229 b43_phy_write(dev, 0x43c, 0); b43_phy_lcn_rev0_baseband_init()
230 b43_phy_write(dev, 0x44c, 0); b43_phy_lcn_rev0_baseband_init()
231 b43_phy_write(dev, 0x4e6, 0); b43_phy_lcn_rev0_baseband_init()
232 b43_phy_write(dev, 0x4f9, 0); b43_phy_lcn_rev0_baseband_init()
233 b43_phy_write(dev, 0x4b0, 0); b43_phy_lcn_rev0_baseband_init()
234 b43_phy_write(dev, 0x938, 0); b43_phy_lcn_rev0_baseband_init()
235 b43_phy_write(dev, 0x4b0, 0); b43_phy_lcn_rev0_baseband_init()
236 b43_phy_write(dev, 0x44e, 0); b43_phy_lcn_rev0_baseband_init()
238 b43_phy_set(dev, 0x567, 0x03); b43_phy_lcn_rev0_baseband_init()
240 b43_phy_set(dev, 0x44a, 0x44); b43_phy_lcn_rev0_baseband_init()
241 b43_phy_write(dev, 0x44a, 0x80); b43_phy_lcn_rev0_baseband_init()
243 if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_FEM)) b43_phy_lcn_rev0_baseband_init()
245 b43_phy_maskset(dev, 0x634, ~0xff, 0xc); b43_phy_lcn_rev0_baseband_init()
246 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_FEM) { b43_phy_lcn_rev0_baseband_init()
247 b43_phy_maskset(dev, 0x634, ~0xff, 0xa); b43_phy_lcn_rev0_baseband_init()
248 b43_phy_write(dev, 0x910, 0x1); b43_phy_lcn_rev0_baseband_init()
251 b43_phy_write(dev, 0x910, 0x1); b43_phy_lcn_rev0_baseband_init()
253 b43_phy_maskset(dev, 0x448, ~0x300, 0x100); b43_phy_lcn_rev0_baseband_init()
254 b43_phy_maskset(dev, 0x608, ~0xff, 0x17); b43_phy_lcn_rev0_baseband_init()
255 b43_phy_maskset(dev, 0x604, ~0x7ff, 0x3ea); b43_phy_lcn_rev0_baseband_init()
259 static void b43_phy_lcn_bu_tweaks(struct b43_wldev *dev) b43_phy_lcn_bu_tweaks() argument
261 b43_phy_set(dev, 0x805, 0x1); b43_phy_lcn_bu_tweaks()
263 b43_phy_maskset(dev, 0x42f, ~0x7, 0x3); b43_phy_lcn_bu_tweaks()
264 b43_phy_maskset(dev, 0x030, ~0x7, 0x3); b43_phy_lcn_bu_tweaks()
266 b43_phy_write(dev, 0x414, 0x1e10); b43_phy_lcn_bu_tweaks()
267 b43_phy_write(dev, 0x415, 0x0640); b43_phy_lcn_bu_tweaks()
269 b43_phy_maskset(dev, 0x4df, (u16) ~0xff00, 0xf700); b43_phy_lcn_bu_tweaks()
271 b43_phy_set(dev, 0x44a, 0x44); b43_phy_lcn_bu_tweaks()
272 b43_phy_write(dev, 0x44a, 0x80); b43_phy_lcn_bu_tweaks()
274 b43_phy_maskset(dev, 0x434, ~0xff, 0xfd); b43_phy_lcn_bu_tweaks()
275 b43_phy_maskset(dev, 0x420, ~0xff, 0x10); b43_phy_lcn_bu_tweaks()
277 if (dev->dev->bus_sprom->board_rev >= 0x1204) b43_phy_lcn_bu_tweaks()
278 b43_radio_set(dev, 0x09b, 0xf0); b43_phy_lcn_bu_tweaks()
280 b43_phy_write(dev, 0x7d6, 0x0902); b43_phy_lcn_bu_tweaks()
282 b43_phy_maskset(dev, 0x429, ~0xf, 0x9); b43_phy_lcn_bu_tweaks()
283 b43_phy_maskset(dev, 0x429, ~(0x3f << 4), 0xe << 4); b43_phy_lcn_bu_tweaks()
285 if (dev->phy.rev == 1) { b43_phy_lcn_bu_tweaks()
286 b43_phy_maskset(dev, 0x423, ~0xff, 0x46); b43_phy_lcn_bu_tweaks()
287 b43_phy_maskset(dev, 0x411, ~0xff, 1); b43_phy_lcn_bu_tweaks()
288 b43_phy_set(dev, 0x434, 0xff); /* FIXME: update to wl */ b43_phy_lcn_bu_tweaks()
292 b43_phy_maskset(dev, 0x656, ~0xf, 2); b43_phy_lcn_bu_tweaks()
293 b43_phy_set(dev, 0x44d, 4); b43_phy_lcn_bu_tweaks()
295 b43_radio_set(dev, 0x0f7, 0x4); b43_phy_lcn_bu_tweaks()
296 b43_radio_mask(dev, 0x0f1, ~0x3); b43_phy_lcn_bu_tweaks()
297 b43_radio_maskset(dev, 0x0f2, ~0xf8, 0x90); b43_phy_lcn_bu_tweaks()
298 b43_radio_maskset(dev, 0x0f3, ~0x3, 0x2); b43_phy_lcn_bu_tweaks()
299 b43_radio_maskset(dev, 0x0f3, ~0xf0, 0xa0); b43_phy_lcn_bu_tweaks()
301 b43_radio_set(dev, 0x11f, 0x2); b43_phy_lcn_bu_tweaks()
303 b43_phy_lcn_clear_tx_power_offsets(dev); b43_phy_lcn_bu_tweaks()
310 static void b43_phy_lcn_sense_setup(struct b43_wldev *dev, b43_phy_lcn_sense_setup() argument
334 save_radio_regs[i][1] = b43_radio_read(dev, b43_phy_lcn_sense_setup()
337 save_phy_regs[i][1] = b43_phy_read(dev, save_phy_regs[i][0]); b43_phy_lcn_sense_setup()
338 b43_mac_suspend(dev); b43_phy_lcn_sense_setup()
339 save_radio_4a4 = b43_radio_read(dev, 0x4a4); b43_phy_lcn_sense_setup()
341 tx_pwr_idx = dev->phy.lcn->tx_pwr_curr_idx; b43_phy_lcn_sense_setup()
345 b43_radio_set(dev, 0x007, 0x1); b43_phy_lcn_sense_setup()
346 b43_radio_set(dev, 0x0ff, 0x10); b43_phy_lcn_sense_setup()
347 b43_radio_set(dev, 0x11f, 0x4); b43_phy_lcn_sense_setup()
349 b43_phy_mask(dev, 0x503, ~0x1); b43_phy_lcn_sense_setup()
350 b43_phy_mask(dev, 0x503, ~0x4); b43_phy_lcn_sense_setup()
351 b43_phy_mask(dev, 0x4a4, ~0x4000); b43_phy_lcn_sense_setup()
352 b43_phy_mask(dev, 0x4a4, (u16) ~0x8000); b43_phy_lcn_sense_setup()
353 b43_phy_mask(dev, 0x4d0, ~0x20); b43_phy_lcn_sense_setup()
354 b43_phy_set(dev, 0x4a5, 0xff); b43_phy_lcn_sense_setup()
355 b43_phy_maskset(dev, 0x4a5, ~0x7000, 0x5000); b43_phy_lcn_sense_setup()
356 b43_phy_mask(dev, 0x4a5, ~0x700); b43_phy_lcn_sense_setup()
357 b43_phy_maskset(dev, 0x40d, ~0xff, 64); b43_phy_lcn_sense_setup()
358 b43_phy_maskset(dev, 0x40d, ~0x700, 0x600); b43_phy_lcn_sense_setup()
359 b43_phy_maskset(dev, 0x4a2, ~0xff, 64); b43_phy_lcn_sense_setup()
360 b43_phy_maskset(dev, 0x4a2, ~0x700, 0x600); b43_phy_lcn_sense_setup()
361 b43_phy_maskset(dev, 0x4d9, ~0x70, 0x20); b43_phy_lcn_sense_setup()
362 b43_phy_maskset(dev, 0x4d9, ~0x700, 0x300); b43_phy_lcn_sense_setup()
363 b43_phy_maskset(dev, 0x4d9, ~0x7000, 0x1000); b43_phy_lcn_sense_setup()
364 b43_phy_mask(dev, 0x4da, ~0x1000); b43_phy_lcn_sense_setup()
365 b43_phy_set(dev, 0x4da, 0x2000); b43_phy_lcn_sense_setup()
366 b43_phy_set(dev, 0x4a6, 0x8000); b43_phy_lcn_sense_setup()
368 b43_radio_write(dev, 0x025, 0xc); b43_phy_lcn_sense_setup()
369 b43_radio_set(dev, 0x005, 0x8); b43_phy_lcn_sense_setup()
370 b43_phy_set(dev, 0x938, 0x4); b43_phy_lcn_sense_setup()
371 b43_phy_set(dev, 0x939, 0x4); b43_phy_lcn_sense_setup()
372 b43_phy_set(dev, 0x4a4, 0x1000); b43_phy_lcn_sense_setup()
375 b43_lcntab_write(dev, B43_LCNTAB16(0x8, 0x6), 0x640); b43_phy_lcn_sense_setup()
379 b43_phy_set(dev, 0x4d7, 0x8); b43_phy_lcn_sense_setup()
380 b43_phy_maskset(dev, 0x4d7, ~0x7000, 0x1000); b43_phy_lcn_sense_setup()
384 b43_radio_set(dev, 0x082, 0x20); b43_phy_lcn_sense_setup()
387 b43_phy_set(dev, 0x4d7, 0x8); b43_phy_lcn_sense_setup()
388 b43_phy_maskset(dev, 0x4d7, ~0x7000, 0x3000); b43_phy_lcn_sense_setup()
396 b43_phy_set(dev, 0x4d8, 0x1); b43_phy_lcn_sense_setup()
397 b43_phy_maskset(dev, 0x4d8, ~(0x3ff << 2), auxpga_vmid << 2); b43_phy_lcn_sense_setup()
398 b43_phy_set(dev, 0x4d8, 0x2); b43_phy_lcn_sense_setup()
399 b43_phy_maskset(dev, 0x4d8, ~(0x7 << 12), auxpga_gain << 12); b43_phy_lcn_sense_setup()
400 b43_phy_set(dev, 0x4d0, 0x20); b43_phy_lcn_sense_setup()
401 b43_radio_write(dev, 0x112, 0x6); b43_phy_lcn_sense_setup()
403 b43_dummy_transmission(dev, true, false); b43_phy_lcn_sense_setup()
405 if (!(b43_phy_read(dev, 0x476) & 0x8000)) b43_phy_lcn_sense_setup()
410 b43_radio_write(dev, save_radio_regs[i][0], b43_phy_lcn_sense_setup()
413 b43_phy_write(dev, save_phy_regs[i][0], save_phy_regs[i][1]); b43_phy_lcn_sense_setup()
415 b43_radio_write(dev, 0x4a4, save_radio_4a4); b43_phy_lcn_sense_setup()
417 b43_mac_enable(dev); b43_phy_lcn_sense_setup()
422 static bool b43_phy_lcn_load_tx_iir_cck_filter(struct b43_wldev *dev, b43_phy_lcn_load_tx_iir_cck_filter() argument
465 b43_phy_write(dev, phy_regs[j], b43_phy_lcn_load_tx_iir_cck_filter()
474 static bool b43_phy_lcn_load_tx_iir_ofdm_filter(struct b43_wldev *dev, b43_phy_lcn_load_tx_iir_ofdm_filter() argument
493 b43_phy_write(dev, phy_regs[j], b43_phy_lcn_load_tx_iir_ofdm_filter()
503 static void b43_phy_lcn_set_tx_gain_override(struct b43_wldev *dev, bool enable) b43_phy_lcn_set_tx_gain_override() argument
505 b43_phy_maskset(dev, 0x4b0, ~(0x1 << 7), enable << 7); b43_phy_lcn_set_tx_gain_override()
506 b43_phy_maskset(dev, 0x4b0, ~(0x1 << 14), enable << 14); b43_phy_lcn_set_tx_gain_override()
507 b43_phy_maskset(dev, 0x43b, ~(0x1 << 6), enable << 6); b43_phy_lcn_set_tx_gain_override()
511 static void b43_phy_lcn_set_tx_gain(struct b43_wldev *dev, b43_phy_lcn_set_tx_gain() argument
514 u16 pa_gain = b43_phy_lcn_get_pa_gain(dev); b43_phy_lcn_set_tx_gain()
516 b43_phy_write(dev, 0x4b5, b43_phy_lcn_set_tx_gain()
518 b43_phy_maskset(dev, 0x4fb, ~0x7fff, b43_phy_lcn_set_tx_gain()
520 b43_phy_write(dev, 0x4fc, b43_phy_lcn_set_tx_gain()
522 b43_phy_maskset(dev, 0x4fd, ~0x7fff, b43_phy_lcn_set_tx_gain()
525 b43_phy_lcn_set_dac_gain(dev, target_gains->dac_gain); b43_phy_lcn_set_tx_gain()
526 b43_phy_lcn_set_tx_gain_override(dev, true); b43_phy_lcn_set_tx_gain()
530 static void b43_phy_lcn_tx_pwr_ctl_init(struct b43_wldev *dev) b43_phy_lcn_tx_pwr_ctl_init() argument
535 b43_mac_suspend(dev); b43_phy_lcn_tx_pwr_ctl_init()
537 if (!dev->phy.lcn->hw_pwr_ctl_capable) { b43_phy_lcn_tx_pwr_ctl_init()
538 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_phy_lcn_tx_pwr_ctl_init()
551 b43_phy_lcn_set_tx_gain(dev, &tx_gains); b43_phy_lcn_tx_pwr_ctl_init()
552 b43_phy_lcn_set_bbmult(dev, bbmult); b43_phy_lcn_tx_pwr_ctl_init()
553 b43_phy_lcn_sense_setup(dev, B43_SENSE_TEMP); b43_phy_lcn_tx_pwr_ctl_init()
555 b43err(dev->wl, "TX power control not supported for this HW\n"); b43_phy_lcn_tx_pwr_ctl_init()
558 b43_mac_enable(dev); b43_phy_lcn_tx_pwr_ctl_init()
562 static void b43_phy_lcn_txrx_spur_avoidance_mode(struct b43_wldev *dev, b43_phy_lcn_txrx_spur_avoidance_mode() argument
566 b43_phy_write(dev, 0x942, 0x7); b43_phy_lcn_txrx_spur_avoidance_mode()
567 b43_phy_write(dev, 0x93b, ((1 << 13) + 23)); b43_phy_lcn_txrx_spur_avoidance_mode()
568 b43_phy_write(dev, 0x93c, ((1 << 13) + 1989)); b43_phy_lcn_txrx_spur_avoidance_mode()
570 b43_phy_write(dev, 0x44a, 0x084); b43_phy_lcn_txrx_spur_avoidance_mode()
571 b43_phy_write(dev, 0x44a, 0x080); b43_phy_lcn_txrx_spur_avoidance_mode()
572 b43_phy_write(dev, 0x6d3, 0x2222); b43_phy_lcn_txrx_spur_avoidance_mode()
573 b43_phy_write(dev, 0x6d3, 0x2220); b43_phy_lcn_txrx_spur_avoidance_mode()
575 b43_phy_write(dev, 0x942, 0x0); b43_phy_lcn_txrx_spur_avoidance_mode()
576 b43_phy_write(dev, 0x93b, ((0 << 13) + 23)); b43_phy_lcn_txrx_spur_avoidance_mode()
577 b43_phy_write(dev, 0x93c, ((0 << 13) + 1989)); b43_phy_lcn_txrx_spur_avoidance_mode()
579 b43_mac_switch_freq(dev, enable); b43_phy_lcn_txrx_spur_avoidance_mode()
587 static void b43_phy_lcn_set_channel_tweaks(struct b43_wldev *dev, int channel) b43_phy_lcn_set_channel_tweaks() argument
589 struct bcma_drv_cc *cc = &dev->dev->bdev->bus->drv_cc; b43_phy_lcn_set_channel_tweaks()
591 b43_phy_maskset(dev, 0x448, ~0x300, (channel == 14) ? 0x200 : 0x100); b43_phy_lcn_set_channel_tweaks()
601 b43_phy_write(dev, 0x942, 0); b43_phy_lcn_set_channel_tweaks()
603 b43_phy_lcn_txrx_spur_avoidance_mode(dev, false); b43_phy_lcn_set_channel_tweaks()
604 b43_phy_maskset(dev, 0x424, (u16) ~0xff00, 0x1b00); b43_phy_lcn_set_channel_tweaks()
605 b43_phy_write(dev, 0x425, 0x5907); b43_phy_lcn_set_channel_tweaks()
613 b43_phy_write(dev, 0x942, 0); b43_phy_lcn_set_channel_tweaks()
615 b43_phy_lcn_txrx_spur_avoidance_mode(dev, true); b43_phy_lcn_set_channel_tweaks()
616 b43_phy_maskset(dev, 0x424, (u16) ~0xff00, 0x1f00); b43_phy_lcn_set_channel_tweaks()
617 b43_phy_write(dev, 0x425, 0x590a); b43_phy_lcn_set_channel_tweaks()
620 b43_phy_set(dev, 0x44a, 0x44); b43_phy_lcn_set_channel_tweaks()
621 b43_phy_write(dev, 0x44a, 0x80); b43_phy_lcn_set_channel_tweaks()
625 static int b43_phy_lcn_set_channel(struct b43_wldev *dev, b43_phy_lcn_set_channel() argument
635 b43_phy_lcn_set_channel_tweaks(dev, channel->hw_value); b43_phy_lcn_set_channel()
637 b43_phy_set(dev, 0x44a, 0x44); b43_phy_lcn_set_channel()
638 b43_phy_write(dev, 0x44a, 0x80); b43_phy_lcn_set_channel()
640 b43_radio_2064_channel_setup(dev); b43_phy_lcn_set_channel()
643 b43_phy_lcn_afe_set_unset(dev); b43_phy_lcn_set_channel()
645 b43_phy_write(dev, 0x657, sfo_cfg[channel->hw_value - 1][0]); b43_phy_lcn_set_channel()
646 b43_phy_write(dev, 0x658, sfo_cfg[channel->hw_value - 1][1]); b43_phy_lcn_set_channel()
649 b43_phy_maskset(dev, 0x448, ~(0x3 << 8), (2) << 8); b43_phy_lcn_set_channel()
650 b43_phy_lcn_load_tx_iir_cck_filter(dev, 3); b43_phy_lcn_set_channel()
652 b43_phy_maskset(dev, 0x448, ~(0x3 << 8), (1) << 8); b43_phy_lcn_set_channel()
654 b43_phy_lcn_load_tx_iir_cck_filter(dev, 25); b43_phy_lcn_set_channel()
657 b43_phy_lcn_load_tx_iir_ofdm_filter(dev, 0); b43_phy_lcn_set_channel()
659 b43_phy_maskset(dev, 0x4eb, ~(0x7 << 3), 0x1 << 3); b43_phy_lcn_set_channel()
668 static int b43_phy_lcn_op_allocate(struct b43_wldev *dev) b43_phy_lcn_op_allocate() argument
675 dev->phy.lcn = phy_lcn; b43_phy_lcn_op_allocate()
680 static void b43_phy_lcn_op_free(struct b43_wldev *dev) b43_phy_lcn_op_free() argument
682 struct b43_phy *phy = &dev->phy; b43_phy_lcn_op_free()
689 static void b43_phy_lcn_op_prepare_structs(struct b43_wldev *dev) b43_phy_lcn_op_prepare_structs() argument
691 struct b43_phy *phy = &dev->phy; b43_phy_lcn_op_prepare_structs()
698 static int b43_phy_lcn_op_init(struct b43_wldev *dev) b43_phy_lcn_op_init() argument
700 struct bcma_drv_cc *cc = &dev->dev->bdev->bus->drv_cc; b43_phy_lcn_op_init()
702 b43_phy_set(dev, 0x44a, 0x80); b43_phy_lcn_op_init()
703 b43_phy_mask(dev, 0x44a, 0x7f); b43_phy_lcn_op_init()
704 b43_phy_set(dev, 0x6d1, 0x80); b43_phy_lcn_op_init()
705 b43_phy_write(dev, 0x6d0, 0x7); b43_phy_lcn_op_init()
707 b43_phy_lcn_afe_set_unset(dev); b43_phy_lcn_op_init()
709 b43_phy_write(dev, 0x60a, 0xa0); b43_phy_lcn_op_init()
710 b43_phy_write(dev, 0x46a, 0x19); b43_phy_lcn_op_init()
711 b43_phy_maskset(dev, 0x663, 0xFF00, 0x64); b43_phy_lcn_op_init()
713 b43_phy_lcn_tables_init(dev); b43_phy_lcn_op_init()
715 b43_phy_lcn_rev0_baseband_init(dev); b43_phy_lcn_op_init()
716 b43_phy_lcn_bu_tweaks(dev); b43_phy_lcn_op_init()
718 if (dev->phy.radio_ver == 0x2064) b43_phy_lcn_op_init()
719 b43_radio_2064_init(dev); b43_phy_lcn_op_init()
723 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_lcn_op_init()
724 b43_phy_lcn_tx_pwr_ctl_init(dev); b43_phy_lcn_op_init()
726 b43_switch_channel(dev, dev->phy.channel); b43_phy_lcn_op_init()
733 b43_phy_set(dev, 0x448, 0x4000); b43_phy_lcn_op_init()
735 b43_phy_mask(dev, 0x448, ~0x4000); b43_phy_lcn_op_init()
742 static void b43_phy_lcn_op_software_rfkill(struct b43_wldev *dev, b43_phy_lcn_op_software_rfkill() argument
745 if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED) b43_phy_lcn_op_software_rfkill()
746 b43err(dev->wl, "MAC not suspended\n"); b43_phy_lcn_op_software_rfkill()
749 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL2, ~0x7c00); b43_phy_lcn_op_software_rfkill()
750 b43_phy_set(dev, B43_PHY_LCN_RF_CTL1, 0x1f00); b43_phy_lcn_op_software_rfkill()
752 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL5, ~0x7f00); b43_phy_lcn_op_software_rfkill()
753 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL4, ~0x2); b43_phy_lcn_op_software_rfkill()
754 b43_phy_set(dev, B43_PHY_LCN_RF_CTL3, 0x808); b43_phy_lcn_op_software_rfkill()
756 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL7, ~0x8); b43_phy_lcn_op_software_rfkill()
757 b43_phy_set(dev, B43_PHY_LCN_RF_CTL6, 0x8); b43_phy_lcn_op_software_rfkill()
759 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL1, ~0x1f00); b43_phy_lcn_op_software_rfkill()
760 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL3, ~0x808); b43_phy_lcn_op_software_rfkill()
761 b43_phy_mask(dev, B43_PHY_LCN_RF_CTL6, ~0x8); b43_phy_lcn_op_software_rfkill()
765 static void b43_phy_lcn_op_switch_analog(struct b43_wldev *dev, bool on) b43_phy_lcn_op_switch_analog() argument
768 b43_phy_mask(dev, B43_PHY_LCN_AFE_CTL1, ~0x7); b43_phy_lcn_op_switch_analog()
770 b43_phy_set(dev, B43_PHY_LCN_AFE_CTL2, 0x7); b43_phy_lcn_op_switch_analog()
771 b43_phy_set(dev, B43_PHY_LCN_AFE_CTL1, 0x7); b43_phy_lcn_op_switch_analog()
775 static int b43_phy_lcn_op_switch_channel(struct b43_wldev *dev, b43_phy_lcn_op_switch_channel() argument
778 struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan; b43_phy_lcn_op_switch_channel()
780 cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef); b43_phy_lcn_op_switch_channel()
782 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_phy_lcn_op_switch_channel()
789 return b43_phy_lcn_set_channel(dev, channel, channel_type); b43_phy_lcn_op_switch_channel()
792 static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev) b43_phy_lcn_op_get_default_chan() argument
794 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_lcn_op_get_default_chan()
800 b43_phy_lcn_op_recalc_txpower(struct b43_wldev *dev, bool ignore_tssi) b43_phy_lcn_op_recalc_txpower() argument
805 static void b43_phy_lcn_op_adjust_txpower(struct b43_wldev *dev) b43_phy_lcn_op_adjust_txpower() argument
813 static void b43_phy_lcn_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask, b43_phy_lcn_op_maskset() argument
816 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_phy_lcn_op_maskset()
817 b43_write16(dev, B43_MMIO_PHY_DATA, b43_phy_lcn_op_maskset()
818 (b43_read16(dev, B43_MMIO_PHY_DATA) & mask) | set); b43_phy_lcn_op_maskset()
821 static u16 b43_phy_lcn_op_radio_read(struct b43_wldev *dev, u16 reg) b43_phy_lcn_op_radio_read() argument
826 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg); b43_phy_lcn_op_radio_read()
827 return b43_read16(dev, B43_MMIO_RADIO24_DATA); b43_phy_lcn_op_radio_read()
830 static void b43_phy_lcn_op_radio_write(struct b43_wldev *dev, u16 reg, b43_phy_lcn_op_radio_write() argument
833 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg); b43_phy_lcn_op_radio_write()
834 b43_write16(dev, B43_MMIO_RADIO24_DATA, value); b43_phy_lcn_op_radio_write()
H A Dphy_common.c41 int b43_phy_allocate(struct b43_wldev *dev) b43_phy_allocate() argument
43 struct b43_phy *phy = &(dev->phy); b43_phy_allocate()
83 err = phy->ops->allocate(dev); b43_phy_allocate()
90 void b43_phy_free(struct b43_wldev *dev) b43_phy_free() argument
92 dev->phy.ops->free(dev); b43_phy_free()
93 dev->phy.ops = NULL; b43_phy_free()
96 int b43_phy_init(struct b43_wldev *dev) b43_phy_init() argument
98 struct b43_phy *phy = &dev->phy; b43_phy_init()
106 phy->chandef = &dev->wl->hw->conf.chandef; b43_phy_init()
110 phy->ops->switch_analog(dev, true); b43_phy_init()
111 b43_software_rfkill(dev, false); b43_phy_init()
113 err = ops->init(dev); b43_phy_init()
115 b43err(dev->wl, "PHY init failed\n"); b43_phy_init()
120 err = b43_switch_channel(dev, phy->channel); b43_phy_init()
122 b43err(dev->wl, "PHY init: Channel switch to default failed\n"); b43_phy_init()
131 ops->exit(dev); b43_phy_init()
133 b43_software_rfkill(dev, true); b43_phy_init()
138 void b43_phy_exit(struct b43_wldev *dev) b43_phy_exit() argument
140 const struct b43_phy_operations *ops = dev->phy.ops; b43_phy_exit()
142 b43_software_rfkill(dev, true); b43_phy_exit()
143 dev->phy.do_full_init = true; b43_phy_exit()
145 ops->exit(dev); b43_phy_exit()
148 bool b43_has_hardware_pctl(struct b43_wldev *dev) b43_has_hardware_pctl() argument
150 if (!dev->phy.hardware_power_control) b43_has_hardware_pctl()
152 if (!dev->phy.ops->supports_hwpctl) b43_has_hardware_pctl()
154 return dev->phy.ops->supports_hwpctl(dev); b43_has_hardware_pctl()
157 void b43_radio_lock(struct b43_wldev *dev) b43_radio_lock() argument
162 B43_WARN_ON(dev->phy.radio_locked); b43_radio_lock()
163 dev->phy.radio_locked = true; b43_radio_lock()
166 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_radio_lock()
168 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_radio_lock()
171 b43_read32(dev, B43_MMIO_MACCTL); b43_radio_lock()
175 void b43_radio_unlock(struct b43_wldev *dev) b43_radio_unlock() argument
180 B43_WARN_ON(!dev->phy.radio_locked); b43_radio_unlock()
181 dev->phy.radio_locked = false; b43_radio_unlock()
185 b43_read16(dev, B43_MMIO_PHY_VER); b43_radio_unlock()
187 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_radio_unlock()
189 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_radio_unlock()
192 void b43_phy_lock(struct b43_wldev *dev) b43_phy_lock() argument
195 B43_WARN_ON(dev->phy.phy_locked); b43_phy_lock()
196 dev->phy.phy_locked = true; b43_phy_lock()
198 B43_WARN_ON(dev->dev->core_rev < 3); b43_phy_lock()
200 if (!b43_is_mode(dev->wl, NL80211_IFTYPE_AP)) b43_phy_lock()
201 b43_power_saving_ctl_bits(dev, B43_PS_AWAKE); b43_phy_lock()
204 void b43_phy_unlock(struct b43_wldev *dev) b43_phy_unlock() argument
207 B43_WARN_ON(!dev->phy.phy_locked); b43_phy_unlock()
208 dev->phy.phy_locked = false; b43_phy_unlock()
210 B43_WARN_ON(dev->dev->core_rev < 3); b43_phy_unlock()
212 if (!b43_is_mode(dev->wl, NL80211_IFTYPE_AP)) b43_phy_unlock()
213 b43_power_saving_ctl_bits(dev, 0); b43_phy_unlock()
216 static inline void assert_mac_suspended(struct b43_wldev *dev) assert_mac_suspended() argument
220 if ((b43_status(dev) >= B43_STAT_INITIALIZED) && assert_mac_suspended()
221 (dev->mac_suspended <= 0)) { assert_mac_suspended()
222 b43dbg(dev->wl, "PHY/RADIO register access with " assert_mac_suspended()
228 u16 b43_radio_read(struct b43_wldev *dev, u16 reg) b43_radio_read() argument
230 assert_mac_suspended(dev); b43_radio_read()
231 dev->phy.writes_counter = 0; b43_radio_read()
232 return dev->phy.ops->radio_read(dev, reg); b43_radio_read()
235 void b43_radio_write(struct b43_wldev *dev, u16 reg, u16 value) b43_radio_write() argument
237 assert_mac_suspended(dev); b43_radio_write()
238 if (b43_bus_host_is_pci(dev->dev) && b43_radio_write()
239 ++dev->phy.writes_counter > B43_MAX_WRITES_IN_ROW) { b43_radio_write()
240 b43_read32(dev, B43_MMIO_MACCTL); b43_radio_write()
241 dev->phy.writes_counter = 1; b43_radio_write()
243 dev->phy.ops->radio_write(dev, reg, value); b43_radio_write()
246 void b43_radio_mask(struct b43_wldev *dev, u16 offset, u16 mask) b43_radio_mask() argument
248 b43_radio_write16(dev, offset, b43_radio_mask()
249 b43_radio_read16(dev, offset) & mask); b43_radio_mask()
252 void b43_radio_set(struct b43_wldev *dev, u16 offset, u16 set) b43_radio_set() argument
254 b43_radio_write16(dev, offset, b43_radio_set()
255 b43_radio_read16(dev, offset) | set); b43_radio_set()
258 void b43_radio_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set) b43_radio_maskset() argument
260 b43_radio_write16(dev, offset, b43_radio_maskset()
261 (b43_radio_read16(dev, offset) & mask) | set); b43_radio_maskset()
264 bool b43_radio_wait_value(struct b43_wldev *dev, u16 offset, u16 mask, b43_radio_wait_value() argument
271 val = b43_radio_read(dev, offset); b43_radio_wait_value()
279 u16 b43_phy_read(struct b43_wldev *dev, u16 reg) b43_phy_read() argument
281 assert_mac_suspended(dev); b43_phy_read()
282 dev->phy.writes_counter = 0; b43_phy_read()
284 if (dev->phy.ops->phy_read) b43_phy_read()
285 return dev->phy.ops->phy_read(dev, reg); b43_phy_read()
287 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_phy_read()
288 return b43_read16(dev, B43_MMIO_PHY_DATA); b43_phy_read()
291 void b43_phy_write(struct b43_wldev *dev, u16 reg, u16 value) b43_phy_write() argument
293 assert_mac_suspended(dev); b43_phy_write()
294 if (b43_bus_host_is_pci(dev->dev) && b43_phy_write()
295 ++dev->phy.writes_counter > B43_MAX_WRITES_IN_ROW) { b43_phy_write()
296 b43_read16(dev, B43_MMIO_PHY_VER); b43_phy_write()
297 dev->phy.writes_counter = 1; b43_phy_write()
300 if (dev->phy.ops->phy_write) b43_phy_write()
301 return dev->phy.ops->phy_write(dev, reg, value); b43_phy_write()
303 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_phy_write()
304 b43_write16(dev, B43_MMIO_PHY_DATA, value); b43_phy_write()
307 void b43_phy_copy(struct b43_wldev *dev, u16 destreg, u16 srcreg) b43_phy_copy() argument
309 b43_phy_write(dev, destreg, b43_phy_read(dev, srcreg)); b43_phy_copy()
312 void b43_phy_mask(struct b43_wldev *dev, u16 offset, u16 mask) b43_phy_mask() argument
314 if (dev->phy.ops->phy_maskset) { b43_phy_mask()
315 assert_mac_suspended(dev); b43_phy_mask()
316 dev->phy.ops->phy_maskset(dev, offset, mask, 0); b43_phy_mask()
318 b43_phy_write(dev, offset, b43_phy_mask()
319 b43_phy_read(dev, offset) & mask); b43_phy_mask()
323 void b43_phy_set(struct b43_wldev *dev, u16 offset, u16 set) b43_phy_set() argument
325 if (dev->phy.ops->phy_maskset) { b43_phy_set()
326 assert_mac_suspended(dev); b43_phy_set()
327 dev->phy.ops->phy_maskset(dev, offset, 0xFFFF, set); b43_phy_set()
329 b43_phy_write(dev, offset, b43_phy_set()
330 b43_phy_read(dev, offset) | set); b43_phy_set()
334 void b43_phy_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set) b43_phy_maskset() argument
336 if (dev->phy.ops->phy_maskset) { b43_phy_maskset()
337 assert_mac_suspended(dev); b43_phy_maskset()
338 dev->phy.ops->phy_maskset(dev, offset, mask, set); b43_phy_maskset()
340 b43_phy_write(dev, offset, b43_phy_maskset()
341 (b43_phy_read(dev, offset) & mask) | set); b43_phy_maskset()
345 void b43_phy_put_into_reset(struct b43_wldev *dev) b43_phy_put_into_reset() argument
349 switch (dev->dev->bus_type) { b43_phy_put_into_reset()
352 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_phy_put_into_reset()
356 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_phy_put_into_reset()
359 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_phy_put_into_reset()
361 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_phy_put_into_reset()
367 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_phy_put_into_reset()
371 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_phy_put_into_reset()
374 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_phy_put_into_reset()
376 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_phy_put_into_reset()
384 void b43_phy_take_out_of_reset(struct b43_wldev *dev) b43_phy_take_out_of_reset() argument
388 switch (dev->dev->bus_type) { b43_phy_take_out_of_reset()
392 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_phy_take_out_of_reset()
396 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_phy_take_out_of_reset()
400 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_phy_take_out_of_reset()
403 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_phy_take_out_of_reset()
410 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_phy_take_out_of_reset()
414 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_phy_take_out_of_reset()
415 ssb_read32(dev->dev->sdev, SSB_TMSLOW); /* flush */ b43_phy_take_out_of_reset()
418 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_phy_take_out_of_reset()
421 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_phy_take_out_of_reset()
422 ssb_read32(dev->dev->sdev, SSB_TMSLOW); /* flush */ b43_phy_take_out_of_reset()
429 int b43_switch_channel(struct b43_wldev *dev, unsigned int new_channel) b43_switch_channel() argument
431 struct b43_phy *phy = &(dev->phy); b43_switch_channel()
439 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_switch_channel()
444 savedcookie = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_CHAN); b43_switch_channel()
445 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_CHAN, channelcookie); b43_switch_channel()
448 err = phy->ops->switch_channel(dev, new_channel); b43_switch_channel()
458 b43_shm_write16(dev, B43_SHM_SHARED, b43_switch_channel()
464 void b43_software_rfkill(struct b43_wldev *dev, bool blocked) b43_software_rfkill() argument
466 struct b43_phy *phy = &dev->phy; b43_software_rfkill()
468 b43_mac_suspend(dev); b43_software_rfkill()
469 phy->ops->software_rfkill(dev, blocked); b43_software_rfkill()
471 b43_mac_enable(dev); b43_software_rfkill()
483 struct b43_wldev *dev; b43_phy_txpower_adjust_work() local
486 dev = wl->current_dev; b43_phy_txpower_adjust_work()
488 if (likely(dev && (b43_status(dev) >= B43_STAT_STARTED))) b43_phy_txpower_adjust_work()
489 dev->phy.ops->adjust_txpower(dev); b43_phy_txpower_adjust_work()
494 void b43_phy_txpower_check(struct b43_wldev *dev, unsigned int flags) b43_phy_txpower_check() argument
496 struct b43_phy *phy = &dev->phy; b43_phy_txpower_check()
508 if ((dev->dev->board_vendor == SSB_BOARDVENDOR_BCM) && b43_phy_txpower_check()
509 (dev->dev->board_type == SSB_BOARD_BU4306)) b43_phy_txpower_check()
512 result = phy->ops->recalc_txpower(dev, !!(flags & B43_TXPWR_IGNORE_TSSI)); b43_phy_txpower_check()
520 ieee80211_queue_work(dev->wl->hw, &dev->wl->txpower_adjust_work); b43_phy_txpower_check()
523 int b43_phy_shm_tssi_read(struct b43_wldev *dev, u16 shm_offset) b43_phy_shm_tssi_read() argument
530 tmp = b43_shm_read32(dev, B43_SHM_SHARED, shm_offset); b43_phy_shm_tssi_read()
543 b43_shm_write32(dev, B43_SHM_SHARED, shm_offset, tmp); b43_phy_shm_tssi_read()
556 if (b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF1) b43_phy_shm_tssi_read()
564 void b43_phyop_switch_analog_generic(struct b43_wldev *dev, bool on) b43_phyop_switch_analog_generic() argument
566 b43_write16(dev, B43_MMIO_PHY0, on ? 0 : 0xF4); b43_phyop_switch_analog_generic()
570 bool b43_is_40mhz(struct b43_wldev *dev) b43_is_40mhz() argument
572 return dev->phy.chandef->width == NL80211_CHAN_WIDTH_40; b43_is_40mhz()
576 void b43_phy_force_clock(struct b43_wldev *dev, bool force) b43_phy_force_clock() argument
580 WARN_ON(dev->phy.type != B43_PHYTYPE_N && b43_phy_force_clock()
581 dev->phy.type != B43_PHYTYPE_HT && b43_phy_force_clock()
582 dev->phy.type != B43_PHYTYPE_AC); b43_phy_force_clock()
584 switch (dev->dev->bus_type) { b43_phy_force_clock()
587 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_phy_force_clock()
592 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_phy_force_clock()
597 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_phy_force_clock()
602 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_phy_force_clock()
H A Dbus.c34 static int b43_bus_bcma_bus_may_powerdown(struct b43_bus_dev *dev) b43_bus_bcma_bus_may_powerdown() argument
36 return 0; /* bcma_bus_may_powerdown(dev->bdev->bus); */ b43_bus_bcma_bus_may_powerdown()
38 static int b43_bus_bcma_bus_powerup(struct b43_bus_dev *dev, b43_bus_bcma_bus_powerup() argument
41 return 0; /* bcma_bus_powerup(dev->sdev->bus, dynamic_pctl); */ b43_bus_bcma_bus_powerup()
43 static int b43_bus_bcma_device_is_enabled(struct b43_bus_dev *dev) b43_bus_bcma_device_is_enabled() argument
45 return bcma_core_is_enabled(dev->bdev); b43_bus_bcma_device_is_enabled()
47 static void b43_bus_bcma_device_enable(struct b43_bus_dev *dev, b43_bus_bcma_device_enable() argument
50 bcma_core_enable(dev->bdev, core_specific_flags); b43_bus_bcma_device_enable()
52 static void b43_bus_bcma_device_disable(struct b43_bus_dev *dev, b43_bus_bcma_device_disable() argument
55 bcma_core_disable(dev->bdev, core_specific_flags); b43_bus_bcma_device_disable()
57 static u16 b43_bus_bcma_read16(struct b43_bus_dev *dev, u16 offset) b43_bus_bcma_read16() argument
59 return bcma_read16(dev->bdev, offset); b43_bus_bcma_read16()
61 static u32 b43_bus_bcma_read32(struct b43_bus_dev *dev, u16 offset) b43_bus_bcma_read32() argument
63 return bcma_read32(dev->bdev, offset); b43_bus_bcma_read32()
66 void b43_bus_bcma_write16(struct b43_bus_dev *dev, u16 offset, u16 value) b43_bus_bcma_write16() argument
68 bcma_write16(dev->bdev, offset, value); b43_bus_bcma_write16()
71 void b43_bus_bcma_write32(struct b43_bus_dev *dev, u16 offset, u32 value) b43_bus_bcma_write32() argument
73 bcma_write32(dev->bdev, offset, value); b43_bus_bcma_write32()
76 void b43_bus_bcma_block_read(struct b43_bus_dev *dev, void *buffer, b43_bus_bcma_block_read() argument
79 bcma_block_read(dev->bdev, buffer, count, offset, reg_width); b43_bus_bcma_block_read()
82 void b43_bus_bcma_block_write(struct b43_bus_dev *dev, const void *buffer, b43_bus_bcma_block_write() argument
85 bcma_block_write(dev->bdev, buffer, count, offset, reg_width); b43_bus_bcma_block_write()
90 struct b43_bus_dev *dev = kzalloc(sizeof(*dev), GFP_KERNEL); b43_bus_dev_bcma_init() local
91 if (!dev) b43_bus_dev_bcma_init()
94 dev->bus_type = B43_BUS_BCMA; b43_bus_dev_bcma_init()
95 dev->bdev = core; b43_bus_dev_bcma_init()
97 dev->bus_may_powerdown = b43_bus_bcma_bus_may_powerdown; b43_bus_dev_bcma_init()
98 dev->bus_powerup = b43_bus_bcma_bus_powerup; b43_bus_dev_bcma_init()
99 dev->device_is_enabled = b43_bus_bcma_device_is_enabled; b43_bus_dev_bcma_init()
100 dev->device_enable = b43_bus_bcma_device_enable; b43_bus_dev_bcma_init()
101 dev->device_disable = b43_bus_bcma_device_disable; b43_bus_dev_bcma_init()
103 dev->read16 = b43_bus_bcma_read16; b43_bus_dev_bcma_init()
104 dev->read32 = b43_bus_bcma_read32; b43_bus_dev_bcma_init()
105 dev->write16 = b43_bus_bcma_write16; b43_bus_dev_bcma_init()
106 dev->write32 = b43_bus_bcma_write32; b43_bus_dev_bcma_init()
107 dev->block_read = b43_bus_bcma_block_read; b43_bus_dev_bcma_init()
108 dev->block_write = b43_bus_bcma_block_write; b43_bus_dev_bcma_init()
110 if (b43_bus_host_is_pci(dev) && b43_bus_dev_bcma_init()
113 dev->flush_writes = true; b43_bus_dev_bcma_init()
116 dev->dev = &core->dev; b43_bus_dev_bcma_init()
117 dev->dma_dev = core->dma_dev; b43_bus_dev_bcma_init()
118 dev->irq = core->irq; b43_bus_dev_bcma_init()
120 dev->board_vendor = core->bus->boardinfo.vendor; b43_bus_dev_bcma_init()
121 dev->board_type = core->bus->boardinfo.type; b43_bus_dev_bcma_init()
122 dev->board_rev = core->bus->sprom.board_rev; b43_bus_dev_bcma_init()
124 dev->chip_id = core->bus->chipinfo.id; b43_bus_dev_bcma_init()
125 dev->chip_rev = core->bus->chipinfo.rev; b43_bus_dev_bcma_init()
126 dev->chip_pkg = core->bus->chipinfo.pkg; b43_bus_dev_bcma_init()
128 dev->bus_sprom = &core->bus->sprom; b43_bus_dev_bcma_init()
130 dev->core_id = core->id.id; b43_bus_dev_bcma_init()
131 dev->core_rev = core->id.rev; b43_bus_dev_bcma_init()
133 return dev; b43_bus_dev_bcma_init()
139 static int b43_bus_ssb_bus_may_powerdown(struct b43_bus_dev *dev) b43_bus_ssb_bus_may_powerdown() argument
141 return ssb_bus_may_powerdown(dev->sdev->bus); b43_bus_ssb_bus_may_powerdown()
143 static int b43_bus_ssb_bus_powerup(struct b43_bus_dev *dev, b43_bus_ssb_bus_powerup() argument
146 return ssb_bus_powerup(dev->sdev->bus, dynamic_pctl); b43_bus_ssb_bus_powerup()
148 static int b43_bus_ssb_device_is_enabled(struct b43_bus_dev *dev) b43_bus_ssb_device_is_enabled() argument
150 return ssb_device_is_enabled(dev->sdev); b43_bus_ssb_device_is_enabled()
152 static void b43_bus_ssb_device_enable(struct b43_bus_dev *dev, b43_bus_ssb_device_enable() argument
155 ssb_device_enable(dev->sdev, core_specific_flags); b43_bus_ssb_device_enable()
157 static void b43_bus_ssb_device_disable(struct b43_bus_dev *dev, b43_bus_ssb_device_disable() argument
160 ssb_device_disable(dev->sdev, core_specific_flags); b43_bus_ssb_device_disable()
163 static u16 b43_bus_ssb_read16(struct b43_bus_dev *dev, u16 offset) b43_bus_ssb_read16() argument
165 return ssb_read16(dev->sdev, offset); b43_bus_ssb_read16()
167 static u32 b43_bus_ssb_read32(struct b43_bus_dev *dev, u16 offset) b43_bus_ssb_read32() argument
169 return ssb_read32(dev->sdev, offset); b43_bus_ssb_read32()
171 static void b43_bus_ssb_write16(struct b43_bus_dev *dev, u16 offset, u16 value) b43_bus_ssb_write16() argument
173 ssb_write16(dev->sdev, offset, value); b43_bus_ssb_write16()
175 static void b43_bus_ssb_write32(struct b43_bus_dev *dev, u16 offset, u32 value) b43_bus_ssb_write32() argument
177 ssb_write32(dev->sdev, offset, value); b43_bus_ssb_write32()
179 static void b43_bus_ssb_block_read(struct b43_bus_dev *dev, void *buffer, b43_bus_ssb_block_read() argument
182 ssb_block_read(dev->sdev, buffer, count, offset, reg_width); b43_bus_ssb_block_read()
185 void b43_bus_ssb_block_write(struct b43_bus_dev *dev, const void *buffer, b43_bus_ssb_block_write() argument
188 ssb_block_write(dev->sdev, buffer, count, offset, reg_width); b43_bus_ssb_block_write()
193 struct b43_bus_dev *dev; b43_bus_dev_ssb_init() local
195 dev = kzalloc(sizeof(*dev), GFP_KERNEL); b43_bus_dev_ssb_init()
196 if (!dev) b43_bus_dev_ssb_init()
199 dev->bus_type = B43_BUS_SSB; b43_bus_dev_ssb_init()
200 dev->sdev = sdev; b43_bus_dev_ssb_init()
202 dev->bus_may_powerdown = b43_bus_ssb_bus_may_powerdown; b43_bus_dev_ssb_init()
203 dev->bus_powerup = b43_bus_ssb_bus_powerup; b43_bus_dev_ssb_init()
204 dev->device_is_enabled = b43_bus_ssb_device_is_enabled; b43_bus_dev_ssb_init()
205 dev->device_enable = b43_bus_ssb_device_enable; b43_bus_dev_ssb_init()
206 dev->device_disable = b43_bus_ssb_device_disable; b43_bus_dev_ssb_init()
208 dev->read16 = b43_bus_ssb_read16; b43_bus_dev_ssb_init()
209 dev->read32 = b43_bus_ssb_read32; b43_bus_dev_ssb_init()
210 dev->write16 = b43_bus_ssb_write16; b43_bus_dev_ssb_init()
211 dev->write32 = b43_bus_ssb_write32; b43_bus_dev_ssb_init()
212 dev->block_read = b43_bus_ssb_block_read; b43_bus_dev_ssb_init()
213 dev->block_write = b43_bus_ssb_block_write; b43_bus_dev_ssb_init()
215 dev->dev = sdev->dev; b43_bus_dev_ssb_init()
216 dev->dma_dev = sdev->dma_dev; b43_bus_dev_ssb_init()
217 dev->irq = sdev->irq; b43_bus_dev_ssb_init()
219 dev->board_vendor = sdev->bus->boardinfo.vendor; b43_bus_dev_ssb_init()
220 dev->board_type = sdev->bus->boardinfo.type; b43_bus_dev_ssb_init()
221 dev->board_rev = sdev->bus->sprom.board_rev; b43_bus_dev_ssb_init()
223 dev->chip_id = sdev->bus->chip_id; b43_bus_dev_ssb_init()
224 dev->chip_rev = sdev->bus->chip_rev; b43_bus_dev_ssb_init()
225 dev->chip_pkg = sdev->bus->chip_package; b43_bus_dev_ssb_init()
227 dev->bus_sprom = &sdev->bus->sprom; b43_bus_dev_ssb_init()
229 dev->core_id = sdev->id.coreid; b43_bus_dev_ssb_init()
230 dev->core_rev = sdev->id.revision; b43_bus_dev_ssb_init()
232 return dev; b43_bus_dev_ssb_init()
236 void *b43_bus_get_wldev(struct b43_bus_dev *dev) b43_bus_get_wldev() argument
238 switch (dev->bus_type) { b43_bus_get_wldev()
241 return bcma_get_drvdata(dev->bdev); b43_bus_get_wldev()
245 return ssb_get_drvdata(dev->sdev); b43_bus_get_wldev()
251 void b43_bus_set_wldev(struct b43_bus_dev *dev, void *wldev) b43_bus_set_wldev() argument
253 switch (dev->bus_type) { b43_bus_set_wldev()
256 bcma_set_drvdata(dev->bdev, wldev); b43_bus_set_wldev()
261 ssb_set_drvdata(dev->sdev, wldev); b43_bus_set_wldev()
H A Dphy_a.c65 static s8 b43_aphy_estimate_power_out(struct b43_wldev *dev, s8 tssi)
67 struct b43_phy *phy = &dev->phy;
82 static void b43_radio_set_tx_iq(struct b43_wldev *dev) b43_radio_set_tx_iq() argument
86 u16 tmp = b43_radio_read16(dev, 0x001E); b43_radio_set_tx_iq()
92 b43_phy_write(dev, 0x0069, b43_radio_set_tx_iq()
100 static void aphy_channel_switch(struct b43_wldev *dev, unsigned int channel) aphy_channel_switch() argument
106 r8 = b43_radio_read16(dev, 0x0008); aphy_channel_switch()
107 b43_write16(dev, 0x03F0, freq); aphy_channel_switch()
108 b43_radio_write16(dev, 0x0008, r8); aphy_channel_switch()
111 tmp = b43_radio_read16(dev, 0x002E); aphy_channel_switch()
114 b43_radio_write16(dev, 0x002E, tmp); aphy_channel_switch()
123 b43_radio_write16(dev, 0x0007, (r8 << 4) | r8); aphy_channel_switch()
124 b43_radio_write16(dev, 0x0020, (r8 << 4) | r8); aphy_channel_switch()
125 b43_radio_write16(dev, 0x0021, (r8 << 4) | r8); aphy_channel_switch()
126 b43_radio_maskset(dev, 0x0022, 0x000F, (r8 << 4)); aphy_channel_switch()
127 b43_radio_write16(dev, 0x002A, (r8 << 4)); aphy_channel_switch()
128 b43_radio_write16(dev, 0x002B, (r8 << 4)); aphy_channel_switch()
129 b43_radio_maskset(dev, 0x0008, 0x00F0, (r8 << 4)); aphy_channel_switch()
130 b43_radio_maskset(dev, 0x0029, 0xFF0F, 0x00B0); aphy_channel_switch()
131 b43_radio_write16(dev, 0x0035, 0x00AA); aphy_channel_switch()
132 b43_radio_write16(dev, 0x0036, 0x0085); aphy_channel_switch()
133 b43_radio_maskset(dev, 0x003A, 0xFF20, freq_r3A_value(freq)); aphy_channel_switch()
134 b43_radio_mask(dev, 0x003D, 0x00FF); aphy_channel_switch()
135 b43_radio_maskset(dev, 0x0081, 0xFF7F, 0x0080); aphy_channel_switch()
136 b43_radio_mask(dev, 0x0035, 0xFFEF); aphy_channel_switch()
137 b43_radio_maskset(dev, 0x0035, 0xFFEF, 0x0010); aphy_channel_switch()
138 b43_radio_set_tx_iq(dev); aphy_channel_switch()
140 //FIXME b43_phy_xmitpower(dev); aphy_channel_switch()
143 static void b43_radio_init2060(struct b43_wldev *dev) b43_radio_init2060() argument
145 b43_radio_write16(dev, 0x0004, 0x00C0); b43_radio_init2060()
146 b43_radio_write16(dev, 0x0005, 0x0008); b43_radio_init2060()
147 b43_radio_write16(dev, 0x0009, 0x0040); b43_radio_init2060()
148 b43_radio_write16(dev, 0x0005, 0x00AA); b43_radio_init2060()
149 b43_radio_write16(dev, 0x0032, 0x008F); b43_radio_init2060()
150 b43_radio_write16(dev, 0x0006, 0x008F); b43_radio_init2060()
151 b43_radio_write16(dev, 0x0034, 0x008F); b43_radio_init2060()
152 b43_radio_write16(dev, 0x002C, 0x0007); b43_radio_init2060()
153 b43_radio_write16(dev, 0x0082, 0x0080); b43_radio_init2060()
154 b43_radio_write16(dev, 0x0080, 0x0000); b43_radio_init2060()
155 b43_radio_write16(dev, 0x003F, 0x00DA); b43_radio_init2060()
156 b43_radio_mask(dev, 0x0005, ~0x0008); b43_radio_init2060()
157 b43_radio_mask(dev, 0x0081, ~0x0010); b43_radio_init2060()
158 b43_radio_mask(dev, 0x0081, ~0x0020); b43_radio_init2060()
159 b43_radio_mask(dev, 0x0081, ~0x0020); b43_radio_init2060()
162 b43_radio_maskset(dev, 0x0081, ~0x0020, 0x0010); b43_radio_init2060()
165 b43_radio_maskset(dev, 0x0005, ~0x0008, 0x0008); b43_radio_init2060()
166 b43_radio_mask(dev, 0x0085, ~0x0010); b43_radio_init2060()
167 b43_radio_mask(dev, 0x0005, ~0x0008); b43_radio_init2060()
168 b43_radio_mask(dev, 0x0081, ~0x0040); b43_radio_init2060()
169 b43_radio_maskset(dev, 0x0081, ~0x0040, 0x0040); b43_radio_init2060()
170 b43_radio_write16(dev, 0x0005, b43_radio_init2060()
171 (b43_radio_read16(dev, 0x0081) & ~0x0008) | 0x0008); b43_radio_init2060()
172 b43_phy_write(dev, 0x0063, 0xDDC6); b43_radio_init2060()
173 b43_phy_write(dev, 0x0069, 0x07BE); b43_radio_init2060()
174 b43_phy_write(dev, 0x006A, 0x0000); b43_radio_init2060()
176 aphy_channel_switch(dev, dev->phy.ops->get_default_chan(dev)); b43_radio_init2060()
181 static void b43_phy_rssiagc(struct b43_wldev *dev, u8 enable) b43_phy_rssiagc() argument
185 if (dev->phy.rev < 3) { b43_phy_rssiagc()
188 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
190 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
195 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
197 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
203 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
207 b43_ofdmtab_write16(dev, b43_phy_rssiagc()
212 static void b43_phy_ww(struct b43_wldev *dev) b43_phy_ww() argument
217 b43_phy_mask(dev, B43_PHY_CRS0, ~B43_PHY_CRS0_EN); b43_phy_ww()
218 b43_phy_set(dev, B43_PHY_OFDM(0x1B), 0x1000); b43_phy_ww()
219 b43_phy_maskset(dev, B43_PHY_OFDM(0x82), 0xF0FF, 0x0300); b43_phy_ww()
220 b43_radio_set(dev, 0x0009, 0x0080); b43_phy_ww()
221 b43_radio_maskset(dev, 0x0012, 0xFFFC, 0x0002); b43_phy_ww()
222 b43_wa_initgains(dev); b43_phy_ww()
223 b43_phy_write(dev, B43_PHY_OFDM(0xBA), 0x3ED5); b43_phy_ww()
224 b = b43_phy_read(dev, B43_PHY_PWRDOWN); b43_phy_ww()
225 b43_phy_write(dev, B43_PHY_PWRDOWN, (b & 0xFFF8) | 0x0005); b43_phy_ww()
226 b43_radio_set(dev, 0x0004, 0x0004); b43_phy_ww()
228 b43_radio_write16(dev, 0x0013, i); b43_phy_ww()
229 curr_s = b43_phy_read(dev, B43_PHY_OTABLEQ) & 0x00FF; b43_phy_ww()
238 b43_phy_write(dev, B43_PHY_PWRDOWN, b); b43_phy_ww()
239 b43_radio_mask(dev, 0x0004, 0xFFFB); b43_phy_ww()
240 b43_radio_write16(dev, 0x0013, best_s); b43_phy_ww()
241 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1_R1, 0, 0xFFEC); b43_phy_ww()
242 b43_phy_write(dev, B43_PHY_OFDM(0xB7), 0x1E80); b43_phy_ww()
243 b43_phy_write(dev, B43_PHY_OFDM(0xB6), 0x1C00); b43_phy_ww()
244 b43_phy_write(dev, B43_PHY_OFDM(0xB5), 0x0EC0); b43_phy_ww()
245 b43_phy_write(dev, B43_PHY_OFDM(0xB2), 0x00C0); b43_phy_ww()
246 b43_phy_write(dev, B43_PHY_OFDM(0xB9), 0x1FFF); b43_phy_ww()
247 b43_phy_maskset(dev, B43_PHY_OFDM(0xBB), 0xF000, 0x0053); b43_phy_ww()
248 b43_phy_maskset(dev, B43_PHY_OFDM61, 0xFE1F, 0x0120); b43_phy_ww()
249 b43_phy_maskset(dev, B43_PHY_OFDM(0x13), 0x0FFF, 0x3000); b43_phy_ww()
250 b43_phy_maskset(dev, B43_PHY_OFDM(0x14), 0x0FFF, 0x3000); b43_phy_ww()
251 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 6, 0x0017); b43_phy_ww()
253 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, i, 0x000F); b43_phy_ww()
254 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 0x0D, 0x000E); b43_phy_ww()
255 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 0x0E, 0x0011); b43_phy_ww()
256 b43_ofdmtab_write16(dev, B43_OFDMTAB_AGC1, 0x0F, 0x0013); b43_phy_ww()
257 b43_phy_write(dev, B43_PHY_OFDM(0x33), 0x5030); b43_phy_ww()
258 b43_phy_set(dev, B43_PHY_CRS0, B43_PHY_CRS0_EN); b43_phy_ww()
261 static void hardware_pctl_init_aphy(struct b43_wldev *dev) hardware_pctl_init_aphy() argument
266 void b43_phy_inita(struct b43_wldev *dev) b43_phy_inita() argument
268 struct b43_phy *phy = &dev->phy; b43_phy_inita()
280 b43_phy_mask(dev, B43_PHY_OFDM(0x1B), ~0x1000); b43_phy_inita()
281 if (b43_phy_read(dev, B43_PHY_ENCORE) & B43_PHY_ENCORE_EN) b43_phy_inita()
282 b43_phy_set(dev, B43_PHY_ENCORE, 0x0010); b43_phy_inita()
284 b43_phy_mask(dev, B43_PHY_ENCORE, ~0x1010); b43_phy_inita()
287 b43_wa_all(dev); b43_phy_inita()
291 b43_phy_set(dev, 0x0034, 0x0001); b43_phy_inita()
292 b43_phy_rssiagc(dev, 0); b43_phy_inita()
294 b43_phy_set(dev, B43_PHY_CRS0, B43_PHY_CRS0_EN); b43_phy_inita()
296 b43_radio_init2060(dev); b43_phy_inita()
298 if ((dev->dev->board_vendor == SSB_BOARDVENDOR_BCM) && b43_phy_inita()
299 ((dev->dev->board_type == SSB_BOARD_BU4306) || b43_phy_inita()
300 (dev->dev->board_type == SSB_BOARD_BU4309))) { b43_phy_inita()
305 b43_phy_ww(dev); b43_phy_inita()
307 hardware_pctl_init_aphy(dev); b43_phy_inita()
313 (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)) { b43_phy_inita()
314 b43_phy_maskset(dev, B43_PHY_OFDM(0x6E), 0xE000, 0x3CF); b43_phy_inita()
319 static int b43_aphy_init_tssi2dbm_table(struct b43_wldev *dev) b43_aphy_init_tssi2dbm_table() argument
321 struct b43_phy *phy = &dev->phy; b43_aphy_init_tssi2dbm_table()
325 pab0 = (s16) (dev->dev->bus_sprom->pa1b0); b43_aphy_init_tssi2dbm_table()
326 pab1 = (s16) (dev->dev->bus_sprom->pa1b1); b43_aphy_init_tssi2dbm_table()
327 pab2 = (s16) (dev->dev->bus_sprom->pa1b2); b43_aphy_init_tssi2dbm_table()
332 if ((s8) dev->dev->bus_sprom->itssi_a != 0 && b43_aphy_init_tssi2dbm_table()
333 (s8) dev->dev->bus_sprom->itssi_a != -1) b43_aphy_init_tssi2dbm_table()
335 (s8) (dev->dev->bus_sprom->itssi_a); b43_aphy_init_tssi2dbm_table()
338 aphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0, b43_aphy_init_tssi2dbm_table()
346 b43err(dev->wl, "Could not generate tssi2dBm " b43_aphy_init_tssi2dbm_table()
354 static int b43_aphy_op_allocate(struct b43_wldev *dev) b43_aphy_op_allocate() argument
362 dev->phy.a = aphy; b43_aphy_op_allocate()
364 err = b43_aphy_init_tssi2dbm_table(dev); b43_aphy_op_allocate()
372 dev->phy.a = NULL; b43_aphy_op_allocate()
377 static void b43_aphy_op_prepare_structs(struct b43_wldev *dev) b43_aphy_op_prepare_structs() argument
379 struct b43_phy *phy = &dev->phy; b43_aphy_op_prepare_structs()
399 static void b43_aphy_op_free(struct b43_wldev *dev) b43_aphy_op_free() argument
401 struct b43_phy *phy = &dev->phy; b43_aphy_op_free()
408 dev->phy.a = NULL; b43_aphy_op_free()
411 static int b43_aphy_op_init(struct b43_wldev *dev) b43_aphy_op_init() argument
413 b43_phy_inita(dev); b43_aphy_op_init()
418 static inline u16 adjust_phyreg(struct b43_wldev *dev, u16 offset) adjust_phyreg() argument
429 b43err(dev->wl, "Invalid EXT-G PHY access at " adjust_phyreg()
435 b43err(dev->wl, "Invalid N-BMODE PHY access at " adjust_phyreg()
444 static u16 b43_aphy_op_read(struct b43_wldev *dev, u16 reg) b43_aphy_op_read() argument
446 reg = adjust_phyreg(dev, reg); b43_aphy_op_read()
447 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_aphy_op_read()
448 return b43_read16(dev, B43_MMIO_PHY_DATA); b43_aphy_op_read()
451 static void b43_aphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) b43_aphy_op_write() argument
453 reg = adjust_phyreg(dev, reg); b43_aphy_op_write()
454 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_aphy_op_write()
455 b43_write16(dev, B43_MMIO_PHY_DATA, value); b43_aphy_op_write()
458 static u16 b43_aphy_op_radio_read(struct b43_wldev *dev, u16 reg) b43_aphy_op_radio_read() argument
465 b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); b43_aphy_op_radio_read()
466 return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); b43_aphy_op_radio_read()
469 static void b43_aphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) b43_aphy_op_radio_write() argument
474 b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); b43_aphy_op_radio_write()
475 b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); b43_aphy_op_radio_write()
478 static bool b43_aphy_op_supports_hwpctl(struct b43_wldev *dev) b43_aphy_op_supports_hwpctl() argument
480 return (dev->phy.rev >= 5); b43_aphy_op_supports_hwpctl()
483 static void b43_aphy_op_software_rfkill(struct b43_wldev *dev, b43_aphy_op_software_rfkill() argument
486 struct b43_phy *phy = &dev->phy; b43_aphy_op_software_rfkill()
491 b43_radio_write16(dev, 0x0004, 0x00C0); b43_aphy_op_software_rfkill()
492 b43_radio_write16(dev, 0x0005, 0x0008); b43_aphy_op_software_rfkill()
493 b43_phy_mask(dev, 0x0010, 0xFFF7); b43_aphy_op_software_rfkill()
494 b43_phy_mask(dev, 0x0011, 0xFFF7); b43_aphy_op_software_rfkill()
495 b43_radio_init2060(dev); b43_aphy_op_software_rfkill()
497 b43_radio_write16(dev, 0x0004, 0x00FF); b43_aphy_op_software_rfkill()
498 b43_radio_write16(dev, 0x0005, 0x00FB); b43_aphy_op_software_rfkill()
499 b43_phy_set(dev, 0x0010, 0x0008); b43_aphy_op_software_rfkill()
500 b43_phy_set(dev, 0x0011, 0x0008); b43_aphy_op_software_rfkill()
504 static int b43_aphy_op_switch_channel(struct b43_wldev *dev, b43_aphy_op_switch_channel() argument
509 aphy_channel_switch(dev, new_channel); b43_aphy_op_switch_channel()
514 static unsigned int b43_aphy_op_get_default_chan(struct b43_wldev *dev) b43_aphy_op_get_default_chan() argument
519 static void b43_aphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) b43_aphy_op_set_rx_antenna() argument
521 struct b43_phy *phy = &dev->phy; b43_aphy_op_set_rx_antenna()
528 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_ANTDIVHELP); b43_aphy_op_set_rx_antenna()
530 b43_phy_maskset(dev, B43_PHY_BBANDCFG, ~B43_PHY_BBANDCFG_RXANT, b43_aphy_op_set_rx_antenna()
535 tmp = b43_phy_read(dev, B43_PHY_ANTDWELL); b43_aphy_op_set_rx_antenna()
540 b43_phy_write(dev, B43_PHY_ANTDWELL, tmp); b43_aphy_op_set_rx_antenna()
543 b43_phy_maskset(dev, B43_PHY_ANTDWELL, 0xFF00, 0x24); b43_aphy_op_set_rx_antenna()
545 b43_phy_set(dev, B43_PHY_OFDM61, 0x10); b43_aphy_op_set_rx_antenna()
547 b43_phy_write(dev, B43_PHY_CLIPPWRDOWNT, 0x1D); b43_aphy_op_set_rx_antenna()
548 b43_phy_write(dev, B43_PHY_ADIVRELATED, 8); b43_aphy_op_set_rx_antenna()
550 b43_phy_write(dev, B43_PHY_CLIPPWRDOWNT, 0x3A); b43_aphy_op_set_rx_antenna()
551 b43_phy_maskset(dev, B43_PHY_ADIVRELATED, 0xFF00, 8); b43_aphy_op_set_rx_antenna()
555 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_ANTDIVHELP); b43_aphy_op_set_rx_antenna()
558 static void b43_aphy_op_adjust_txpower(struct b43_wldev *dev) b43_aphy_op_adjust_txpower() argument
562 static enum b43_txpwr_result b43_aphy_op_recalc_txpower(struct b43_wldev *dev, b43_aphy_op_recalc_txpower() argument
568 static void b43_aphy_op_pwork_15sec(struct b43_wldev *dev) b43_aphy_op_pwork_15sec() argument
572 static void b43_aphy_op_pwork_60sec(struct b43_wldev *dev) b43_aphy_op_pwork_60sec() argument
H A Dphy_n.c106 static inline bool b43_nphy_ipa(struct b43_wldev *dev) b43_nphy_ipa() argument
108 enum ieee80211_band band = b43_current_band(dev->wl); b43_nphy_ipa()
109 return ((dev->phy.n->ipa2g_on && band == IEEE80211_BAND_2GHZ) || b43_nphy_ipa()
110 (dev->phy.n->ipa5g_on && band == IEEE80211_BAND_5GHZ)); b43_nphy_ipa()
114 static u8 b43_nphy_get_rx_core_state(struct b43_wldev *dev) b43_nphy_get_rx_core_state() argument
116 return (b43_phy_read(dev, B43_NPHY_RFSEQCA) & B43_NPHY_RFSEQCA_RXEN) >> b43_nphy_get_rx_core_state()
125 static void b43_nphy_force_rf_sequence(struct b43_wldev *dev, b43_nphy_force_rf_sequence() argument
137 u16 seq_mode = b43_phy_read(dev, B43_NPHY_RFSEQMODE); b43_nphy_force_rf_sequence()
141 b43_phy_set(dev, B43_NPHY_RFSEQMODE, b43_nphy_force_rf_sequence()
143 b43_phy_set(dev, B43_NPHY_RFSEQTR, trigger[seq]); b43_nphy_force_rf_sequence()
145 if (!(b43_phy_read(dev, B43_NPHY_RFSEQST) & trigger[seq])) b43_nphy_force_rf_sequence()
149 b43err(dev->wl, "RF sequence status timeout\n"); b43_nphy_force_rf_sequence()
151 b43_phy_write(dev, B43_NPHY_RFSEQMODE, seq_mode); b43_nphy_force_rf_sequence()
154 static void b43_nphy_rf_ctl_override_rev19(struct b43_wldev *dev, u16 field, b43_nphy_rf_ctl_override_rev19() argument
162 static void b43_nphy_rf_ctl_override_rev7(struct b43_wldev *dev, u16 field, b43_nphy_rf_ctl_override_rev7() argument
166 struct b43_phy *phy = &dev->phy; b43_nphy_rf_ctl_override_rev7()
182 e = b43_nphy_get_rf_ctl_over_rev7(dev, field, override); b43_nphy_rf_ctl_override_rev7()
186 b43err(dev->wl, "Invalid override value %d\n", override); b43_nphy_rf_ctl_override_rev7()
195 b43_phy_mask(dev, en_addr, ~en_mask); b43_nphy_rf_ctl_override_rev7()
197 b43_phy_mask(dev, val_addr, ~e->val_mask); b43_nphy_rf_ctl_override_rev7()
200 b43_phy_set(dev, en_addr, en_mask); b43_nphy_rf_ctl_override_rev7()
202 b43_phy_maskset(dev, val_addr, ~e->val_mask, (value << e->val_shift)); b43_nphy_rf_ctl_override_rev7()
209 static void b43_nphy_rf_ctl_override_one_to_many(struct b43_wldev *dev, b43_nphy_rf_ctl_override_one_to_many() argument
213 struct b43_phy *phy = &dev->phy; b43_nphy_rf_ctl_override_one_to_many()
220 b43_nphy_rf_ctl_override_rev7(dev, 0x20, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
221 b43_nphy_rf_ctl_override_rev7(dev, 0x10, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
222 b43_nphy_rf_ctl_override_rev7(dev, 0x08, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
225 b43_nphy_rf_ctl_override_rev7(dev, 0x4, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
226 b43_nphy_rf_ctl_override_rev7(dev, 0x2, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
227 b43_nphy_rf_ctl_override_rev7(dev, 0x1, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
228 b43_nphy_rf_ctl_override_rev7(dev, 0x2, value, core, off, 2); b43_nphy_rf_ctl_override_one_to_many()
229 b43_nphy_rf_ctl_override_rev7(dev, 0x0800, 0, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
232 b43_nphy_rf_ctl_override_rev7(dev, 0x4, value, core, off, 0); b43_nphy_rf_ctl_override_one_to_many()
233 b43_nphy_rf_ctl_override_rev7(dev, 0x2, value, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
234 b43_nphy_rf_ctl_override_rev7(dev, 0x1, value, core, off, 2); b43_nphy_rf_ctl_override_one_to_many()
235 b43_nphy_rf_ctl_override_rev7(dev, 0x0800, 1, core, off, 1); b43_nphy_rf_ctl_override_one_to_many()
239 b43_nphy_rf_ctl_override_rev7(dev, 0x0800, tmp, core, off, 0); b43_nphy_rf_ctl_override_one_to_many()
241 b43_nphy_rf_ctl_override_rev7(dev, 0x6000, tmp, core, off, 0); b43_nphy_rf_ctl_override_one_to_many()
245 b43_nphy_rf_ctl_override_rev7(dev, 0x1000, tmp, core, off, 0); b43_nphy_rf_ctl_override_one_to_many()
247 b43_nphy_rf_ctl_override_rev7(dev, 0x4000, tmp, core, off, 0); b43_nphy_rf_ctl_override_one_to_many()
253 static void b43_nphy_rf_ctl_override(struct b43_wldev *dev, u16 field, b43_nphy_rf_ctl_override() argument
262 if (dev->phy.rev >= 3) { b43_nphy_rf_ctl_override()
266 b43err(dev->wl, b43_nphy_rf_ctl_override()
278 b43_phy_mask(dev, en_addr, ~(field)); b43_nphy_rf_ctl_override()
279 b43_phy_mask(dev, val_addr, b43_nphy_rf_ctl_override()
283 b43_phy_set(dev, en_addr, field); b43_nphy_rf_ctl_override()
284 b43_phy_maskset(dev, val_addr, b43_nphy_rf_ctl_override()
293 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, ~(field)); b43_nphy_rf_ctl_override()
296 b43_phy_set(dev, B43_NPHY_RFCTL_OVER, field); b43_nphy_rf_ctl_override()
301 b43err(dev->wl, b43_nphy_rf_ctl_override()
316 b43_phy_maskset(dev, addr, ~(rf_ctrl->bmask), b43_nphy_rf_ctl_override()
319 b43_phy_set(dev, B43_NPHY_RFCTL_OVER, 0x1); b43_nphy_rf_ctl_override()
320 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rf_ctl_override()
323 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, 0xFFFE); b43_nphy_rf_ctl_override()
328 static void b43_nphy_rf_ctl_intc_override_rev7(struct b43_wldev *dev, b43_nphy_rf_ctl_intc_override_rev7() argument
346 b43_phy_write(dev, reg, 0); b43_nphy_rf_ctl_intc_override_rev7()
347 b43_phy_mask(dev, 0x2ff, ~0x2000); b43_nphy_rf_ctl_intc_override_rev7()
348 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_rf_ctl_intc_override_rev7()
351 b43_phy_maskset(dev, reg, ~0xC0, value << 6); b43_nphy_rf_ctl_intc_override_rev7()
352 b43_phy_set(dev, reg, 0x400); b43_nphy_rf_ctl_intc_override_rev7()
354 b43_phy_mask(dev, 0x2ff, ~0xC000 & 0xFFFF); b43_nphy_rf_ctl_intc_override_rev7()
355 b43_phy_set(dev, 0x2ff, 0x2000); b43_nphy_rf_ctl_intc_override_rev7()
356 b43_phy_set(dev, 0x2ff, 0x0001); b43_nphy_rf_ctl_intc_override_rev7()
360 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_nphy_rf_ctl_intc_override_rev7()
364 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override_rev7()
365 b43_phy_set(dev, reg, 0x1000); b43_nphy_rf_ctl_intc_override_rev7()
368 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rf_ctl_intc_override_rev7()
377 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override_rev7()
378 b43_phy_mask(dev, reg, ~tmp2); b43_nphy_rf_ctl_intc_override_rev7()
381 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rf_ctl_intc_override_rev7()
390 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override_rev7()
391 b43_phy_mask(dev, reg, ~tmp2); b43_nphy_rf_ctl_intc_override_rev7()
398 static void b43_nphy_rf_ctl_intc_override(struct b43_wldev *dev, b43_nphy_rf_ctl_intc_override() argument
405 if (dev->phy.rev >= 7) { b43_nphy_rf_ctl_intc_override()
406 b43_nphy_rf_ctl_intc_override_rev7(dev, intc_override, value, b43_nphy_rf_ctl_intc_override()
411 B43_WARN_ON(dev->phy.rev < 3); b43_nphy_rf_ctl_intc_override()
419 b43_phy_set(dev, reg, 0x400); b43_nphy_rf_ctl_intc_override()
423 b43_phy_write(dev, reg, 0); b43_nphy_rf_ctl_intc_override()
424 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_rf_ctl_intc_override()
428 b43_phy_maskset(dev, B43_NPHY_RFCTL_INTC1, b43_nphy_rf_ctl_intc_override()
430 b43_phy_maskset(dev, B43_NPHY_TXF_40CO_B1S1, b43_nphy_rf_ctl_intc_override()
432 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rf_ctl_intc_override()
435 if (!(b43_phy_read(dev, B43_NPHY_RFCTL_CMD) & B43_NPHY_RFCTL_CMD_START)) { b43_nphy_rf_ctl_intc_override()
442 b43err(dev->wl, b43_nphy_rf_ctl_intc_override()
444 b43_phy_mask(dev, B43_NPHY_TXF_40CO_B1S1, b43_nphy_rf_ctl_intc_override()
447 b43_phy_maskset(dev, B43_NPHY_RFCTL_INTC2, b43_nphy_rf_ctl_intc_override()
449 b43_phy_maskset(dev, B43_NPHY_RFCTL_OVER, b43_nphy_rf_ctl_intc_override()
451 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rf_ctl_intc_override()
454 if (!(b43_phy_read(dev, B43_NPHY_RFCTL_CMD) & B43_NPHY_RFCTL_CMD_RXTX)) { b43_nphy_rf_ctl_intc_override()
461 b43err(dev->wl, b43_nphy_rf_ctl_intc_override()
463 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, b43_nphy_rf_ctl_intc_override()
468 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rf_ctl_intc_override()
475 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override()
478 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rf_ctl_intc_override()
485 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override()
488 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rf_ctl_intc_override()
495 b43_phy_maskset(dev, reg, ~tmp, val); b43_nphy_rf_ctl_intc_override()
506 static void b43_nphy_write_clip_detection(struct b43_wldev *dev, b43_nphy_write_clip_detection() argument
509 b43_phy_write(dev, B43_NPHY_C1_CLIP1THRES, clip_st[0]); b43_nphy_write_clip_detection()
510 b43_phy_write(dev, B43_NPHY_C2_CLIP1THRES, clip_st[1]); b43_nphy_write_clip_detection()
514 static void b43_nphy_read_clip_detection(struct b43_wldev *dev, u16 *clip_st) b43_nphy_read_clip_detection() argument
516 clip_st[0] = b43_phy_read(dev, B43_NPHY_C1_CLIP1THRES); b43_nphy_read_clip_detection()
517 clip_st[1] = b43_phy_read(dev, B43_NPHY_C2_CLIP1THRES); b43_nphy_read_clip_detection()
521 static u16 b43_nphy_classifier(struct b43_wldev *dev, u16 mask, u16 val) b43_nphy_classifier() argument
525 if (dev->dev->core_rev == 16) b43_nphy_classifier()
526 b43_mac_suspend(dev); b43_nphy_classifier()
528 tmp = b43_phy_read(dev, B43_NPHY_CLASSCTL); b43_nphy_classifier()
533 b43_phy_maskset(dev, B43_NPHY_CLASSCTL, 0xFFF8, tmp); b43_nphy_classifier()
535 if (dev->dev->core_rev == 16) b43_nphy_classifier()
536 b43_mac_enable(dev); b43_nphy_classifier()
542 static void b43_nphy_reset_cca(struct b43_wldev *dev) b43_nphy_reset_cca() argument
546 b43_phy_force_clock(dev, 1); b43_nphy_reset_cca()
547 bbcfg = b43_phy_read(dev, B43_NPHY_BBCFG); b43_nphy_reset_cca()
548 b43_phy_write(dev, B43_NPHY_BBCFG, bbcfg | B43_NPHY_BBCFG_RSTCCA); b43_nphy_reset_cca()
550 b43_phy_write(dev, B43_NPHY_BBCFG, bbcfg & ~B43_NPHY_BBCFG_RSTCCA); b43_nphy_reset_cca()
551 b43_phy_force_clock(dev, 0); b43_nphy_reset_cca()
552 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_reset_cca()
556 static void b43_nphy_stay_in_carrier_search(struct b43_wldev *dev, bool enable) b43_nphy_stay_in_carrier_search() argument
558 struct b43_phy *phy = &dev->phy; b43_nphy_stay_in_carrier_search()
564 nphy->classifier_state = b43_nphy_classifier(dev, 0, 0); b43_nphy_stay_in_carrier_search()
565 b43_nphy_classifier(dev, 0x7, b43_nphy_stay_in_carrier_search()
567 b43_nphy_read_clip_detection(dev, nphy->clip_state); b43_nphy_stay_in_carrier_search()
568 b43_nphy_write_clip_detection(dev, clip); b43_nphy_stay_in_carrier_search()
570 b43_nphy_reset_cca(dev); b43_nphy_stay_in_carrier_search()
573 b43_nphy_classifier(dev, 0x7, nphy->classifier_state); b43_nphy_stay_in_carrier_search()
574 b43_nphy_write_clip_detection(dev, nphy->clip_state); b43_nphy_stay_in_carrier_search()
580 static u16 b43_nphy_read_lpf_ctl(struct b43_wldev *dev, u16 offset) b43_nphy_read_lpf_ctl() argument
583 offset = b43_is_40mhz(dev) ? 0x159 : 0x154; b43_nphy_read_lpf_ctl()
584 return b43_ntab_read(dev, B43_NTAB16(7, offset)) & 0x7; b43_nphy_read_lpf_ctl()
588 static void b43_nphy_adjust_lna_gain_table(struct b43_wldev *dev) b43_nphy_adjust_lna_gain_table() argument
590 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_adjust_lna_gain_table()
600 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_adjust_lna_gain_table()
603 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_adjust_lna_gain_table()
607 tmp = 40370 - 315 * dev->phy.channel; b43_nphy_adjust_lna_gain_table()
609 tmp = 23242 - 224 * dev->phy.channel; b43_nphy_adjust_lna_gain_table()
629 b43_ntab_write_bulk(dev, B43_NTAB16(i, 8), 4, data); b43_nphy_adjust_lna_gain_table()
634 b43_phy_maskset(dev, B43_NPHY_C1_MINMAX_GAIN, ~B43_NPHY_C1_MINGAIN, b43_nphy_adjust_lna_gain_table()
636 b43_phy_maskset(dev, B43_NPHY_C2_MINMAX_GAIN, ~B43_NPHY_C2_MINGAIN, b43_nphy_adjust_lna_gain_table()
640 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_adjust_lna_gain_table()
644 static void b43_nphy_set_rf_sequence(struct b43_wldev *dev, u8 cmd, b43_nphy_set_rf_sequence() argument
647 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_set_rf_sequence()
649 u8 end = (dev->phy.rev >= 3) ? 0x1F : 0x0F; b43_nphy_set_rf_sequence()
654 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_set_rf_sequence()
656 b43_ntab_write_bulk(dev, B43_NTAB8(7, offset1), length, events); b43_nphy_set_rf_sequence()
657 b43_ntab_write_bulk(dev, B43_NTAB8(7, offset2), length, delays); b43_nphy_set_rf_sequence()
660 b43_ntab_write(dev, B43_NTAB8(7, offset1 + i), end); b43_nphy_set_rf_sequence()
661 b43_ntab_write(dev, B43_NTAB8(7, offset2 + i), 1); b43_nphy_set_rf_sequence()
665 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_set_rf_sequence()
672 static void b43_radio_2057_chantab_upload(struct b43_wldev *dev, b43_radio_2057_chantab_upload() argument
677 b43_radio_write(dev, R2057_VCOCAL_COUNTVAL0, e_r7_2g->radio_vcocal_countval0); b43_radio_2057_chantab_upload()
678 b43_radio_write(dev, R2057_VCOCAL_COUNTVAL1, e_r7_2g->radio_vcocal_countval1); b43_radio_2057_chantab_upload()
679 b43_radio_write(dev, R2057_RFPLL_REFMASTER_SPAREXTALSIZE, e_r7_2g->radio_rfpll_refmaster_sparextalsize); b43_radio_2057_chantab_upload()
680 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, e_r7_2g->radio_rfpll_loopfilter_r1); b43_radio_2057_chantab_upload()
681 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, e_r7_2g->radio_rfpll_loopfilter_c2); b43_radio_2057_chantab_upload()
682 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, e_r7_2g->radio_rfpll_loopfilter_c1); b43_radio_2057_chantab_upload()
683 b43_radio_write(dev, R2057_CP_KPD_IDAC, e_r7_2g->radio_cp_kpd_idac); b43_radio_2057_chantab_upload()
684 b43_radio_write(dev, R2057_RFPLL_MMD0, e_r7_2g->radio_rfpll_mmd0); b43_radio_2057_chantab_upload()
685 b43_radio_write(dev, R2057_RFPLL_MMD1, e_r7_2g->radio_rfpll_mmd1); b43_radio_2057_chantab_upload()
686 b43_radio_write(dev, R2057_VCOBUF_TUNE, e_r7_2g->radio_vcobuf_tune); b43_radio_2057_chantab_upload()
687 b43_radio_write(dev, R2057_LOGEN_MX2G_TUNE, e_r7_2g->radio_logen_mx2g_tune); b43_radio_2057_chantab_upload()
688 b43_radio_write(dev, R2057_LOGEN_INDBUF2G_TUNE, e_r7_2g->radio_logen_indbuf2g_tune); b43_radio_2057_chantab_upload()
689 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE0, e_r7_2g->radio_txmix2g_tune_boost_pu_core0); b43_radio_2057_chantab_upload()
690 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE0, e_r7_2g->radio_pad2g_tune_pus_core0); b43_radio_2057_chantab_upload()
691 b43_radio_write(dev, R2057_LNA2G_TUNE_CORE0, e_r7_2g->radio_lna2g_tune_core0); b43_radio_2057_chantab_upload()
692 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE1, e_r7_2g->radio_txmix2g_tune_boost_pu_core1); b43_radio_2057_chantab_upload()
693 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE1, e_r7_2g->radio_pad2g_tune_pus_core1); b43_radio_2057_chantab_upload()
694 b43_radio_write(dev, R2057_LNA2G_TUNE_CORE1, e_r7_2g->radio_lna2g_tune_core1); b43_radio_2057_chantab_upload()
697 b43_radio_write(dev, R2057_VCOCAL_COUNTVAL0, e_r7->radio_vcocal_countval0); b43_radio_2057_chantab_upload()
698 b43_radio_write(dev, R2057_VCOCAL_COUNTVAL1, e_r7->radio_vcocal_countval1); b43_radio_2057_chantab_upload()
699 b43_radio_write(dev, R2057_RFPLL_REFMASTER_SPAREXTALSIZE, e_r7->radio_rfpll_refmaster_sparextalsize); b43_radio_2057_chantab_upload()
700 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, e_r7->radio_rfpll_loopfilter_r1); b43_radio_2057_chantab_upload()
701 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, e_r7->radio_rfpll_loopfilter_c2); b43_radio_2057_chantab_upload()
702 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, e_r7->radio_rfpll_loopfilter_c1); b43_radio_2057_chantab_upload()
703 b43_radio_write(dev, R2057_CP_KPD_IDAC, e_r7->radio_cp_kpd_idac); b43_radio_2057_chantab_upload()
704 b43_radio_write(dev, R2057_RFPLL_MMD0, e_r7->radio_rfpll_mmd0); b43_radio_2057_chantab_upload()
705 b43_radio_write(dev, R2057_RFPLL_MMD1, e_r7->radio_rfpll_mmd1); b43_radio_2057_chantab_upload()
706 b43_radio_write(dev, R2057_VCOBUF_TUNE, e_r7->radio_vcobuf_tune); b43_radio_2057_chantab_upload()
707 b43_radio_write(dev, R2057_LOGEN_MX2G_TUNE, e_r7->radio_logen_mx2g_tune); b43_radio_2057_chantab_upload()
708 b43_radio_write(dev, R2057_LOGEN_MX5G_TUNE, e_r7->radio_logen_mx5g_tune); b43_radio_2057_chantab_upload()
709 b43_radio_write(dev, R2057_LOGEN_INDBUF2G_TUNE, e_r7->radio_logen_indbuf2g_tune); b43_radio_2057_chantab_upload()
710 b43_radio_write(dev, R2057_LOGEN_INDBUF5G_TUNE, e_r7->radio_logen_indbuf5g_tune); b43_radio_2057_chantab_upload()
711 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE0, e_r7->radio_txmix2g_tune_boost_pu_core0); b43_radio_2057_chantab_upload()
712 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE0, e_r7->radio_pad2g_tune_pus_core0); b43_radio_2057_chantab_upload()
713 b43_radio_write(dev, R2057_PGA_BOOST_TUNE_CORE0, e_r7->radio_pga_boost_tune_core0); b43_radio_2057_chantab_upload()
714 b43_radio_write(dev, R2057_TXMIX5G_BOOST_TUNE_CORE0, e_r7->radio_txmix5g_boost_tune_core0); b43_radio_2057_chantab_upload()
715 b43_radio_write(dev, R2057_PAD5G_TUNE_MISC_PUS_CORE0, e_r7->radio_pad5g_tune_misc_pus_core0); b43_radio_2057_chantab_upload()
716 b43_radio_write(dev, R2057_LNA2G_TUNE_CORE0, e_r7->radio_lna2g_tune_core0); b43_radio_2057_chantab_upload()
717 b43_radio_write(dev, R2057_LNA5G_TUNE_CORE0, e_r7->radio_lna5g_tune_core0); b43_radio_2057_chantab_upload()
718 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE1, e_r7->radio_txmix2g_tune_boost_pu_core1); b43_radio_2057_chantab_upload()
719 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE1, e_r7->radio_pad2g_tune_pus_core1); b43_radio_2057_chantab_upload()
720 b43_radio_write(dev, R2057_PGA_BOOST_TUNE_CORE1, e_r7->radio_pga_boost_tune_core1); b43_radio_2057_chantab_upload()
721 b43_radio_write(dev, R2057_TXMIX5G_BOOST_TUNE_CORE1, e_r7->radio_txmix5g_boost_tune_core1); b43_radio_2057_chantab_upload()
722 b43_radio_write(dev, R2057_PAD5G_TUNE_MISC_PUS_CORE1, e_r7->radio_pad5g_tune_misc_pus_core1); b43_radio_2057_chantab_upload()
723 b43_radio_write(dev, R2057_LNA2G_TUNE_CORE1, e_r7->radio_lna2g_tune_core1); b43_radio_2057_chantab_upload()
724 b43_radio_write(dev, R2057_LNA5G_TUNE_CORE1, e_r7->radio_lna5g_tune_core1); b43_radio_2057_chantab_upload()
728 static void b43_radio_2057_setup(struct b43_wldev *dev, b43_radio_2057_setup() argument
732 struct b43_phy *phy = &dev->phy; b43_radio_2057_setup()
734 b43_radio_2057_chantab_upload(dev, tabent_r7, tabent_r7_2g); b43_radio_2057_setup()
739 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_radio_2057_setup()
740 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, 0x3f); b43_radio_2057_setup()
741 b43_radio_write(dev, R2057_CP_KPD_IDAC, 0x3f); b43_radio_2057_setup()
742 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, 0x8); b43_radio_2057_setup()
743 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, 0x8); b43_radio_2057_setup()
745 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, 0x1f); b43_radio_2057_setup()
746 b43_radio_write(dev, R2057_CP_KPD_IDAC, 0x3f); b43_radio_2057_setup()
747 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, 0x8); b43_radio_2057_setup()
748 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, 0x8); b43_radio_2057_setup()
752 b43_radio_write(dev, R2057_LOGEN_PTAT_RESETS, 0x20); b43_radio_2057_setup()
753 b43_radio_write(dev, R2057_VCOBUF_IDACS, 0x18); b43_radio_2057_setup()
754 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_radio_2057_setup()
755 b43_radio_write(dev, R2057_LOGEN_PTAT_RESETS, 0x38); b43_radio_2057_setup()
756 b43_radio_write(dev, R2057_VCOBUF_IDACS, 0x0f); b43_radio_2057_setup()
758 if (b43_is_40mhz(dev)) { b43_radio_2057_setup()
761 b43_radio_write(dev, b43_radio_2057_setup()
764 b43_radio_write(dev, b43_radio_2057_setup()
771 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_R1, 0x1b); b43_radio_2057_setup()
772 b43_radio_write(dev, R2057_CP_KPD_IDAC, 0x3f); b43_radio_2057_setup()
773 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C1, 0x1f); b43_radio_2057_setup()
774 b43_radio_write(dev, R2057_RFPLL_LOOPFILTER_C2, 0x1f); b43_radio_2057_setup()
778 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_radio_2057_setup()
782 if (b43_nphy_ipa(dev)) { b43_radio_2057_setup()
796 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE0, b43_radio_2057_setup()
799 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE0, b43_radio_2057_setup()
802 b43_radio_write(dev, R2057_TXMIX2G_TUNE_BOOST_PU_CORE1, b43_radio_2057_setup()
805 b43_radio_write(dev, R2057_PAD2G_TUNE_PUS_CORE1, b43_radio_2057_setup()
812 b43_radio_mask(dev, R2057_RFPLL_MISC_EN, ~0x01); b43_radio_2057_setup()
813 b43_radio_mask(dev, R2057_RFPLL_MISC_CAL_RESETN, ~0x04); b43_radio_2057_setup()
814 b43_radio_set(dev, R2057_RFPLL_MISC_CAL_RESETN, 0x4); b43_radio_2057_setup()
815 b43_radio_set(dev, R2057_RFPLL_MISC_EN, 0x01); b43_radio_2057_setup()
822 static u8 b43_radio_2057_rcal(struct b43_wldev *dev) b43_radio_2057_rcal() argument
824 struct b43_phy *phy = &dev->phy; b43_radio_2057_rcal()
846 saved_regs_phy[i] = b43_phy_read(dev, phy_to_store[i]); b43_radio_2057_rcal()
848 saved_regs_phy_rf[i] = b43_phy_read(dev, phy_to_store_rf[i]); b43_radio_2057_rcal()
852 b43_phy_write(dev, phy_to_store[i], 0); b43_radio_2057_rcal()
853 b43_phy_write(dev, B43_NPHY_REV3_RFCTL_OVER0, 0x07ff); b43_radio_2057_rcal()
854 b43_phy_write(dev, B43_NPHY_REV3_RFCTL_OVER1, 0x07ff); b43_radio_2057_rcal()
855 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER3, 0x07ff); b43_radio_2057_rcal()
856 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER4, 0x07ff); b43_radio_2057_rcal()
857 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER5, 0x007f); b43_radio_2057_rcal()
858 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER6, 0x007f); b43_radio_2057_rcal()
862 b43_phy_mask(dev, B43_NPHY_REV7_RF_CTL_OVER3, ~0x2); b43_radio_2057_rcal()
864 b43_radio_set(dev, R2057_IQTEST_SEL_PU, 0x1); b43_radio_2057_rcal()
865 b43_radio_maskset(dev, R2057v7_IQTEST_SEL_PU2, ~0x2, 0x1); b43_radio_2057_rcal()
868 b43_phy_set(dev, B43_NPHY_REV7_RF_CTL_OVER3, 0x2); b43_radio_2057_rcal()
869 b43_phy_set(dev, B43_NPHY_REV7_RF_CTL_MISC_REG3, 0x2); b43_radio_2057_rcal()
870 saved_regs_radio[0] = b43_radio_read(dev, R2057_IQTEST_SEL_PU); b43_radio_2057_rcal()
871 b43_radio_write(dev, R2057_IQTEST_SEL_PU, 0x11); b43_radio_2057_rcal()
874 saved_regs_radio[0] = b43_radio_read(dev, R2057_IQTEST_SEL_PU); b43_radio_2057_rcal()
875 saved_regs_radio[1] = b43_radio_read(dev, R2057v7_IQTEST_SEL_PU2); b43_radio_2057_rcal()
876 b43_phy_set(dev, B43_NPHY_REV7_RF_CTL_MISC_REG3, 0x2); b43_radio_2057_rcal()
877 b43_phy_set(dev, B43_NPHY_REV7_RF_CTL_OVER3, 0x2); b43_radio_2057_rcal()
878 b43_radio_write(dev, R2057v7_IQTEST_SEL_PU2, 0x2); b43_radio_2057_rcal()
879 b43_radio_write(dev, R2057_IQTEST_SEL_PU, 0x1); b43_radio_2057_rcal()
884 b43_radio_set(dev, R2057_RCAL_CONFIG, 0x1); b43_radio_2057_rcal()
888 b43_radio_set(dev, R2057_RCAL_CONFIG, 0x2); b43_radio_2057_rcal()
892 b43_radio_mask(dev, R2057_RCAL_CONFIG, ~0x2); b43_radio_2057_rcal()
895 if (!b43_radio_wait_value(dev, R2057_RCAL_STATUS, 1, 1, 100, 1000000)) { b43_radio_2057_rcal()
896 b43err(dev->wl, "Radio 0x2057 rcal timeout\n"); b43_radio_2057_rcal()
899 tmp = b43_radio_read(dev, R2057_RCAL_STATUS) & 0x3E; b43_radio_2057_rcal()
902 b43_radio_mask(dev, R2057_RCAL_CONFIG, ~0x1); b43_radio_2057_rcal()
906 b43_phy_write(dev, phy_to_store_rf[i], saved_regs_phy_rf[i]); b43_radio_2057_rcal()
908 b43_phy_write(dev, phy_to_store[i], saved_regs_phy[i]); b43_radio_2057_rcal()
913 b43_radio_maskset(dev, R2057_TEMPSENSE_CONFIG, ~0x3C, tmp); b43_radio_2057_rcal()
914 b43_radio_maskset(dev, R2057_BANDGAP_RCAL_TRIM, ~0xF0, b43_radio_2057_rcal()
918 b43_radio_mask(dev, R2057_IPA2G_CASCONV_CORE0, ~0x1); b43_radio_2057_rcal()
919 b43_radio_mask(dev, R2057v7_IQTEST_SEL_PU2, ~0x2); b43_radio_2057_rcal()
922 b43_radio_write(dev, R2057_IQTEST_SEL_PU, saved_regs_radio[0]); b43_radio_2057_rcal()
925 b43_radio_write(dev, R2057_IQTEST_SEL_PU, saved_regs_radio[0]); b43_radio_2057_rcal()
926 b43_radio_write(dev, R2057v7_IQTEST_SEL_PU2, saved_regs_radio[1]); b43_radio_2057_rcal()
936 static u16 b43_radio_2057_rccal(struct b43_wldev *dev) b43_radio_2057_rccal() argument
938 struct b43_phy *phy = &dev->phy; b43_radio_2057_rccal()
945 b43_radio_write(dev, R2057_RCCAL_MASTER, 0x61); b43_radio_2057_rccal()
946 b43_radio_write(dev, R2057_RCCAL_TRC0, 0xC0); b43_radio_2057_rccal()
948 b43_radio_write(dev, R2057v7_RCCAL_MASTER, 0x61); b43_radio_2057_rccal()
949 b43_radio_write(dev, R2057_RCCAL_TRC0, 0xE9); b43_radio_2057_rccal()
951 b43_radio_write(dev, R2057_RCCAL_X1, 0x6E); b43_radio_2057_rccal()
954 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x55); b43_radio_2057_rccal()
955 if (!b43_radio_wait_value(dev, R2057_RCCAL_DONE_OSCCAP, 2, 2, 500, b43_radio_2057_rccal()
957 b43dbg(dev->wl, "Radio 0x2057 rccal timeout\n"); b43_radio_2057_rccal()
959 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x15); b43_radio_2057_rccal()
964 b43_radio_write(dev, R2057_RCCAL_MASTER, 0x69); b43_radio_2057_rccal()
965 b43_radio_write(dev, R2057_RCCAL_TRC0, 0xB0); b43_radio_2057_rccal()
967 b43_radio_write(dev, R2057v7_RCCAL_MASTER, 0x69); b43_radio_2057_rccal()
968 b43_radio_write(dev, R2057_RCCAL_TRC0, 0xD5); b43_radio_2057_rccal()
970 b43_radio_write(dev, R2057_RCCAL_X1, 0x6E); b43_radio_2057_rccal()
974 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x55); b43_radio_2057_rccal()
976 if (!b43_radio_wait_value(dev, R2057_RCCAL_DONE_OSCCAP, 2, 2, 500, b43_radio_2057_rccal()
978 b43dbg(dev->wl, "Radio 0x2057 rccal timeout\n"); b43_radio_2057_rccal()
980 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x15); b43_radio_2057_rccal()
985 b43_radio_write(dev, R2057_RCCAL_MASTER, 0x73); b43_radio_2057_rccal()
986 b43_radio_write(dev, R2057_RCCAL_X1, 0x28); b43_radio_2057_rccal()
987 b43_radio_write(dev, R2057_RCCAL_TRC0, 0xB0); b43_radio_2057_rccal()
989 b43_radio_write(dev, R2057v7_RCCAL_MASTER, 0x73); b43_radio_2057_rccal()
990 b43_radio_write(dev, R2057_RCCAL_X1, 0x6E); b43_radio_2057_rccal()
991 b43_radio_write(dev, R2057_RCCAL_TRC0, 0x99); b43_radio_2057_rccal()
996 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x55); b43_radio_2057_rccal()
998 if (!b43_radio_wait_value(dev, R2057_RCCAL_DONE_OSCCAP, 2, 2, 500, b43_radio_2057_rccal()
1000 b43err(dev->wl, "Radio 0x2057 rcal timeout\n"); b43_radio_2057_rccal()
1003 tmp = b43_radio_read(dev, R2057_RCCAL_DONE_OSCCAP); b43_radio_2057_rccal()
1005 b43_radio_write(dev, R2057_RCCAL_START_R1_Q1_P1, 0x15); b43_radio_2057_rccal()
1009 b43_radio_mask(dev, R2057_RCCAL_MASTER, ~0x1); b43_radio_2057_rccal()
1011 b43_radio_mask(dev, R2057v7_RCCAL_MASTER, ~0x1); b43_radio_2057_rccal()
1016 static void b43_radio_2057_init_pre(struct b43_wldev *dev) b43_radio_2057_init_pre() argument
1018 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, ~B43_NPHY_RFCTL_CMD_CHIP0PU); b43_radio_2057_init_pre()
1020 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, B43_NPHY_RFCTL_CMD_OEPORFORCE); b43_radio_2057_init_pre()
1021 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, ~B43_NPHY_RFCTL_CMD_OEPORFORCE); b43_radio_2057_init_pre()
1022 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, B43_NPHY_RFCTL_CMD_CHIP0PU); b43_radio_2057_init_pre()
1025 static void b43_radio_2057_init_post(struct b43_wldev *dev) b43_radio_2057_init_post() argument
1027 b43_radio_set(dev, R2057_XTALPUOVR_PINCTRL, 0x1); b43_radio_2057_init_post()
1030 b43_radio_set(dev, R2057_XTALPUOVR_PINCTRL, 0x2); b43_radio_2057_init_post()
1032 b43_radio_set(dev, R2057_RFPLL_MISC_CAL_RESETN, 0x78); b43_radio_2057_init_post()
1033 b43_radio_set(dev, R2057_XTAL_CONFIG2, 0x80); b43_radio_2057_init_post()
1035 b43_radio_mask(dev, R2057_RFPLL_MISC_CAL_RESETN, ~0x78); b43_radio_2057_init_post()
1036 b43_radio_mask(dev, R2057_XTAL_CONFIG2, ~0x80); b43_radio_2057_init_post()
1038 if (dev->phy.do_full_init) { b43_radio_2057_init_post()
1039 b43_radio_2057_rcal(dev); b43_radio_2057_init_post()
1040 b43_radio_2057_rccal(dev); b43_radio_2057_init_post()
1042 b43_radio_mask(dev, R2057_RFPLL_MASTER, ~0x8); b43_radio_2057_init_post()
1046 static void b43_radio_2057_init(struct b43_wldev *dev) b43_radio_2057_init() argument
1048 b43_radio_2057_init_pre(dev); b43_radio_2057_init()
1049 r2057_upload_inittabs(dev); b43_radio_2057_init()
1050 b43_radio_2057_init_post(dev); b43_radio_2057_init()
1057 static void b43_chantab_radio_2056_upload(struct b43_wldev *dev, b43_chantab_radio_2056_upload() argument
1060 b43_radio_write(dev, B2056_SYN_PLL_VCOCAL1, e->radio_syn_pll_vcocal1); b43_chantab_radio_2056_upload()
1061 b43_radio_write(dev, B2056_SYN_PLL_VCOCAL2, e->radio_syn_pll_vcocal2); b43_chantab_radio_2056_upload()
1062 b43_radio_write(dev, B2056_SYN_PLL_REFDIV, e->radio_syn_pll_refdiv); b43_chantab_radio_2056_upload()
1063 b43_radio_write(dev, B2056_SYN_PLL_MMD2, e->radio_syn_pll_mmd2); b43_chantab_radio_2056_upload()
1064 b43_radio_write(dev, B2056_SYN_PLL_MMD1, e->radio_syn_pll_mmd1); b43_chantab_radio_2056_upload()
1065 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER1, b43_chantab_radio_2056_upload()
1067 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER2, b43_chantab_radio_2056_upload()
1069 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER3, b43_chantab_radio_2056_upload()
1071 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER4, b43_chantab_radio_2056_upload()
1073 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER5, b43_chantab_radio_2056_upload()
1075 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR27, b43_chantab_radio_2056_upload()
1077 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR28, b43_chantab_radio_2056_upload()
1079 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR29, b43_chantab_radio_2056_upload()
1081 b43_radio_write(dev, B2056_SYN_LOGEN_VCOBUF1, b43_chantab_radio_2056_upload()
1083 b43_radio_write(dev, B2056_SYN_LOGEN_MIXER2, e->radio_syn_logen_mixer2); b43_chantab_radio_2056_upload()
1084 b43_radio_write(dev, B2056_SYN_LOGEN_BUF3, e->radio_syn_logen_buf3); b43_chantab_radio_2056_upload()
1085 b43_radio_write(dev, B2056_SYN_LOGEN_BUF4, e->radio_syn_logen_buf4); b43_chantab_radio_2056_upload()
1087 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAA_TUNE, b43_chantab_radio_2056_upload()
1089 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAG_TUNE, b43_chantab_radio_2056_upload()
1092 b43_radio_write(dev, B2056_TX0 | B2056_TX_INTPAA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1094 b43_radio_write(dev, B2056_TX0 | B2056_TX_INTPAG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1096 b43_radio_write(dev, B2056_TX0 | B2056_TX_PADA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1098 b43_radio_write(dev, B2056_TX0 | B2056_TX_PADG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1100 b43_radio_write(dev, B2056_TX0 | B2056_TX_PGAA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1102 b43_radio_write(dev, B2056_TX0 | B2056_TX_PGAG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1104 b43_radio_write(dev, B2056_TX0 | B2056_TX_MIXA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1106 b43_radio_write(dev, B2056_TX0 | B2056_TX_MIXG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1109 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAA_TUNE, b43_chantab_radio_2056_upload()
1111 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAG_TUNE, b43_chantab_radio_2056_upload()
1114 b43_radio_write(dev, B2056_TX1 | B2056_TX_INTPAA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1116 b43_radio_write(dev, B2056_TX1 | B2056_TX_INTPAG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1118 b43_radio_write(dev, B2056_TX1 | B2056_TX_PADA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1120 b43_radio_write(dev, B2056_TX1 | B2056_TX_PADG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1122 b43_radio_write(dev, B2056_TX1 | B2056_TX_PGAA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1124 b43_radio_write(dev, B2056_TX1 | B2056_TX_PGAG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1126 b43_radio_write(dev, B2056_TX1 | B2056_TX_MIXA_BOOST_TUNE, b43_chantab_radio_2056_upload()
1128 b43_radio_write(dev, B2056_TX1 | B2056_TX_MIXG_BOOST_TUNE, b43_chantab_radio_2056_upload()
1133 static void b43_radio_2056_setup(struct b43_wldev *dev, b43_radio_2056_setup() argument
1136 struct b43_phy *phy = &dev->phy; b43_radio_2056_setup()
1137 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_radio_2056_setup()
1138 enum ieee80211_band band = b43_current_band(dev->wl); b43_radio_2056_setup()
1146 B43_WARN_ON(dev->phy.rev < 3); b43_radio_2056_setup()
1149 ((dev->dev->chip_id == BCMA_CHIP_ID_BCM43224 || b43_radio_2056_setup()
1150 dev->dev->chip_id == BCMA_CHIP_ID_BCM43225 || b43_radio_2056_setup()
1151 dev->dev->chip_id == BCMA_CHIP_ID_BCM43421) && b43_radio_2056_setup()
1152 dev->dev->chip_pkg == BCMA_PKG_ID_BCM43224_FAB_SMIC); b43_radio_2056_setup()
1154 b43_chantab_radio_2056_upload(dev, e); b43_radio_2056_setup()
1155 b2056_upload_syn_pll_cp2(dev, band == IEEE80211_BAND_5GHZ); b43_radio_2056_setup()
1158 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_radio_2056_setup()
1159 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER1, 0x1F); b43_radio_2056_setup()
1160 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER2, 0x1F); b43_radio_2056_setup()
1161 if (dev->dev->chip_id == BCMA_CHIP_ID_BCM4716 || b43_radio_2056_setup()
1162 dev->dev->chip_id == BCMA_CHIP_ID_BCM47162) { b43_radio_2056_setup()
1163 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER4, 0x14); b43_radio_2056_setup()
1164 b43_radio_write(dev, B2056_SYN_PLL_CP2, 0); b43_radio_2056_setup()
1166 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER4, 0x0B); b43_radio_2056_setup()
1167 b43_radio_write(dev, B2056_SYN_PLL_CP2, 0x14); b43_radio_2056_setup()
1171 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_radio_2056_setup()
1172 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER1, 0x1f); b43_radio_2056_setup()
1173 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER2, 0x1f); b43_radio_2056_setup()
1174 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER4, 0x0b); b43_radio_2056_setup()
1175 b43_radio_write(dev, B2056_SYN_PLL_CP2, 0x20); b43_radio_2056_setup()
1178 b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_radio_2056_setup()
1179 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER1, 0x1F); b43_radio_2056_setup()
1180 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER2, 0x1F); b43_radio_2056_setup()
1181 b43_radio_write(dev, B2056_SYN_PLL_LOOPFILTER4, 0x05); b43_radio_2056_setup()
1182 b43_radio_write(dev, B2056_SYN_PLL_CP2, 0x0C); b43_radio_2056_setup()
1185 if (dev->phy.n->ipa2g_on && band == IEEE80211_BAND_2GHZ) { b43_radio_2056_setup()
1188 if (dev->phy.rev >= 5) { b43_radio_2056_setup()
1189 b43_radio_write(dev, b43_radio_2056_setup()
1192 if (dev->dev->chip_id == BCMA_CHIP_ID_BCM4716 || b43_radio_2056_setup()
1193 dev->dev->chip_id == BCMA_CHIP_ID_BCM47162) { b43_radio_2056_setup()
1212 b43_radio_write(dev, b43_radio_2056_setup()
1215 b43_radio_write(dev, b43_radio_2056_setup()
1218 b43_radio_write(dev, b43_radio_2056_setup()
1221 b43_radio_write(dev, b43_radio_2056_setup()
1224 b43_radio_write(dev, b43_radio_2056_setup()
1227 b43_radio_write(dev, b43_radio_2056_setup()
1230 b43_radio_write(dev, b43_radio_2056_setup()
1234 bias = b43_is_40mhz(dev) ? 0x40 : 0x20; b43_radio_2056_setup()
1235 b43_radio_write(dev, b43_radio_2056_setup()
1238 b43_radio_write(dev, b43_radio_2056_setup()
1241 b43_radio_write(dev, b43_radio_2056_setup()
1245 b43_radio_write(dev, offset | B2056_TX_PA_SPARE1, 0xee); b43_radio_2056_setup()
1247 } else if (dev->phy.n->ipa5g_on && band == IEEE80211_BAND_5GHZ) { b43_radio_2056_setup()
1279 b43_radio_write(dev, b43_radio_2056_setup()
1281 b43_radio_write(dev, b43_radio_2056_setup()
1283 b43_radio_write(dev, b43_radio_2056_setup()
1285 b43_radio_write(dev, b43_radio_2056_setup()
1287 b43_radio_write(dev, b43_radio_2056_setup()
1289 b43_radio_write(dev, b43_radio_2056_setup()
1291 b43_radio_write(dev, b43_radio_2056_setup()
1293 b43_radio_write(dev, b43_radio_2056_setup()
1295 b43_radio_write(dev, b43_radio_2056_setup()
1297 b43_radio_write(dev, b43_radio_2056_setup()
1304 b43_radio_write(dev, B2056_SYN_PLL_VCOCAL12, 0x00); b43_radio_2056_setup()
1305 b43_radio_write(dev, B2056_TX_INTPAA_PA_MISC, 0x38); b43_radio_2056_setup()
1306 b43_radio_write(dev, B2056_TX_INTPAA_PA_MISC, 0x18); b43_radio_2056_setup()
1307 b43_radio_write(dev, B2056_TX_INTPAA_PA_MISC, 0x38); b43_radio_2056_setup()
1308 b43_radio_write(dev, B2056_TX_INTPAA_PA_MISC, 0x39); b43_radio_2056_setup()
1312 static u8 b43_radio_2056_rcal(struct b43_wldev *dev) b43_radio_2056_rcal() argument
1314 struct b43_phy *phy = &dev->phy; b43_radio_2056_rcal()
1320 mast2 = b43_radio_read(dev, B2056_SYN_PLL_MAST2); b43_radio_2056_rcal()
1321 b43_radio_write(dev, B2056_SYN_PLL_MAST2, mast2 | 0x7); b43_radio_2056_rcal()
1324 b43_radio_write(dev, B2056_SYN_RCAL_MASTER, 0x01); b43_radio_2056_rcal()
1326 b43_radio_write(dev, B2056_SYN_RCAL_MASTER, 0x09); b43_radio_2056_rcal()
1328 if (!b43_radio_wait_value(dev, B2056_SYN_RCAL_CODE_OUT, 0x80, 0x80, 100, b43_radio_2056_rcal()
1330 b43err(dev->wl, "Radio recalibration timeout\n"); b43_radio_2056_rcal()
1334 b43_radio_write(dev, B2056_SYN_RCAL_MASTER, 0x01); b43_radio_2056_rcal()
1335 tmp = b43_radio_read(dev, B2056_SYN_RCAL_CODE_OUT); b43_radio_2056_rcal()
1336 b43_radio_write(dev, B2056_SYN_RCAL_MASTER, 0x00); b43_radio_2056_rcal()
1338 b43_radio_write(dev, B2056_SYN_PLL_MAST2, mast2); b43_radio_2056_rcal()
1343 static void b43_radio_init2056_pre(struct b43_wldev *dev) b43_radio_init2056_pre() argument
1345 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2056_pre()
1348 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2056_pre()
1350 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2056_pre()
1352 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2056_pre()
1356 static void b43_radio_init2056_post(struct b43_wldev *dev) b43_radio_init2056_post() argument
1358 b43_radio_set(dev, B2056_SYN_COM_CTRL, 0xB); b43_radio_init2056_post()
1359 b43_radio_set(dev, B2056_SYN_COM_PU, 0x2); b43_radio_init2056_post()
1360 b43_radio_set(dev, B2056_SYN_COM_RESET, 0x2); b43_radio_init2056_post()
1362 b43_radio_mask(dev, B2056_SYN_COM_RESET, ~0x2); b43_radio_init2056_post()
1363 b43_radio_mask(dev, B2056_SYN_PLL_MAST2, ~0xFC); b43_radio_init2056_post()
1364 b43_radio_mask(dev, B2056_SYN_RCCAL_CTRL0, ~0x1); b43_radio_init2056_post()
1365 if (dev->phy.do_full_init) b43_radio_init2056_post()
1366 b43_radio_2056_rcal(dev); b43_radio_init2056_post()
1373 static void b43_radio_init2056(struct b43_wldev *dev) b43_radio_init2056() argument
1375 b43_radio_init2056_pre(dev); b43_radio_init2056()
1376 b2056_upload_inittabs(dev, 0, 0); b43_radio_init2056()
1377 b43_radio_init2056_post(dev); b43_radio_init2056()
1384 static void b43_chantab_radio_upload(struct b43_wldev *dev, b43_chantab_radio_upload() argument
1387 b43_radio_write(dev, B2055_PLL_REF, e->radio_pll_ref); b43_chantab_radio_upload()
1388 b43_radio_write(dev, B2055_RF_PLLMOD0, e->radio_rf_pllmod0); b43_chantab_radio_upload()
1389 b43_radio_write(dev, B2055_RF_PLLMOD1, e->radio_rf_pllmod1); b43_chantab_radio_upload()
1390 b43_radio_write(dev, B2055_VCO_CAPTAIL, e->radio_vco_captail); b43_chantab_radio_upload()
1391 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_chantab_radio_upload()
1393 b43_radio_write(dev, B2055_VCO_CAL1, e->radio_vco_cal1); b43_chantab_radio_upload()
1394 b43_radio_write(dev, B2055_VCO_CAL2, e->radio_vco_cal2); b43_chantab_radio_upload()
1395 b43_radio_write(dev, B2055_PLL_LFC1, e->radio_pll_lfc1); b43_chantab_radio_upload()
1396 b43_radio_write(dev, B2055_PLL_LFR1, e->radio_pll_lfr1); b43_chantab_radio_upload()
1397 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_chantab_radio_upload()
1399 b43_radio_write(dev, B2055_PLL_LFC2, e->radio_pll_lfc2); b43_chantab_radio_upload()
1400 b43_radio_write(dev, B2055_LGBUF_CENBUF, e->radio_lgbuf_cenbuf); b43_chantab_radio_upload()
1401 b43_radio_write(dev, B2055_LGEN_TUNE1, e->radio_lgen_tune1); b43_chantab_radio_upload()
1402 b43_radio_write(dev, B2055_LGEN_TUNE2, e->radio_lgen_tune2); b43_chantab_radio_upload()
1403 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_chantab_radio_upload()
1405 b43_radio_write(dev, B2055_C1_LGBUF_ATUNE, e->radio_c1_lgbuf_atune); b43_chantab_radio_upload()
1406 b43_radio_write(dev, B2055_C1_LGBUF_GTUNE, e->radio_c1_lgbuf_gtune); b43_chantab_radio_upload()
1407 b43_radio_write(dev, B2055_C1_RX_RFR1, e->radio_c1_rx_rfr1); b43_chantab_radio_upload()
1408 b43_radio_write(dev, B2055_C1_TX_PGAPADTN, e->radio_c1_tx_pgapadtn); b43_chantab_radio_upload()
1409 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_chantab_radio_upload()
1411 b43_radio_write(dev, B2055_C1_TX_MXBGTRIM, e->radio_c1_tx_mxbgtrim); b43_chantab_radio_upload()
1412 b43_radio_write(dev, B2055_C2_LGBUF_ATUNE, e->radio_c2_lgbuf_atune); b43_chantab_radio_upload()
1413 b43_radio_write(dev, B2055_C2_LGBUF_GTUNE, e->radio_c2_lgbuf_gtune); b43_chantab_radio_upload()
1414 b43_radio_write(dev, B2055_C2_RX_RFR1, e->radio_c2_rx_rfr1); b43_chantab_radio_upload()
1415 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_chantab_radio_upload()
1417 b43_radio_write(dev, B2055_C2_TX_PGAPADTN, e->radio_c2_tx_pgapadtn); b43_chantab_radio_upload()
1418 b43_radio_write(dev, B2055_C2_TX_MXBGTRIM, e->radio_c2_tx_mxbgtrim); b43_chantab_radio_upload()
1422 static void b43_radio_2055_setup(struct b43_wldev *dev, b43_radio_2055_setup() argument
1425 B43_WARN_ON(dev->phy.rev >= 3); b43_radio_2055_setup()
1427 b43_chantab_radio_upload(dev, e); b43_radio_2055_setup()
1429 b43_radio_write(dev, B2055_VCO_CAL10, 0x05); b43_radio_2055_setup()
1430 b43_radio_write(dev, B2055_VCO_CAL10, 0x45); b43_radio_2055_setup()
1431 b43_read32(dev, B43_MMIO_MACCTL); /* flush writes */ b43_radio_2055_setup()
1432 b43_radio_write(dev, B2055_VCO_CAL10, 0x65); b43_radio_2055_setup()
1436 static void b43_radio_init2055_pre(struct b43_wldev *dev) b43_radio_init2055_pre() argument
1438 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2055_pre()
1440 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2055_pre()
1443 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_radio_init2055_pre()
1447 static void b43_radio_init2055_post(struct b43_wldev *dev) b43_radio_init2055_post() argument
1449 struct b43_phy_n *nphy = dev->phy.n; b43_radio_init2055_post()
1450 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_radio_init2055_post()
1454 workaround = (dev->dev->board_vendor != PCI_VENDOR_ID_BROADCOM b43_radio_init2055_post()
1455 && dev->dev->board_type == SSB_BOARD_CB2_4321 b43_radio_init2055_post()
1456 && dev->dev->board_rev >= 0x41); b43_radio_init2055_post()
1461 b43_radio_mask(dev, B2055_MASTER1, 0xFFF3); b43_radio_init2055_post()
1463 b43_radio_mask(dev, B2055_C1_RX_BB_REG, 0x7F); b43_radio_init2055_post()
1464 b43_radio_mask(dev, B2055_C2_RX_BB_REG, 0x7F); b43_radio_init2055_post()
1466 b43_radio_maskset(dev, B2055_RRCCAL_NOPTSEL, 0xFFC0, 0x2C); b43_radio_init2055_post()
1467 b43_radio_write(dev, B2055_CAL_MISC, 0x3C); b43_radio_init2055_post()
1468 b43_radio_mask(dev, B2055_CAL_MISC, 0xFFBE); b43_radio_init2055_post()
1469 b43_radio_set(dev, B2055_CAL_LPOCTL, 0x80); b43_radio_init2055_post()
1470 b43_radio_set(dev, B2055_CAL_MISC, 0x1); b43_radio_init2055_post()
1472 b43_radio_set(dev, B2055_CAL_MISC, 0x40); b43_radio_init2055_post()
1473 if (!b43_radio_wait_value(dev, B2055_CAL_COUT2, 0x80, 0x80, 10, 2000)) b43_radio_init2055_post()
1474 b43err(dev->wl, "radio post init timeout\n"); b43_radio_init2055_post()
1475 b43_radio_mask(dev, B2055_CAL_LPOCTL, 0xFF7F); b43_radio_init2055_post()
1476 b43_switch_channel(dev, dev->phy.channel); b43_radio_init2055_post()
1477 b43_radio_write(dev, B2055_C1_RX_BB_LPF, 0x9); b43_radio_init2055_post()
1478 b43_radio_write(dev, B2055_C2_RX_BB_LPF, 0x9); b43_radio_init2055_post()
1479 b43_radio_write(dev, B2055_C1_RX_BB_MIDACHP, 0x83); b43_radio_init2055_post()
1480 b43_radio_write(dev, B2055_C2_RX_BB_MIDACHP, 0x83); b43_radio_init2055_post()
1481 b43_radio_maskset(dev, B2055_C1_LNA_GAINBST, 0xFFF8, 0x6); b43_radio_init2055_post()
1482 b43_radio_maskset(dev, B2055_C2_LNA_GAINBST, 0xFFF8, 0x6); b43_radio_init2055_post()
1484 b43_radio_set(dev, B2055_C1_RX_RFSPC1, 0x2); b43_radio_init2055_post()
1485 b43_radio_set(dev, B2055_C2_RX_RFSPC1, 0x2); b43_radio_init2055_post()
1487 b43_radio_mask(dev, B2055_C1_RX_RFSPC1, 0xFFFD); b43_radio_init2055_post()
1488 b43_radio_mask(dev, B2055_C2_RX_RFSPC1, 0xFFFD); b43_radio_init2055_post()
1497 static void b43_radio_init2055(struct b43_wldev *dev) b43_radio_init2055() argument
1499 b43_radio_init2055_pre(dev); b43_radio_init2055()
1500 if (b43_status(dev) < B43_STAT_INITIALIZED) { b43_radio_init2055()
1502 b2055_upload_inittab(dev, 0, 0); b43_radio_init2055()
1504 bool ghz5 = b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ; b43_radio_init2055()
1505 b2055_upload_inittab(dev, ghz5, 0); b43_radio_init2055()
1507 b43_radio_init2055_post(dev); b43_radio_init2055()
1515 static int b43_nphy_load_samples(struct b43_wldev *dev, b43_nphy_load_samples() argument
1517 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_load_samples()
1523 b43err(dev->wl, "allocation for samples loading failed\n"); b43_nphy_load_samples()
1527 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_load_samples()
1533 b43_ntab_write_bulk(dev, B43_NTAB32(17, 0), len, data); b43_nphy_load_samples()
1537 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_load_samples()
1542 static u16 b43_nphy_gen_load_samples(struct b43_wldev *dev, u32 freq, u16 max, b43_nphy_gen_load_samples() argument
1549 bw = b43_is_40mhz(dev) ? 40 : 20; b43_nphy_gen_load_samples()
1553 if (b43_phy_read(dev, B43_NPHY_BBCFG) & B43_NPHY_BBCFG_RSTRX) b43_nphy_gen_load_samples()
1558 if (b43_is_40mhz(dev)) b43_nphy_gen_load_samples()
1566 b43err(dev->wl, "allocation for samples generation failed\n"); b43_nphy_gen_load_samples()
1579 i = b43_nphy_load_samples(dev, samples, len); b43_nphy_gen_load_samples()
1585 static void b43_nphy_run_samples(struct b43_wldev *dev, u16 samps, u16 loops, b43_nphy_run_samples() argument
1589 struct b43_phy *phy = &dev->phy; b43_nphy_run_samples()
1590 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_run_samples()
1595 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_run_samples()
1600 lpf_bw3 = b43_phy_read(dev, B43_NPHY_REV7_RF_CTL_OVER3) & 0x80; b43_nphy_run_samples()
1601 lpf_bw4 = b43_phy_read(dev, B43_NPHY_REV7_RF_CTL_OVER4) & 0x80; b43_nphy_run_samples()
1606 u16 value = b43_nphy_read_lpf_ctl(dev, 0); b43_nphy_run_samples()
1608 b43_nphy_rf_ctl_override_rev19(dev, 0x80, value, b43_nphy_run_samples()
1611 b43_nphy_rf_ctl_override_rev7(dev, 0x80, value, b43_nphy_run_samples()
1618 tmp = b43_ntab_read(dev, B43_NTAB16(15, 87)); b43_nphy_run_samples()
1623 tmp = !b43_is_40mhz(dev) ? 0x6464 : 0x4747; b43_nphy_run_samples()
1624 b43_ntab_write(dev, B43_NTAB16(15, 87), tmp); b43_nphy_run_samples()
1627 b43_phy_write(dev, B43_NPHY_SAMP_DEPCNT, (samps - 1)); b43_nphy_run_samples()
1630 b43_phy_write(dev, B43_NPHY_SAMP_LOOPCNT, (loops - 1)); b43_nphy_run_samples()
1632 b43_phy_write(dev, B43_NPHY_SAMP_LOOPCNT, loops); b43_nphy_run_samples()
1634 b43_phy_write(dev, B43_NPHY_SAMP_WAITCNT, wait); b43_nphy_run_samples()
1636 seq_mode = b43_phy_read(dev, B43_NPHY_RFSEQMODE); b43_nphy_run_samples()
1638 b43_phy_set(dev, B43_NPHY_RFSEQMODE, B43_NPHY_RFSEQMODE_CAOVER); b43_nphy_run_samples()
1640 b43_phy_mask(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x7FFF); b43_nphy_run_samples()
1641 b43_phy_set(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x8000); b43_nphy_run_samples()
1644 b43_phy_write(dev, B43_NPHY_SAMP_CMD, tmp); b43_nphy_run_samples()
1647 if (!(b43_phy_read(dev, B43_NPHY_RFSEQST) & 1)) { b43_nphy_run_samples()
1654 b43err(dev->wl, "run samples timeout\n"); b43_nphy_run_samples()
1656 b43_phy_write(dev, B43_NPHY_RFSEQMODE, seq_mode); b43_nphy_run_samples()
1658 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_run_samples()
1666 static void b43_nphy_scale_offset_rssi(struct b43_wldev *dev, u16 scale, b43_nphy_scale_offset_rssi() argument
1681 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_Z, tmp); b43_nphy_scale_offset_rssi()
1683 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_Z, tmp); b43_nphy_scale_offset_rssi()
1685 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_Z, tmp); b43_nphy_scale_offset_rssi()
1687 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Z, tmp); b43_nphy_scale_offset_rssi()
1691 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_X, tmp); b43_nphy_scale_offset_rssi()
1693 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_X, tmp); b43_nphy_scale_offset_rssi()
1695 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_X, tmp); b43_nphy_scale_offset_rssi()
1697 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_X, tmp); b43_nphy_scale_offset_rssi()
1701 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_Y, tmp); b43_nphy_scale_offset_rssi()
1703 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_Y, tmp); b43_nphy_scale_offset_rssi()
1705 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_Y, tmp); b43_nphy_scale_offset_rssi()
1707 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Y, tmp); b43_nphy_scale_offset_rssi()
1711 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_TBD, tmp); b43_nphy_scale_offset_rssi()
1713 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_TBD, tmp); b43_nphy_scale_offset_rssi()
1715 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_TBD, tmp); b43_nphy_scale_offset_rssi()
1717 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_TBD, tmp); b43_nphy_scale_offset_rssi()
1721 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_PWRDET, tmp); b43_nphy_scale_offset_rssi()
1723 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_PWRDET, tmp); b43_nphy_scale_offset_rssi()
1725 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_PWRDET, tmp); b43_nphy_scale_offset_rssi()
1727 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_PWRDET, tmp); b43_nphy_scale_offset_rssi()
1731 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_TSSI, tmp); b43_nphy_scale_offset_rssi()
1733 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_TSSI, tmp); b43_nphy_scale_offset_rssi()
1737 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_TSSI, tmp); b43_nphy_scale_offset_rssi()
1739 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_TSSI, tmp); b43_nphy_scale_offset_rssi()
1744 static void b43_nphy_rssi_select_rev19(struct b43_wldev *dev, u8 code, b43_nphy_rssi_select_rev19() argument
1750 static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, b43_nphy_rev3_rssi_select() argument
1757 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER1, 0xFDFF); b43_nphy_rev3_rssi_select()
1758 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, 0xFDFF); b43_nphy_rev3_rssi_select()
1759 b43_phy_mask(dev, B43_NPHY_AFECTL_C1, 0xFCFF); b43_nphy_rev3_rssi_select()
1760 b43_phy_mask(dev, B43_NPHY_AFECTL_C2, 0xFCFF); b43_nphy_rev3_rssi_select()
1761 b43_phy_mask(dev, B43_NPHY_TXF_40CO_B1S0, 0xFFDF); b43_nphy_rev3_rssi_select()
1762 b43_phy_mask(dev, B43_NPHY_TXF_40CO_B32S1, 0xFFDF); b43_nphy_rev3_rssi_select()
1763 b43_phy_mask(dev, B43_NPHY_RFCTL_LUT_TRSW_UP1, 0xFFC3); b43_nphy_rev3_rssi_select()
1764 b43_phy_mask(dev, B43_NPHY_RFCTL_LUT_TRSW_UP2, 0xFFC3); b43_nphy_rev3_rssi_select()
1772 b43_phy_maskset(dev, reg, 0xFDFF, 0x0200); b43_nphy_rev3_rssi_select()
1780 b43_phy_maskset(dev, reg, 0xFCFF, 0); b43_nphy_rev3_rssi_select()
1785 b43_phy_maskset(dev, reg, 0xFFC3, 0); b43_nphy_rev3_rssi_select()
1788 val = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 4 : 8; b43_nphy_rev3_rssi_select()
1793 b43_phy_set(dev, reg, val); b43_nphy_rev3_rssi_select()
1798 b43_phy_set(dev, reg, 0x0020); b43_nphy_rev3_rssi_select()
1811 b43_phy_maskset(dev, reg, 0xFCFF, val); b43_nphy_rev3_rssi_select()
1812 b43_phy_maskset(dev, reg, 0xF3FF, val << 2); b43_nphy_rev3_rssi_select()
1817 b43_current_band(dev->wl); b43_nphy_rev3_rssi_select()
1819 if (dev->phy.rev < 7) { b43_nphy_rev3_rssi_select()
1820 if (b43_nphy_ipa(dev)) b43_nphy_rev3_rssi_select()
1826 b43_radio_write(dev, reg, val); b43_nphy_rev3_rssi_select()
1832 b43_phy_set(dev, reg, 0x0200); b43_nphy_rev3_rssi_select()
1839 static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, b43_nphy_rev2_rssi_select() argument
1863 b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, val); b43_nphy_rev2_rssi_select()
1864 b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, val); b43_nphy_rev2_rssi_select()
1867 b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO1, 0xFFCF, b43_nphy_rev2_rssi_select()
1869 b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO2, 0xFFCF, b43_nphy_rev2_rssi_select()
1874 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x3000); b43_nphy_rev2_rssi_select()
1876 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rev2_rssi_select()
1879 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, b43_nphy_rev2_rssi_select()
1884 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rev2_rssi_select()
1887 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, ~0x1); b43_nphy_rev2_rssi_select()
1890 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x3000); b43_nphy_rev2_rssi_select()
1892 b43_phy_maskset(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rev2_rssi_select()
1897 b43_phy_set(dev, B43_NPHY_RFCTL_OVER, b43_nphy_rev2_rssi_select()
1902 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, b43_nphy_rev2_rssi_select()
1905 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, ~0x1); b43_nphy_rev2_rssi_select()
1911 static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, b43_nphy_rssi_select() argument
1914 if (dev->phy.rev >= 19) b43_nphy_rssi_select()
1915 b43_nphy_rssi_select_rev19(dev, code, type); b43_nphy_rssi_select()
1916 else if (dev->phy.rev >= 3) b43_nphy_rssi_select()
1917 b43_nphy_rev3_rssi_select(dev, code, type); b43_nphy_rssi_select()
1919 b43_nphy_rev2_rssi_select(dev, code, type); b43_nphy_rssi_select()
1923 static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, b43_nphy_set_rssi_2055_vcm() argument
1930 b43_radio_maskset(dev, B2055_C1_B0NB_RSSIVCM, b43_nphy_set_rssi_2055_vcm()
1932 b43_radio_maskset(dev, B2055_C1_RX_BB_RSSICTL5, b43_nphy_set_rssi_2055_vcm()
1935 b43_radio_maskset(dev, B2055_C2_B0NB_RSSIVCM, b43_nphy_set_rssi_2055_vcm()
1937 b43_radio_maskset(dev, B2055_C2_RX_BB_RSSICTL5, b43_nphy_set_rssi_2055_vcm()
1942 b43_radio_maskset(dev, B2055_C1_RX_BB_RSSICTL5, b43_nphy_set_rssi_2055_vcm()
1945 b43_radio_maskset(dev, B2055_C2_RX_BB_RSSICTL5, b43_nphy_set_rssi_2055_vcm()
1952 static int b43_nphy_poll_rssi(struct b43_wldev *dev, enum n_rssi_type rssi_type, b43_nphy_poll_rssi() argument
1962 if (dev->phy.rev >= 3) { b43_nphy_poll_rssi()
1963 save_regs_phy[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); b43_nphy_poll_rssi()
1964 save_regs_phy[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2); b43_nphy_poll_rssi()
1965 save_regs_phy[2] = b43_phy_read(dev, b43_nphy_poll_rssi()
1967 save_regs_phy[3] = b43_phy_read(dev, b43_nphy_poll_rssi()
1969 save_regs_phy[4] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1); b43_nphy_poll_rssi()
1970 save_regs_phy[5] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); b43_nphy_poll_rssi()
1971 save_regs_phy[6] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B1S0); b43_nphy_poll_rssi()
1972 save_regs_phy[7] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B32S1); b43_nphy_poll_rssi()
1975 save_regs_phy[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); b43_nphy_poll_rssi()
1976 save_regs_phy[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2); b43_nphy_poll_rssi()
1977 save_regs_phy[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); b43_nphy_poll_rssi()
1978 save_regs_phy[3] = b43_phy_read(dev, B43_NPHY_RFCTL_CMD); b43_nphy_poll_rssi()
1979 save_regs_phy[4] = b43_phy_read(dev, B43_NPHY_RFCTL_OVER); b43_nphy_poll_rssi()
1980 save_regs_phy[5] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO1); b43_nphy_poll_rssi()
1981 save_regs_phy[6] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO2); b43_nphy_poll_rssi()
1986 b43_nphy_rssi_select(dev, 5, rssi_type); b43_nphy_poll_rssi()
1988 if (dev->phy.rev < 2) { b43_nphy_poll_rssi()
1989 save_regs_phy[8] = b43_phy_read(dev, B43_NPHY_GPIO_SEL); b43_nphy_poll_rssi()
1990 b43_phy_write(dev, B43_NPHY_GPIO_SEL, 5); b43_nphy_poll_rssi()
1997 if (dev->phy.rev < 2) { b43_nphy_poll_rssi()
1998 s[0] = b43_phy_read(dev, B43_NPHY_GPIO_LOOUT); b43_nphy_poll_rssi()
1999 s[1] = b43_phy_read(dev, B43_NPHY_GPIO_HIOUT); b43_nphy_poll_rssi()
2001 s[0] = b43_phy_read(dev, B43_NPHY_RSSI1); b43_nphy_poll_rssi()
2002 s[1] = b43_phy_read(dev, B43_NPHY_RSSI2); b43_nphy_poll_rssi()
2013 if (dev->phy.rev < 2) b43_nphy_poll_rssi()
2014 b43_phy_write(dev, B43_NPHY_GPIO_SEL, save_regs_phy[8]); b43_nphy_poll_rssi()
2016 if (dev->phy.rev >= 3) { b43_nphy_poll_rssi()
2017 b43_phy_write(dev, B43_NPHY_AFECTL_C1, save_regs_phy[0]); b43_nphy_poll_rssi()
2018 b43_phy_write(dev, B43_NPHY_AFECTL_C2, save_regs_phy[1]); b43_nphy_poll_rssi()
2019 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP1, b43_nphy_poll_rssi()
2021 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP2, b43_nphy_poll_rssi()
2023 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, save_regs_phy[4]); b43_nphy_poll_rssi()
2024 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[5]); b43_nphy_poll_rssi()
2025 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, save_regs_phy[6]); b43_nphy_poll_rssi()
2026 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, save_regs_phy[7]); b43_nphy_poll_rssi()
2028 b43_phy_write(dev, B43_NPHY_AFECTL_C1, save_regs_phy[0]); b43_nphy_poll_rssi()
2029 b43_phy_write(dev, B43_NPHY_AFECTL_C2, save_regs_phy[1]); b43_nphy_poll_rssi()
2030 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[2]); b43_nphy_poll_rssi()
2031 b43_phy_write(dev, B43_NPHY_RFCTL_CMD, save_regs_phy[3]); b43_nphy_poll_rssi()
2032 b43_phy_write(dev, B43_NPHY_RFCTL_OVER, save_regs_phy[4]); b43_nphy_poll_rssi()
2033 b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO1, save_regs_phy[5]); b43_nphy_poll_rssi()
2034 b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO2, save_regs_phy[6]); b43_nphy_poll_rssi()
2041 static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) b43_nphy_rev3_rssi_cal() argument
2043 struct b43_phy *phy = &dev->phy; b43_nphy_rev3_rssi_cal()
2044 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_rev3_rssi_cal()
2092 if (dev->phy.rev >= 7) { b43_nphy_rev3_rssi_cal()
2101 class = b43_nphy_classifier(dev, 0, 0); b43_nphy_rev3_rssi_cal()
2102 b43_nphy_classifier(dev, 7, 4); b43_nphy_rev3_rssi_cal()
2103 b43_nphy_read_clip_detection(dev, clip_state); b43_nphy_rev3_rssi_cal()
2104 b43_nphy_write_clip_detection(dev, clip_off); b43_nphy_rev3_rssi_cal()
2106 saved_regs_phy_rfctl[0] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1); b43_nphy_rev3_rssi_cal()
2107 saved_regs_phy_rfctl[1] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2); b43_nphy_rev3_rssi_cal()
2109 saved_regs_phy[i] = b43_phy_read(dev, regs_to_store[i]); b43_nphy_rev3_rssi_cal()
2111 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_OFF, 0, 7); b43_nphy_rev3_rssi_cal()
2112 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_TRSW, 1, 7); b43_nphy_rev3_rssi_cal()
2114 if (dev->phy.rev >= 7) { b43_nphy_rev3_rssi_cal()
2115 b43_nphy_rf_ctl_override_one_to_many(dev, b43_nphy_rev3_rssi_cal()
2118 b43_nphy_rf_ctl_override_one_to_many(dev, b43_nphy_rev3_rssi_cal()
2121 b43_nphy_rf_ctl_override_rev7(dev, 0x80, 1, 0, false, 0); b43_nphy_rev3_rssi_cal()
2122 b43_nphy_rf_ctl_override_rev7(dev, 0x40, 1, 0, false, 0); b43_nphy_rev3_rssi_cal()
2123 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rev3_rssi_cal()
2124 b43_nphy_rf_ctl_override_rev7(dev, 0x20, 0, 0, false, b43_nphy_rev3_rssi_cal()
2126 b43_nphy_rf_ctl_override_rev7(dev, 0x10, 1, 0, false, b43_nphy_rev3_rssi_cal()
2129 b43_nphy_rf_ctl_override_rev7(dev, 0x10, 0, 0, false, b43_nphy_rev3_rssi_cal()
2131 b43_nphy_rf_ctl_override_rev7(dev, 0x20, 1, 0, false, b43_nphy_rev3_rssi_cal()
2135 b43_nphy_rf_ctl_override(dev, 0x1, 0, 0, false); b43_nphy_rev3_rssi_cal()
2136 b43_nphy_rf_ctl_override(dev, 0x2, 1, 0, false); b43_nphy_rev3_rssi_cal()
2137 b43_nphy_rf_ctl_override(dev, 0x80, 1, 0, false); b43_nphy_rev3_rssi_cal()
2138 b43_nphy_rf_ctl_override(dev, 0x40, 1, 0, false); b43_nphy_rev3_rssi_cal()
2139 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_rev3_rssi_cal()
2140 b43_nphy_rf_ctl_override(dev, 0x20, 0, 0, false); b43_nphy_rev3_rssi_cal()
2141 b43_nphy_rf_ctl_override(dev, 0x10, 1, 0, false); b43_nphy_rev3_rssi_cal()
2143 b43_nphy_rf_ctl_override(dev, 0x10, 0, 0, false); b43_nphy_rev3_rssi_cal()
2144 b43_nphy_rf_ctl_override(dev, 0x20, 1, 0, false); b43_nphy_rev3_rssi_cal()
2148 rx_core_state = b43_nphy_get_rx_core_state(dev); b43_nphy_rev3_rssi_cal()
2153 b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_I, b43_nphy_rev3_rssi_cal()
2155 b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_Q, b43_nphy_rev3_rssi_cal()
2160 if (dev->phy.rev >= 7) b43_nphy_rev3_rssi_cal()
2161 b43_radio_maskset(dev, b43_nphy_rev3_rssi_cal()
2166 b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, b43_nphy_rev3_rssi_cal()
2168 b43_nphy_poll_rssi(dev, N_RSSI_NB, results[vcm], 8); b43_nphy_rev3_rssi_cal()
2194 if (dev->phy.rev >= 7) b43_nphy_rev3_rssi_cal()
2195 b43_radio_maskset(dev, b43_nphy_rev3_rssi_cal()
2200 b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, b43_nphy_rev3_rssi_cal()
2213 b43_nphy_scale_offset_rssi(dev, 0, offset[i], b43_nphy_rev3_rssi_cal()
2224 b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, b43_nphy_rev3_rssi_cal()
2226 b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, b43_nphy_rev3_rssi_cal()
2228 b43_nphy_poll_rssi(dev, i, poll_results, 8); b43_nphy_rev3_rssi_cal()
2236 b43_nphy_scale_offset_rssi(dev, 0, b43_nphy_rev3_rssi_cal()
2243 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, saved_regs_phy_rfctl[0]); b43_nphy_rev3_rssi_cal()
2244 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, saved_regs_phy_rfctl[1]); b43_nphy_rev3_rssi_cal()
2246 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_rev3_rssi_cal()
2248 b43_phy_set(dev, B43_NPHY_TXF_40CO_B1S1, 0x1); b43_nphy_rev3_rssi_cal()
2249 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, B43_NPHY_RFCTL_CMD_START); b43_nphy_rev3_rssi_cal()
2250 b43_phy_mask(dev, B43_NPHY_TXF_40CO_B1S1, ~0x1); b43_nphy_rev3_rssi_cal()
2252 b43_phy_set(dev, B43_NPHY_RFCTL_OVER, 0x1); b43_nphy_rev3_rssi_cal()
2253 b43_phy_set(dev, B43_NPHY_RFCTL_CMD, B43_NPHY_RFCTL_CMD_RXTX); b43_nphy_rev3_rssi_cal()
2254 b43_phy_mask(dev, B43_NPHY_RFCTL_OVER, ~0x1); b43_nphy_rev3_rssi_cal()
2257 b43_phy_write(dev, regs_to_store[i], saved_regs_phy[i]); b43_nphy_rev3_rssi_cal()
2260 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_rev3_rssi_cal()
2267 if (dev->phy.rev >= 7) { b43_nphy_rev3_rssi_cal()
2268 rssical_radio_regs[0] = b43_radio_read(dev, b43_nphy_rev3_rssi_cal()
2270 rssical_radio_regs[1] = b43_radio_read(dev, b43_nphy_rev3_rssi_cal()
2273 rssical_radio_regs[0] = b43_radio_read(dev, B2056_RX0 | b43_nphy_rev3_rssi_cal()
2275 rssical_radio_regs[1] = b43_radio_read(dev, B2056_RX1 | b43_nphy_rev3_rssi_cal()
2278 rssical_phy_regs[0] = b43_phy_read(dev, B43_NPHY_RSSIMC_0I_RSSI_Z); b43_nphy_rev3_rssi_cal()
2279 rssical_phy_regs[1] = b43_phy_read(dev, B43_NPHY_RSSIMC_0Q_RSSI_Z); b43_nphy_rev3_rssi_cal()
2280 rssical_phy_regs[2] = b43_phy_read(dev, B43_NPHY_RSSIMC_1I_RSSI_Z); b43_nphy_rev3_rssi_cal()
2281 rssical_phy_regs[3] = b43_phy_read(dev, B43_NPHY_RSSIMC_1Q_RSSI_Z); b43_nphy_rev3_rssi_cal()
2282 rssical_phy_regs[4] = b43_phy_read(dev, B43_NPHY_RSSIMC_0I_RSSI_X); b43_nphy_rev3_rssi_cal()
2283 rssical_phy_regs[5] = b43_phy_read(dev, B43_NPHY_RSSIMC_0Q_RSSI_X); b43_nphy_rev3_rssi_cal()
2284 rssical_phy_regs[6] = b43_phy_read(dev, B43_NPHY_RSSIMC_1I_RSSI_X); b43_nphy_rev3_rssi_cal()
2285 rssical_phy_regs[7] = b43_phy_read(dev, B43_NPHY_RSSIMC_1Q_RSSI_X); b43_nphy_rev3_rssi_cal()
2286 rssical_phy_regs[8] = b43_phy_read(dev, B43_NPHY_RSSIMC_0I_RSSI_Y); b43_nphy_rev3_rssi_cal()
2287 rssical_phy_regs[9] = b43_phy_read(dev, B43_NPHY_RSSIMC_0Q_RSSI_Y); b43_nphy_rev3_rssi_cal()
2288 rssical_phy_regs[10] = b43_phy_read(dev, B43_NPHY_RSSIMC_1I_RSSI_Y); b43_nphy_rev3_rssi_cal()
2289 rssical_phy_regs[11] = b43_phy_read(dev, B43_NPHY_RSSIMC_1Q_RSSI_Y); b43_nphy_rev3_rssi_cal()
2292 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_rev3_rssi_cal()
2298 b43_nphy_classifier(dev, 7, class); b43_nphy_rev3_rssi_cal()
2299 b43_nphy_write_clip_detection(dev, clip_state); b43_nphy_rev3_rssi_cal()
2303 static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, enum n_rssi_type type) b43_nphy_rev2_rssi_cal() argument
2334 class = b43_nphy_classifier(dev, 0, 0); b43_nphy_rev2_rssi_cal()
2335 b43_nphy_classifier(dev, 7, 4); b43_nphy_rev2_rssi_cal()
2336 b43_nphy_read_clip_detection(dev, clip_state); b43_nphy_rev2_rssi_cal()
2337 b43_nphy_write_clip_detection(dev, clip_off); b43_nphy_rev2_rssi_cal()
2339 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_nphy_rev2_rssi_cal()
2344 regs_save_phy[0] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1); b43_nphy_rev2_rssi_cal()
2345 regs_save_radio[0] = b43_radio_read(dev, B2055_C1_PD_RXTX); b43_nphy_rev2_rssi_cal()
2346 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, override); b43_nphy_rev2_rssi_cal()
2347 b43_radio_write(dev, B2055_C1_PD_RXTX, val); b43_nphy_rev2_rssi_cal()
2349 regs_save_phy[1] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2); b43_nphy_rev2_rssi_cal()
2350 regs_save_radio[1] = b43_radio_read(dev, B2055_C2_PD_RXTX); b43_nphy_rev2_rssi_cal()
2351 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, override); b43_nphy_rev2_rssi_cal()
2352 b43_radio_write(dev, B2055_C2_PD_RXTX, val); b43_nphy_rev2_rssi_cal()
2354 state[0] = b43_radio_read(dev, B2055_C1_PD_RSSIMISC) & 0x07; b43_nphy_rev2_rssi_cal()
2355 state[1] = b43_radio_read(dev, B2055_C2_PD_RSSIMISC) & 0x07; b43_nphy_rev2_rssi_cal()
2356 b43_radio_mask(dev, B2055_C1_PD_RSSIMISC, 0xF8); b43_nphy_rev2_rssi_cal()
2357 b43_radio_mask(dev, B2055_C2_PD_RSSIMISC, 0xF8); b43_nphy_rev2_rssi_cal()
2358 state[2] = b43_radio_read(dev, B2055_C1_SP_RSSI) & 0x07; b43_nphy_rev2_rssi_cal()
2359 state[3] = b43_radio_read(dev, B2055_C2_SP_RSSI) & 0x07; b43_nphy_rev2_rssi_cal()
2361 b43_nphy_rssi_select(dev, 5, type); b43_nphy_rev2_rssi_cal()
2362 b43_nphy_scale_offset_rssi(dev, 0, 0, 5, N_RAIL_I, type); b43_nphy_rev2_rssi_cal()
2363 b43_nphy_scale_offset_rssi(dev, 0, 0, 5, N_RAIL_Q, type); b43_nphy_rev2_rssi_cal()
2370 b43_nphy_set_rssi_2055_vcm(dev, type, tmp); b43_nphy_rev2_rssi_cal()
2371 b43_nphy_poll_rssi(dev, type, results[vcm], 8); b43_nphy_rev2_rssi_cal()
2402 b43_nphy_set_rssi_2055_vcm(dev, type, vcm_final); b43_nphy_rev2_rssi_cal()
2418 b43_nphy_scale_offset_rssi(dev, 0, offset[i], core, rail, b43_nphy_rev2_rssi_cal()
2422 b43_radio_maskset(dev, B2055_C1_PD_RSSIMISC, 0xF8, state[0]); b43_nphy_rev2_rssi_cal()
2423 b43_radio_maskset(dev, B2055_C2_PD_RSSIMISC, 0xF8, state[1]); b43_nphy_rev2_rssi_cal()
2427 b43_nphy_rssi_select(dev, 1, N_RSSI_NB); b43_nphy_rev2_rssi_cal()
2430 b43_nphy_rssi_select(dev, 1, N_RSSI_W1); b43_nphy_rev2_rssi_cal()
2433 b43_nphy_rssi_select(dev, 1, N_RSSI_W2); b43_nphy_rev2_rssi_cal()
2436 b43_nphy_rssi_select(dev, 1, N_RSSI_W2); b43_nphy_rev2_rssi_cal()
2442 b43_nphy_rssi_select(dev, 2, N_RSSI_NB); b43_nphy_rev2_rssi_cal()
2445 b43_nphy_rssi_select(dev, 2, N_RSSI_W1); b43_nphy_rev2_rssi_cal()
2448 b43_nphy_rssi_select(dev, 2, N_RSSI_W2); b43_nphy_rev2_rssi_cal()
2452 b43_nphy_rssi_select(dev, 0, type); b43_nphy_rev2_rssi_cal()
2454 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs_save_phy[0]); b43_nphy_rev2_rssi_cal()
2455 b43_radio_write(dev, B2055_C1_PD_RXTX, regs_save_radio[0]); b43_nphy_rev2_rssi_cal()
2456 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs_save_phy[1]); b43_nphy_rev2_rssi_cal()
2457 b43_radio_write(dev, B2055_C2_PD_RXTX, regs_save_radio[1]); b43_nphy_rev2_rssi_cal()
2459 b43_nphy_classifier(dev, 7, class); b43_nphy_rev2_rssi_cal()
2460 b43_nphy_write_clip_detection(dev, clip_state); b43_nphy_rev2_rssi_cal()
2463 b43_nphy_reset_cca(dev); b43_nphy_rev2_rssi_cal()
2470 static void b43_nphy_rssi_cal(struct b43_wldev *dev) b43_nphy_rssi_cal() argument
2472 if (dev->phy.rev >= 19) { b43_nphy_rssi_cal()
2474 } else if (dev->phy.rev >= 3) { b43_nphy_rssi_cal()
2475 b43_nphy_rev3_rssi_cal(dev); b43_nphy_rssi_cal()
2477 b43_nphy_rev2_rssi_cal(dev, N_RSSI_NB); b43_nphy_rssi_cal()
2478 b43_nphy_rev2_rssi_cal(dev, N_RSSI_W1); b43_nphy_rssi_cal()
2479 b43_nphy_rev2_rssi_cal(dev, N_RSSI_W2); b43_nphy_rssi_cal()
2487 static void b43_nphy_gain_ctl_workarounds_rev19(struct b43_wldev *dev) b43_nphy_gain_ctl_workarounds_rev19() argument
2492 static void b43_nphy_gain_ctl_workarounds_rev7(struct b43_wldev *dev) b43_nphy_gain_ctl_workarounds_rev7() argument
2494 struct b43_phy *phy = &dev->phy; b43_nphy_gain_ctl_workarounds_rev7()
2501 static void b43_nphy_gain_ctl_workarounds_rev3(struct b43_wldev *dev) b43_nphy_gain_ctl_workarounds_rev3() argument
2503 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_gain_ctl_workarounds_rev3()
2513 ghz5 = b43_phy_read(dev, B43_NPHY_BANDCTL) b43_nphy_gain_ctl_workarounds_rev3()
2517 e = b43_nphy_get_gain_ctl_workaround_ent(dev, ghz5, ext_lna); b43_nphy_gain_ctl_workarounds_rev3()
2518 if (ghz5 && dev->phy.rev >= 5) b43_nphy_gain_ctl_workarounds_rev3()
2523 b43_phy_set(dev, B43_NPHY_RXCTL, 0x0040); b43_nphy_gain_ctl_workarounds_rev3()
2526 b43_phy_set(dev, B43_NPHY_C1_CGAINI, B43_NPHY_C1_CGAINI_CL2DETECT); b43_nphy_gain_ctl_workarounds_rev3()
2527 b43_phy_set(dev, B43_NPHY_C2_CGAINI, B43_NPHY_C2_CGAINI_CL2DETECT); b43_nphy_gain_ctl_workarounds_rev3()
2529 b43_radio_write(dev, B2056_RX0 | B2056_RX_BIASPOLE_LNAG1_IDAC, b43_nphy_gain_ctl_workarounds_rev3()
2531 b43_radio_write(dev, B2056_RX1 | B2056_RX_BIASPOLE_LNAG1_IDAC, b43_nphy_gain_ctl_workarounds_rev3()
2533 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAG2_IDAC, 0xF0); b43_nphy_gain_ctl_workarounds_rev3()
2534 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAG2_IDAC, 0xF0); b43_nphy_gain_ctl_workarounds_rev3()
2535 b43_radio_write(dev, B2056_RX0 | B2056_RX_RSSI_POLE, 0x00); b43_nphy_gain_ctl_workarounds_rev3()
2536 b43_radio_write(dev, B2056_RX1 | B2056_RX_RSSI_POLE, 0x00); b43_nphy_gain_ctl_workarounds_rev3()
2537 b43_radio_write(dev, B2056_RX0 | B2056_RX_RSSI_GAIN, b43_nphy_gain_ctl_workarounds_rev3()
2539 b43_radio_write(dev, B2056_RX1 | B2056_RX_RSSI_GAIN, b43_nphy_gain_ctl_workarounds_rev3()
2541 b43_radio_write(dev, B2056_RX0 | B2056_RX_BIASPOLE_LNAA1_IDAC, b43_nphy_gain_ctl_workarounds_rev3()
2543 b43_radio_write(dev, B2056_RX1 | B2056_RX_BIASPOLE_LNAA1_IDAC, b43_nphy_gain_ctl_workarounds_rev3()
2545 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAA2_IDAC, 0xFF); b43_nphy_gain_ctl_workarounds_rev3()
2546 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAA2_IDAC, 0xFF); b43_nphy_gain_ctl_workarounds_rev3()
2548 b43_ntab_write_bulk(dev, B43_NTAB8(0, 8), 4, e->lna1_gain); b43_nphy_gain_ctl_workarounds_rev3()
2549 b43_ntab_write_bulk(dev, B43_NTAB8(1, 8), 4, e->lna1_gain); b43_nphy_gain_ctl_workarounds_rev3()
2550 b43_ntab_write_bulk(dev, B43_NTAB8(0, 16), 4, e->lna2_gain); b43_nphy_gain_ctl_workarounds_rev3()
2551 b43_ntab_write_bulk(dev, B43_NTAB8(1, 16), 4, e->lna2_gain); b43_nphy_gain_ctl_workarounds_rev3()
2552 b43_ntab_write_bulk(dev, B43_NTAB8(0, 32), 10, e->gain_db); b43_nphy_gain_ctl_workarounds_rev3()
2553 b43_ntab_write_bulk(dev, B43_NTAB8(1, 32), 10, e->gain_db); b43_nphy_gain_ctl_workarounds_rev3()
2554 b43_ntab_write_bulk(dev, B43_NTAB8(2, 32), 10, e->gain_bits); b43_nphy_gain_ctl_workarounds_rev3()
2555 b43_ntab_write_bulk(dev, B43_NTAB8(3, 32), 10, e->gain_bits); b43_nphy_gain_ctl_workarounds_rev3()
2556 b43_ntab_write_bulk(dev, B43_NTAB8(0, 0x40), 6, lpf_gain); b43_nphy_gain_ctl_workarounds_rev3()
2557 b43_ntab_write_bulk(dev, B43_NTAB8(1, 0x40), 6, lpf_gain); b43_nphy_gain_ctl_workarounds_rev3()
2558 b43_ntab_write_bulk(dev, B43_NTAB8(2, 0x40), 6, lpf_bits); b43_nphy_gain_ctl_workarounds_rev3()
2559 b43_ntab_write_bulk(dev, B43_NTAB8(3, 0x40), 6, lpf_bits); b43_nphy_gain_ctl_workarounds_rev3()
2561 b43_phy_write(dev, B43_NPHY_REV3_C1_INITGAIN_A, e->init_gain); b43_nphy_gain_ctl_workarounds_rev3()
2562 b43_phy_write(dev, B43_NPHY_REV3_C2_INITGAIN_A, e->init_gain); b43_nphy_gain_ctl_workarounds_rev3()
2564 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x106), 2, b43_nphy_gain_ctl_workarounds_rev3()
2567 b43_phy_write(dev, B43_NPHY_REV3_C1_CLIP_HIGAIN_A, e->cliphi_gain); b43_nphy_gain_ctl_workarounds_rev3()
2568 b43_phy_write(dev, B43_NPHY_REV3_C2_CLIP_HIGAIN_A, e->cliphi_gain); b43_nphy_gain_ctl_workarounds_rev3()
2569 b43_phy_write(dev, B43_NPHY_REV3_C1_CLIP_MEDGAIN_A, e->clipmd_gain); b43_nphy_gain_ctl_workarounds_rev3()
2570 b43_phy_write(dev, B43_NPHY_REV3_C2_CLIP_MEDGAIN_A, e->clipmd_gain); b43_nphy_gain_ctl_workarounds_rev3()
2571 b43_phy_write(dev, B43_NPHY_REV3_C1_CLIP_LOGAIN_A, e->cliplo_gain); b43_nphy_gain_ctl_workarounds_rev3()
2572 b43_phy_write(dev, B43_NPHY_REV3_C2_CLIP_LOGAIN_A, e->cliplo_gain); b43_nphy_gain_ctl_workarounds_rev3()
2574 b43_phy_maskset(dev, B43_NPHY_CRSMINPOWER0, 0xFF00, e->crsmin); b43_nphy_gain_ctl_workarounds_rev3()
2575 b43_phy_maskset(dev, B43_NPHY_CRSMINPOWERL0, 0xFF00, e->crsminl); b43_nphy_gain_ctl_workarounds_rev3()
2576 b43_phy_maskset(dev, B43_NPHY_CRSMINPOWERU0, 0xFF00, e->crsminu); b43_nphy_gain_ctl_workarounds_rev3()
2577 b43_phy_write(dev, B43_NPHY_C1_NBCLIPTHRES, e->nbclip); b43_nphy_gain_ctl_workarounds_rev3()
2578 b43_phy_write(dev, B43_NPHY_C2_NBCLIPTHRES, e->nbclip); b43_nphy_gain_ctl_workarounds_rev3()
2579 b43_phy_maskset(dev, B43_NPHY_C1_CLIPWBTHRES, b43_nphy_gain_ctl_workarounds_rev3()
2581 b43_phy_maskset(dev, B43_NPHY_C2_CLIPWBTHRES, b43_nphy_gain_ctl_workarounds_rev3()
2583 b43_phy_write(dev, B43_NPHY_CCK_SHIFTB_REF, 0x809C); b43_nphy_gain_ctl_workarounds_rev3()
2586 static void b43_nphy_gain_ctl_workarounds_rev1_2(struct b43_wldev *dev) b43_nphy_gain_ctl_workarounds_rev1_2() argument
2588 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_gain_ctl_workarounds_rev1_2()
2597 b43_phy_set(dev, B43_NPHY_C1_CGAINI, B43_NPHY_C1_CGAINI_CL2DETECT); b43_nphy_gain_ctl_workarounds_rev1_2()
2598 b43_phy_set(dev, B43_NPHY_C2_CGAINI, B43_NPHY_C2_CGAINI_CL2DETECT); b43_nphy_gain_ctl_workarounds_rev1_2()
2601 b43_phy_write(dev, B43_NPHY_C1_NBCLIPTHRES, 0x84); b43_nphy_gain_ctl_workarounds_rev1_2()
2602 b43_phy_write(dev, B43_NPHY_C2_NBCLIPTHRES, 0x84); b43_nphy_gain_ctl_workarounds_rev1_2()
2604 if (!b43_is_40mhz(dev)) { b43_nphy_gain_ctl_workarounds_rev1_2()
2606 b43_phy_write(dev, B43_NPHY_CLIP1_NBDWELL_LEN, 0x002B); b43_nphy_gain_ctl_workarounds_rev1_2()
2607 b43_phy_write(dev, B43_NPHY_CLIP2_NBDWELL_LEN, 0x002B); b43_nphy_gain_ctl_workarounds_rev1_2()
2608 b43_phy_write(dev, B43_NPHY_W1CLIP1_DWELL_LEN, 0x0009); b43_nphy_gain_ctl_workarounds_rev1_2()
2609 b43_phy_write(dev, B43_NPHY_W1CLIP2_DWELL_LEN, 0x0009); b43_nphy_gain_ctl_workarounds_rev1_2()
2613 b43_phy_maskset(dev, B43_NPHY_C1_CLIPWBTHRES, b43_nphy_gain_ctl_workarounds_rev1_2()
2615 b43_phy_maskset(dev, B43_NPHY_C2_CLIPWBTHRES, b43_nphy_gain_ctl_workarounds_rev1_2()
2618 if (!b43_is_40mhz(dev)) { b43_nphy_gain_ctl_workarounds_rev1_2()
2619 b43_phy_maskset(dev, B43_NPHY_C1_CGAINI, b43_nphy_gain_ctl_workarounds_rev1_2()
2621 b43_phy_maskset(dev, B43_NPHY_C2_CGAINI, b43_nphy_gain_ctl_workarounds_rev1_2()
2623 b43_phy_maskset(dev, B43_NPHY_C1_CCK_CGAINI, b43_nphy_gain_ctl_workarounds_rev1_2()
2625 b43_phy_maskset(dev, B43_NPHY_C2_CCK_CGAINI, b43_nphy_gain_ctl_workarounds_rev1_2()
2629 b43_phy_write(dev, B43_NPHY_CCK_SHIFTB_REF, 0x809C); b43_nphy_gain_ctl_workarounds_rev1_2()
2632 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ && b43_nphy_gain_ctl_workarounds_rev1_2()
2633 b43_is_40mhz(dev)) b43_nphy_gain_ctl_workarounds_rev1_2()
2638 code = b43_is_40mhz(dev) ? 6 : 7; b43_nphy_gain_ctl_workarounds_rev1_2()
2642 b43_phy_maskset(dev, B43_NPHY_C1_INITGAIN, ~B43_NPHY_C1_INITGAIN_HPVGA2, b43_nphy_gain_ctl_workarounds_rev1_2()
2644 b43_phy_maskset(dev, B43_NPHY_C2_INITGAIN, ~B43_NPHY_C2_INITGAIN_HPVGA2, b43_nphy_gain_ctl_workarounds_rev1_2()
2647 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x1D06); b43_nphy_gain_ctl_workarounds_rev1_2()
2650 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, (code << 8 | 0x7C)); b43_nphy_gain_ctl_workarounds_rev1_2()
2652 b43_nphy_adjust_lna_gain_table(dev); b43_nphy_gain_ctl_workarounds_rev1_2()
2655 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x0808); b43_nphy_gain_ctl_workarounds_rev1_2()
2656 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x0); b43_nphy_gain_ctl_workarounds_rev1_2()
2657 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2658 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2659 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2661 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x0C08); b43_nphy_gain_ctl_workarounds_rev1_2()
2662 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x0); b43_nphy_gain_ctl_workarounds_rev1_2()
2663 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2664 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2665 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0x1); b43_nphy_gain_ctl_workarounds_rev1_2()
2667 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x1D06); b43_nphy_gain_ctl_workarounds_rev1_2()
2670 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, b43_nphy_gain_ctl_workarounds_rev1_2()
2674 if (dev->phy.rev == 2) { b43_nphy_gain_ctl_workarounds_rev1_2()
2676 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, b43_nphy_gain_ctl_workarounds_rev1_2()
2680 b43_phy_write(dev, b43_nphy_gain_ctl_workarounds_rev1_2()
2686 b43_nphy_set_rf_sequence(dev, 5, rfseq_events, rfseq_delays, 3); b43_nphy_gain_ctl_workarounds_rev1_2()
2687 b43_phy_maskset(dev, B43_NPHY_OVER_DGAIN1, b43_nphy_gain_ctl_workarounds_rev1_2()
2691 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_gain_ctl_workarounds_rev1_2()
2692 b43_phy_maskset(dev, B43_PHY_N(0xC5D), 0xFF80, 4); b43_nphy_gain_ctl_workarounds_rev1_2()
2696 static void b43_nphy_gain_ctl_workarounds(struct b43_wldev *dev) b43_nphy_gain_ctl_workarounds() argument
2698 if (dev->phy.rev >= 19) b43_nphy_gain_ctl_workarounds()
2699 b43_nphy_gain_ctl_workarounds_rev19(dev); b43_nphy_gain_ctl_workarounds()
2700 else if (dev->phy.rev >= 7) b43_nphy_gain_ctl_workarounds()
2701 b43_nphy_gain_ctl_workarounds_rev7(dev); b43_nphy_gain_ctl_workarounds()
2702 else if (dev->phy.rev >= 3) b43_nphy_gain_ctl_workarounds()
2703 b43_nphy_gain_ctl_workarounds_rev3(dev); b43_nphy_gain_ctl_workarounds()
2705 b43_nphy_gain_ctl_workarounds_rev1_2(dev); b43_nphy_gain_ctl_workarounds()
2708 static void b43_nphy_workarounds_rev7plus(struct b43_wldev *dev) b43_nphy_workarounds_rev7plus() argument
2710 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_workarounds_rev7plus()
2711 struct b43_phy *phy = &dev->phy; b43_nphy_workarounds_rev7plus()
2739 b43_phy_write(dev, B43_NPHY_PHASETR_A0, 0x0125); b43_nphy_workarounds_rev7plus()
2740 b43_phy_write(dev, B43_NPHY_PHASETR_A1, 0x01b3); b43_nphy_workarounds_rev7plus()
2741 b43_phy_write(dev, B43_NPHY_PHASETR_A2, 0x0105); b43_nphy_workarounds_rev7plus()
2742 b43_phy_write(dev, B43_NPHY_PHASETR_B0, 0x016e); b43_nphy_workarounds_rev7plus()
2743 b43_phy_write(dev, B43_NPHY_PHASETR_B1, 0x00cd); b43_nphy_workarounds_rev7plus()
2744 b43_phy_write(dev, B43_NPHY_PHASETR_B2, 0x0020); b43_nphy_workarounds_rev7plus()
2747 b43_phy_set(dev, B43_NPHY_FINERX2_CGC, 0x10); b43_nphy_workarounds_rev7plus()
2748 b43_phy_maskset(dev, B43_NPHY_FREQGAIN0, 0xFF80, 0x0020); b43_nphy_workarounds_rev7plus()
2749 b43_phy_maskset(dev, B43_NPHY_FREQGAIN0, 0x80FF, 0x2700); b43_nphy_workarounds_rev7plus()
2750 b43_phy_maskset(dev, B43_NPHY_FREQGAIN1, 0xFF80, 0x002E); b43_nphy_workarounds_rev7plus()
2751 b43_phy_maskset(dev, B43_NPHY_FREQGAIN1, 0x80FF, 0x3300); b43_nphy_workarounds_rev7plus()
2752 b43_phy_maskset(dev, B43_NPHY_FREQGAIN2, 0xFF80, 0x0037); b43_nphy_workarounds_rev7plus()
2753 b43_phy_maskset(dev, B43_NPHY_FREQGAIN2, 0x80FF, 0x3A00); b43_nphy_workarounds_rev7plus()
2754 b43_phy_maskset(dev, B43_NPHY_FREQGAIN3, 0xFF80, 0x003C); b43_nphy_workarounds_rev7plus()
2755 b43_phy_maskset(dev, B43_NPHY_FREQGAIN3, 0x80FF, 0x3E00); b43_nphy_workarounds_rev7plus()
2756 b43_phy_maskset(dev, B43_NPHY_FREQGAIN4, 0xFF80, 0x003E); b43_nphy_workarounds_rev7plus()
2757 b43_phy_maskset(dev, B43_NPHY_FREQGAIN4, 0x80FF, 0x3F00); b43_nphy_workarounds_rev7plus()
2758 b43_phy_maskset(dev, B43_NPHY_FREQGAIN5, 0xFF80, 0x0040); b43_nphy_workarounds_rev7plus()
2759 b43_phy_maskset(dev, B43_NPHY_FREQGAIN5, 0x80FF, 0x4000); b43_nphy_workarounds_rev7plus()
2760 b43_phy_maskset(dev, B43_NPHY_FREQGAIN6, 0xFF80, 0x0040); b43_nphy_workarounds_rev7plus()
2761 b43_phy_maskset(dev, B43_NPHY_FREQGAIN6, 0x80FF, 0x4000); b43_nphy_workarounds_rev7plus()
2762 b43_phy_maskset(dev, B43_NPHY_FREQGAIN7, 0xFF80, 0x0040); b43_nphy_workarounds_rev7plus()
2763 b43_phy_maskset(dev, B43_NPHY_FREQGAIN7, 0x80FF, 0x4000); b43_nphy_workarounds_rev7plus()
2767 b43_phy_write(dev, B43_NPHY_FORCEFRONT0, 0x7ff); b43_nphy_workarounds_rev7plus()
2768 b43_phy_write(dev, B43_NPHY_FORCEFRONT1, 0x7ff); b43_nphy_workarounds_rev7plus()
2770 b43_phy_write(dev, B43_NPHY_FORCEFRONT0, 0x1B0); b43_nphy_workarounds_rev7plus()
2771 b43_phy_write(dev, B43_NPHY_FORCEFRONT1, 0x1B0); b43_nphy_workarounds_rev7plus()
2775 b43_phy_maskset(dev, B43_NPHY_TXTAILCNT, ~0xFF, 0xa0); b43_nphy_workarounds_rev7plus()
2777 b43_phy_maskset(dev, B43_NPHY_TXTAILCNT, ~0xFF, 0x72); b43_nphy_workarounds_rev7plus()
2779 b43_ntab_write(dev, B43_NTAB16(8, 0x00), 2); b43_nphy_workarounds_rev7plus()
2780 b43_ntab_write(dev, B43_NTAB16(8, 0x10), 2); b43_nphy_workarounds_rev7plus()
2781 tmp32 = b43_ntab_read(dev, B43_NTAB32(30, 0)); b43_nphy_workarounds_rev7plus()
2783 b43_ntab_write(dev, B43_NTAB32(30, 0), tmp32); b43_nphy_workarounds_rev7plus()
2784 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x15d), 3, ntab7_15e_16e); b43_nphy_workarounds_rev7plus()
2785 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x16d), 3, ntab7_15e_16e); b43_nphy_workarounds_rev7plus()
2787 b43_nphy_set_rf_sequence(dev, 1, tx2rx_events, tx2rx_delays, b43_nphy_workarounds_rev7plus()
2789 if (b43_nphy_ipa(dev)) b43_nphy_workarounds_rev7plus()
2790 b43_nphy_set_rf_sequence(dev, 0, rx2tx_events_ipa, b43_nphy_workarounds_rev7plus()
2793 b43_phy_maskset(dev, B43_NPHY_EPS_OVERRIDEI_0, 0x3FFF, 0x4000); b43_nphy_workarounds_rev7plus()
2794 b43_phy_maskset(dev, B43_NPHY_EPS_OVERRIDEI_1, 0x3FFF, 0x4000); b43_nphy_workarounds_rev7plus()
2797 lpf_ofdm_20mhz[core] = b43_nphy_read_lpf_ctl(dev, 0x154 + core * 0x10); b43_nphy_workarounds_rev7plus()
2798 lpf_ofdm_40mhz[core] = b43_nphy_read_lpf_ctl(dev, 0x159 + core * 0x10); b43_nphy_workarounds_rev7plus()
2799 lpf_11b[core] = b43_nphy_read_lpf_ctl(dev, 0x152 + core * 0x10); b43_nphy_workarounds_rev7plus()
2802 bcap_val = b43_radio_read(dev, R2057_RCCAL_BCAP_VAL); b43_nphy_workarounds_rev7plus()
2803 scap_val = b43_radio_read(dev, R2057_RCCAL_SCAP_VAL); b43_nphy_workarounds_rev7plus()
2805 if (b43_nphy_ipa(dev)) { b43_nphy_workarounds_rev7plus()
2806 bool ghz2 = b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ; b43_nphy_workarounds_rev7plus()
2811 if (phy->rev == 8 && b43_is_40mhz(dev)) { b43_nphy_workarounds_rev7plus()
2834 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_workarounds_rev7plus()
2945 b43_ntab_write(dev, B43_NTAB16(7, 0x152 + core * 16), b43_nphy_workarounds_rev7plus()
2947 b43_ntab_write(dev, B43_NTAB16(7, 0x153 + core * 16), b43_nphy_workarounds_rev7plus()
2949 b43_ntab_write(dev, B43_NTAB16(7, 0x154 + core * 16), b43_nphy_workarounds_rev7plus()
2951 b43_ntab_write(dev, B43_NTAB16(7, 0x155 + core * 16), b43_nphy_workarounds_rev7plus()
2953 b43_ntab_write(dev, B43_NTAB16(7, 0x156 + core * 16), b43_nphy_workarounds_rev7plus()
2955 b43_ntab_write(dev, B43_NTAB16(7, 0x157 + core * 16), b43_nphy_workarounds_rev7plus()
2957 b43_ntab_write(dev, B43_NTAB16(7, 0x158 + core * 16), b43_nphy_workarounds_rev7plus()
2959 b43_ntab_write(dev, B43_NTAB16(7, 0x159 + core * 16), b43_nphy_workarounds_rev7plus()
2964 b43_phy_write(dev, 0x32F, 0x3); b43_nphy_workarounds_rev7plus()
2967 b43_nphy_rf_ctl_override_rev7(dev, 4, 1, 3, false, 0); b43_nphy_workarounds_rev7plus()
2972 b43_radio_write(dev, 0x5, 0x05); b43_nphy_workarounds_rev7plus()
2973 b43_radio_write(dev, 0x6, 0x30); b43_nphy_workarounds_rev7plus()
2974 b43_radio_write(dev, 0x7, 0x00); b43_nphy_workarounds_rev7plus()
2975 b43_radio_set(dev, 0x4f, 0x1); b43_nphy_workarounds_rev7plus()
2976 b43_radio_set(dev, 0xd4, 0x1); b43_nphy_workarounds_rev7plus()
2985 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_workarounds_rev7plus()
2988 b43_radio_write(dev, 0x5F, bias); b43_nphy_workarounds_rev7plus()
2989 b43_radio_write(dev, 0x64, conv); b43_nphy_workarounds_rev7plus()
2990 b43_radio_write(dev, 0x66, filt); b43_nphy_workarounds_rev7plus()
2992 b43_radio_write(dev, 0xE8, bias); b43_nphy_workarounds_rev7plus()
2993 b43_radio_write(dev, 0xE9, conv); b43_nphy_workarounds_rev7plus()
2994 b43_radio_write(dev, 0xEB, filt); b43_nphy_workarounds_rev7plus()
3000 if (b43_nphy_ipa(dev)) { b43_nphy_workarounds_rev7plus()
3001 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_workarounds_rev7plus()
3006 b43_radio_write(dev, 0x51, b43_nphy_workarounds_rev7plus()
3009 b43_radio_write(dev, 0xd6, b43_nphy_workarounds_rev7plus()
3017 b43_radio_write(dev, 0x64, b43_nphy_workarounds_rev7plus()
3019 b43_radio_write(dev, 0x5F, b43_nphy_workarounds_rev7plus()
3021 b43_radio_write(dev, 0x66, b43_nphy_workarounds_rev7plus()
3023 b43_radio_write(dev, 0x59, b43_nphy_workarounds_rev7plus()
3025 b43_radio_write(dev, 0x80, b43_nphy_workarounds_rev7plus()
3028 b43_radio_write(dev, 0x69, b43_nphy_workarounds_rev7plus()
3030 b43_radio_write(dev, 0xE8, b43_nphy_workarounds_rev7plus()
3032 b43_radio_write(dev, 0xEB, b43_nphy_workarounds_rev7plus()
3034 b43_radio_write(dev, 0xDE, b43_nphy_workarounds_rev7plus()
3036 b43_radio_write(dev, 0x105, b43_nphy_workarounds_rev7plus()
3043 if (!b43_is_40mhz(dev)) { b43_nphy_workarounds_rev7plus()
3044 b43_radio_write(dev, 0x5F, 0x14); b43_nphy_workarounds_rev7plus()
3045 b43_radio_write(dev, 0xE8, 0x12); b43_nphy_workarounds_rev7plus()
3047 b43_radio_write(dev, 0x5F, 0x16); b43_nphy_workarounds_rev7plus()
3048 b43_radio_write(dev, 0xE8, 0x16); b43_nphy_workarounds_rev7plus()
3055 b43_radio_write(dev, o + R2057_IPA2G_CASCONV_CORE0, 0x13); b43_nphy_workarounds_rev7plus()
3056 b43_radio_write(dev, o + R2057_TXMIX2G_TUNE_BOOST_PU_CORE0, 0x21); b43_nphy_workarounds_rev7plus()
3057 b43_radio_write(dev, o + R2057_IPA2G_BIAS_FILTER_CORE0, 0xff); b43_nphy_workarounds_rev7plus()
3058 b43_radio_write(dev, o + R2057_PAD2G_IDACS_CORE0, 0x88); b43_nphy_workarounds_rev7plus()
3059 b43_radio_write(dev, o + R2057_PAD2G_TUNE_PUS_CORE0, 0x23); b43_nphy_workarounds_rev7plus()
3060 b43_radio_write(dev, o + R2057_IPA2G_IMAIN_CORE0, 0x16); b43_nphy_workarounds_rev7plus()
3061 b43_radio_write(dev, o + R2057_PAD_BIAS_FILTER_BWS_CORE0, 0x3e); b43_nphy_workarounds_rev7plus()
3062 b43_radio_write(dev, o + R2057_BACKUP1_CORE0, 0x10); b43_nphy_workarounds_rev7plus()
3070 b43_radio_write(dev, 0x7D, 0xFF); b43_nphy_workarounds_rev7plus()
3071 b43_radio_write(dev, 0xFE, 0xFF); b43_nphy_workarounds_rev7plus()
3078 b43_radio_write(dev, 0x5c, 0x61); b43_nphy_workarounds_rev7plus()
3079 b43_radio_write(dev, 0x51, 0x70); b43_nphy_workarounds_rev7plus()
3081 b43_radio_write(dev, 0xe1, 0x61); b43_nphy_workarounds_rev7plus()
3082 b43_radio_write(dev, 0xd6, 0x70); b43_nphy_workarounds_rev7plus()
3089 b43_ntab_write(dev, B43_NTAB16(8, 0x05), 0x20); b43_nphy_workarounds_rev7plus()
3090 b43_ntab_write(dev, B43_NTAB16(8, 0x15), 0x20); b43_nphy_workarounds_rev7plus()
3093 b43_radio_write(dev, 0x1a1, 0x00); b43_nphy_workarounds_rev7plus()
3094 b43_radio_write(dev, 0x1a2, 0x3f); b43_nphy_workarounds_rev7plus()
3095 b43_radio_write(dev, 0x1a6, 0x3f); b43_nphy_workarounds_rev7plus()
3097 b43_radio_write(dev, 0x1a7, 0x00); b43_nphy_workarounds_rev7plus()
3098 b43_radio_write(dev, 0x1ab, 0x3f); b43_nphy_workarounds_rev7plus()
3099 b43_radio_write(dev, 0x1ac, 0x3f); b43_nphy_workarounds_rev7plus()
3103 b43_phy_set(dev, B43_NPHY_AFECTL_C1, 0x4); b43_nphy_workarounds_rev7plus()
3104 b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x4); b43_nphy_workarounds_rev7plus()
3105 b43_phy_set(dev, B43_NPHY_AFECTL_C2, 0x4); b43_nphy_workarounds_rev7plus()
3106 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x4); b43_nphy_workarounds_rev7plus()
3108 b43_phy_mask(dev, B43_NPHY_AFECTL_C1, ~0x1); b43_nphy_workarounds_rev7plus()
3109 b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x1); b43_nphy_workarounds_rev7plus()
3110 b43_phy_mask(dev, B43_NPHY_AFECTL_C2, ~0x1); b43_nphy_workarounds_rev7plus()
3111 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x1); b43_nphy_workarounds_rev7plus()
3112 b43_ntab_write(dev, B43_NTAB16(8, 0x05), 0); b43_nphy_workarounds_rev7plus()
3113 b43_ntab_write(dev, B43_NTAB16(8, 0x15), 0); b43_nphy_workarounds_rev7plus()
3115 b43_phy_mask(dev, B43_NPHY_AFECTL_C1, ~0x4); b43_nphy_workarounds_rev7plus()
3116 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER1, ~0x4); b43_nphy_workarounds_rev7plus()
3117 b43_phy_mask(dev, B43_NPHY_AFECTL_C2, ~0x4); b43_nphy_workarounds_rev7plus()
3118 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x4); b43_nphy_workarounds_rev7plus()
3121 b43_phy_write(dev, B43_NPHY_ENDROP_TLEN, 0x2); b43_nphy_workarounds_rev7plus()
3123 b43_ntab_write(dev, B43_NTAB32(16, 0x100), 20); b43_nphy_workarounds_rev7plus()
3124 b43_ntab_write_bulk(dev, B43_NTAB8(7, 0x138), 2, ntab7_138_146); b43_nphy_workarounds_rev7plus()
3125 b43_ntab_write(dev, B43_NTAB16(7, 0x141), 0x77); b43_nphy_workarounds_rev7plus()
3126 b43_ntab_write_bulk(dev, B43_NTAB8(7, 0x133), 3, ntab7_133); b43_nphy_workarounds_rev7plus()
3127 b43_ntab_write_bulk(dev, B43_NTAB8(7, 0x146), 2, ntab7_138_146); b43_nphy_workarounds_rev7plus()
3128 b43_ntab_write(dev, B43_NTAB16(7, 0x123), 0x77); b43_nphy_workarounds_rev7plus()
3129 b43_ntab_write(dev, B43_NTAB16(7, 0x12A), 0x77); b43_nphy_workarounds_rev7plus()
3131 b43_ntab_read_bulk(dev, B43_NTAB32(16, 0x02), 1, noise_tbl); b43_nphy_workarounds_rev7plus()
3132 noise_tbl[1] = b43_is_40mhz(dev) ? 0x14D : 0x18D; b43_nphy_workarounds_rev7plus()
3133 b43_ntab_write_bulk(dev, B43_NTAB32(16, 0x02), 2, noise_tbl); b43_nphy_workarounds_rev7plus()
3135 b43_ntab_read_bulk(dev, B43_NTAB32(16, 0x7E), 1, noise_tbl); b43_nphy_workarounds_rev7plus()
3136 noise_tbl[1] = b43_is_40mhz(dev) ? 0x14D : 0x18D; b43_nphy_workarounds_rev7plus()
3137 b43_ntab_write_bulk(dev, B43_NTAB32(16, 0x7E), 2, noise_tbl); b43_nphy_workarounds_rev7plus()
3139 b43_nphy_gain_ctl_workarounds(dev); b43_nphy_workarounds_rev7plus()
3142 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x08), 4, b43_nphy_workarounds_rev7plus()
3144 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x18), 4, b43_nphy_workarounds_rev7plus()
3146 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x0C), 4, b43_nphy_workarounds_rev7plus()
3148 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x1C), 4, b43_nphy_workarounds_rev7plus()
3153 static void b43_nphy_workarounds_rev3plus(struct b43_wldev *dev) b43_nphy_workarounds_rev3plus() argument
3155 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_workarounds_rev3plus()
3156 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_workarounds_rev3plus()
3188 b43_phy_write(dev, B43_NPHY_FORCEFRONT0, 0x1f8); b43_nphy_workarounds_rev3plus()
3189 b43_phy_write(dev, B43_NPHY_FORCEFRONT1, 0x1f8); b43_nphy_workarounds_rev3plus()
3191 tmp32 = b43_ntab_read(dev, B43_NTAB32(30, 0)); b43_nphy_workarounds_rev3plus()
3193 b43_ntab_write(dev, B43_NTAB32(30, 0), tmp32); b43_nphy_workarounds_rev3plus()
3195 b43_phy_write(dev, B43_NPHY_PHASETR_A0, 0x0125); b43_nphy_workarounds_rev3plus()
3196 b43_phy_write(dev, B43_NPHY_PHASETR_A1, 0x01B3); b43_nphy_workarounds_rev3plus()
3197 b43_phy_write(dev, B43_NPHY_PHASETR_A2, 0x0105); b43_nphy_workarounds_rev3plus()
3198 b43_phy_write(dev, B43_NPHY_PHASETR_B0, 0x016E); b43_nphy_workarounds_rev3plus()
3199 b43_phy_write(dev, B43_NPHY_PHASETR_B1, 0x00CD); b43_nphy_workarounds_rev3plus()
3200 b43_phy_write(dev, B43_NPHY_PHASETR_B2, 0x0020); b43_nphy_workarounds_rev3plus()
3202 b43_phy_write(dev, B43_NPHY_REV3_C1_CLIP_LOGAIN_B, 0x000C); b43_nphy_workarounds_rev3plus()
3203 b43_phy_write(dev, B43_NPHY_REV3_C2_CLIP_LOGAIN_B, 0x000C); b43_nphy_workarounds_rev3plus()
3206 b43_nphy_set_rf_sequence(dev, 1, tx2rx_events, tx2rx_delays, b43_nphy_workarounds_rev3plus()
3210 if (b43_nphy_ipa(dev)) b43_nphy_workarounds_rev3plus()
3211 b43_nphy_set_rf_sequence(dev, 0, rx2tx_events_ipa, b43_nphy_workarounds_rev3plus()
3215 if (b43_nphy_ipa(dev)) { b43_nphy_workarounds_rev3plus()
3220 b43_nphy_set_rf_sequence(dev, 0, rx2tx_events, rx2tx_delays, b43_nphy_workarounds_rev3plus()
3224 tmp16 = (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) ? b43_nphy_workarounds_rev3plus()
3226 b43_phy_write(dev, B43_NPHY_ENDROP_TLEN, tmp16); b43_nphy_workarounds_rev3plus()
3228 b43_phy_maskset(dev, B43_NPHY_SGILTRNOFFSET, 0xF0FF, 0x0700); b43_nphy_workarounds_rev3plus()
3230 if (!b43_is_40mhz(dev)) { b43_nphy_workarounds_rev3plus()
3231 b43_ntab_write(dev, B43_NTAB32(16, 3), 0x18D); b43_nphy_workarounds_rev3plus()
3232 b43_ntab_write(dev, B43_NTAB32(16, 127), 0x18D); b43_nphy_workarounds_rev3plus()
3234 b43_ntab_write(dev, B43_NTAB32(16, 3), 0x14D); b43_nphy_workarounds_rev3plus()
3235 b43_ntab_write(dev, B43_NTAB32(16, 127), 0x14D); b43_nphy_workarounds_rev3plus()
3238 b43_nphy_gain_ctl_workarounds(dev); b43_nphy_workarounds_rev3plus()
3240 b43_ntab_write(dev, B43_NTAB16(8, 0), 2); b43_nphy_workarounds_rev3plus()
3241 b43_ntab_write(dev, B43_NTAB16(8, 16), 2); b43_nphy_workarounds_rev3plus()
3243 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_workarounds_rev3plus()
3251 if (!(dev->phy.rev >= 4 && b43_nphy_workarounds_rev3plus()
3252 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)) b43_nphy_workarounds_rev3plus()
3257 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x08), 4, vmid); b43_nphy_workarounds_rev3plus()
3258 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x18), 4, vmid); b43_nphy_workarounds_rev3plus()
3259 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x0c), 4, gain); b43_nphy_workarounds_rev3plus()
3260 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x1c), 4, gain); b43_nphy_workarounds_rev3plus()
3263 if (dev->phy.rev >= 6) { b43_nphy_workarounds_rev3plus()
3264 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_workarounds_rev3plus()
3269 } else if (dev->phy.rev == 5) { b43_nphy_workarounds_rev3plus()
3273 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x08), 4, vmid); b43_nphy_workarounds_rev3plus()
3274 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x18), 4, vmid); b43_nphy_workarounds_rev3plus()
3275 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x0c), 4, gain); b43_nphy_workarounds_rev3plus()
3276 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x1c), 4, gain); b43_nphy_workarounds_rev3plus()
3280 if (b43_current_band(dev->wl) != IEEE80211_BAND_2GHZ) { b43_nphy_workarounds_rev3plus()
3301 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x08), 4, vmid); b43_nphy_workarounds_rev3plus()
3302 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x0c), 4, gain); b43_nphy_workarounds_rev3plus()
3304 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x18), 4, vmid); b43_nphy_workarounds_rev3plus()
3305 b43_ntab_write_bulk(dev, B43_NTAB16(8, 0x1c), 4, gain); b43_nphy_workarounds_rev3plus()
3309 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_MAST_BIAS, 0x00); b43_nphy_workarounds_rev3plus()
3310 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_MAST_BIAS, 0x00); b43_nphy_workarounds_rev3plus()
3311 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_BIAS_MAIN, 0x06); b43_nphy_workarounds_rev3plus()
3312 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_BIAS_MAIN, 0x06); b43_nphy_workarounds_rev3plus()
3313 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_BIAS_AUX, 0x07); b43_nphy_workarounds_rev3plus()
3314 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_BIAS_AUX, 0x07); b43_nphy_workarounds_rev3plus()
3315 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_LOB_BIAS, 0x88); b43_nphy_workarounds_rev3plus()
3316 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_LOB_BIAS, 0x88); b43_nphy_workarounds_rev3plus()
3317 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_CMFB_IDAC, 0x00); b43_nphy_workarounds_rev3plus()
3318 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_CMFB_IDAC, 0x00); b43_nphy_workarounds_rev3plus()
3319 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXG_CMFB_IDAC, 0x00); b43_nphy_workarounds_rev3plus()
3320 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXG_CMFB_IDAC, 0x00); b43_nphy_workarounds_rev3plus()
3325 b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) || b43_nphy_workarounds_rev3plus()
3327 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)) b43_nphy_workarounds_rev3plus()
3331 b43_ntab_write(dev, B43_NTAB32(30, 1), tmp32); b43_nphy_workarounds_rev3plus()
3332 b43_ntab_write(dev, B43_NTAB32(30, 2), tmp32); b43_nphy_workarounds_rev3plus()
3333 b43_ntab_write(dev, B43_NTAB32(30, 3), tmp32); b43_nphy_workarounds_rev3plus()
3335 if (dev->phy.rev == 4 && b43_nphy_workarounds_rev3plus()
3336 b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_workarounds_rev3plus()
3337 b43_radio_write(dev, B2056_TX0 | B2056_TX_GMBB_IDAC, b43_nphy_workarounds_rev3plus()
3339 b43_radio_write(dev, B2056_TX1 | B2056_TX_GMBB_IDAC, b43_nphy_workarounds_rev3plus()
3344 b43_phy_write(dev, B43_NPHY_ED_CRS40ASSERTTHRESH0, 0x03eb); b43_nphy_workarounds_rev3plus()
3345 b43_phy_write(dev, B43_NPHY_ED_CRS40ASSERTTHRESH1, 0x03eb); b43_nphy_workarounds_rev3plus()
3346 b43_phy_write(dev, B43_NPHY_ED_CRS40DEASSERTTHRESH0, 0x0341); b43_nphy_workarounds_rev3plus()
3347 b43_phy_write(dev, B43_NPHY_ED_CRS40DEASSERTTHRESH1, 0x0341); b43_nphy_workarounds_rev3plus()
3348 b43_phy_write(dev, B43_NPHY_ED_CRS20LASSERTTHRESH0, 0x042b); b43_nphy_workarounds_rev3plus()
3349 b43_phy_write(dev, B43_NPHY_ED_CRS20LASSERTTHRESH1, 0x042b); b43_nphy_workarounds_rev3plus()
3350 b43_phy_write(dev, B43_NPHY_ED_CRS20LDEASSERTTHRESH0, 0x0381); b43_nphy_workarounds_rev3plus()
3351 b43_phy_write(dev, B43_NPHY_ED_CRS20LDEASSERTTHRESH1, 0x0381); b43_nphy_workarounds_rev3plus()
3352 b43_phy_write(dev, B43_NPHY_ED_CRS20UASSERTTHRESH0, 0x042b); b43_nphy_workarounds_rev3plus()
3353 b43_phy_write(dev, B43_NPHY_ED_CRS20UASSERTTHRESH1, 0x042b); b43_nphy_workarounds_rev3plus()
3354 b43_phy_write(dev, B43_NPHY_ED_CRS20UDEASSERTTHRESH0, 0x0381); b43_nphy_workarounds_rev3plus()
3355 b43_phy_write(dev, B43_NPHY_ED_CRS20UDEASSERTTHRESH1, 0x0381); b43_nphy_workarounds_rev3plus()
3357 if (dev->phy.rev >= 6 && sprom->boardflags2_lo & B43_BFL2_SINGLEANT_CCK) b43_nphy_workarounds_rev3plus()
3361 static void b43_nphy_workarounds_rev1_2(struct b43_wldev *dev) b43_nphy_workarounds_rev1_2() argument
3363 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_workarounds_rev1_2()
3364 struct b43_phy *phy = &dev->phy; b43_nphy_workarounds_rev1_2()
3374 dev->dev->board_type == BCMA_BOARD_TYPE_BCM943224M93) { b43_nphy_workarounds_rev1_2()
3379 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ && b43_nphy_workarounds_rev1_2()
3381 b43_radio_mask(dev, B2055_C1_TX_RF_SPARE, ~0x8); b43_nphy_workarounds_rev1_2()
3382 b43_radio_mask(dev, B2055_C2_TX_RF_SPARE, ~0x8); b43_nphy_workarounds_rev1_2()
3384 b43_radio_set(dev, B2055_C1_TX_RF_SPARE, 0x8); b43_nphy_workarounds_rev1_2()
3385 b43_radio_set(dev, B2055_C2_TX_RF_SPARE, 0x8); b43_nphy_workarounds_rev1_2()
3388 b43_ntab_write(dev, B43_NTAB16(8, 0x00), 0x000A); b43_nphy_workarounds_rev1_2()
3389 b43_ntab_write(dev, B43_NTAB16(8, 0x10), 0x000A); b43_nphy_workarounds_rev1_2()
3390 if (dev->phy.rev < 3) { b43_nphy_workarounds_rev1_2()
3391 b43_ntab_write(dev, B43_NTAB16(8, 0x02), 0xCDAA); b43_nphy_workarounds_rev1_2()
3392 b43_ntab_write(dev, B43_NTAB16(8, 0x12), 0xCDAA); b43_nphy_workarounds_rev1_2()
3395 if (dev->phy.rev < 2) { b43_nphy_workarounds_rev1_2()
3396 b43_ntab_write(dev, B43_NTAB16(8, 0x08), 0x0000); b43_nphy_workarounds_rev1_2()
3397 b43_ntab_write(dev, B43_NTAB16(8, 0x18), 0x0000); b43_nphy_workarounds_rev1_2()
3398 b43_ntab_write(dev, B43_NTAB16(8, 0x07), 0x7AAB); b43_nphy_workarounds_rev1_2()
3399 b43_ntab_write(dev, B43_NTAB16(8, 0x17), 0x7AAB); b43_nphy_workarounds_rev1_2()
3400 b43_ntab_write(dev, B43_NTAB16(8, 0x06), 0x0800); b43_nphy_workarounds_rev1_2()
3401 b43_ntab_write(dev, B43_NTAB16(8, 0x16), 0x0800); b43_nphy_workarounds_rev1_2()
3404 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_LO1, 0x2D8); b43_nphy_workarounds_rev1_2()
3405 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP1, 0x301); b43_nphy_workarounds_rev1_2()
3406 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_LO2, 0x2D8); b43_nphy_workarounds_rev1_2()
3407 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP2, 0x301); b43_nphy_workarounds_rev1_2()
3409 b43_nphy_set_rf_sequence(dev, 0, events1, delays1, 7); b43_nphy_workarounds_rev1_2()
3410 b43_nphy_set_rf_sequence(dev, 1, events2, delays2, 7); b43_nphy_workarounds_rev1_2()
3412 b43_nphy_gain_ctl_workarounds(dev); b43_nphy_workarounds_rev1_2()
3414 if (dev->phy.rev < 2) { b43_nphy_workarounds_rev1_2()
3415 if (b43_phy_read(dev, B43_NPHY_RXCTL) & 0x2) b43_nphy_workarounds_rev1_2()
3416 b43_hf_write(dev, b43_hf_read(dev) | b43_nphy_workarounds_rev1_2()
3418 } else if (dev->phy.rev == 2) { b43_nphy_workarounds_rev1_2()
3419 b43_phy_write(dev, B43_NPHY_CRSCHECK2, 0); b43_nphy_workarounds_rev1_2()
3420 b43_phy_write(dev, B43_NPHY_CRSCHECK3, 0); b43_nphy_workarounds_rev1_2()
3423 if (dev->phy.rev < 2) b43_nphy_workarounds_rev1_2()
3424 b43_phy_mask(dev, B43_NPHY_SCRAM_SIGCTL, b43_nphy_workarounds_rev1_2()
3428 b43_phy_write(dev, B43_NPHY_PHASETR_A0, 0x125); b43_nphy_workarounds_rev1_2()
3429 b43_phy_write(dev, B43_NPHY_PHASETR_A1, 0x1B3); b43_nphy_workarounds_rev1_2()
3430 b43_phy_write(dev, B43_NPHY_PHASETR_A2, 0x105); b43_nphy_workarounds_rev1_2()
3431 b43_phy_write(dev, B43_NPHY_PHASETR_B0, 0x16E); b43_nphy_workarounds_rev1_2()
3432 b43_phy_write(dev, B43_NPHY_PHASETR_B1, 0xCD); b43_nphy_workarounds_rev1_2()
3433 b43_phy_write(dev, B43_NPHY_PHASETR_B2, 0x20); b43_nphy_workarounds_rev1_2()
3435 if (dev->phy.rev < 3) { b43_nphy_workarounds_rev1_2()
3436 b43_phy_mask(dev, B43_NPHY_PIL_DW1, b43_nphy_workarounds_rev1_2()
3438 b43_phy_write(dev, B43_NPHY_TXF_20CO_S2B1, 0xB5); b43_nphy_workarounds_rev1_2()
3439 b43_phy_write(dev, B43_NPHY_TXF_20CO_S2B2, 0xA4); b43_nphy_workarounds_rev1_2()
3440 b43_phy_write(dev, B43_NPHY_TXF_20CO_S2B3, 0x00); b43_nphy_workarounds_rev1_2()
3443 if (dev->phy.rev == 2) b43_nphy_workarounds_rev1_2()
3444 b43_phy_set(dev, B43_NPHY_FINERX2_CGC, b43_nphy_workarounds_rev1_2()
3449 static void b43_nphy_workarounds(struct b43_wldev *dev) b43_nphy_workarounds() argument
3451 struct b43_phy *phy = &dev->phy; b43_nphy_workarounds()
3454 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_nphy_workarounds()
3455 b43_nphy_classifier(dev, 1, 0); b43_nphy_workarounds()
3457 b43_nphy_classifier(dev, 1, 1); b43_nphy_workarounds()
3460 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_workarounds()
3462 b43_phy_set(dev, B43_NPHY_IQFLIP, b43_nphy_workarounds()
3466 if (dev->phy.rev >= 7) b43_nphy_workarounds()
3467 b43_nphy_workarounds_rev7plus(dev); b43_nphy_workarounds()
3468 else if (dev->phy.rev >= 3) b43_nphy_workarounds()
3469 b43_nphy_workarounds_rev3plus(dev); b43_nphy_workarounds()
3471 b43_nphy_workarounds_rev1_2(dev); b43_nphy_workarounds()
3474 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_workarounds()
3485 static int b43_nphy_tx_tone(struct b43_wldev *dev, u32 freq, u16 max_val, b43_nphy_tx_tone() argument
3488 u16 samp = b43_nphy_gen_load_samples(dev, freq, max_val, dac_test); b43_nphy_tx_tone()
3491 b43_nphy_run_samples(dev, samp, 0xFFFF, 0, iqmode, dac_test, b43_nphy_tx_tone()
3497 static void b43_nphy_update_txrx_chain(struct b43_wldev *dev) b43_nphy_update_txrx_chain() argument
3499 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_update_txrx_chain()
3512 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, b43_nphy_update_txrx_chain()
3517 b43_phy_set(dev, B43_NPHY_RFSEQMODE, b43_nphy_update_txrx_chain()
3520 b43_phy_mask(dev, B43_NPHY_RFSEQMODE, b43_nphy_update_txrx_chain()
3525 static void b43_nphy_stop_playback(struct b43_wldev *dev) b43_nphy_stop_playback() argument
3527 struct b43_phy *phy = &dev->phy; b43_nphy_stop_playback()
3528 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_stop_playback()
3532 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_stop_playback()
3534 tmp = b43_phy_read(dev, B43_NPHY_SAMP_STAT); b43_nphy_stop_playback()
3536 b43_phy_set(dev, B43_NPHY_SAMP_CMD, B43_NPHY_SAMP_CMD_STOP); b43_nphy_stop_playback()
3538 b43_phy_mask(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x7FFF); b43_nphy_stop_playback()
3540 b43_phy_mask(dev, B43_NPHY_SAMP_CMD, ~0x0004); b43_nphy_stop_playback()
3544 b43_ntab_write(dev, B43_NTAB16(15, 87), tmp); b43_nphy_stop_playback()
3550 b43_nphy_rf_ctl_override_rev19(dev, 0x80, 0, 0, true, b43_nphy_stop_playback()
3553 b43_nphy_rf_ctl_override_rev7(dev, 0x80, 0, 0, true, 1); b43_nphy_stop_playback()
3558 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_stop_playback()
3562 static void b43_nphy_iq_cal_gain_params(struct b43_wldev *dev, u16 core, b43_nphy_iq_cal_gain_params() argument
3566 struct b43_phy *phy = &dev->phy; b43_nphy_iq_cal_gain_params()
3570 if (dev->phy.rev >= 3) { b43_nphy_iq_cal_gain_params()
3589 indx = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? b43_nphy_iq_cal_gain_params()
3611 static void b43_nphy_tx_power_ctrl(struct b43_wldev *dev, bool enable) b43_nphy_tx_power_ctrl() argument
3613 struct b43_phy *phy = &dev->phy; b43_nphy_tx_power_ctrl()
3614 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_power_ctrl()
3617 enum ieee80211_band band = b43_current_band(dev->wl); b43_nphy_tx_power_ctrl()
3620 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_tx_power_ctrl()
3624 if (dev->phy.rev >= 3 && b43_nphy_tx_power_ctrl()
3625 (b43_phy_read(dev, B43_NPHY_TXPCTL_CMD) & b43_nphy_tx_power_ctrl()
3630 nphy->tx_pwr_idx[0] = b43_phy_read(dev, b43_nphy_tx_power_ctrl()
3632 nphy->tx_pwr_idx[1] = b43_phy_read(dev, b43_nphy_tx_power_ctrl()
3636 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x6840); b43_nphy_tx_power_ctrl()
3638 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0); b43_nphy_tx_power_ctrl()
3640 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, 0x6C40); b43_nphy_tx_power_ctrl()
3642 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, 0); b43_nphy_tx_power_ctrl()
3645 if (dev->phy.rev >= 3) b43_nphy_tx_power_ctrl()
3647 b43_phy_mask(dev, B43_NPHY_TXPCTL_CMD, ~tmp); b43_nphy_tx_power_ctrl()
3649 if (dev->phy.rev >= 3) { b43_nphy_tx_power_ctrl()
3650 b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x0100); b43_nphy_tx_power_ctrl()
3651 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x0100); b43_nphy_tx_power_ctrl()
3653 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x4000); b43_nphy_tx_power_ctrl()
3656 if (dev->phy.rev == 2) b43_nphy_tx_power_ctrl()
3657 b43_phy_maskset(dev, B43_NPHY_BPHY_CTL3, b43_nphy_tx_power_ctrl()
3659 else if (dev->phy.rev < 2) b43_nphy_tx_power_ctrl()
3660 b43_phy_maskset(dev, B43_NPHY_BPHY_CTL3, b43_nphy_tx_power_ctrl()
3663 if (dev->phy.rev < 2 && b43_is_40mhz(dev)) b43_nphy_tx_power_ctrl()
3664 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_TSSIRPSMW); b43_nphy_tx_power_ctrl()
3666 b43_ntab_write_bulk(dev, B43_NTAB16(26, 64), 84, b43_nphy_tx_power_ctrl()
3668 b43_ntab_write_bulk(dev, B43_NTAB16(27, 64), 84, b43_nphy_tx_power_ctrl()
3675 if (dev->phy.rev >= 3) { b43_nphy_tx_power_ctrl()
3680 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, ~(bmask), val); b43_nphy_tx_power_ctrl()
3686 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctrl()
3689 b43_phy_maskset(dev, B43_NPHY_TXPCTL_INIT, b43_nphy_tx_power_ctrl()
3693 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctrl()
3697 b43_phy_maskset(dev, b43_nphy_tx_power_ctrl()
3704 if (dev->phy.rev >= 3) { b43_nphy_tx_power_ctrl()
3708 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctrl()
3711 if (dev->phy.rev > 1) b43_nphy_tx_power_ctrl()
3712 b43_phy_maskset(dev, b43_nphy_tx_power_ctrl()
3722 if (dev->phy.rev >= 3) { b43_nphy_tx_power_ctrl()
3723 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER1, ~0x100); b43_nphy_tx_power_ctrl()
3724 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x100); b43_nphy_tx_power_ctrl()
3726 b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x4000); b43_nphy_tx_power_ctrl()
3729 if (dev->phy.rev == 2) b43_nphy_tx_power_ctrl()
3730 b43_phy_maskset(dev, B43_NPHY_BPHY_CTL3, ~0xFF, 0x3b); b43_nphy_tx_power_ctrl()
3731 else if (dev->phy.rev < 2) b43_nphy_tx_power_ctrl()
3732 b43_phy_maskset(dev, B43_NPHY_BPHY_CTL3, ~0xFF, 0x40); b43_nphy_tx_power_ctrl()
3734 if (dev->phy.rev < 2 && b43_is_40mhz(dev)) b43_nphy_tx_power_ctrl()
3735 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_TSSIRPSMW); b43_nphy_tx_power_ctrl()
3737 if (b43_nphy_ipa(dev)) { b43_nphy_tx_power_ctrl()
3738 b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x4); b43_nphy_tx_power_ctrl()
3739 b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x4); b43_nphy_tx_power_ctrl()
3744 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_tx_power_ctrl()
3748 static void b43_nphy_tx_power_fix(struct b43_wldev *dev) b43_nphy_tx_power_fix() argument
3750 struct b43_phy *phy = &dev->phy; b43_nphy_tx_power_fix()
3751 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_power_fix()
3752 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_tx_power_fix()
3761 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_tx_power_fix()
3764 if (dev->phy.rev >= 7) { b43_nphy_tx_power_fix()
3766 } else if (dev->phy.rev >= 3) { b43_nphy_tx_power_fix()
3773 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_tx_power_fix()
3790 if (dev->phy.rev < 7 && b43_nphy_tx_power_fix()
3802 const u32 *table = b43_nphy_get_tx_gain_table(dev); b43_nphy_tx_power_fix()
3808 if (dev->phy.rev >= 3) b43_nphy_tx_power_fix()
3813 if (dev->phy.rev >= 7) b43_nphy_tx_power_fix()
3819 if (dev->phy.rev >= 3) { b43_nphy_tx_power_fix()
3821 b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x0100); b43_nphy_tx_power_fix()
3823 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x0100); b43_nphy_tx_power_fix()
3825 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x4000); b43_nphy_tx_power_fix()
3829 b43_phy_write(dev, B43_NPHY_AFECTL_DACGAIN1, dac_gain); b43_nphy_tx_power_fix()
3831 b43_phy_write(dev, B43_NPHY_AFECTL_DACGAIN2, dac_gain); b43_nphy_tx_power_fix()
3833 b43_ntab_write(dev, B43_NTAB16(0x7, 0x110 + i), radio_gain); b43_nphy_tx_power_fix()
3835 tmp = b43_ntab_read(dev, B43_NTAB16(0xF, 0x57)); b43_nphy_tx_power_fix()
3840 b43_ntab_write(dev, B43_NTAB16(0xF, 0x57), tmp); b43_nphy_tx_power_fix()
3842 if (b43_nphy_ipa(dev)) { b43_nphy_tx_power_fix()
3846 tmp32 = b43_ntab_read(dev, B43_NTAB32(26 + i, b43_nphy_tx_power_fix()
3848 b43_phy_maskset(dev, reg, 0xE00F, (u32) tmp32 << 4); b43_nphy_tx_power_fix()
3849 b43_phy_set(dev, reg, 0x4); b43_nphy_tx_power_fix()
3853 b43_phy_mask(dev, B43_NPHY_BPHY_CTL2, ~B43_NPHY_BPHY_CTL2_LUT); b43_nphy_tx_power_fix()
3856 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_tx_power_fix()
3859 static void b43_nphy_ipa_internal_tssi_setup(struct b43_wldev *dev) b43_nphy_ipa_internal_tssi_setup() argument
3861 struct b43_phy *phy = &dev->phy; b43_nphy_ipa_internal_tssi_setup()
3871 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_ipa_internal_tssi_setup()
3872 b43_radio_write(dev, r + 0x5, 0x5); b43_nphy_ipa_internal_tssi_setup()
3873 b43_radio_write(dev, r + 0x9, 0xE); b43_nphy_ipa_internal_tssi_setup()
3875 b43_radio_write(dev, r + 0xA, 0); b43_nphy_ipa_internal_tssi_setup()
3877 b43_radio_write(dev, r + 0xB, 1); b43_nphy_ipa_internal_tssi_setup()
3879 b43_radio_write(dev, r + 0xB, 0x31); b43_nphy_ipa_internal_tssi_setup()
3881 b43_radio_write(dev, r + 0x5, 0x9); b43_nphy_ipa_internal_tssi_setup()
3882 b43_radio_write(dev, r + 0x9, 0xC); b43_nphy_ipa_internal_tssi_setup()
3883 b43_radio_write(dev, r + 0xB, 0x0); b43_nphy_ipa_internal_tssi_setup()
3885 b43_radio_write(dev, r + 0xA, 1); b43_nphy_ipa_internal_tssi_setup()
3887 b43_radio_write(dev, r + 0xA, 0x31); b43_nphy_ipa_internal_tssi_setup()
3889 b43_radio_write(dev, r + 0x6, 0); b43_nphy_ipa_internal_tssi_setup()
3890 b43_radio_write(dev, r + 0x7, 0); b43_nphy_ipa_internal_tssi_setup()
3891 b43_radio_write(dev, r + 0x8, 3); b43_nphy_ipa_internal_tssi_setup()
3892 b43_radio_write(dev, r + 0xC, 0); b43_nphy_ipa_internal_tssi_setup()
3895 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_ipa_internal_tssi_setup()
3896 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR31, 0x128); b43_nphy_ipa_internal_tssi_setup()
3898 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR31, 0x80); b43_nphy_ipa_internal_tssi_setup()
3899 b43_radio_write(dev, B2056_SYN_RESERVED_ADDR30, 0); b43_nphy_ipa_internal_tssi_setup()
3900 b43_radio_write(dev, B2056_SYN_GPIO_MASTER1, 0x29); b43_nphy_ipa_internal_tssi_setup()
3905 b43_radio_write(dev, r | B2056_TX_IQCAL_VCM_HG, 0); b43_nphy_ipa_internal_tssi_setup()
3906 b43_radio_write(dev, r | B2056_TX_IQCAL_IDAC, 0); b43_nphy_ipa_internal_tssi_setup()
3907 b43_radio_write(dev, r | B2056_TX_TSSI_VCM, 3); b43_nphy_ipa_internal_tssi_setup()
3908 b43_radio_write(dev, r | B2056_TX_TX_AMP_DET, 0); b43_nphy_ipa_internal_tssi_setup()
3909 b43_radio_write(dev, r | B2056_TX_TSSI_MISC1, 8); b43_nphy_ipa_internal_tssi_setup()
3910 b43_radio_write(dev, r | B2056_TX_TSSI_MISC2, 0); b43_nphy_ipa_internal_tssi_setup()
3911 b43_radio_write(dev, r | B2056_TX_TSSI_MISC3, 0); b43_nphy_ipa_internal_tssi_setup()
3912 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_ipa_internal_tssi_setup()
3913 b43_radio_write(dev, r | B2056_TX_TX_SSI_MASTER, b43_nphy_ipa_internal_tssi_setup()
3916 b43_radio_write(dev, r | B2056_TX_TSSIA, b43_nphy_ipa_internal_tssi_setup()
3919 b43_radio_write(dev, r | B2056_TX_TSSIG, b43_nphy_ipa_internal_tssi_setup()
3922 b43_radio_write(dev, r | B2056_TX_TSSIG, b43_nphy_ipa_internal_tssi_setup()
3924 b43_radio_write(dev, r | B2056_TX_TX_SSI_MUX, b43_nphy_ipa_internal_tssi_setup()
3927 b43_radio_write(dev, r | B2056_TX_TX_SSI_MASTER, b43_nphy_ipa_internal_tssi_setup()
3929 b43_radio_write(dev, r | B2056_TX_TSSIA, 0x31); b43_nphy_ipa_internal_tssi_setup()
3930 b43_radio_write(dev, r | B2056_TX_TSSIG, 0x0); b43_nphy_ipa_internal_tssi_setup()
3931 b43_radio_write(dev, r | B2056_TX_TX_SSI_MUX, b43_nphy_ipa_internal_tssi_setup()
3943 static void b43_nphy_tx_power_ctl_idle_tssi(struct b43_wldev *dev) b43_nphy_tx_power_ctl_idle_tssi() argument
3945 struct b43_phy *phy = &dev->phy; b43_nphy_tx_power_ctl_idle_tssi()
3946 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_power_ctl_idle_tssi()
3954 if (b43_nphy_ipa(dev)) b43_nphy_tx_power_ctl_idle_tssi()
3955 b43_nphy_ipa_internal_tssi_setup(dev); b43_nphy_tx_power_ctl_idle_tssi()
3958 b43_nphy_rf_ctl_override_rev19(dev, 0x1000, 0, 3, false, 0); b43_nphy_tx_power_ctl_idle_tssi()
3960 b43_nphy_rf_ctl_override_rev7(dev, 0x1000, 0, 3, false, 0); b43_nphy_tx_power_ctl_idle_tssi()
3962 b43_nphy_rf_ctl_override(dev, 0x2000, 0, 3, false); b43_nphy_tx_power_ctl_idle_tssi()
3964 b43_nphy_stop_playback(dev); b43_nphy_tx_power_ctl_idle_tssi()
3965 b43_nphy_tx_tone(dev, 4000, 0, false, false, false); b43_nphy_tx_power_ctl_idle_tssi()
3967 tmp = b43_nphy_poll_rssi(dev, N_RSSI_TSSI_2G, rssi, 1); b43_nphy_tx_power_ctl_idle_tssi()
3968 b43_nphy_stop_playback(dev); b43_nphy_tx_power_ctl_idle_tssi()
3970 b43_nphy_rssi_select(dev, 0, N_RSSI_W1); b43_nphy_tx_power_ctl_idle_tssi()
3973 b43_nphy_rf_ctl_override_rev19(dev, 0x1000, 0, 3, true, 0); b43_nphy_tx_power_ctl_idle_tssi()
3975 b43_nphy_rf_ctl_override_rev7(dev, 0x1000, 0, 3, true, 0); b43_nphy_tx_power_ctl_idle_tssi()
3977 b43_nphy_rf_ctl_override(dev, 0x2000, 0, 3, true); b43_nphy_tx_power_ctl_idle_tssi()
3994 static void b43_nphy_tx_prepare_adjusted_power_table(struct b43_wldev *dev) b43_nphy_tx_prepare_adjusted_power_table() argument
3996 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_prepare_adjusted_power_table()
4022 if (b43_is_40mhz(dev) && dev->phy.rev >= 5) { b43_nphy_tx_prepare_adjusted_power_table()
4026 idx = b43_is_40mhz(dev) ? 52 : 4; b43_nphy_tx_prepare_adjusted_power_table()
4030 idx = b43_is_40mhz(dev) ? 76 : 28; b43_nphy_tx_prepare_adjusted_power_table()
4033 idx = b43_is_40mhz(dev) ? 84 : 36; b43_nphy_tx_prepare_adjusted_power_table()
4036 idx = b43_is_40mhz(dev) ? 92 : 44; b43_nphy_tx_prepare_adjusted_power_table()
4055 static void b43_nphy_tx_power_ctl_setup(struct b43_wldev *dev) b43_nphy_tx_power_ctl_setup() argument
4057 struct b43_phy *phy = &dev->phy; b43_nphy_tx_power_ctl_setup()
4058 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_power_ctl_setup()
4059 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_tx_power_ctl_setup()
4073 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) { b43_nphy_tx_power_ctl_setup()
4074 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, 0x200000); b43_nphy_tx_power_ctl_setup()
4075 b43_read32(dev, B43_MMIO_MACCTL); b43_nphy_tx_power_ctl_setup()
4080 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_tx_power_ctl_setup()
4082 b43_phy_set(dev, B43_NPHY_TSSIMODE, B43_NPHY_TSSIMODE_EN); b43_nphy_tx_power_ctl_setup()
4083 if (dev->phy.rev >= 3) b43_nphy_tx_power_ctl_setup()
4084 b43_phy_mask(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctl_setup()
4087 b43_phy_set(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctl_setup()
4090 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) b43_nphy_tx_power_ctl_setup()
4091 b43_maskset32(dev, B43_MMIO_MACCTL, ~0x200000, 0); b43_nphy_tx_power_ctl_setup()
4101 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_tx_power_ctl_setup()
4143 ppr_max = b43_ppr_get_max(dev, &nphy->tx_pwr_max_ppr); b43_nphy_tx_power_ctl_setup()
4149 if (dev->phy.rev >= 3) { b43_nphy_tx_power_ctl_setup()
4151 b43_phy_set(dev, B43_NPHY_TXPCTL_ITSSI, 0x4000); b43_nphy_tx_power_ctl_setup()
4152 if (dev->phy.rev >= 7) { b43_nphy_tx_power_ctl_setup()
4155 if (b43_nphy_ipa(dev)) b43_nphy_tx_power_ctl_setup()
4156 b43_radio_write(dev, r + 0x9, (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) ? 0xE : 0xC); b43_nphy_tx_power_ctl_setup()
4159 if (b43_nphy_ipa(dev)) { b43_nphy_tx_power_ctl_setup()
4160 tmp = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 0xC : 0xE; b43_nphy_tx_power_ctl_setup()
4161 b43_radio_write(dev, b43_nphy_tx_power_ctl_setup()
4163 b43_radio_write(dev, b43_nphy_tx_power_ctl_setup()
4166 b43_radio_write(dev, b43_nphy_tx_power_ctl_setup()
4168 b43_radio_write(dev, b43_nphy_tx_power_ctl_setup()
4174 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) { b43_nphy_tx_power_ctl_setup()
4175 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, 0x200000); b43_nphy_tx_power_ctl_setup()
4176 b43_read32(dev, B43_MMIO_MACCTL); b43_nphy_tx_power_ctl_setup()
4183 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctl_setup()
4185 b43_phy_maskset(dev, B43_NPHY_TXPCTL_INIT, b43_nphy_tx_power_ctl_setup()
4188 b43_phy_maskset(dev, B43_NPHY_TXPCTL_CMD, b43_nphy_tx_power_ctl_setup()
4190 if (dev->phy.rev > 1) b43_nphy_tx_power_ctl_setup()
4191 b43_phy_maskset(dev, B43_NPHY_TXPCTL_INIT, b43_nphy_tx_power_ctl_setup()
4195 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) b43_nphy_tx_power_ctl_setup()
4196 b43_maskset32(dev, B43_MMIO_MACCTL, ~0x200000, 0); b43_nphy_tx_power_ctl_setup()
4198 b43_phy_write(dev, B43_NPHY_TXPCTL_N, b43_nphy_tx_power_ctl_setup()
4201 b43_phy_write(dev, B43_NPHY_TXPCTL_ITSSI, b43_nphy_tx_power_ctl_setup()
4205 b43_phy_write(dev, B43_NPHY_TXPCTL_TPWR, b43_nphy_tx_power_ctl_setup()
4214 if (dev->phy.rev < 3 && (i <= (31 - idle[c] + 1))) b43_nphy_tx_power_ctl_setup()
4218 b43_ntab_write_bulk(dev, B43_NTAB32(26 + c, 0), 64, regval); b43_nphy_tx_power_ctl_setup()
4221 b43_nphy_tx_prepare_adjusted_power_table(dev); b43_nphy_tx_power_ctl_setup()
4222 b43_ntab_write_bulk(dev, B43_NTAB16(26, 64), 84, nphy->adj_pwr_tbl); b43_nphy_tx_power_ctl_setup()
4223 b43_ntab_write_bulk(dev, B43_NTAB16(27, 64), 84, nphy->adj_pwr_tbl); b43_nphy_tx_power_ctl_setup()
4226 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_tx_power_ctl_setup()
4229 static void b43_nphy_tx_gain_table_upload(struct b43_wldev *dev) b43_nphy_tx_gain_table_upload() argument
4231 struct b43_phy *phy = &dev->phy; b43_nphy_tx_gain_table_upload()
4239 table = b43_nphy_get_tx_gain_table(dev); b43_nphy_tx_gain_table_upload()
4243 b43_ntab_write_bulk(dev, B43_NTAB32(26, 192), 128, table); b43_nphy_tx_gain_table_upload()
4244 b43_ntab_write_bulk(dev, B43_NTAB32(27, 192), 128, table); b43_nphy_tx_gain_table_upload()
4256 rf_pwr_offset_table = b43_ntab_get_rf_pwr_offset_table(dev); b43_nphy_tx_gain_table_upload()
4270 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_tx_gain_table_upload()
4276 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_tx_gain_table_upload()
4282 b43_ntab_write(dev, B43_NTAB32(26, 576 + i), rfpwr_offset); b43_nphy_tx_gain_table_upload()
4283 b43_ntab_write(dev, B43_NTAB32(27, 576 + i), rfpwr_offset); b43_nphy_tx_gain_table_upload()
4288 static void b43_nphy_pa_override(struct b43_wldev *dev, bool enable) b43_nphy_pa_override() argument
4290 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_pa_override()
4295 nphy->rfctrl_intc1_save = b43_phy_read(dev, b43_nphy_pa_override()
4297 nphy->rfctrl_intc2_save = b43_phy_read(dev, b43_nphy_pa_override()
4299 band = b43_current_band(dev->wl); b43_nphy_pa_override()
4300 if (dev->phy.rev >= 7) { b43_nphy_pa_override()
4302 } else if (dev->phy.rev >= 3) { b43_nphy_pa_override()
4313 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, tmp); b43_nphy_pa_override()
4314 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, tmp); b43_nphy_pa_override()
4316 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, b43_nphy_pa_override()
4318 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, b43_nphy_pa_override()
4327 static void b43_nphy_tx_lpf_bw(struct b43_wldev *dev) b43_nphy_tx_lpf_bw() argument
4331 if (dev->phy.rev < 3 || dev->phy.rev >= 7) b43_nphy_tx_lpf_bw()
4334 if (b43_nphy_ipa(dev)) b43_nphy_tx_lpf_bw()
4335 tmp = b43_is_40mhz(dev) ? 5 : 4; b43_nphy_tx_lpf_bw()
4337 tmp = b43_is_40mhz(dev) ? 3 : 1; b43_nphy_tx_lpf_bw()
4338 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S2, b43_nphy_tx_lpf_bw()
4341 if (b43_nphy_ipa(dev)) { b43_nphy_tx_lpf_bw()
4342 tmp = b43_is_40mhz(dev) ? 4 : 1; b43_nphy_tx_lpf_bw()
4343 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S2, b43_nphy_tx_lpf_bw()
4349 static void b43_nphy_rx_iq_est(struct b43_wldev *dev, struct nphy_iq_est *est, b43_nphy_rx_iq_est() argument
4355 b43_phy_write(dev, B43_NPHY_IQEST_SAMCNT, samps); b43_nphy_rx_iq_est()
4356 b43_phy_maskset(dev, B43_NPHY_IQEST_WT, ~B43_NPHY_IQEST_WT_VAL, time); b43_nphy_rx_iq_est()
4358 b43_phy_set(dev, B43_NPHY_IQEST_CMD, B43_NPHY_IQEST_CMD_MODE); b43_nphy_rx_iq_est()
4360 b43_phy_mask(dev, B43_NPHY_IQEST_CMD, ~B43_NPHY_IQEST_CMD_MODE); b43_nphy_rx_iq_est()
4362 b43_phy_set(dev, B43_NPHY_IQEST_CMD, B43_NPHY_IQEST_CMD_START); b43_nphy_rx_iq_est()
4365 tmp = b43_phy_read(dev, B43_NPHY_IQEST_CMD); b43_nphy_rx_iq_est()
4367 est->i0_pwr = (b43_phy_read(dev, B43_NPHY_IQEST_IPACC_HI0) << 16) | b43_nphy_rx_iq_est()
4368 b43_phy_read(dev, B43_NPHY_IQEST_IPACC_LO0); b43_nphy_rx_iq_est()
4369 est->q0_pwr = (b43_phy_read(dev, B43_NPHY_IQEST_QPACC_HI0) << 16) | b43_nphy_rx_iq_est()
4370 b43_phy_read(dev, B43_NPHY_IQEST_QPACC_LO0); b43_nphy_rx_iq_est()
4371 est->iq0_prod = (b43_phy_read(dev, B43_NPHY_IQEST_IQACC_HI0) << 16) | b43_nphy_rx_iq_est()
4372 b43_phy_read(dev, B43_NPHY_IQEST_IQACC_LO0); b43_nphy_rx_iq_est()
4374 est->i1_pwr = (b43_phy_read(dev, B43_NPHY_IQEST_IPACC_HI1) << 16) | b43_nphy_rx_iq_est()
4375 b43_phy_read(dev, B43_NPHY_IQEST_IPACC_LO1); b43_nphy_rx_iq_est()
4376 est->q1_pwr = (b43_phy_read(dev, B43_NPHY_IQEST_QPACC_HI1) << 16) | b43_nphy_rx_iq_est()
4377 b43_phy_read(dev, B43_NPHY_IQEST_QPACC_LO1); b43_nphy_rx_iq_est()
4378 est->iq1_prod = (b43_phy_read(dev, B43_NPHY_IQEST_IQACC_HI1) << 16) | b43_nphy_rx_iq_est()
4379 b43_phy_read(dev, B43_NPHY_IQEST_IQACC_LO1); b43_nphy_rx_iq_est()
4388 static void b43_nphy_rx_iq_coeffs(struct b43_wldev *dev, bool write, b43_nphy_rx_iq_coeffs() argument
4392 b43_phy_write(dev, B43_NPHY_C1_RXIQ_COMPA0, pcomp->a0); b43_nphy_rx_iq_coeffs()
4393 b43_phy_write(dev, B43_NPHY_C1_RXIQ_COMPB0, pcomp->b0); b43_nphy_rx_iq_coeffs()
4394 b43_phy_write(dev, B43_NPHY_C2_RXIQ_COMPA1, pcomp->a1); b43_nphy_rx_iq_coeffs()
4395 b43_phy_write(dev, B43_NPHY_C2_RXIQ_COMPB1, pcomp->b1); b43_nphy_rx_iq_coeffs()
4397 pcomp->a0 = b43_phy_read(dev, B43_NPHY_C1_RXIQ_COMPA0); b43_nphy_rx_iq_coeffs()
4398 pcomp->b0 = b43_phy_read(dev, B43_NPHY_C1_RXIQ_COMPB0); b43_nphy_rx_iq_coeffs()
4399 pcomp->a1 = b43_phy_read(dev, B43_NPHY_C2_RXIQ_COMPA1); b43_nphy_rx_iq_coeffs()
4400 pcomp->b1 = b43_phy_read(dev, B43_NPHY_C2_RXIQ_COMPB1); b43_nphy_rx_iq_coeffs()
4407 static void b43_nphy_rx_cal_phy_cleanup(struct b43_wldev *dev, u8 core)
4409 u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs;
4411 b43_phy_write(dev, B43_NPHY_RFSEQCA, regs[0]);
4413 b43_phy_write(dev, B43_NPHY_AFECTL_C1, regs[1]);
4414 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, regs[2]);
4416 b43_phy_write(dev, B43_NPHY_AFECTL_C2, regs[1]);
4417 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[2]);
4419 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[3]);
4420 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[4]);
4421 b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO1, regs[5]);
4422 b43_phy_write(dev, B43_NPHY_RFCTL_RSSIO2, regs[6]);
4423 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S1, regs[7]);
4424 b43_phy_write(dev, B43_NPHY_RFCTL_OVER, regs[8]);
4425 b43_phy_write(dev, B43_NPHY_PAPD_EN0, regs[9]);
4426 b43_phy_write(dev, B43_NPHY_PAPD_EN1, regs[10]);
4430 static void b43_nphy_rx_cal_phy_setup(struct b43_wldev *dev, u8 core)
4433 u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs;
4435 regs[0] = b43_phy_read(dev, B43_NPHY_RFSEQCA);
4437 regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C1);
4438 regs[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1);
4440 regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2);
4441 regs[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
4443 regs[3] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1);
4444 regs[4] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2);
4445 regs[5] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO1);
4446 regs[6] = b43_phy_read(dev, B43_NPHY_RFCTL_RSSIO2);
4447 regs[7] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B1S1);
4448 regs[8] = b43_phy_read(dev, B43_NPHY_RFCTL_OVER);
4449 regs[9] = b43_phy_read(dev, B43_NPHY_PAPD_EN0);
4450 regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1);
4452 b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001);
4453 b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001);
4455 b43_phy_maskset(dev, B43_NPHY_RFSEQCA,
4458 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_TXEN,
4460 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_RXEN,
4462 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_TXDIS,
4466 b43_phy_mask(dev, B43_NPHY_AFECTL_C1, ~0x0007);
4467 b43_phy_set(dev, B43_NPHY_AFECTL_OVER1, 0x0007);
4469 b43_phy_mask(dev, B43_NPHY_AFECTL_C2, ~0x0007);
4470 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x0007);
4473 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_PA, 0, 3);
4474 b43_nphy_rf_ctl_override(dev, 8, 0, 3, false);
4475 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX);
4484 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_TRSW, rxval,
4486 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_TRSW, txval,
4492 static void b43_nphy_calc_rx_iq_comp(struct b43_wldev *dev, u8 mask) b43_nphy_calc_rx_iq_comp() argument
4510 b43_nphy_rx_iq_coeffs(dev, false, &old); b43_nphy_calc_rx_iq_comp()
4511 b43_nphy_rx_iq_coeffs(dev, true, &new); b43_nphy_calc_rx_iq_comp()
4512 b43_nphy_rx_iq_est(dev, &est, 0x4000, 32, false); b43_nphy_calc_rx_iq_comp()
4565 if (dev->phy.rev >= 3) { b43_nphy_calc_rx_iq_comp()
4573 if (dev->phy.rev >= 3) { b43_nphy_calc_rx_iq_comp()
4586 b43_nphy_rx_iq_coeffs(dev, true, &new); b43_nphy_calc_rx_iq_comp()
4590 static void b43_nphy_tx_iq_workaround(struct b43_wldev *dev) b43_nphy_tx_iq_workaround() argument
4593 b43_ntab_read_bulk(dev, B43_NTAB16(0xF, 0x50), 4, array); b43_nphy_tx_iq_workaround()
4595 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_NPHY_TXIQW0, array[0]); b43_nphy_tx_iq_workaround()
4596 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_NPHY_TXIQW1, array[1]); b43_nphy_tx_iq_workaround()
4597 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_NPHY_TXIQW2, array[2]); b43_nphy_tx_iq_workaround()
4598 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_NPHY_TXIQW3, array[3]); b43_nphy_tx_iq_workaround()
4602 static void b43_nphy_spur_workaround(struct b43_wldev *dev) b43_nphy_spur_workaround() argument
4604 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_spur_workaround()
4606 u8 channel = dev->phy.channel; b43_nphy_spur_workaround()
4610 B43_WARN_ON(dev->phy.rev < 3); b43_nphy_spur_workaround()
4613 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_spur_workaround()
4617 if (channel == 11 && b43_is_40mhz(dev)) b43_nphy_spur_workaround()
4657 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_spur_workaround()
4661 static void b43_nphy_tx_pwr_ctrl_coef_setup(struct b43_wldev *dev) b43_nphy_tx_pwr_ctrl_coef_setup() argument
4663 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_pwr_ctrl_coef_setup()
4671 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_tx_pwr_ctrl_coef_setup()
4673 b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 7, buffer); b43_nphy_tx_pwr_ctrl_coef_setup()
4678 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, b43_nphy_tx_pwr_ctrl_coef_setup()
4681 b43_phy_write(dev, B43_NPHY_TABLE_DATAHI, b43_nphy_tx_pwr_ctrl_coef_setup()
4683 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, b43_nphy_tx_pwr_ctrl_coef_setup()
4692 b43_phy_write(dev, B43_NPHY_TABLE_ADDR, b43_nphy_tx_pwr_ctrl_coef_setup()
4695 if (dev->phy.rev >= 3) { b43_nphy_tx_pwr_ctrl_coef_setup()
4702 if (dev->phy.rev < 3) { b43_nphy_tx_pwr_ctrl_coef_setup()
4708 b43_phy_write(dev, B43_NPHY_TABLE_DATAHI, b43_nphy_tx_pwr_ctrl_coef_setup()
4710 b43_phy_write(dev, B43_NPHY_TABLE_DATALO, b43_nphy_tx_pwr_ctrl_coef_setup()
4715 if (dev->phy.rev >= 3) { b43_nphy_tx_pwr_ctrl_coef_setup()
4716 b43_shm_write16(dev, B43_SHM_SHARED, b43_nphy_tx_pwr_ctrl_coef_setup()
4718 b43_shm_write16(dev, B43_SHM_SHARED, b43_nphy_tx_pwr_ctrl_coef_setup()
4723 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_tx_pwr_ctrl_coef_setup()
4730 static void b43_nphy_restore_rssi_cal(struct b43_wldev *dev) b43_nphy_restore_rssi_cal() argument
4732 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_restore_rssi_cal()
4737 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_restore_rssi_cal()
4749 if (dev->phy.rev >= 19) { b43_nphy_restore_rssi_cal()
4751 } else if (dev->phy.rev >= 7) { b43_nphy_restore_rssi_cal()
4752 b43_radio_maskset(dev, R2057_NB_MASTER_CORE0, ~R2057_VCM_MASK, b43_nphy_restore_rssi_cal()
4754 b43_radio_maskset(dev, R2057_NB_MASTER_CORE1, ~R2057_VCM_MASK, b43_nphy_restore_rssi_cal()
4757 b43_radio_maskset(dev, B2056_RX0 | B2056_RX_RSSI_MISC, 0xE3, b43_nphy_restore_rssi_cal()
4759 b43_radio_maskset(dev, B2056_RX1 | B2056_RX_RSSI_MISC, 0xE3, b43_nphy_restore_rssi_cal()
4763 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_Z, rssical_phy_regs[0]); b43_nphy_restore_rssi_cal()
4764 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_Z, rssical_phy_regs[1]); b43_nphy_restore_rssi_cal()
4765 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_Z, rssical_phy_regs[2]); b43_nphy_restore_rssi_cal()
4766 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Z, rssical_phy_regs[3]); b43_nphy_restore_rssi_cal()
4768 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_X, rssical_phy_regs[4]); b43_nphy_restore_rssi_cal()
4769 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_X, rssical_phy_regs[5]); b43_nphy_restore_rssi_cal()
4770 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_X, rssical_phy_regs[6]); b43_nphy_restore_rssi_cal()
4771 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_X, rssical_phy_regs[7]); b43_nphy_restore_rssi_cal()
4773 b43_phy_write(dev, B43_NPHY_RSSIMC_0I_RSSI_Y, rssical_phy_regs[8]); b43_nphy_restore_rssi_cal()
4774 b43_phy_write(dev, B43_NPHY_RSSIMC_0Q_RSSI_Y, rssical_phy_regs[9]); b43_nphy_restore_rssi_cal()
4775 b43_phy_write(dev, B43_NPHY_RSSIMC_1I_RSSI_Y, rssical_phy_regs[10]); b43_nphy_restore_rssi_cal()
4776 b43_phy_write(dev, B43_NPHY_RSSIMC_1Q_RSSI_Y, rssical_phy_regs[11]); b43_nphy_restore_rssi_cal()
4779 static void b43_nphy_tx_cal_radio_setup_rev19(struct b43_wldev *dev) b43_nphy_tx_cal_radio_setup_rev19() argument
4784 static void b43_nphy_tx_cal_radio_setup_rev7(struct b43_wldev *dev) b43_nphy_tx_cal_radio_setup_rev7() argument
4786 struct b43_phy *phy = &dev->phy; b43_nphy_tx_cal_radio_setup_rev7()
4787 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_cal_radio_setup_rev7()
4796 save[off + 0] = b43_radio_read(dev, r + R2057_TX0_TX_SSI_MASTER); b43_nphy_tx_cal_radio_setup_rev7()
4797 save[off + 1] = b43_radio_read(dev, r + R2057_TX0_IQCAL_VCM_HG); b43_nphy_tx_cal_radio_setup_rev7()
4798 save[off + 2] = b43_radio_read(dev, r + R2057_TX0_IQCAL_IDAC); b43_nphy_tx_cal_radio_setup_rev7()
4799 save[off + 3] = b43_radio_read(dev, r + R2057_TX0_TSSI_VCM); b43_nphy_tx_cal_radio_setup_rev7()
4801 save[off + 5] = b43_radio_read(dev, r + R2057_TX0_TX_SSI_MUX); b43_nphy_tx_cal_radio_setup_rev7()
4803 save[off + 6] = b43_radio_read(dev, r + R2057_TX0_TSSIA); b43_nphy_tx_cal_radio_setup_rev7()
4804 save[off + 7] = b43_radio_read(dev, r + R2057_TX0_TSSIG); b43_nphy_tx_cal_radio_setup_rev7()
4805 save[off + 8] = b43_radio_read(dev, r + R2057_TX0_TSSI_MISC1); b43_nphy_tx_cal_radio_setup_rev7()
4807 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_tx_cal_radio_setup_rev7()
4808 b43_radio_write(dev, r + R2057_TX0_TX_SSI_MASTER, 0xA); b43_nphy_tx_cal_radio_setup_rev7()
4809 b43_radio_write(dev, r + R2057_TX0_IQCAL_VCM_HG, 0x43); b43_nphy_tx_cal_radio_setup_rev7()
4810 b43_radio_write(dev, r + R2057_TX0_IQCAL_IDAC, 0x55); b43_nphy_tx_cal_radio_setup_rev7()
4811 b43_radio_write(dev, r + R2057_TX0_TSSI_VCM, 0); b43_nphy_tx_cal_radio_setup_rev7()
4812 b43_radio_write(dev, r + R2057_TX0_TSSIG, 0); b43_nphy_tx_cal_radio_setup_rev7()
4814 b43_radio_write(dev, r + R2057_TX0_TX_SSI_MUX, 0x4); b43_nphy_tx_cal_radio_setup_rev7()
4816 b43_radio_write(dev, r + R2057_TX0_TSSIA, tmp); b43_nphy_tx_cal_radio_setup_rev7()
4818 b43_radio_write(dev, r + R2057_TX0_TSSI_MISC1, 0x00); b43_nphy_tx_cal_radio_setup_rev7()
4820 b43_radio_write(dev, r + R2057_TX0_TX_SSI_MASTER, 0x6); b43_nphy_tx_cal_radio_setup_rev7()
4821 b43_radio_write(dev, r + R2057_TX0_IQCAL_VCM_HG, 0x43); b43_nphy_tx_cal_radio_setup_rev7()
4822 b43_radio_write(dev, r + R2057_TX0_IQCAL_IDAC, 0x55); b43_nphy_tx_cal_radio_setup_rev7()
4823 b43_radio_write(dev, r + R2057_TX0_TSSI_VCM, 0); b43_nphy_tx_cal_radio_setup_rev7()
4826 b43_radio_write(dev, r + R2057_TX0_TSSIA, 0); b43_nphy_tx_cal_radio_setup_rev7()
4828 b43_radio_write(dev, r + R2057_TX0_TX_SSI_MUX, 0x6); b43_nphy_tx_cal_radio_setup_rev7()
4830 b43_radio_write(dev, r + R2057_TX0_TSSIG, tmp); b43_nphy_tx_cal_radio_setup_rev7()
4832 b43_radio_write(dev, r + R2057_TX0_TSSI_MISC1, 0); b43_nphy_tx_cal_radio_setup_rev7()
4838 static void b43_nphy_tx_cal_radio_setup(struct b43_wldev *dev) b43_nphy_tx_cal_radio_setup() argument
4840 struct b43_phy *phy = &dev->phy; b43_nphy_tx_cal_radio_setup()
4841 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_cal_radio_setup()
4847 b43_nphy_tx_cal_radio_setup_rev19(dev); b43_nphy_tx_cal_radio_setup()
4849 b43_nphy_tx_cal_radio_setup_rev7(dev); b43_nphy_tx_cal_radio_setup()
4855 save[offset + 0] = b43_radio_read(dev, B2055_CAL_RVARCTL); b43_nphy_tx_cal_radio_setup()
4856 save[offset + 1] = b43_radio_read(dev, B2055_CAL_LPOCTL); b43_nphy_tx_cal_radio_setup()
4857 save[offset + 2] = b43_radio_read(dev, B2055_CAL_TS); b43_nphy_tx_cal_radio_setup()
4858 save[offset + 3] = b43_radio_read(dev, B2055_CAL_RCCALRTS); b43_nphy_tx_cal_radio_setup()
4859 save[offset + 4] = b43_radio_read(dev, B2055_CAL_RCALRTS); b43_nphy_tx_cal_radio_setup()
4860 save[offset + 5] = b43_radio_read(dev, B2055_PADDRV); b43_nphy_tx_cal_radio_setup()
4861 save[offset + 6] = b43_radio_read(dev, B2055_XOCTL1); b43_nphy_tx_cal_radio_setup()
4862 save[offset + 7] = b43_radio_read(dev, B2055_XOCTL2); b43_nphy_tx_cal_radio_setup()
4863 save[offset + 8] = b43_radio_read(dev, B2055_XOREGUL); b43_nphy_tx_cal_radio_setup()
4864 save[offset + 9] = b43_radio_read(dev, B2055_XOMISC); b43_nphy_tx_cal_radio_setup()
4865 save[offset + 10] = b43_radio_read(dev, B2055_PLL_LFC1); b43_nphy_tx_cal_radio_setup()
4867 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_nphy_tx_cal_radio_setup()
4868 b43_radio_write(dev, tmp | B2055_CAL_RVARCTL, 0x0A); b43_nphy_tx_cal_radio_setup()
4869 b43_radio_write(dev, tmp | B2055_CAL_LPOCTL, 0x40); b43_nphy_tx_cal_radio_setup()
4870 b43_radio_write(dev, tmp | B2055_CAL_TS, 0x55); b43_nphy_tx_cal_radio_setup()
4871 b43_radio_write(dev, tmp | B2055_CAL_RCCALRTS, 0); b43_nphy_tx_cal_radio_setup()
4872 b43_radio_write(dev, tmp | B2055_CAL_RCALRTS, 0); b43_nphy_tx_cal_radio_setup()
4874 b43_radio_write(dev, tmp | B2055_PADDRV, 4); b43_nphy_tx_cal_radio_setup()
4875 b43_radio_write(dev, tmp | B2055_XOCTL1, 1); b43_nphy_tx_cal_radio_setup()
4877 b43_radio_write(dev, tmp | B2055_PADDRV, 0); b43_nphy_tx_cal_radio_setup()
4878 b43_radio_write(dev, tmp | B2055_XOCTL1, 0x2F); b43_nphy_tx_cal_radio_setup()
4880 b43_radio_write(dev, tmp | B2055_XOCTL2, 0); b43_nphy_tx_cal_radio_setup()
4882 b43_radio_write(dev, tmp | B2055_CAL_RVARCTL, 0x06); b43_nphy_tx_cal_radio_setup()
4883 b43_radio_write(dev, tmp | B2055_CAL_LPOCTL, 0x40); b43_nphy_tx_cal_radio_setup()
4884 b43_radio_write(dev, tmp | B2055_CAL_TS, 0x55); b43_nphy_tx_cal_radio_setup()
4885 b43_radio_write(dev, tmp | B2055_CAL_RCCALRTS, 0); b43_nphy_tx_cal_radio_setup()
4886 b43_radio_write(dev, tmp | B2055_CAL_RCALRTS, 0); b43_nphy_tx_cal_radio_setup()
4887 b43_radio_write(dev, tmp | B2055_XOCTL1, 0); b43_nphy_tx_cal_radio_setup()
4889 b43_radio_write(dev, tmp | B2055_PADDRV, 6); b43_nphy_tx_cal_radio_setup()
4890 b43_radio_write(dev, tmp | B2055_XOCTL2, b43_nphy_tx_cal_radio_setup()
4891 (dev->phy.rev < 5) ? 0x11 : 0x01); b43_nphy_tx_cal_radio_setup()
4893 b43_radio_write(dev, tmp | B2055_PADDRV, 0); b43_nphy_tx_cal_radio_setup()
4894 b43_radio_write(dev, tmp | B2055_XOCTL2, 0); b43_nphy_tx_cal_radio_setup()
4897 b43_radio_write(dev, tmp | B2055_XOREGUL, 0); b43_nphy_tx_cal_radio_setup()
4898 b43_radio_write(dev, tmp | B2055_XOMISC, 0); b43_nphy_tx_cal_radio_setup()
4899 b43_radio_write(dev, tmp | B2055_PLL_LFC1, 0); b43_nphy_tx_cal_radio_setup()
4902 save[0] = b43_radio_read(dev, B2055_C1_TX_RF_IQCAL1); b43_nphy_tx_cal_radio_setup()
4903 b43_radio_write(dev, B2055_C1_TX_RF_IQCAL1, 0x29); b43_nphy_tx_cal_radio_setup()
4905 save[1] = b43_radio_read(dev, B2055_C1_TX_RF_IQCAL2); b43_nphy_tx_cal_radio_setup()
4906 b43_radio_write(dev, B2055_C1_TX_RF_IQCAL2, 0x54); b43_nphy_tx_cal_radio_setup()
4908 save[2] = b43_radio_read(dev, B2055_C2_TX_RF_IQCAL1); b43_nphy_tx_cal_radio_setup()
4909 b43_radio_write(dev, B2055_C2_TX_RF_IQCAL1, 0x29); b43_nphy_tx_cal_radio_setup()
4911 save[3] = b43_radio_read(dev, B2055_C2_TX_RF_IQCAL2); b43_nphy_tx_cal_radio_setup()
4912 b43_radio_write(dev, B2055_C2_TX_RF_IQCAL2, 0x54); b43_nphy_tx_cal_radio_setup()
4914 save[3] = b43_radio_read(dev, B2055_C1_PWRDET_RXTX); b43_nphy_tx_cal_radio_setup()
4915 save[4] = b43_radio_read(dev, B2055_C2_PWRDET_RXTX); b43_nphy_tx_cal_radio_setup()
4917 if (!(b43_phy_read(dev, B43_NPHY_BANDCTL) & b43_nphy_tx_cal_radio_setup()
4919 b43_radio_write(dev, B2055_C1_PWRDET_RXTX, 0x04); b43_nphy_tx_cal_radio_setup()
4920 b43_radio_write(dev, B2055_C2_PWRDET_RXTX, 0x04); b43_nphy_tx_cal_radio_setup()
4922 b43_radio_write(dev, B2055_C1_PWRDET_RXTX, 0x20); b43_nphy_tx_cal_radio_setup()
4923 b43_radio_write(dev, B2055_C2_PWRDET_RXTX, 0x20); b43_nphy_tx_cal_radio_setup()
4926 if (dev->phy.rev < 2) { b43_nphy_tx_cal_radio_setup()
4927 b43_radio_set(dev, B2055_C1_TX_BB_MXGM, 0x20); b43_nphy_tx_cal_radio_setup()
4928 b43_radio_set(dev, B2055_C2_TX_BB_MXGM, 0x20); b43_nphy_tx_cal_radio_setup()
4930 b43_radio_mask(dev, B2055_C1_TX_BB_MXGM, ~0x20); b43_nphy_tx_cal_radio_setup()
4931 b43_radio_mask(dev, B2055_C2_TX_BB_MXGM, ~0x20); b43_nphy_tx_cal_radio_setup()
4937 static void b43_nphy_update_tx_cal_ladder(struct b43_wldev *dev, u16 core) b43_nphy_update_tx_cal_ladder() argument
4939 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_update_tx_cal_ladder()
4951 b43_ntab_write(dev, B43_NTAB16(15, i), entry); b43_nphy_update_tx_cal_ladder()
4955 b43_ntab_write(dev, B43_NTAB16(15, i + 32), entry); b43_nphy_update_tx_cal_ladder()
4959 static void b43_nphy_pa_set_tx_dig_filter(struct b43_wldev *dev, u16 offset, b43_nphy_pa_set_tx_dig_filter() argument
4967 b43_phy_write(dev, offset, filter[i]); b43_nphy_pa_set_tx_dig_filter()
4971 static void b43_nphy_ext_pa_set_tx_dig_filters(struct b43_wldev *dev) b43_nphy_ext_pa_set_tx_dig_filters() argument
4973 b43_nphy_pa_set_tx_dig_filter(dev, 0x2C5, b43_nphy_ext_pa_set_tx_dig_filters()
4978 static void b43_nphy_int_pa_set_tx_dig_filters(struct b43_wldev *dev) b43_nphy_int_pa_set_tx_dig_filters() argument
4990 b43_nphy_pa_set_tx_dig_filter(dev, offset[i], b43_nphy_int_pa_set_tx_dig_filters()
4994 if (dev->phy.rev == 16) b43_nphy_int_pa_set_tx_dig_filters()
4995 b43_nphy_pa_set_tx_dig_filter(dev, 0x186, dig_filter_phy_rev16); b43_nphy_int_pa_set_tx_dig_filters()
4998 if (dev->phy.rev == 17) { b43_nphy_int_pa_set_tx_dig_filters()
4999 b43_nphy_pa_set_tx_dig_filter(dev, 0x186, dig_filter_phy_rev16); b43_nphy_int_pa_set_tx_dig_filters()
5000 b43_nphy_pa_set_tx_dig_filter(dev, 0x195, b43_nphy_int_pa_set_tx_dig_filters()
5004 if (b43_is_40mhz(dev)) { b43_nphy_int_pa_set_tx_dig_filters()
5005 b43_nphy_pa_set_tx_dig_filter(dev, 0x186, b43_nphy_int_pa_set_tx_dig_filters()
5008 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_nphy_int_pa_set_tx_dig_filters()
5009 b43_nphy_pa_set_tx_dig_filter(dev, 0x186, b43_nphy_int_pa_set_tx_dig_filters()
5011 if (dev->phy.channel == 14) b43_nphy_int_pa_set_tx_dig_filters()
5012 b43_nphy_pa_set_tx_dig_filter(dev, 0x186, b43_nphy_int_pa_set_tx_dig_filters()
5018 static struct nphy_txgains b43_nphy_get_tx_gains(struct b43_wldev *dev) b43_nphy_get_tx_gains() argument
5020 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_get_tx_gains()
5030 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_get_tx_gains()
5031 b43_ntab_read_bulk(dev, B43_NTAB16(7, 0x110), 2, curr_gain); b43_nphy_get_tx_gains()
5033 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_get_tx_gains()
5036 if (dev->phy.rev >= 7) { b43_nphy_get_tx_gains()
5042 } else if (dev->phy.rev >= 3) { b43_nphy_get_tx_gains()
5057 index[0] = (b43_phy_read(dev, B43_NPHY_C1_TXPCTL_STAT) & b43_nphy_get_tx_gains()
5060 index[1] = (b43_phy_read(dev, B43_NPHY_C2_TXPCTL_STAT) & b43_nphy_get_tx_gains()
5065 table = b43_nphy_get_tx_gain_table(dev); b43_nphy_get_tx_gains()
5069 if (dev->phy.rev >= 7) { b43_nphy_get_tx_gains()
5075 } else if (dev->phy.rev >= 3) { b43_nphy_get_tx_gains()
5093 static void b43_nphy_tx_cal_phy_cleanup(struct b43_wldev *dev) b43_nphy_tx_cal_phy_cleanup() argument
5095 u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs; b43_nphy_tx_cal_phy_cleanup()
5097 if (dev->phy.rev >= 3) { b43_nphy_tx_cal_phy_cleanup()
5098 b43_phy_write(dev, B43_NPHY_AFECTL_C1, regs[0]); b43_nphy_tx_cal_phy_cleanup()
5099 b43_phy_write(dev, B43_NPHY_AFECTL_C2, regs[1]); b43_nphy_tx_cal_phy_cleanup()
5100 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, regs[2]); b43_nphy_tx_cal_phy_cleanup()
5101 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[3]); b43_nphy_tx_cal_phy_cleanup()
5102 b43_phy_write(dev, B43_NPHY_BBCFG, regs[4]); b43_nphy_tx_cal_phy_cleanup()
5103 b43_ntab_write(dev, B43_NTAB16(8, 3), regs[5]); b43_nphy_tx_cal_phy_cleanup()
5104 b43_ntab_write(dev, B43_NTAB16(8, 19), regs[6]); b43_nphy_tx_cal_phy_cleanup()
5105 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[7]); b43_nphy_tx_cal_phy_cleanup()
5106 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[8]); b43_nphy_tx_cal_phy_cleanup()
5107 b43_phy_write(dev, B43_NPHY_PAPD_EN0, regs[9]); b43_nphy_tx_cal_phy_cleanup()
5108 b43_phy_write(dev, B43_NPHY_PAPD_EN1, regs[10]); b43_nphy_tx_cal_phy_cleanup()
5109 b43_nphy_reset_cca(dev); b43_nphy_tx_cal_phy_cleanup()
5111 b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, regs[0]); b43_nphy_tx_cal_phy_cleanup()
5112 b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, regs[1]); b43_nphy_tx_cal_phy_cleanup()
5113 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[2]); b43_nphy_tx_cal_phy_cleanup()
5114 b43_ntab_write(dev, B43_NTAB16(8, 2), regs[3]); b43_nphy_tx_cal_phy_cleanup()
5115 b43_ntab_write(dev, B43_NTAB16(8, 18), regs[4]); b43_nphy_tx_cal_phy_cleanup()
5116 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[5]); b43_nphy_tx_cal_phy_cleanup()
5117 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[6]); b43_nphy_tx_cal_phy_cleanup()
5122 static void b43_nphy_tx_cal_phy_setup(struct b43_wldev *dev) b43_nphy_tx_cal_phy_setup() argument
5124 struct b43_phy *phy = &dev->phy; b43_nphy_tx_cal_phy_setup()
5125 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_tx_cal_phy_setup()
5126 u16 *regs = dev->phy.n->tx_rx_cal_phy_saveregs; b43_nphy_tx_cal_phy_setup()
5129 regs[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); b43_nphy_tx_cal_phy_setup()
5130 regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2); b43_nphy_tx_cal_phy_setup()
5131 if (dev->phy.rev >= 3) { b43_nphy_tx_cal_phy_setup()
5132 b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0xF0FF, 0x0A00); b43_nphy_tx_cal_phy_setup()
5133 b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0xF0FF, 0x0A00); b43_nphy_tx_cal_phy_setup()
5135 tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1); b43_nphy_tx_cal_phy_setup()
5137 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, tmp | 0x0600); b43_nphy_tx_cal_phy_setup()
5139 tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); b43_nphy_tx_cal_phy_setup()
5141 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp | 0x0600); b43_nphy_tx_cal_phy_setup()
5143 regs[4] = b43_phy_read(dev, B43_NPHY_BBCFG); b43_nphy_tx_cal_phy_setup()
5144 b43_phy_mask(dev, B43_NPHY_BBCFG, b43_nphy_tx_cal_phy_setup()
5147 tmp = b43_ntab_read(dev, B43_NTAB16(8, 3)); b43_nphy_tx_cal_phy_setup()
5149 b43_ntab_write(dev, B43_NTAB16(8, 3), 0); b43_nphy_tx_cal_phy_setup()
5151 tmp = b43_ntab_read(dev, B43_NTAB16(8, 19)); b43_nphy_tx_cal_phy_setup()
5153 b43_ntab_write(dev, B43_NTAB16(8, 19), 0); b43_nphy_tx_cal_phy_setup()
5154 regs[7] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1); b43_nphy_tx_cal_phy_setup()
5155 regs[8] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2); b43_nphy_tx_cal_phy_setup()
5158 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_PA, b43_nphy_tx_cal_phy_setup()
5161 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_PA, b43_nphy_tx_cal_phy_setup()
5163 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_TRSW, 2, 1); b43_nphy_tx_cal_phy_setup()
5164 b43_nphy_rf_ctl_intc_override(dev, N_INTC_OVERRIDE_TRSW, 8, 2); b43_nphy_tx_cal_phy_setup()
5166 regs[9] = b43_phy_read(dev, B43_NPHY_PAPD_EN0); b43_nphy_tx_cal_phy_setup()
5167 regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1); b43_nphy_tx_cal_phy_setup()
5168 b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001); b43_nphy_tx_cal_phy_setup()
5169 b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001); b43_nphy_tx_cal_phy_setup()
5171 tmp = b43_nphy_read_lpf_ctl(dev, 0); b43_nphy_tx_cal_phy_setup()
5173 b43_nphy_rf_ctl_override_rev19(dev, 0x80, tmp, 0, false, b43_nphy_tx_cal_phy_setup()
5176 b43_nphy_rf_ctl_override_rev7(dev, 0x80, tmp, 0, false, b43_nphy_tx_cal_phy_setup()
5181 b43_nphy_rf_ctl_override_rev19(dev, 0x8, 0, 0x3, b43_nphy_tx_cal_phy_setup()
5184 b43_nphy_rf_ctl_override_rev7(dev, 0x8, 0, 0x3, b43_nphy_tx_cal_phy_setup()
5187 b43_radio_maskset(dev, R2057_OVR_REG0, 1 << 4, 1 << 4); b43_nphy_tx_cal_phy_setup()
5188 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_tx_cal_phy_setup()
5189 b43_radio_maskset(dev, R2057_PAD2G_TUNE_PUS_CORE0, ~1, 0); b43_nphy_tx_cal_phy_setup()
5190 b43_radio_maskset(dev, R2057_PAD2G_TUNE_PUS_CORE1, ~1, 0); b43_nphy_tx_cal_phy_setup()
5192 b43_radio_maskset(dev, R2057_IPA5G_CASCOFFV_PU_CORE0, ~1, 0); b43_nphy_tx_cal_phy_setup()
5193 b43_radio_maskset(dev, R2057_IPA5G_CASCOFFV_PU_CORE1, ~1, 0); b43_nphy_tx_cal_phy_setup()
5198 b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, 0xA000); b43_nphy_tx_cal_phy_setup()
5199 b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, 0xA000); b43_nphy_tx_cal_phy_setup()
5200 tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); b43_nphy_tx_cal_phy_setup()
5202 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp | 0x3000); b43_nphy_tx_cal_phy_setup()
5203 tmp = b43_ntab_read(dev, B43_NTAB16(8, 2)); b43_nphy_tx_cal_phy_setup()
5206 b43_ntab_write(dev, B43_NTAB16(8, 2), tmp); b43_nphy_tx_cal_phy_setup()
5207 tmp = b43_ntab_read(dev, B43_NTAB16(8, 18)); b43_nphy_tx_cal_phy_setup()
5210 b43_ntab_write(dev, B43_NTAB16(8, 18), tmp); b43_nphy_tx_cal_phy_setup()
5211 regs[5] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1); b43_nphy_tx_cal_phy_setup()
5212 regs[6] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2); b43_nphy_tx_cal_phy_setup()
5213 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_nphy_tx_cal_phy_setup()
5217 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, tmp); b43_nphy_tx_cal_phy_setup()
5218 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, tmp); b43_nphy_tx_cal_phy_setup()
5223 static void b43_nphy_save_cal(struct b43_wldev *dev) b43_nphy_save_cal() argument
5225 struct b43_phy *phy = &dev->phy; b43_nphy_save_cal()
5226 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_save_cal()
5234 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_save_cal()
5236 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_save_cal()
5248 b43_nphy_rx_iq_coeffs(dev, false, rxcal_coeffs); b43_nphy_save_cal()
5253 txcal_radio_regs[0] = b43_radio_read(dev, b43_nphy_save_cal()
5255 txcal_radio_regs[1] = b43_radio_read(dev, b43_nphy_save_cal()
5257 txcal_radio_regs[4] = b43_radio_read(dev, b43_nphy_save_cal()
5259 txcal_radio_regs[5] = b43_radio_read(dev, b43_nphy_save_cal()
5261 txcal_radio_regs[2] = b43_radio_read(dev, b43_nphy_save_cal()
5263 txcal_radio_regs[3] = b43_radio_read(dev, b43_nphy_save_cal()
5265 txcal_radio_regs[6] = b43_radio_read(dev, b43_nphy_save_cal()
5267 txcal_radio_regs[7] = b43_radio_read(dev, b43_nphy_save_cal()
5270 txcal_radio_regs[0] = b43_radio_read(dev, 0x2021); b43_nphy_save_cal()
5271 txcal_radio_regs[1] = b43_radio_read(dev, 0x2022); b43_nphy_save_cal()
5272 txcal_radio_regs[2] = b43_radio_read(dev, 0x3021); b43_nphy_save_cal()
5273 txcal_radio_regs[3] = b43_radio_read(dev, 0x3022); b43_nphy_save_cal()
5274 txcal_radio_regs[4] = b43_radio_read(dev, 0x2023); b43_nphy_save_cal()
5275 txcal_radio_regs[5] = b43_radio_read(dev, 0x2024); b43_nphy_save_cal()
5276 txcal_radio_regs[6] = b43_radio_read(dev, 0x3023); b43_nphy_save_cal()
5277 txcal_radio_regs[7] = b43_radio_read(dev, 0x3024); b43_nphy_save_cal()
5279 txcal_radio_regs[0] = b43_radio_read(dev, 0x8B); b43_nphy_save_cal()
5280 txcal_radio_regs[1] = b43_radio_read(dev, 0xBA); b43_nphy_save_cal()
5281 txcal_radio_regs[2] = b43_radio_read(dev, 0x8D); b43_nphy_save_cal()
5282 txcal_radio_regs[3] = b43_radio_read(dev, 0xBC); b43_nphy_save_cal()
5284 iqcal_chanspec->center_freq = dev->phy.chandef->chan->center_freq; b43_nphy_save_cal()
5286 cfg80211_get_chandef_type(dev->phy.chandef); b43_nphy_save_cal()
5287 b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 8, table); b43_nphy_save_cal()
5290 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_save_cal()
5294 static void b43_nphy_restore_cal(struct b43_wldev *dev) b43_nphy_restore_cal() argument
5296 struct b43_phy *phy = &dev->phy; b43_nphy_restore_cal()
5297 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_restore_cal()
5307 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_restore_cal()
5319 b43_ntab_write_bulk(dev, B43_NTAB16(15, 80), 4, table); b43_nphy_restore_cal()
5322 if (dev->phy.rev >= 3) b43_nphy_restore_cal()
5328 b43_ntab_write_bulk(dev, B43_NTAB16(15, 88), 4, coef); b43_nphy_restore_cal()
5329 b43_ntab_write_bulk(dev, B43_NTAB16(15, 85), 2, loft); b43_nphy_restore_cal()
5330 b43_ntab_write_bulk(dev, B43_NTAB16(15, 93), 2, loft); b43_nphy_restore_cal()
5332 if (dev->phy.rev < 2) b43_nphy_restore_cal()
5333 b43_nphy_tx_iq_workaround(dev); b43_nphy_restore_cal()
5335 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_restore_cal()
5347 b43_radio_write(dev, R2057_TX0_LOFT_FINE_I, b43_nphy_restore_cal()
5349 b43_radio_write(dev, R2057_TX0_LOFT_FINE_Q, b43_nphy_restore_cal()
5351 b43_radio_write(dev, R2057_TX0_LOFT_COARSE_I, b43_nphy_restore_cal()
5353 b43_radio_write(dev, R2057_TX0_LOFT_COARSE_Q, b43_nphy_restore_cal()
5355 b43_radio_write(dev, R2057_TX1_LOFT_FINE_I, b43_nphy_restore_cal()
5357 b43_radio_write(dev, R2057_TX1_LOFT_FINE_Q, b43_nphy_restore_cal()
5359 b43_radio_write(dev, R2057_TX1_LOFT_COARSE_I, b43_nphy_restore_cal()
5361 b43_radio_write(dev, R2057_TX1_LOFT_COARSE_Q, b43_nphy_restore_cal()
5364 b43_radio_write(dev, 0x2021, txcal_radio_regs[0]); b43_nphy_restore_cal()
5365 b43_radio_write(dev, 0x2022, txcal_radio_regs[1]); b43_nphy_restore_cal()
5366 b43_radio_write(dev, 0x3021, txcal_radio_regs[2]); b43_nphy_restore_cal()
5367 b43_radio_write(dev, 0x3022, txcal_radio_regs[3]); b43_nphy_restore_cal()
5368 b43_radio_write(dev, 0x2023, txcal_radio_regs[4]); b43_nphy_restore_cal()
5369 b43_radio_write(dev, 0x2024, txcal_radio_regs[5]); b43_nphy_restore_cal()
5370 b43_radio_write(dev, 0x3023, txcal_radio_regs[6]); b43_nphy_restore_cal()
5371 b43_radio_write(dev, 0x3024, txcal_radio_regs[7]); b43_nphy_restore_cal()
5373 b43_radio_write(dev, 0x8B, txcal_radio_regs[0]); b43_nphy_restore_cal()
5374 b43_radio_write(dev, 0xBA, txcal_radio_regs[1]); b43_nphy_restore_cal()
5375 b43_radio_write(dev, 0x8D, txcal_radio_regs[2]); b43_nphy_restore_cal()
5376 b43_radio_write(dev, 0xBC, txcal_radio_regs[3]); b43_nphy_restore_cal()
5378 b43_nphy_rx_iq_coeffs(dev, true, rxcal_coeffs); b43_nphy_restore_cal()
5382 static int b43_nphy_cal_tx_iq_lo(struct b43_wldev *dev, b43_nphy_cal_tx_iq_lo() argument
5386 struct b43_phy *phy = &dev->phy; b43_nphy_cal_tx_iq_lo()
5387 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_cal_tx_iq_lo()
5404 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_cal_tx_iq_lo()
5406 if (dev->phy.rev >= 4) { b43_nphy_cal_tx_iq_lo()
5411 b43_ntab_read_bulk(dev, B43_NTAB16(7, 0x110), 2, save); b43_nphy_cal_tx_iq_lo()
5414 b43_nphy_iq_cal_gain_params(dev, i, target, &params[i]); b43_nphy_cal_tx_iq_lo()
5418 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x110), 2, gain); b43_nphy_cal_tx_iq_lo()
5420 b43_nphy_tx_cal_radio_setup(dev); b43_nphy_cal_tx_iq_lo()
5421 b43_nphy_tx_cal_phy_setup(dev); b43_nphy_cal_tx_iq_lo()
5423 phy6or5x = dev->phy.rev >= 6 || b43_nphy_cal_tx_iq_lo()
5424 (dev->phy.rev == 5 && nphy->ipa2g_on && b43_nphy_cal_tx_iq_lo()
5425 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ); b43_nphy_cal_tx_iq_lo()
5427 if (b43_is_40mhz(dev)) { b43_nphy_cal_tx_iq_lo()
5428 b43_ntab_write_bulk(dev, B43_NTAB16(15, 0), 18, b43_nphy_cal_tx_iq_lo()
5430 b43_ntab_write_bulk(dev, B43_NTAB16(15, 32), 18, b43_nphy_cal_tx_iq_lo()
5433 b43_ntab_write_bulk(dev, B43_NTAB16(15, 0), 18, b43_nphy_cal_tx_iq_lo()
5435 b43_ntab_write_bulk(dev, B43_NTAB16(15, 32), 18, b43_nphy_cal_tx_iq_lo()
5443 b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x8AD9); b43_nphy_cal_tx_iq_lo()
5445 b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0x8AA9); b43_nphy_cal_tx_iq_lo()
5448 if (!b43_is_40mhz(dev)) b43_nphy_cal_tx_iq_lo()
5454 b43_nphy_run_samples(dev, (b43_is_40mhz(dev) ? 40 : 20) * 8, b43_nphy_cal_tx_iq_lo()
5457 error = b43_nphy_tx_tone(dev, freq, 250, true, false, false); b43_nphy_cal_tx_iq_lo()
5463 if (dev->phy.rev < 3) b43_nphy_cal_tx_iq_lo()
5469 if (dev->phy.rev < 3) b43_nphy_cal_tx_iq_lo()
5473 if (dev->phy.rev >= 3) { b43_nphy_cal_tx_iq_lo()
5483 b43_ntab_write_bulk(dev, B43_NTAB16(15, 64), length, table); b43_nphy_cal_tx_iq_lo()
5486 if (dev->phy.rev >= 3) b43_nphy_cal_tx_iq_lo()
5491 if (dev->phy.rev >= 3) b43_nphy_cal_tx_iq_lo()
5508 if (dev->phy.rev >= 3) b43_nphy_cal_tx_iq_lo()
5513 if (dev->phy.rev >= 3) b43_nphy_cal_tx_iq_lo()
5523 b43_nphy_update_tx_cal_ladder(dev, core); b43_nphy_cal_tx_iq_lo()
5528 b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDNNUM, tmp); b43_nphy_cal_tx_iq_lo()
5531 buffer[0] = b43_ntab_read(dev, b43_nphy_cal_tx_iq_lo()
5535 b43_ntab_write(dev, B43_NTAB16(15, 69 + core), b43_nphy_cal_tx_iq_lo()
5539 b43_phy_write(dev, B43_NPHY_IQLOCAL_CMD, cmd); b43_nphy_cal_tx_iq_lo()
5541 tmp = b43_phy_read(dev, B43_NPHY_IQLOCAL_CMD); b43_nphy_cal_tx_iq_lo()
5547 b43_ntab_read_bulk(dev, B43_NTAB16(15, 96), length, b43_nphy_cal_tx_iq_lo()
5549 b43_ntab_write_bulk(dev, B43_NTAB16(15, 64), length, b43_nphy_cal_tx_iq_lo()
5559 last = (dev->phy.rev < 3) ? 6 : 7; b43_nphy_cal_tx_iq_lo()
5562 b43_ntab_write_bulk(dev, B43_NTAB16(15, 96), 4, buffer); b43_nphy_cal_tx_iq_lo()
5563 b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 4, buffer); b43_nphy_cal_tx_iq_lo()
5564 if (dev->phy.rev < 3) { b43_nphy_cal_tx_iq_lo()
5570 b43_ntab_write_bulk(dev, B43_NTAB16(15, 88), 4, b43_nphy_cal_tx_iq_lo()
5572 b43_ntab_read_bulk(dev, B43_NTAB16(15, 101), 2, b43_nphy_cal_tx_iq_lo()
5574 b43_ntab_write_bulk(dev, B43_NTAB16(15, 85), 2, b43_nphy_cal_tx_iq_lo()
5576 b43_ntab_write_bulk(dev, B43_NTAB16(15, 93), 2, b43_nphy_cal_tx_iq_lo()
5579 if (dev->phy.rev < 3) b43_nphy_cal_tx_iq_lo()
5581 b43_ntab_read_bulk(dev, B43_NTAB16(15, 96), length, b43_nphy_cal_tx_iq_lo()
5590 if (dev->phy.rev < 3) b43_nphy_cal_tx_iq_lo()
5592 b43_ntab_read_bulk(dev, B43_NTAB16(15, 96), length, b43_nphy_cal_tx_iq_lo()
5596 b43_nphy_stop_playback(dev); b43_nphy_cal_tx_iq_lo()
5597 b43_phy_write(dev, B43_NPHY_IQLOCAL_CMDGCTL, 0); b43_nphy_cal_tx_iq_lo()
5600 b43_nphy_tx_cal_phy_cleanup(dev); b43_nphy_cal_tx_iq_lo()
5601 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x110), 2, save); b43_nphy_cal_tx_iq_lo()
5603 if (dev->phy.rev < 2 && (!mphase || nphy->mphase_cal_phase_id == last)) b43_nphy_cal_tx_iq_lo()
5604 b43_nphy_tx_iq_workaround(dev); b43_nphy_cal_tx_iq_lo()
5606 if (dev->phy.rev >= 4) b43_nphy_cal_tx_iq_lo()
5609 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_cal_tx_iq_lo()
5615 static void b43_nphy_reapply_tx_cal_coeffs(struct b43_wldev *dev) b43_nphy_reapply_tx_cal_coeffs() argument
5617 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_reapply_tx_cal_coeffs()
5623 nphy->txiqlocal_chanspec.center_freq != dev->phy.chandef->chan->center_freq || b43_nphy_reapply_tx_cal_coeffs()
5624 nphy->txiqlocal_chanspec.channel_type != cfg80211_get_chandef_type(dev->phy.chandef)) b43_nphy_reapply_tx_cal_coeffs()
5627 b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 7, buffer); b43_nphy_reapply_tx_cal_coeffs()
5636 b43_ntab_write_bulk(dev, B43_NTAB16(15, 80), 4, b43_nphy_reapply_tx_cal_coeffs()
5640 b43_ntab_write_bulk(dev, B43_NTAB16(15, 88), 4, b43_nphy_reapply_tx_cal_coeffs()
5642 b43_ntab_write_bulk(dev, B43_NTAB16(15, 85), 2, b43_nphy_reapply_tx_cal_coeffs()
5644 b43_ntab_write_bulk(dev, B43_NTAB16(15, 93), 2, b43_nphy_reapply_tx_cal_coeffs()
5650 static int b43_nphy_rev2_cal_rx_iq(struct b43_wldev *dev, b43_nphy_rev2_cal_rx_iq() argument
5653 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_rev2_cal_rx_iq()
5676 b43_nphy_stay_in_carrier_search(dev, 1); b43_nphy_rev2_cal_rx_iq()
5678 if (dev->phy.rev < 2) b43_nphy_rev2_cal_rx_iq()
5679 b43_nphy_reapply_tx_cal_coeffs(dev); b43_nphy_rev2_cal_rx_iq()
5680 b43_ntab_read_bulk(dev, B43_NTAB16(7, 0x110), 2, gain_save); b43_nphy_rev2_cal_rx_iq()
5682 b43_nphy_iq_cal_gain_params(dev, i, target, &cal_params[i]); b43_nphy_rev2_cal_rx_iq()
5685 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x110), 2, cal_gain); b43_nphy_rev2_cal_rx_iq()
5698 tmp[1] = b43_phy_read(dev, B43_NPHY_RFSEQCA); b43_nphy_rev2_cal_rx_iq()
5699 tmp[2] = b43_phy_read(dev, afectl_core); b43_nphy_rev2_cal_rx_iq()
5700 tmp[3] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); b43_nphy_rev2_cal_rx_iq()
5701 tmp[4] = b43_phy_read(dev, rfctl[0]); b43_nphy_rev2_cal_rx_iq()
5702 tmp[5] = b43_phy_read(dev, rfctl[1]); b43_nphy_rev2_cal_rx_iq()
5704 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, b43_nphy_rev2_cal_rx_iq()
5707 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_TXEN, b43_nphy_rev2_cal_rx_iq()
5709 b43_phy_set(dev, afectl_core, 0x0006); b43_nphy_rev2_cal_rx_iq()
5710 b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x0006); b43_nphy_rev2_cal_rx_iq()
5712 band = b43_current_band(dev->wl); b43_nphy_rev2_cal_rx_iq()
5716 b43_phy_write(dev, rfctl[0], 0x140); b43_nphy_rev2_cal_rx_iq()
5718 b43_phy_write(dev, rfctl[0], 0x110); b43_nphy_rev2_cal_rx_iq()
5721 b43_phy_write(dev, rfctl[0], 0x180); b43_nphy_rev2_cal_rx_iq()
5723 b43_phy_write(dev, rfctl[0], 0x120); b43_nphy_rev2_cal_rx_iq()
5727 b43_phy_write(dev, rfctl[1], 0x148); b43_nphy_rev2_cal_rx_iq()
5729 b43_phy_write(dev, rfctl[1], 0x114); b43_nphy_rev2_cal_rx_iq()
5732 b43_radio_maskset(dev, B2055_C1_GENSPARE2, 0xFC, b43_nphy_rev2_cal_rx_iq()
5734 b43_radio_maskset(dev, B2055_C2_GENSPARE2, 0xFC, b43_nphy_rev2_cal_rx_iq()
5772 b43_nphy_rf_ctl_override(dev, 0x400, tmp[0], 3, b43_nphy_rev2_cal_rx_iq()
5774 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_rev2_cal_rx_iq()
5775 b43_nphy_stop_playback(dev); b43_nphy_rev2_cal_rx_iq()
5778 ret = b43_nphy_tx_tone(dev, 4000, b43_nphy_rev2_cal_rx_iq()
5783 b43_nphy_run_samples(dev, 160, 0xFFFF, 0, false, b43_nphy_rev2_cal_rx_iq()
5789 b43_nphy_rx_iq_est(dev, &est, 1024, 32, b43_nphy_rev2_cal_rx_iq()
5800 b43_nphy_calc_rx_iq_comp(dev, 1 << i); b43_nphy_rev2_cal_rx_iq()
5802 b43_nphy_stop_playback(dev); b43_nphy_rev2_cal_rx_iq()
5809 b43_radio_mask(dev, B2055_C1_GENSPARE2, 0xFC); b43_nphy_rev2_cal_rx_iq()
5810 b43_radio_mask(dev, B2055_C2_GENSPARE2, 0xFC); b43_nphy_rev2_cal_rx_iq()
5811 b43_phy_write(dev, rfctl[1], tmp[5]); b43_nphy_rev2_cal_rx_iq()
5812 b43_phy_write(dev, rfctl[0], tmp[4]); b43_nphy_rev2_cal_rx_iq()
5813 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp[3]); b43_nphy_rev2_cal_rx_iq()
5814 b43_phy_write(dev, afectl_core, tmp[2]); b43_nphy_rev2_cal_rx_iq()
5815 b43_phy_write(dev, B43_NPHY_RFSEQCA, tmp[1]); b43_nphy_rev2_cal_rx_iq()
5821 b43_nphy_rf_ctl_override(dev, 0x400, 0, 3, true); b43_nphy_rev2_cal_rx_iq()
5822 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_rev2_cal_rx_iq()
5823 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x110), 2, gain_save); b43_nphy_rev2_cal_rx_iq()
5825 b43_nphy_stay_in_carrier_search(dev, 0); b43_nphy_rev2_cal_rx_iq()
5830 static int b43_nphy_rev3_cal_rx_iq(struct b43_wldev *dev, b43_nphy_rev3_cal_rx_iq() argument
5837 static int b43_nphy_cal_rx_iq(struct b43_wldev *dev, b43_nphy_cal_rx_iq() argument
5840 if (dev->phy.rev >= 7) b43_nphy_cal_rx_iq()
5843 if (dev->phy.rev >= 3) b43_nphy_cal_rx_iq()
5844 return b43_nphy_rev3_cal_rx_iq(dev, target, type, debug); b43_nphy_cal_rx_iq()
5846 return b43_nphy_rev2_cal_rx_iq(dev, target, type, debug); b43_nphy_cal_rx_iq()
5850 static void b43_nphy_set_rx_core_state(struct b43_wldev *dev, u8 mask) b43_nphy_set_rx_core_state() argument
5852 struct b43_phy *phy = &dev->phy; b43_nphy_set_rx_core_state()
5861 b43_mac_suspend(dev); b43_nphy_set_rx_core_state()
5864 b43_nphy_stay_in_carrier_search(dev, true); b43_nphy_set_rx_core_state()
5866 b43_phy_maskset(dev, B43_NPHY_RFSEQCA, ~B43_NPHY_RFSEQCA_RXEN, b43_nphy_set_rx_core_state()
5870 b43_phy_write(dev, B43_NPHY_HPANT_SWTHRES, 1); b43_nphy_set_rx_core_state()
5871 if (dev->phy.rev >= 3) { b43_nphy_set_rx_core_state()
5875 b43_phy_write(dev, B43_NPHY_HPANT_SWTHRES, 0x1E); b43_nphy_set_rx_core_state()
5876 if (dev->phy.rev >= 3) { b43_nphy_set_rx_core_state()
5881 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_nphy_set_rx_core_state()
5884 b43_nphy_stay_in_carrier_search(dev, false); b43_nphy_set_rx_core_state()
5886 b43_mac_enable(dev); b43_nphy_set_rx_core_state()
5889 static enum b43_txpwr_result b43_nphy_op_recalc_txpower(struct b43_wldev *dev, b43_nphy_op_recalc_txpower() argument
5892 struct b43_phy *phy = &dev->phy; b43_nphy_op_recalc_txpower()
5893 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_op_recalc_txpower()
5894 struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan; b43_nphy_op_recalc_txpower()
5904 b43_ppr_clear(dev, ppr); b43_nphy_op_recalc_txpower()
5907 b43_ppr_load_max_from_sprom(dev, ppr, B43_BAND_2G); b43_nphy_op_recalc_txpower()
5913 b43_ppr_apply_max(dev, ppr, max); b43_nphy_op_recalc_txpower()
5914 if (b43_debug(dev, B43_DBG_XMITPOWER)) b43_nphy_op_recalc_txpower()
5915 b43dbg(dev->wl, "Calculated TX power: " Q52_FMT "\n", b43_nphy_op_recalc_txpower()
5916 Q52_ARG(b43_ppr_get_max(dev, ppr))); b43_nphy_op_recalc_txpower()
5922 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_op_recalc_txpower()
5926 b43_ppr_add(dev, ppr, -hw_gain); b43_nphy_op_recalc_txpower()
5930 b43_ppr_apply_min(dev, ppr, INT_TO_Q52(8)); b43_nphy_op_recalc_txpower()
5934 b43_mac_suspend(dev); b43_nphy_op_recalc_txpower()
5935 b43_nphy_tx_power_ctl_setup(dev); b43_nphy_op_recalc_txpower()
5936 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) { b43_nphy_op_recalc_txpower()
5937 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, B43_MACCTL_PHY_LOCK); b43_nphy_op_recalc_txpower()
5938 b43_read32(dev, B43_MMIO_MACCTL); b43_nphy_op_recalc_txpower()
5941 b43_nphy_tx_power_ctrl(dev, nphy->txpwrctrl); b43_nphy_op_recalc_txpower()
5942 if (dev->dev->core_rev == 11 || dev->dev->core_rev == 12) b43_nphy_op_recalc_txpower()
5943 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_PHY_LOCK, 0); b43_nphy_op_recalc_txpower()
5944 b43_mac_enable(dev); b43_nphy_op_recalc_txpower()
5957 static void b43_nphy_update_mimo_config(struct b43_wldev *dev, s32 preamble) b43_nphy_update_mimo_config() argument
5959 u16 mimocfg = b43_phy_read(dev, B43_NPHY_MIMOCFG); b43_nphy_update_mimo_config()
5967 b43_phy_write(dev, B43_NPHY_MIMOCFG, mimocfg); b43_nphy_update_mimo_config()
5971 static void b43_nphy_bphy_init(struct b43_wldev *dev) b43_nphy_bphy_init() argument
5978 b43_phy_write(dev, B43_PHY_N_BMODE(0x88 + i), val); b43_nphy_bphy_init()
5983 b43_phy_write(dev, B43_PHY_N_BMODE(0x98 + i), val); b43_nphy_bphy_init()
5986 b43_phy_write(dev, B43_PHY_N_BMODE(0x38), 0x668); b43_nphy_bphy_init()
5990 static void b43_nphy_superswitch_init(struct b43_wldev *dev, bool init) b43_nphy_superswitch_init() argument
5992 if (dev->phy.rev >= 7) b43_nphy_superswitch_init()
5995 if (dev->phy.rev >= 3) { b43_nphy_superswitch_init()
5999 b43_ntab_write(dev, B43_NTAB16(9, 2), 0x211); b43_nphy_superswitch_init()
6000 b43_ntab_write(dev, B43_NTAB16(9, 3), 0x222); b43_nphy_superswitch_init()
6001 b43_ntab_write(dev, B43_NTAB16(9, 8), 0x144); b43_nphy_superswitch_init()
6002 b43_ntab_write(dev, B43_NTAB16(9, 12), 0x188); b43_nphy_superswitch_init()
6005 b43_phy_write(dev, B43_NPHY_GPIO_LOOEN, 0); b43_nphy_superswitch_init()
6006 b43_phy_write(dev, B43_NPHY_GPIO_HIOEN, 0); b43_nphy_superswitch_init()
6008 switch (dev->dev->bus_type) { b43_nphy_superswitch_init()
6011 bcma_chipco_gpio_control(&dev->dev->bdev->bus->drv_cc, b43_nphy_superswitch_init()
6017 ssb_chipco_gpio_control(&dev->dev->sdev->bus->chipco, b43_nphy_superswitch_init()
6023 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0); b43_nphy_superswitch_init()
6024 b43_maskset16(dev, B43_MMIO_GPIO_MASK, ~0, 0xFC00); b43_nphy_superswitch_init()
6025 b43_maskset16(dev, B43_MMIO_GPIO_CONTROL, (~0xFC00 & 0xFFFF), b43_nphy_superswitch_init()
6029 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_LO1, 0x2D8); b43_nphy_superswitch_init()
6030 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP1, 0x301); b43_nphy_superswitch_init()
6031 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_LO2, 0x2D8); b43_nphy_superswitch_init()
6032 b43_phy_write(dev, B43_NPHY_RFCTL_LUT_TRSW_UP2, 0x301); b43_nphy_superswitch_init()
6038 static int b43_phy_initn(struct b43_wldev *dev) b43_phy_initn() argument
6040 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_phy_initn()
6041 struct b43_phy *phy = &dev->phy; b43_phy_initn()
6052 if ((dev->phy.rev >= 3) && b43_phy_initn()
6054 (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)) { b43_phy_initn()
6055 switch (dev->dev->bus_type) { b43_phy_initn()
6058 bcma_cc_set32(&dev->dev->bdev->bus->drv_cc, b43_phy_initn()
6064 chipco_set32(&dev->dev->sdev->bus->chipco, b43_phy_initn()
6070 nphy->use_int_tx_iq_lo_cal = b43_nphy_ipa(dev) || b43_phy_initn()
6075 b43_nphy_tables_init(dev); b43_phy_initn()
6080 if (dev->phy.rev >= 3) { b43_phy_initn()
6081 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S1, 0); b43_phy_initn()
6082 b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0); b43_phy_initn()
6084 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER3, 0); b43_phy_initn()
6085 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER4, 0); b43_phy_initn()
6086 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER5, 0); b43_phy_initn()
6087 b43_phy_write(dev, B43_NPHY_REV7_RF_CTL_OVER6, 0); b43_phy_initn()
6093 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, 0); b43_phy_initn()
6094 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, 0); b43_phy_initn()
6096 b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0); b43_phy_initn()
6098 b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, 0); b43_phy_initn()
6099 b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, 0); b43_phy_initn()
6100 if (dev->phy.rev < 6) { b43_phy_initn()
6101 b43_phy_write(dev, B43_NPHY_RFCTL_INTC3, 0); b43_phy_initn()
6102 b43_phy_write(dev, B43_NPHY_RFCTL_INTC4, 0); b43_phy_initn()
6104 b43_phy_mask(dev, B43_NPHY_RFSEQMODE, b43_phy_initn()
6107 if (dev->phy.rev >= 3) b43_phy_initn()
6108 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, 0); b43_phy_initn()
6109 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, 0); b43_phy_initn()
6111 if (dev->phy.rev <= 2) { b43_phy_initn()
6112 tmp = (dev->phy.rev == 2) ? 0x3B : 0x40; b43_phy_initn()
6113 b43_phy_maskset(dev, B43_NPHY_BPHY_CTL3, b43_phy_initn()
6117 b43_phy_write(dev, B43_NPHY_AFESEQ_TX2RX_PUD_20M, 0x20); b43_phy_initn()
6118 b43_phy_write(dev, B43_NPHY_AFESEQ_TX2RX_PUD_40M, 0x20); b43_phy_initn()
6121 (dev->dev->board_vendor == PCI_VENDOR_ID_APPLE && b43_phy_initn()
6122 dev->dev->board_type == BCMA_BOARD_TYPE_BCM943224M93)) b43_phy_initn()
6123 b43_phy_write(dev, B43_NPHY_TXREALFD, 0xA0); b43_phy_initn()
6125 b43_phy_write(dev, B43_NPHY_TXREALFD, 0xB8); b43_phy_initn()
6126 b43_phy_write(dev, B43_NPHY_MIMO_CRSTXEXT, 0xC8); b43_phy_initn()
6127 b43_phy_write(dev, B43_NPHY_PLOAD_CSENSE_EXTLEN, 0x50); b43_phy_initn()
6128 b43_phy_write(dev, B43_NPHY_TXRIFS_FRDEL, 0x30); b43_phy_initn()
6131 b43_nphy_update_mimo_config(dev, nphy->preamble_override); b43_phy_initn()
6133 b43_nphy_update_txrx_chain(dev); b43_phy_initn()
6136 b43_phy_write(dev, B43_NPHY_DUP40_GFBL, 0xAA8); b43_phy_initn()
6137 b43_phy_write(dev, B43_NPHY_DUP40_BL, 0x9A4); b43_phy_initn()
6140 tmp2 = b43_current_band(dev->wl); b43_phy_initn()
6141 if (b43_nphy_ipa(dev)) { b43_phy_initn()
6142 b43_phy_set(dev, B43_NPHY_PAPD_EN0, 0x1); b43_phy_initn()
6143 b43_phy_maskset(dev, B43_NPHY_EPS_TABLE_ADJ0, 0x007F, b43_phy_initn()
6145 b43_phy_set(dev, B43_NPHY_PAPD_EN1, 0x1); b43_phy_initn()
6146 b43_phy_maskset(dev, B43_NPHY_EPS_TABLE_ADJ1, 0x007F, b43_phy_initn()
6148 b43_nphy_int_pa_set_tx_dig_filters(dev); b43_phy_initn()
6150 b43_nphy_ext_pa_set_tx_dig_filters(dev); b43_phy_initn()
6153 b43_nphy_workarounds(dev); b43_phy_initn()
6156 b43_phy_force_clock(dev, 1); b43_phy_initn()
6157 tmp = b43_phy_read(dev, B43_NPHY_BBCFG); b43_phy_initn()
6158 b43_phy_write(dev, B43_NPHY_BBCFG, tmp | B43_NPHY_BBCFG_RSTCCA); b43_phy_initn()
6159 b43_phy_write(dev, B43_NPHY_BBCFG, tmp & ~B43_NPHY_BBCFG_RSTCCA); b43_phy_initn()
6160 b43_phy_force_clock(dev, 0); b43_phy_initn()
6162 b43_mac_phy_clock_set(dev, true); b43_phy_initn()
6165 b43_nphy_pa_override(dev, false); b43_phy_initn()
6166 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX); b43_phy_initn()
6167 b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX); b43_phy_initn()
6168 b43_nphy_pa_override(dev, true); b43_phy_initn()
6171 b43_nphy_classifier(dev, 0, 0); b43_phy_initn()
6172 b43_nphy_read_clip_detection(dev, clip); b43_phy_initn()
6173 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_initn()
6174 b43_nphy_bphy_init(dev); b43_phy_initn()
6177 b43_nphy_tx_power_ctrl(dev, false); b43_phy_initn()
6178 b43_nphy_tx_power_fix(dev); b43_phy_initn()
6179 b43_nphy_tx_power_ctl_idle_tssi(dev); b43_phy_initn()
6180 b43_nphy_tx_power_ctl_setup(dev); b43_phy_initn()
6181 b43_nphy_tx_gain_table_upload(dev); b43_phy_initn()
6184 b43_nphy_set_rx_core_state(dev, nphy->phyrxchain); b43_phy_initn()
6190 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_initn()
6196 b43_nphy_rssi_cal(dev); b43_phy_initn()
6198 b43_nphy_restore_rssi_cal(dev); b43_phy_initn()
6200 b43_nphy_rssi_cal(dev); b43_phy_initn()
6204 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_initn()
6213 target = b43_nphy_get_tx_gains(dev); b43_phy_initn()
6216 b43_nphy_superswitch_init(dev, true); b43_phy_initn()
6218 b43_nphy_rssi_cal(dev); b43_phy_initn()
6225 target = b43_nphy_get_tx_gains(dev); b43_phy_initn()
6227 if (!b43_nphy_cal_tx_iq_lo(dev, target, true, false)) b43_phy_initn()
6228 if (b43_nphy_cal_rx_iq(dev, target, 2, 0) == 0) b43_phy_initn()
6229 b43_nphy_save_cal(dev); b43_phy_initn()
6233 b43_nphy_restore_cal(dev); b43_phy_initn()
6237 b43_nphy_tx_pwr_ctrl_coef_setup(dev); b43_phy_initn()
6238 b43_nphy_tx_power_ctrl(dev, tx_pwr_state); b43_phy_initn()
6239 b43_phy_write(dev, B43_NPHY_TXMACIF_HOLDOFF, 0x0015); b43_phy_initn()
6240 b43_phy_write(dev, B43_NPHY_TXMACDELAY, 0x0320); b43_phy_initn()
6242 b43_phy_write(dev, B43_NPHY_PLOAD_CSENSE_EXTLEN, 0x0032); b43_phy_initn()
6243 b43_nphy_tx_lpf_bw(dev); b43_phy_initn()
6245 b43_nphy_spur_workaround(dev); b43_phy_initn()
6254 static void b43_chantab_phy_upload(struct b43_wldev *dev, b43_chantab_phy_upload() argument
6257 b43_phy_write(dev, B43_NPHY_BW1A, e->phy_bw1a); b43_chantab_phy_upload()
6258 b43_phy_write(dev, B43_NPHY_BW2, e->phy_bw2); b43_chantab_phy_upload()
6259 b43_phy_write(dev, B43_NPHY_BW3, e->phy_bw3); b43_chantab_phy_upload()
6260 b43_phy_write(dev, B43_NPHY_BW4, e->phy_bw4); b43_chantab_phy_upload()
6261 b43_phy_write(dev, B43_NPHY_BW5, e->phy_bw5); b43_chantab_phy_upload()
6262 b43_phy_write(dev, B43_NPHY_BW6, e->phy_bw6); b43_chantab_phy_upload()
6266 static void b43_nphy_pmu_spur_avoid(struct b43_wldev *dev, bool avoid) b43_nphy_pmu_spur_avoid() argument
6268 switch (dev->dev->bus_type) { b43_nphy_pmu_spur_avoid()
6271 bcma_pmu_spuravoid_pllupdate(&dev->dev->bdev->bus->drv_cc, b43_nphy_pmu_spur_avoid()
6277 ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, b43_nphy_pmu_spur_avoid()
6285 static void b43_nphy_channel_setup(struct b43_wldev *dev, b43_nphy_channel_setup() argument
6289 struct b43_phy *phy = &dev->phy; b43_nphy_channel_setup()
6290 struct b43_phy_n *nphy = dev->phy.n; b43_nphy_channel_setup()
6296 b43_phy_mask(dev, B43_NPHY_BANDCTL, ~B43_NPHY_BANDCTL_5GHZ); b43_nphy_channel_setup()
6298 tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR); b43_nphy_channel_setup()
6299 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4); b43_nphy_channel_setup()
6301 b43_phy_set(dev, B43_PHY_B_BBCFG, b43_nphy_channel_setup()
6303 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16); b43_nphy_channel_setup()
6304 b43_phy_set(dev, B43_NPHY_BANDCTL, B43_NPHY_BANDCTL_5GHZ); b43_nphy_channel_setup()
6306 b43_phy_mask(dev, B43_NPHY_BANDCTL, ~B43_NPHY_BANDCTL_5GHZ); b43_nphy_channel_setup()
6307 tmp16 = b43_read16(dev, B43_MMIO_PSM_PHY_HDR); b43_nphy_channel_setup()
6308 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16 | 4); b43_nphy_channel_setup()
6310 b43_phy_mask(dev, B43_PHY_B_BBCFG, b43_nphy_channel_setup()
6312 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp16); b43_nphy_channel_setup()
6315 b43_chantab_phy_upload(dev, e); b43_nphy_channel_setup()
6318 b43_nphy_classifier(dev, 2, 0); b43_nphy_channel_setup()
6319 b43_phy_set(dev, B43_PHY_B_TEST, 0x0800); b43_nphy_channel_setup()
6321 b43_nphy_classifier(dev, 2, 2); b43_nphy_channel_setup()
6323 b43_phy_mask(dev, B43_PHY_B_TEST, ~0x840); b43_nphy_channel_setup()
6327 b43_nphy_tx_power_fix(dev); b43_nphy_channel_setup()
6329 if (dev->phy.rev < 3) b43_nphy_channel_setup()
6330 b43_nphy_adjust_lna_gain_table(dev); b43_nphy_channel_setup()
6332 b43_nphy_tx_lpf_bw(dev); b43_nphy_channel_setup()
6334 if (dev->phy.rev >= 3 && b43_nphy_channel_setup()
6335 dev->phy.n->spur_avoid != B43_SPUR_AVOID_DISABLE) { b43_nphy_channel_setup()
6338 if (dev->phy.n->spur_avoid == B43_SPUR_AVOID_FORCE) { b43_nphy_channel_setup()
6349 if (!b43_is_40mhz(dev)) { /* 20MHz */ b43_nphy_channel_setup()
6357 if (!b43_is_40mhz(dev)) { /* 20MHz */ b43_nphy_channel_setup()
6363 spuravoid = dev->dev->chip_id == 0x4716; b43_nphy_channel_setup()
6367 b43_nphy_pmu_spur_avoid(dev, spuravoid); b43_nphy_channel_setup()
6369 b43_mac_switch_freq(dev, spuravoid); b43_nphy_channel_setup()
6371 if (dev->phy.rev == 3 || dev->phy.rev == 4) b43_nphy_channel_setup()
6372 b43_wireless_core_phy_pll_reset(dev); b43_nphy_channel_setup()
6375 b43_phy_set(dev, B43_NPHY_BBCFG, B43_NPHY_BBCFG_RSTRX); b43_nphy_channel_setup()
6377 b43_phy_mask(dev, B43_NPHY_BBCFG, b43_nphy_channel_setup()
6380 b43_nphy_reset_cca(dev); b43_nphy_channel_setup()
6385 b43_phy_write(dev, B43_NPHY_NDATAT_DUP40, 0x3830); b43_nphy_channel_setup()
6388 b43_nphy_spur_workaround(dev); b43_nphy_channel_setup()
6392 static int b43_nphy_set_channel(struct b43_wldev *dev, b43_nphy_set_channel() argument
6396 struct b43_phy *phy = &dev->phy; b43_nphy_set_channel()
6409 r2057_get_chantabent_rev7(dev, channel->center_freq, b43_nphy_set_channel()
6414 tabent_r3 = b43_nphy_get_chantabent_rev3(dev, b43_nphy_set_channel()
6419 tabent_r2 = b43_nphy_get_chantabent_rev2(dev, b43_nphy_set_channel()
6436 b43_phy_set(dev, B43_NPHY_RXCTL, B43_NPHY_RXCTL_BSELU20); b43_nphy_set_channel()
6438 b43_phy_set(dev, 0x310, 0x8000); b43_nphy_set_channel()
6440 b43_phy_mask(dev, B43_NPHY_RXCTL, ~B43_NPHY_RXCTL_BSELU20); b43_nphy_set_channel()
6442 b43_phy_mask(dev, 0x310, (u16)~0x8000); b43_nphy_set_channel()
6453 b43_radio_maskset(dev, R2057_TIA_CONFIG_CORE0, ~2, tmp); b43_nphy_set_channel()
6454 b43_radio_maskset(dev, R2057_TIA_CONFIG_CORE1, ~2, tmp); b43_nphy_set_channel()
6457 b43_radio_2057_setup(dev, tabent_r7, tabent_r7_2g); b43_nphy_set_channel()
6458 b43_nphy_channel_setup(dev, phy_regs, channel); b43_nphy_set_channel()
6461 b43_radio_maskset(dev, 0x08, 0xFFFB, tmp); b43_nphy_set_channel()
6462 b43_radio_2056_setup(dev, tabent_r3); b43_nphy_set_channel()
6463 b43_nphy_channel_setup(dev, &(tabent_r3->phy_regs), channel); b43_nphy_set_channel()
6466 b43_radio_maskset(dev, B2055_MASTER1, 0xFF8F, tmp); b43_nphy_set_channel()
6467 b43_radio_2055_setup(dev, tabent_r2); b43_nphy_set_channel()
6468 b43_nphy_channel_setup(dev, &(tabent_r2->phy_regs), channel); b43_nphy_set_channel()
6478 static int b43_nphy_op_allocate(struct b43_wldev *dev) b43_nphy_op_allocate() argument
6486 dev->phy.n = nphy; b43_nphy_op_allocate()
6491 static void b43_nphy_op_prepare_structs(struct b43_wldev *dev) b43_nphy_op_prepare_structs() argument
6493 struct b43_phy *phy = &dev->phy; b43_nphy_op_prepare_structs()
6495 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_nphy_op_prepare_structs()
6514 if (dev->phy.rev >= 3 || b43_nphy_op_prepare_structs()
6515 (dev->dev->board_vendor == PCI_VENDOR_ID_APPLE && b43_nphy_op_prepare_structs()
6516 (dev->dev->core_rev == 11 || dev->dev->core_rev == 12))) { b43_nphy_op_prepare_structs()
6520 if (dev->phy.rev >= 2 && b43_nphy_op_prepare_structs()
6524 if (dev->dev->bus_type == B43_BUS_SSB && b43_nphy_op_prepare_structs()
6525 dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI) { b43_nphy_op_prepare_structs()
6527 dev->dev->sdev->bus->host_pci; b43_nphy_op_prepare_structs()
6538 if (dev->phy.rev >= 3) { b43_nphy_op_prepare_structs()
6544 static void b43_nphy_op_free(struct b43_wldev *dev) b43_nphy_op_free() argument
6546 struct b43_phy *phy = &dev->phy; b43_nphy_op_free()
6553 static int b43_nphy_op_init(struct b43_wldev *dev) b43_nphy_op_init() argument
6555 return b43_phy_initn(dev); b43_nphy_op_init()
6558 static inline void check_phyreg(struct b43_wldev *dev, u16 offset) check_phyreg() argument
6563 b43err(dev->wl, "Invalid OFDM PHY access at " check_phyreg()
6569 b43err(dev->wl, "Invalid EXT-G PHY access at " check_phyreg()
6576 static void b43_nphy_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask, b43_nphy_op_maskset() argument
6579 check_phyreg(dev, reg); b43_nphy_op_maskset()
6580 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_nphy_op_maskset()
6581 b43_maskset16(dev, B43_MMIO_PHY_DATA, mask, set); b43_nphy_op_maskset()
6582 dev->phy.writes_counter = 1; b43_nphy_op_maskset()
6585 static u16 b43_nphy_op_radio_read(struct b43_wldev *dev, u16 reg) b43_nphy_op_radio_read() argument
6588 B43_WARN_ON(dev->phy.rev < 7 && reg == 1); b43_nphy_op_radio_read()
6590 if (dev->phy.rev >= 7) b43_nphy_op_radio_read()
6595 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_nphy_op_radio_read()
6596 return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); b43_nphy_op_radio_read()
6599 static void b43_nphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) b43_nphy_op_radio_write() argument
6602 B43_WARN_ON(dev->phy.rev < 7 && reg == 1); b43_nphy_op_radio_write()
6604 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_nphy_op_radio_write()
6605 b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); b43_nphy_op_radio_write()
6609 static void b43_nphy_op_software_rfkill(struct b43_wldev *dev, b43_nphy_op_software_rfkill() argument
6612 struct b43_phy *phy = &dev->phy; b43_nphy_op_software_rfkill()
6614 if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED) b43_nphy_op_software_rfkill()
6615 b43err(dev->wl, "MAC not suspended\n"); b43_nphy_op_software_rfkill()
6621 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_nphy_op_software_rfkill()
6626 b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_nphy_op_software_rfkill()
6629 b43_radio_mask(dev, 0x09, ~0x2); b43_nphy_op_software_rfkill()
6631 b43_radio_write(dev, 0x204D, 0); b43_nphy_op_software_rfkill()
6632 b43_radio_write(dev, 0x2053, 0); b43_nphy_op_software_rfkill()
6633 b43_radio_write(dev, 0x2058, 0); b43_nphy_op_software_rfkill()
6634 b43_radio_write(dev, 0x205E, 0); b43_nphy_op_software_rfkill()
6635 b43_radio_mask(dev, 0x2062, ~0xF0); b43_nphy_op_software_rfkill()
6636 b43_radio_write(dev, 0x2064, 0); b43_nphy_op_software_rfkill()
6638 b43_radio_write(dev, 0x304D, 0); b43_nphy_op_software_rfkill()
6639 b43_radio_write(dev, 0x3053, 0); b43_nphy_op_software_rfkill()
6640 b43_radio_write(dev, 0x3058, 0); b43_nphy_op_software_rfkill()
6641 b43_radio_write(dev, 0x305E, 0); b43_nphy_op_software_rfkill()
6642 b43_radio_mask(dev, 0x3062, ~0xF0); b43_nphy_op_software_rfkill()
6643 b43_radio_write(dev, 0x3064, 0); b43_nphy_op_software_rfkill()
6649 if (!dev->phy.radio_on) b43_nphy_op_software_rfkill()
6650 b43_radio_2057_init(dev); b43_nphy_op_software_rfkill()
6651 b43_switch_channel(dev, dev->phy.channel); b43_nphy_op_software_rfkill()
6653 if (!dev->phy.radio_on) b43_nphy_op_software_rfkill()
6654 b43_radio_init2056(dev); b43_nphy_op_software_rfkill()
6655 b43_switch_channel(dev, dev->phy.channel); b43_nphy_op_software_rfkill()
6657 b43_radio_init2055(dev); b43_nphy_op_software_rfkill()
6663 static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on) b43_nphy_op_switch_analog() argument
6665 struct b43_phy *phy = &dev->phy; b43_nphy_op_switch_analog()
6673 b43_phy_write(dev, B43_NPHY_AFECTL_C1, core); b43_nphy_op_switch_analog()
6674 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, override); b43_nphy_op_switch_analog()
6675 b43_phy_write(dev, B43_NPHY_AFECTL_C2, core); b43_nphy_op_switch_analog()
6676 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, override); b43_nphy_op_switch_analog()
6678 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, override); b43_nphy_op_switch_analog()
6679 b43_phy_write(dev, B43_NPHY_AFECTL_C1, core); b43_nphy_op_switch_analog()
6680 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, override); b43_nphy_op_switch_analog()
6681 b43_phy_write(dev, B43_NPHY_AFECTL_C2, core); b43_nphy_op_switch_analog()
6684 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, override); b43_nphy_op_switch_analog()
6688 static int b43_nphy_op_switch_channel(struct b43_wldev *dev, b43_nphy_op_switch_channel() argument
6691 struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan; b43_nphy_op_switch_channel()
6693 cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef); b43_nphy_op_switch_channel()
6695 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_nphy_op_switch_channel()
6703 return b43_nphy_set_channel(dev, channel, channel_type); b43_nphy_op_switch_channel()
6706 static unsigned int b43_nphy_op_get_default_chan(struct b43_wldev *dev) b43_nphy_op_get_default_chan() argument
6708 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_nphy_op_get_default_chan()
H A Dbus.h20 int (*bus_may_powerdown)(struct b43_bus_dev *dev);
21 int (*bus_powerup)(struct b43_bus_dev *dev, bool dynamic_pctl);
22 int (*device_is_enabled)(struct b43_bus_dev *dev);
23 void (*device_enable)(struct b43_bus_dev *dev,
25 void (*device_disable)(struct b43_bus_dev *dev,
28 u16 (*read16)(struct b43_bus_dev *dev, u16 offset);
29 u32 (*read32)(struct b43_bus_dev *dev, u16 offset);
30 void (*write16)(struct b43_bus_dev *dev, u16 offset, u16 value);
31 void (*write32)(struct b43_bus_dev *dev, u16 offset, u32 value);
32 void (*block_read)(struct b43_bus_dev *dev, void *buffer,
34 void (*block_write)(struct b43_bus_dev *dev, const void *buffer,
38 struct device *dev; member in struct:b43_bus_dev
56 static inline bool b43_bus_host_is_pcmcia(struct b43_bus_dev *dev) b43_bus_host_is_pcmcia() argument
59 return (dev->bus_type == B43_BUS_SSB && b43_bus_host_is_pcmcia()
60 dev->sdev->bus->bustype == SSB_BUSTYPE_PCMCIA); b43_bus_host_is_pcmcia()
66 static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev) b43_bus_host_is_pci() argument
69 if (dev->bus_type == B43_BUS_BCMA) b43_bus_host_is_pci()
70 return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI); b43_bus_host_is_pci()
73 if (dev->bus_type == B43_BUS_SSB) b43_bus_host_is_pci()
74 return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI); b43_bus_host_is_pci()
79 static inline bool b43_bus_host_is_sdio(struct b43_bus_dev *dev) b43_bus_host_is_sdio() argument
82 return (dev->bus_type == B43_BUS_SSB && b43_bus_host_is_sdio()
83 dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO); b43_bus_host_is_sdio()
92 void *b43_bus_get_wldev(struct b43_bus_dev *dev);
93 void b43_bus_set_wldev(struct b43_bus_dev *dev, void *data);
H A Dsysfs.h6 int b43_sysfs_register(struct b43_wldev *dev);
7 void b43_sysfs_unregister(struct b43_wldev *dev);
H A Dphy_ht.c48 static void b43_radio_2059_channel_setup(struct b43_wldev *dev, b43_radio_2059_channel_setup() argument
55 b43_radio_write(dev, 0x16, e->radio_syn16); b43_radio_2059_channel_setup()
56 b43_radio_write(dev, 0x17, e->radio_syn17); b43_radio_2059_channel_setup()
57 b43_radio_write(dev, 0x22, e->radio_syn22); b43_radio_2059_channel_setup()
58 b43_radio_write(dev, 0x25, e->radio_syn25); b43_radio_2059_channel_setup()
59 b43_radio_write(dev, 0x27, e->radio_syn27); b43_radio_2059_channel_setup()
60 b43_radio_write(dev, 0x28, e->radio_syn28); b43_radio_2059_channel_setup()
61 b43_radio_write(dev, 0x29, e->radio_syn29); b43_radio_2059_channel_setup()
62 b43_radio_write(dev, 0x2c, e->radio_syn2c); b43_radio_2059_channel_setup()
63 b43_radio_write(dev, 0x2d, e->radio_syn2d); b43_radio_2059_channel_setup()
64 b43_radio_write(dev, 0x37, e->radio_syn37); b43_radio_2059_channel_setup()
65 b43_radio_write(dev, 0x41, e->radio_syn41); b43_radio_2059_channel_setup()
66 b43_radio_write(dev, 0x43, e->radio_syn43); b43_radio_2059_channel_setup()
67 b43_radio_write(dev, 0x47, e->radio_syn47); b43_radio_2059_channel_setup()
71 b43_radio_write(dev, r | 0x4a, e->radio_rxtx4a); b43_radio_2059_channel_setup()
72 b43_radio_write(dev, r | 0x58, e->radio_rxtx58); b43_radio_2059_channel_setup()
73 b43_radio_write(dev, r | 0x5a, e->radio_rxtx5a); b43_radio_2059_channel_setup()
74 b43_radio_write(dev, r | 0x6a, e->radio_rxtx6a); b43_radio_2059_channel_setup()
75 b43_radio_write(dev, r | 0x6d, e->radio_rxtx6d); b43_radio_2059_channel_setup()
76 b43_radio_write(dev, r | 0x6e, e->radio_rxtx6e); b43_radio_2059_channel_setup()
77 b43_radio_write(dev, r | 0x92, e->radio_rxtx92); b43_radio_2059_channel_setup()
78 b43_radio_write(dev, r | 0x98, e->radio_rxtx98); b43_radio_2059_channel_setup()
84 b43_radio_mask(dev, R2059_RFPLL_MISC_EN, ~0x1); b43_radio_2059_channel_setup()
85 b43_radio_mask(dev, R2059_RFPLL_MISC_CAL_RESETN, ~0x4); b43_radio_2059_channel_setup()
86 b43_radio_set(dev, R2059_RFPLL_MISC_CAL_RESETN, 0x4); b43_radio_2059_channel_setup()
87 b43_radio_set(dev, R2059_RFPLL_MISC_EN, 0x1); b43_radio_2059_channel_setup()
93 static void b43_radio_2059_rcal(struct b43_wldev *dev) b43_radio_2059_rcal() argument
96 b43_radio_set(dev, R2059_C3 | R2059_RCAL_CONFIG, 0x1); b43_radio_2059_rcal()
99 b43_radio_set(dev, R2059_C3 | 0x0BF, 0x1); b43_radio_2059_rcal()
100 b43_radio_maskset(dev, R2059_C3 | 0x19B, 0x3, 0x2); b43_radio_2059_rcal()
103 b43_radio_set(dev, R2059_C3 | R2059_RCAL_CONFIG, 0x2); b43_radio_2059_rcal()
107 b43_radio_mask(dev, R2059_C3 | R2059_RCAL_CONFIG, ~0x2); b43_radio_2059_rcal()
109 if (!b43_radio_wait_value(dev, R2059_C3 | R2059_RCAL_STATUS, 1, 1, 100, b43_radio_2059_rcal()
111 b43err(dev->wl, "Radio 0x2059 rcal timeout\n"); b43_radio_2059_rcal()
114 b43_radio_mask(dev, R2059_C3 | R2059_RCAL_CONFIG, ~0x1); b43_radio_2059_rcal()
116 b43_radio_set(dev, 0xa, 0x60); b43_radio_2059_rcal()
120 static void b43_radio_2057_rccal(struct b43_wldev *dev) b43_radio_2057_rccal() argument
128 b43_radio_write(dev, R2059_RCCAL_MASTER, radio_values[i][0]); b43_radio_2057_rccal()
129 b43_radio_write(dev, R2059_RCCAL_X1, 0x6E); b43_radio_2057_rccal()
130 b43_radio_write(dev, R2059_RCCAL_TRC0, radio_values[i][1]); b43_radio_2057_rccal()
133 b43_radio_write(dev, R2059_RCCAL_START_R1_Q1_P1, 0x55); b43_radio_2057_rccal()
136 if (!b43_radio_wait_value(dev, R2059_RCCAL_DONE_OSCCAP, 2, 2, b43_radio_2057_rccal()
138 b43err(dev->wl, "Radio 0x2059 rccal timeout\n"); b43_radio_2057_rccal()
141 b43_radio_write(dev, R2059_RCCAL_START_R1_Q1_P1, 0x15); b43_radio_2057_rccal()
144 b43_radio_mask(dev, R2059_RCCAL_MASTER, ~0x1); b43_radio_2057_rccal()
147 static void b43_radio_2059_init_pre(struct b43_wldev *dev) b43_radio_2059_init_pre() argument
149 b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD, ~B43_PHY_HT_RF_CTL_CMD_CHIP0_PU); b43_radio_2059_init_pre()
150 b43_phy_set(dev, B43_PHY_HT_RF_CTL_CMD, B43_PHY_HT_RF_CTL_CMD_FORCE); b43_radio_2059_init_pre()
151 b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD, ~B43_PHY_HT_RF_CTL_CMD_FORCE); b43_radio_2059_init_pre()
152 b43_phy_set(dev, B43_PHY_HT_RF_CTL_CMD, B43_PHY_HT_RF_CTL_CMD_CHIP0_PU); b43_radio_2059_init_pre()
155 static void b43_radio_2059_init(struct b43_wldev *dev) b43_radio_2059_init() argument
161 b43_radio_2059_init_pre(dev); b43_radio_2059_init()
163 r2059_upload_inittabs(dev); b43_radio_2059_init()
166 b43_radio_set(dev, routing[i] | 0x146, 0x3); b43_radio_2059_init()
170 b43_radio_set(dev, R2059_RFPLL_MISC_CAL_RESETN, 0x0078); b43_radio_2059_init()
171 b43_radio_set(dev, R2059_XTAL_CONFIG2, 0x0080); b43_radio_2059_init()
173 b43_radio_mask(dev, R2059_RFPLL_MISC_CAL_RESETN, ~0x0078); b43_radio_2059_init()
174 b43_radio_mask(dev, R2059_XTAL_CONFIG2, ~0x0080); b43_radio_2059_init()
177 b43_radio_2059_rcal(dev); b43_radio_2059_init()
178 b43_radio_2057_rccal(dev); b43_radio_2059_init()
181 b43_radio_mask(dev, R2059_RFPLL_MASTER, ~0x0008); b43_radio_2059_init()
188 static void b43_phy_ht_force_rf_sequence(struct b43_wldev *dev, u16 rf_seq) b43_phy_ht_force_rf_sequence() argument
192 u16 save_seq_mode = b43_phy_read(dev, B43_PHY_HT_RF_SEQ_MODE); b43_phy_ht_force_rf_sequence()
193 b43_phy_set(dev, B43_PHY_HT_RF_SEQ_MODE, 0x3); b43_phy_ht_force_rf_sequence()
195 b43_phy_set(dev, B43_PHY_HT_RF_SEQ_TRIG, rf_seq); b43_phy_ht_force_rf_sequence()
197 if (!(b43_phy_read(dev, B43_PHY_HT_RF_SEQ_STATUS) & rf_seq)) { b43_phy_ht_force_rf_sequence()
204 b43err(dev->wl, "Forcing RF sequence timeout\n"); b43_phy_ht_force_rf_sequence()
206 b43_phy_write(dev, B43_PHY_HT_RF_SEQ_MODE, save_seq_mode); b43_phy_ht_force_rf_sequence()
209 static void b43_phy_ht_pa_override(struct b43_wldev *dev, bool enable) b43_phy_ht_pa_override() argument
211 struct b43_phy_ht *htphy = dev->phy.ht; b43_phy_ht_pa_override()
219 b43_phy_write(dev, regs[i], htphy->rf_ctl_int_save[i]); b43_phy_ht_pa_override()
222 htphy->rf_ctl_int_save[i] = b43_phy_read(dev, regs[i]); b43_phy_ht_pa_override()
225 b43_phy_write(dev, regs[i], 0x0400); b43_phy_ht_pa_override()
233 static u16 b43_phy_ht_classifier(struct b43_wldev *dev, u16 mask, u16 val) b43_phy_ht_classifier() argument
240 tmp = b43_phy_read(dev, B43_PHY_HT_CLASS_CTL); b43_phy_ht_classifier()
244 b43_phy_maskset(dev, B43_PHY_HT_CLASS_CTL, ~allowed, tmp); b43_phy_ht_classifier()
249 static void b43_phy_ht_reset_cca(struct b43_wldev *dev) b43_phy_ht_reset_cca() argument
253 b43_phy_force_clock(dev, true); b43_phy_ht_reset_cca()
254 bbcfg = b43_phy_read(dev, B43_PHY_HT_BBCFG); b43_phy_ht_reset_cca()
255 b43_phy_write(dev, B43_PHY_HT_BBCFG, bbcfg | B43_PHY_HT_BBCFG_RSTCCA); b43_phy_ht_reset_cca()
257 b43_phy_write(dev, B43_PHY_HT_BBCFG, bbcfg & ~B43_PHY_HT_BBCFG_RSTCCA); b43_phy_ht_reset_cca()
258 b43_phy_force_clock(dev, false); b43_phy_ht_reset_cca()
260 b43_phy_ht_force_rf_sequence(dev, B43_PHY_HT_RF_SEQ_TRIG_RST2RX); b43_phy_ht_reset_cca()
263 static void b43_phy_ht_zero_extg(struct b43_wldev *dev) b43_phy_ht_zero_extg() argument
270 b43_phy_write(dev, B43_PHY_EXTG(base[i] + j), 0); b43_phy_ht_zero_extg()
274 b43_phy_write(dev, B43_PHY_EXTG(base[i] + 0xc), 0); b43_phy_ht_zero_extg()
278 static void b43_phy_ht_afe_unk1(struct b43_wldev *dev) b43_phy_ht_afe_unk1() argument
290 b43_phy_set(dev, ctl_regs[i][1], 0x4); b43_phy_ht_afe_unk1()
291 b43_phy_set(dev, ctl_regs[i][0], 0x4); b43_phy_ht_afe_unk1()
292 b43_phy_mask(dev, ctl_regs[i][1], ~0x1); b43_phy_ht_afe_unk1()
293 b43_phy_set(dev, ctl_regs[i][0], 0x1); b43_phy_ht_afe_unk1()
294 b43_httab_write(dev, B43_HTTAB16(8, 5 + (i * 0x10)), 0); b43_phy_ht_afe_unk1()
295 b43_phy_mask(dev, ctl_regs[i][0], ~0x4); b43_phy_ht_afe_unk1()
299 static void b43_phy_ht_read_clip_detection(struct b43_wldev *dev, u16 *clip_st) b43_phy_ht_read_clip_detection() argument
301 clip_st[0] = b43_phy_read(dev, B43_PHY_HT_C1_CLIP1THRES); b43_phy_ht_read_clip_detection()
302 clip_st[1] = b43_phy_read(dev, B43_PHY_HT_C2_CLIP1THRES); b43_phy_ht_read_clip_detection()
303 clip_st[2] = b43_phy_read(dev, B43_PHY_HT_C3_CLIP1THRES); b43_phy_ht_read_clip_detection()
306 static void b43_phy_ht_bphy_init(struct b43_wldev *dev) b43_phy_ht_bphy_init() argument
313 b43_phy_write(dev, B43_PHY_N_BMODE(0x88 + i), val); b43_phy_ht_bphy_init()
318 b43_phy_write(dev, B43_PHY_N_BMODE(0x98 + i), val); b43_phy_ht_bphy_init()
321 b43_phy_write(dev, B43_PHY_N_BMODE(0x38), 0x668); b43_phy_ht_bphy_init()
324 static void b43_phy_ht_bphy_reset(struct b43_wldev *dev, bool reset) b43_phy_ht_bphy_reset() argument
328 tmp = b43_read16(dev, B43_MMIO_PSM_PHY_HDR); b43_phy_ht_bphy_reset()
329 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, b43_phy_ht_bphy_reset()
334 b43_phy_set(dev, B43_PHY_B_BBCFG, b43_phy_ht_bphy_reset()
337 b43_phy_mask(dev, B43_PHY_B_BBCFG, b43_phy_ht_bphy_reset()
341 b43_write16(dev, B43_MMIO_PSM_PHY_HDR, tmp); b43_phy_ht_bphy_reset()
348 static void b43_phy_ht_stop_playback(struct b43_wldev *dev) b43_phy_ht_stop_playback() argument
350 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_stop_playback()
354 tmp = b43_phy_read(dev, B43_PHY_HT_SAMP_STAT); b43_phy_ht_stop_playback()
356 b43_phy_set(dev, B43_PHY_HT_SAMP_CMD, B43_PHY_HT_SAMP_CMD_STOP); b43_phy_ht_stop_playback()
358 b43_phy_mask(dev, B43_PHY_HT_IQLOCAL_CMDGCTL, 0x7FFF); b43_phy_ht_stop_playback()
360 b43_phy_mask(dev, B43_PHY_HT_SAMP_CMD, ~0x0004); b43_phy_ht_stop_playback()
364 b43_httab_write(dev, B43_HTTAB16(13, 0x63 + i * 4), b43_phy_ht_stop_playback()
366 b43_httab_write(dev, B43_HTTAB16(13, 0x67 + i * 4), b43_phy_ht_stop_playback()
372 static u16 b43_phy_ht_load_samples(struct b43_wldev *dev) b43_phy_ht_load_samples() argument
377 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, 0x4400); b43_phy_ht_load_samples()
380 b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, 0); b43_phy_ht_load_samples()
381 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, 0); b43_phy_ht_load_samples()
387 static void b43_phy_ht_run_samples(struct b43_wldev *dev, u16 samps, u16 loops, b43_phy_ht_run_samples() argument
390 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_run_samples()
396 phy_ht->bb_mult_save[i] = b43_httab_read(dev, B43_HTTAB16(13, 0x63 + i * 4)); b43_phy_ht_run_samples()
399 b43_phy_write(dev, B43_PHY_HT_SAMP_DEP_CNT, samps - 1); b43_phy_ht_run_samples()
402 b43_phy_write(dev, B43_PHY_HT_SAMP_LOOP_CNT, loops); b43_phy_ht_run_samples()
403 b43_phy_write(dev, B43_PHY_HT_SAMP_WAIT_CNT, wait); b43_phy_ht_run_samples()
405 save_seq_mode = b43_phy_read(dev, B43_PHY_HT_RF_SEQ_MODE); b43_phy_ht_run_samples()
406 b43_phy_set(dev, B43_PHY_HT_RF_SEQ_MODE, b43_phy_ht_run_samples()
410 b43_phy_mask(dev, B43_PHY_HT_SAMP_CMD, ~0); b43_phy_ht_run_samples()
411 b43_phy_mask(dev, B43_PHY_HT_SAMP_CMD, ~0); b43_phy_ht_run_samples()
412 b43_phy_mask(dev, B43_PHY_HT_IQLOCAL_CMDGCTL, ~0); b43_phy_ht_run_samples()
413 b43_phy_set(dev, B43_PHY_HT_SAMP_CMD, 0x1); b43_phy_ht_run_samples()
416 if (!(b43_phy_read(dev, B43_PHY_HT_RF_SEQ_STATUS) & 1)) { b43_phy_ht_run_samples()
423 b43err(dev->wl, "run samples timeout\n"); b43_phy_ht_run_samples()
425 b43_phy_write(dev, B43_PHY_HT_RF_SEQ_MODE, save_seq_mode); b43_phy_ht_run_samples()
428 static void b43_phy_ht_tx_tone(struct b43_wldev *dev) b43_phy_ht_tx_tone() argument
432 samp = b43_phy_ht_load_samples(dev); b43_phy_ht_tx_tone()
433 b43_phy_ht_run_samples(dev, samp, 0xFFFF, 0); b43_phy_ht_tx_tone()
440 static void b43_phy_ht_rssi_select(struct b43_wldev *dev, u8 core_sel, b43_phy_ht_rssi_select() argument
452 b43err(dev->wl, "RSSI selection for core off not implemented yet\n"); b43_phy_ht_rssi_select()
463 b43_phy_set(dev, ctl_regs[core][0], 0x3 << 8); b43_phy_ht_rssi_select()
464 b43_phy_set(dev, ctl_regs[core][0], 0x3 << 10); b43_phy_ht_rssi_select()
465 b43_phy_set(dev, ctl_regs[core][1], 0x1 << 9); b43_phy_ht_rssi_select()
466 b43_phy_set(dev, ctl_regs[core][1], 0x1 << 10); b43_phy_ht_rssi_select()
468 b43_radio_set(dev, R2059_C3 | 0xbf, 0x1); b43_phy_ht_rssi_select()
469 b43_radio_write(dev, radio_r[core] | 0x159, b43_phy_ht_rssi_select()
473 b43err(dev->wl, "RSSI selection for type %d not implemented yet\n", b43_phy_ht_rssi_select()
480 static void b43_phy_ht_poll_rssi(struct b43_wldev *dev, enum ht_rssi_type type, b43_phy_ht_poll_rssi() argument
496 phy_regs_values[i] = b43_phy_read(dev, phy_regs_to_save[i]); b43_phy_ht_poll_rssi()
498 b43_phy_ht_rssi_select(dev, 5, type); b43_phy_ht_poll_rssi()
504 tmp[0] = b43_phy_read(dev, B43_PHY_HT_RSSI_C1); b43_phy_ht_poll_rssi()
505 tmp[1] = b43_phy_read(dev, B43_PHY_HT_RSSI_C2); b43_phy_ht_poll_rssi()
506 tmp[2] = b43_phy_read(dev, B43_PHY_HT_RSSI_C3); b43_phy_ht_poll_rssi()
517 b43_phy_write(dev, phy_regs_to_save[i], phy_regs_values[i]); b43_phy_ht_poll_rssi()
524 static void b43_phy_ht_tx_power_fix(struct b43_wldev *dev) b43_phy_ht_tx_power_fix() argument
530 u32 tmp = b43_httab_read(dev, B43_HTTAB32(26, 0xE8)); b43_phy_ht_tx_power_fix()
536 b43_phy_mask(dev, B43_PHY_EXTG(0x108), mask); b43_phy_ht_tx_power_fix()
538 b43_httab_write(dev, B43_HTTAB16(7, 0x110 + i), tmp >> 16); b43_phy_ht_tx_power_fix()
539 b43_httab_write(dev, B43_HTTAB8(13, 0x63 + (i * 4)), b43_phy_ht_tx_power_fix()
541 b43_httab_write(dev, B43_HTTAB8(13, 0x73 + (i * 4)), b43_phy_ht_tx_power_fix()
546 static void b43_phy_ht_tx_power_ctl(struct b43_wldev *dev, bool enable) b43_phy_ht_tx_power_ctl() argument
548 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_tx_power_ctl()
561 if (b43_phy_read(dev, B43_PHY_HT_TXPCTL_CMD_C1) & en_bits) { b43_phy_ht_tx_power_ctl()
565 b43_phy_read(dev, status_regs[i]); b43_phy_ht_tx_power_ctl()
567 b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, ~en_bits); b43_phy_ht_tx_power_ctl()
569 b43_phy_set(dev, B43_PHY_HT_TXPCTL_CMD_C1, en_bits); b43_phy_ht_tx_power_ctl()
571 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) { b43_phy_ht_tx_power_ctl()
573 b43_phy_write(dev, cmd_regs[i], 0x32); b43_phy_ht_tx_power_ctl()
579 b43_phy_write(dev, cmd_regs[i], b43_phy_ht_tx_power_ctl()
586 static void b43_phy_ht_tx_power_ctl_idle_tssi(struct b43_wldev *dev) b43_phy_ht_tx_power_ctl_idle_tssi() argument
588 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_tx_power_ctl_idle_tssi()
595 save_regs[core][1] = b43_phy_read(dev, base[core] + 6); b43_phy_ht_tx_power_ctl_idle_tssi()
596 save_regs[core][2] = b43_phy_read(dev, base[core] + 7); b43_phy_ht_tx_power_ctl_idle_tssi()
597 save_regs[core][0] = b43_phy_read(dev, base[core] + 0); b43_phy_ht_tx_power_ctl_idle_tssi()
599 b43_phy_write(dev, base[core] + 6, 0); b43_phy_ht_tx_power_ctl_idle_tssi()
600 b43_phy_mask(dev, base[core] + 7, ~0xF); /* 0xF? Or just 0x6? */ b43_phy_ht_tx_power_ctl_idle_tssi()
601 b43_phy_set(dev, base[core] + 0, 0x0400); b43_phy_ht_tx_power_ctl_idle_tssi()
602 b43_phy_set(dev, base[core] + 0, 0x1000); b43_phy_ht_tx_power_ctl_idle_tssi()
605 b43_phy_ht_tx_tone(dev); b43_phy_ht_tx_power_ctl_idle_tssi()
607 b43_phy_ht_poll_rssi(dev, HT_RSSI_TSSI_2G, rssi_buf, 1); b43_phy_ht_tx_power_ctl_idle_tssi()
608 b43_phy_ht_stop_playback(dev); b43_phy_ht_tx_power_ctl_idle_tssi()
609 b43_phy_ht_reset_cca(dev); b43_phy_ht_tx_power_ctl_idle_tssi()
616 b43_phy_write(dev, base[core] + 0, save_regs[core][0]); b43_phy_ht_tx_power_ctl_idle_tssi()
617 b43_phy_write(dev, base[core] + 6, save_regs[core][1]); b43_phy_ht_tx_power_ctl_idle_tssi()
618 b43_phy_write(dev, base[core] + 7, save_regs[core][2]); b43_phy_ht_tx_power_ctl_idle_tssi()
622 static void b43_phy_ht_tssi_setup(struct b43_wldev *dev) b43_phy_ht_tssi_setup() argument
629 b43_radio_set(dev, 0x8bf, 0x1); b43_phy_ht_tssi_setup()
630 b43_radio_write(dev, routing[core] | 0x0159, 0x0011); b43_phy_ht_tssi_setup()
634 static void b43_phy_ht_tx_power_ctl_setup(struct b43_wldev *dev) b43_phy_ht_tx_power_ctl_setup() argument
636 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_tx_power_ctl_setup()
637 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_phy_ht_tx_power_ctl_setup()
643 u16 freq = dev->phy.chandef->chan->center_freq; b43_phy_ht_tx_power_ctl_setup()
646 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_phy_ht_tx_power_ctl_setup()
681 b43_phy_set(dev, B43_PHY_HT_TSSIMODE, B43_PHY_HT_TSSIMODE_EN); b43_phy_ht_tx_power_ctl_setup()
682 b43_phy_mask(dev, B43_PHY_HT_TXPCTL_CMD_C1, b43_phy_ht_tx_power_ctl_setup()
686 b43_phy_set(dev, B43_PHY_HT_TXPCTL_IDLE_TSSI, 0x4000); b43_phy_ht_tx_power_ctl_setup()
688 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_CMD_C1, b43_phy_ht_tx_power_ctl_setup()
690 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_CMD_C2, b43_phy_ht_tx_power_ctl_setup()
692 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_CMD_C3, b43_phy_ht_tx_power_ctl_setup()
695 b43_phy_set(dev, B43_PHY_HT_TXPCTL_IDLE_TSSI, b43_phy_ht_tx_power_ctl_setup()
698 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_IDLE_TSSI, b43_phy_ht_tx_power_ctl_setup()
701 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_IDLE_TSSI, b43_phy_ht_tx_power_ctl_setup()
704 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_IDLE_TSSI2, b43_phy_ht_tx_power_ctl_setup()
708 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_N, ~B43_PHY_HT_TXPCTL_N_TSSID, b43_phy_ht_tx_power_ctl_setup()
710 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_N, ~B43_PHY_HT_TXPCTL_N_NPTIL2, b43_phy_ht_tx_power_ctl_setup()
714 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_CMD_C1, 0x800, 0) b43_phy_ht_tx_power_ctl_setup()
715 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_CMD_C1, 0x400, 0) b43_phy_ht_tx_power_ctl_setup()
718 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_TARG_PWR, b43_phy_ht_tx_power_ctl_setup()
721 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_TARG_PWR, b43_phy_ht_tx_power_ctl_setup()
724 b43_phy_maskset(dev, B43_PHY_HT_TXPCTL_TARG_PWR2, b43_phy_ht_tx_power_ctl_setup()
738 b43_httab_write_bulk(dev, B43_HTTAB16(26 + c, 0), 64, regval); b43_phy_ht_tx_power_ctl_setup()
746 static void b43_phy_ht_spur_avoid(struct b43_wldev *dev, b43_phy_ht_spur_avoid() argument
749 struct bcma_device *core = dev->dev->bdev; b43_phy_ht_spur_avoid()
763 b43_mac_switch_freq(dev, spuravoid); b43_phy_ht_spur_avoid()
765 b43_wireless_core_phy_pll_reset(dev); b43_phy_ht_spur_avoid()
768 b43_phy_set(dev, B43_PHY_HT_BBCFG, B43_PHY_HT_BBCFG_RSTRX); b43_phy_ht_spur_avoid()
770 b43_phy_mask(dev, B43_PHY_HT_BBCFG, b43_phy_ht_spur_avoid()
773 b43_phy_ht_reset_cca(dev); b43_phy_ht_spur_avoid()
776 static void b43_phy_ht_channel_setup(struct b43_wldev *dev, b43_phy_ht_channel_setup() argument
782 b43_phy_mask(dev, B43_PHY_HT_BANDCTL, ~B43_PHY_HT_BANDCTL_5GHZ); b43_phy_ht_channel_setup()
784 b43_phy_ht_bphy_reset(dev, true); b43_phy_ht_channel_setup()
787 b43_phy_set(dev, B43_PHY_HT_BANDCTL, B43_PHY_HT_BANDCTL_5GHZ); b43_phy_ht_channel_setup()
790 b43_phy_mask(dev, B43_PHY_HT_BANDCTL, ~B43_PHY_HT_BANDCTL_5GHZ); b43_phy_ht_channel_setup()
792 b43_phy_ht_bphy_reset(dev, false); b43_phy_ht_channel_setup()
795 b43_phy_write(dev, B43_PHY_HT_BW1, e->bw1); b43_phy_ht_channel_setup()
796 b43_phy_write(dev, B43_PHY_HT_BW2, e->bw2); b43_phy_ht_channel_setup()
797 b43_phy_write(dev, B43_PHY_HT_BW3, e->bw3); b43_phy_ht_channel_setup()
798 b43_phy_write(dev, B43_PHY_HT_BW4, e->bw4); b43_phy_ht_channel_setup()
799 b43_phy_write(dev, B43_PHY_HT_BW5, e->bw5); b43_phy_ht_channel_setup()
800 b43_phy_write(dev, B43_PHY_HT_BW6, e->bw6); b43_phy_ht_channel_setup()
803 b43_phy_ht_classifier(dev, B43_PHY_HT_CLASS_CTL_OFDM_EN, 0); b43_phy_ht_channel_setup()
804 b43_phy_set(dev, B43_PHY_HT_TEST, 0x0800); b43_phy_ht_channel_setup()
806 b43_phy_ht_classifier(dev, B43_PHY_HT_CLASS_CTL_OFDM_EN, b43_phy_ht_channel_setup()
809 b43_phy_mask(dev, B43_PHY_HT_TEST, ~0x840); b43_phy_ht_channel_setup()
813 b43_phy_ht_tx_power_fix(dev); b43_phy_ht_channel_setup()
815 b43_phy_ht_spur_avoid(dev, new_channel); b43_phy_ht_channel_setup()
817 b43_phy_write(dev, 0x017e, 0x3830); b43_phy_ht_channel_setup()
820 static int b43_phy_ht_set_channel(struct b43_wldev *dev, b43_phy_ht_set_channel() argument
824 struct b43_phy *phy = &dev->phy; b43_phy_ht_set_channel()
829 chent_r2059 = b43_phy_ht_get_channeltab_e_r2059(dev, b43_phy_ht_set_channel()
840 b43_radio_2059_channel_setup(dev, chent_r2059); b43_phy_ht_set_channel()
841 b43_phy_ht_channel_setup(dev, &(chent_r2059->phy_regs), b43_phy_ht_set_channel()
854 static int b43_phy_ht_op_allocate(struct b43_wldev *dev) b43_phy_ht_op_allocate() argument
861 dev->phy.ht = phy_ht; b43_phy_ht_op_allocate()
866 static void b43_phy_ht_op_prepare_structs(struct b43_wldev *dev) b43_phy_ht_op_prepare_structs() argument
868 struct b43_phy *phy = &dev->phy; b43_phy_ht_op_prepare_structs()
882 static int b43_phy_ht_op_init(struct b43_wldev *dev) b43_phy_ht_op_init() argument
884 struct b43_phy_ht *phy_ht = dev->phy.ht; b43_phy_ht_op_init()
889 if (dev->dev->bus_type != B43_BUS_BCMA) { b43_phy_ht_op_init()
890 b43err(dev->wl, "HT-PHY is supported only on BCMA bus!\n"); b43_phy_ht_op_init()
894 b43_phy_ht_tables_init(dev); b43_phy_ht_op_init()
896 b43_phy_mask(dev, 0x0be, ~0x2); b43_phy_ht_op_init()
897 b43_phy_set(dev, 0x23f, 0x7ff); b43_phy_ht_op_init()
898 b43_phy_set(dev, 0x240, 0x7ff); b43_phy_ht_op_init()
899 b43_phy_set(dev, 0x241, 0x7ff); b43_phy_ht_op_init()
901 b43_phy_ht_zero_extg(dev); b43_phy_ht_op_init()
903 b43_phy_mask(dev, B43_PHY_EXTG(0), ~0x3); b43_phy_ht_op_init()
905 b43_phy_write(dev, B43_PHY_HT_AFE_C1_OVER, 0); b43_phy_ht_op_init()
906 b43_phy_write(dev, B43_PHY_HT_AFE_C2_OVER, 0); b43_phy_ht_op_init()
907 b43_phy_write(dev, B43_PHY_HT_AFE_C3_OVER, 0); b43_phy_ht_op_init()
909 b43_phy_write(dev, B43_PHY_EXTG(0x103), 0x20); b43_phy_ht_op_init()
910 b43_phy_write(dev, B43_PHY_EXTG(0x101), 0x20); b43_phy_ht_op_init()
911 b43_phy_write(dev, 0x20d, 0xb8); b43_phy_ht_op_init()
912 b43_phy_write(dev, B43_PHY_EXTG(0x14f), 0xc8); b43_phy_ht_op_init()
913 b43_phy_write(dev, 0x70, 0x50); b43_phy_ht_op_init()
914 b43_phy_write(dev, 0x1ff, 0x30); b43_phy_ht_op_init()
919 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_phy_ht_op_init()
920 b43_phy_ht_classifier(dev, B43_PHY_HT_CLASS_CTL_CCK_EN, 0); b43_phy_ht_op_init()
922 b43_phy_ht_classifier(dev, B43_PHY_HT_CLASS_CTL_CCK_EN, b43_phy_ht_op_init()
925 b43_phy_set(dev, 0xb1, 0x91); b43_phy_ht_op_init()
926 b43_phy_write(dev, 0x32f, 0x0003); b43_phy_ht_op_init()
927 b43_phy_write(dev, 0x077, 0x0010); b43_phy_ht_op_init()
928 b43_phy_write(dev, 0x0b4, 0x0258); b43_phy_ht_op_init()
929 b43_phy_mask(dev, 0x17e, ~0x4000); b43_phy_ht_op_init()
931 b43_phy_write(dev, 0x0b9, 0x0072); b43_phy_ht_op_init()
933 b43_httab_write_few(dev, B43_HTTAB16(7, 0x14e), 2, 0x010f, 0x010f); b43_phy_ht_op_init()
934 b43_httab_write_few(dev, B43_HTTAB16(7, 0x15e), 2, 0x010f, 0x010f); b43_phy_ht_op_init()
935 b43_httab_write_few(dev, B43_HTTAB16(7, 0x16e), 2, 0x010f, 0x010f); b43_phy_ht_op_init()
937 b43_phy_ht_afe_unk1(dev); b43_phy_ht_op_init()
939 b43_httab_write_few(dev, B43_HTTAB16(7, 0x130), 9, 0x777, 0x111, 0x111, b43_phy_ht_op_init()
942 b43_httab_write(dev, B43_HTTAB16(7, 0x120), 0x0777); b43_phy_ht_op_init()
943 b43_httab_write(dev, B43_HTTAB16(7, 0x124), 0x0777); b43_phy_ht_op_init()
945 b43_httab_write(dev, B43_HTTAB16(8, 0x00), 0x02); b43_phy_ht_op_init()
946 b43_httab_write(dev, B43_HTTAB16(8, 0x10), 0x02); b43_phy_ht_op_init()
947 b43_httab_write(dev, B43_HTTAB16(8, 0x20), 0x02); b43_phy_ht_op_init()
949 b43_httab_write_few(dev, B43_HTTAB16(8, 0x08), 4, b43_phy_ht_op_init()
951 b43_httab_write_few(dev, B43_HTTAB16(8, 0x18), 4, b43_phy_ht_op_init()
953 b43_httab_write_few(dev, B43_HTTAB16(8, 0x28), 4, b43_phy_ht_op_init()
956 b43_httab_write_few(dev, B43_HTTAB16(8, 0x0c), 4, 0x2, 0x2, 0x2, 0x2); b43_phy_ht_op_init()
957 b43_httab_write_few(dev, B43_HTTAB16(8, 0x1c), 4, 0x2, 0x2, 0x2, 0x2); b43_phy_ht_op_init()
958 b43_httab_write_few(dev, B43_HTTAB16(8, 0x2c), 4, 0x2, 0x2, 0x2, 0x2); b43_phy_ht_op_init()
960 b43_phy_maskset(dev, 0x0280, 0xff00, 0x3e); b43_phy_ht_op_init()
961 b43_phy_maskset(dev, 0x0283, 0xff00, 0x3e); b43_phy_ht_op_init()
962 b43_phy_maskset(dev, B43_PHY_OFDM(0x0141), 0xff00, 0x46); b43_phy_ht_op_init()
963 b43_phy_maskset(dev, 0x0283, 0xff00, 0x40); b43_phy_ht_op_init()
965 b43_httab_write_few(dev, B43_HTTAB16(00, 0x8), 4, b43_phy_ht_op_init()
967 b43_httab_write_few(dev, B43_HTTAB16(01, 0x8), 4, b43_phy_ht_op_init()
970 b43_httab_write_few(dev, B43_HTTAB16(40, 0x8), 4, b43_phy_ht_op_init()
973 b43_phy_maskset(dev, B43_PHY_OFDM(0x24), 0x3f, 0xd); b43_phy_ht_op_init()
974 b43_phy_maskset(dev, B43_PHY_OFDM(0x64), 0x3f, 0xd); b43_phy_ht_op_init()
975 b43_phy_maskset(dev, B43_PHY_OFDM(0xa4), 0x3f, 0xd); b43_phy_ht_op_init()
977 b43_phy_set(dev, B43_PHY_EXTG(0x060), 0x1); b43_phy_ht_op_init()
978 b43_phy_set(dev, B43_PHY_EXTG(0x064), 0x1); b43_phy_ht_op_init()
979 b43_phy_set(dev, B43_PHY_EXTG(0x080), 0x1); b43_phy_ht_op_init()
980 b43_phy_set(dev, B43_PHY_EXTG(0x084), 0x1); b43_phy_ht_op_init()
983 tmp = b43_httab_read(dev, B43_HTTAB16(7, 0x144)); b43_phy_ht_op_init()
984 b43_httab_write(dev, B43_HTTAB16(7, 0x14a), tmp); b43_phy_ht_op_init()
985 tmp = b43_httab_read(dev, B43_HTTAB16(7, 0x154)); b43_phy_ht_op_init()
986 b43_httab_write(dev, B43_HTTAB16(7, 0x15a), tmp); b43_phy_ht_op_init()
987 tmp = b43_httab_read(dev, B43_HTTAB16(7, 0x164)); b43_phy_ht_op_init()
988 b43_httab_write(dev, B43_HTTAB16(7, 0x16a), tmp); b43_phy_ht_op_init()
991 b43_phy_force_clock(dev, true); b43_phy_ht_op_init()
992 tmp = b43_phy_read(dev, B43_PHY_HT_BBCFG); b43_phy_ht_op_init()
993 b43_phy_write(dev, B43_PHY_HT_BBCFG, tmp | B43_PHY_HT_BBCFG_RSTCCA); b43_phy_ht_op_init()
994 b43_phy_write(dev, B43_PHY_HT_BBCFG, tmp & ~B43_PHY_HT_BBCFG_RSTCCA); b43_phy_ht_op_init()
995 b43_phy_force_clock(dev, false); b43_phy_ht_op_init()
997 b43_mac_phy_clock_set(dev, true); b43_phy_ht_op_init()
999 b43_phy_ht_pa_override(dev, false); b43_phy_ht_op_init()
1000 b43_phy_ht_force_rf_sequence(dev, B43_PHY_HT_RF_SEQ_TRIG_RX2TX); b43_phy_ht_op_init()
1001 b43_phy_ht_force_rf_sequence(dev, B43_PHY_HT_RF_SEQ_TRIG_RST2RX); b43_phy_ht_op_init()
1002 b43_phy_ht_pa_override(dev, true); b43_phy_ht_op_init()
1005 b43_phy_ht_classifier(dev, 0, 0); b43_phy_ht_op_init()
1006 b43_phy_ht_read_clip_detection(dev, clip_state); b43_phy_ht_op_init()
1008 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_ht_op_init()
1009 b43_phy_ht_bphy_init(dev); b43_phy_ht_op_init()
1011 b43_httab_write_bulk(dev, B43_HTTAB32(0x1a, 0xc0), b43_phy_ht_op_init()
1015 b43_phy_ht_tx_power_fix(dev); b43_phy_ht_op_init()
1016 b43_phy_ht_tx_power_ctl(dev, false); b43_phy_ht_op_init()
1017 b43_phy_ht_tx_power_ctl_idle_tssi(dev); b43_phy_ht_op_init()
1018 b43_phy_ht_tx_power_ctl_setup(dev); b43_phy_ht_op_init()
1019 b43_phy_ht_tssi_setup(dev); b43_phy_ht_op_init()
1020 b43_phy_ht_tx_power_ctl(dev, saved_tx_pwr_ctl); b43_phy_ht_op_init()
1025 static void b43_phy_ht_op_free(struct b43_wldev *dev) b43_phy_ht_op_free() argument
1027 struct b43_phy *phy = &dev->phy; b43_phy_ht_op_free()
1035 static void b43_phy_ht_op_software_rfkill(struct b43_wldev *dev, b43_phy_ht_op_software_rfkill() argument
1038 if (b43_read32(dev, B43_MMIO_MACCTL) & B43_MACCTL_ENABLED) b43_phy_ht_op_software_rfkill()
1039 b43err(dev->wl, "MAC not suspended\n"); b43_phy_ht_op_software_rfkill()
1042 b43_phy_mask(dev, B43_PHY_HT_RF_CTL_CMD, b43_phy_ht_op_software_rfkill()
1045 if (dev->phy.radio_ver == 0x2059) b43_phy_ht_op_software_rfkill()
1046 b43_radio_2059_init(dev); b43_phy_ht_op_software_rfkill()
1050 b43_switch_channel(dev, dev->phy.channel); b43_phy_ht_op_software_rfkill()
1054 static void b43_phy_ht_op_switch_analog(struct b43_wldev *dev, bool on) b43_phy_ht_op_switch_analog() argument
1057 b43_phy_write(dev, B43_PHY_HT_AFE_C1, 0x00cd); b43_phy_ht_op_switch_analog()
1058 b43_phy_write(dev, B43_PHY_HT_AFE_C1_OVER, 0x0000); b43_phy_ht_op_switch_analog()
1059 b43_phy_write(dev, B43_PHY_HT_AFE_C2, 0x00cd); b43_phy_ht_op_switch_analog()
1060 b43_phy_write(dev, B43_PHY_HT_AFE_C2_OVER, 0x0000); b43_phy_ht_op_switch_analog()
1061 b43_phy_write(dev, B43_PHY_HT_AFE_C3, 0x00cd); b43_phy_ht_op_switch_analog()
1062 b43_phy_write(dev, B43_PHY_HT_AFE_C3_OVER, 0x0000); b43_phy_ht_op_switch_analog()
1064 b43_phy_write(dev, B43_PHY_HT_AFE_C1_OVER, 0x07ff); b43_phy_ht_op_switch_analog()
1065 b43_phy_write(dev, B43_PHY_HT_AFE_C1, 0x00fd); b43_phy_ht_op_switch_analog()
1066 b43_phy_write(dev, B43_PHY_HT_AFE_C2_OVER, 0x07ff); b43_phy_ht_op_switch_analog()
1067 b43_phy_write(dev, B43_PHY_HT_AFE_C2, 0x00fd); b43_phy_ht_op_switch_analog()
1068 b43_phy_write(dev, B43_PHY_HT_AFE_C3_OVER, 0x07ff); b43_phy_ht_op_switch_analog()
1069 b43_phy_write(dev, B43_PHY_HT_AFE_C3, 0x00fd); b43_phy_ht_op_switch_analog()
1073 static int b43_phy_ht_op_switch_channel(struct b43_wldev *dev, b43_phy_ht_op_switch_channel() argument
1076 struct ieee80211_channel *channel = dev->wl->hw->conf.chandef.chan; b43_phy_ht_op_switch_channel()
1078 cfg80211_get_chandef_type(&dev->wl->hw->conf.chandef); b43_phy_ht_op_switch_channel()
1080 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { b43_phy_ht_op_switch_channel()
1087 return b43_phy_ht_set_channel(dev, channel, channel_type); b43_phy_ht_op_switch_channel()
1090 static unsigned int b43_phy_ht_op_get_default_chan(struct b43_wldev *dev) b43_phy_ht_op_get_default_chan() argument
1092 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_phy_ht_op_get_default_chan()
1101 static void b43_phy_ht_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask, b43_phy_ht_op_maskset() argument
1104 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_phy_ht_op_maskset()
1105 b43_write16(dev, B43_MMIO_PHY_DATA, b43_phy_ht_op_maskset()
1106 (b43_read16(dev, B43_MMIO_PHY_DATA) & mask) | set); b43_phy_ht_op_maskset()
1109 static u16 b43_phy_ht_op_radio_read(struct b43_wldev *dev, u16 reg) b43_phy_ht_op_radio_read() argument
1114 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg); b43_phy_ht_op_radio_read()
1115 return b43_read16(dev, B43_MMIO_RADIO24_DATA); b43_phy_ht_op_radio_read()
1118 static void b43_phy_ht_op_radio_write(struct b43_wldev *dev, u16 reg, b43_phy_ht_op_radio_write() argument
1121 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, reg); b43_phy_ht_op_radio_write()
1122 b43_write16(dev, B43_MMIO_RADIO24_DATA, value); b43_phy_ht_op_radio_write()
1126 b43_phy_ht_op_recalc_txpower(struct b43_wldev *dev, bool ignore_tssi) b43_phy_ht_op_recalc_txpower() argument
1131 static void b43_phy_ht_op_adjust_txpower(struct b43_wldev *dev) b43_phy_ht_op_adjust_txpower() argument
H A Dphy_g.c66 static void b43_calc_nrssi_threshold(struct b43_wldev *dev);
80 static void generate_rfatt_list(struct b43_wldev *dev, generate_rfatt_list() argument
83 struct b43_phy *phy = &dev->phy; generate_rfatt_list()
123 if (!b43_has_hardware_pctl(dev)) { generate_rfatt_list()
146 static void generate_bbatt_list(struct b43_wldev *dev, generate_bbatt_list() argument
167 static void b43_shm_clear_tssi(struct b43_wldev *dev) b43_shm_clear_tssi() argument
169 b43_shm_write16(dev, B43_SHM_SHARED, 0x0058, 0x7F7F); b43_shm_clear_tssi()
170 b43_shm_write16(dev, B43_SHM_SHARED, 0x005a, 0x7F7F); b43_shm_clear_tssi()
171 b43_shm_write16(dev, B43_SHM_SHARED, 0x0070, 0x7F7F); b43_shm_clear_tssi()
172 b43_shm_write16(dev, B43_SHM_SHARED, 0x0072, 0x7F7F); b43_shm_clear_tssi()
176 static void b43_synth_pu_workaround(struct b43_wldev *dev, u8 channel) b43_synth_pu_workaround() argument
178 struct b43_phy *phy = &dev->phy; b43_synth_pu_workaround()
188 b43_write16(dev, B43_MMIO_CHANNEL, b43_synth_pu_workaround()
191 b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(1)); b43_synth_pu_workaround()
194 b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel)); b43_synth_pu_workaround()
198 void b43_gphy_set_baseband_attenuation(struct b43_wldev *dev, b43_gphy_set_baseband_attenuation() argument
201 struct b43_phy *phy = &dev->phy; b43_gphy_set_baseband_attenuation()
204 b43_write16(dev, B43_MMIO_PHY0, (b43_read16(dev, B43_MMIO_PHY0) b43_gphy_set_baseband_attenuation()
208 b43_phy_maskset(dev, B43_PHY_DACCTL, 0xFFC3, (baseband_attenuation << 2)); b43_gphy_set_baseband_attenuation()
210 b43_phy_maskset(dev, B43_PHY_DACCTL, 0xFF87, (baseband_attenuation << 3)); b43_gphy_set_baseband_attenuation()
215 static void b43_set_txpower_g(struct b43_wldev *dev, b43_set_txpower_g() argument
219 struct b43_phy *phy = &dev->phy; b43_set_txpower_g()
239 if (b43_debug(dev, B43_DBG_XMITPOWER)) { b43_set_txpower_g()
240 b43dbg(dev->wl, "Tuning TX-power to bbatt(%u), " b43_set_txpower_g()
246 b43_gphy_set_baseband_attenuation(dev, bb); b43_set_txpower_g()
247 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_RFATT, rf); b43_set_txpower_g()
249 b43_radio_write16(dev, 0x43, b43_set_txpower_g()
252 b43_radio_maskset(dev, 0x43, 0xFFF0, (rf & 0x000F)); b43_set_txpower_g()
253 b43_radio_maskset(dev, 0x52, ~0x0070, (tx_control & 0x0070)); b43_set_txpower_g()
256 b43_radio_write16(dev, 0x52, tx_magn | tx_bias); b43_set_txpower_g()
258 b43_radio_maskset(dev, 0x52, 0xFFF0, (tx_bias & 0x000F)); b43_set_txpower_g()
260 b43_lo_g_adjust(dev); b43_set_txpower_g()
264 static void b43_gphy_tssi_power_lt_init(struct b43_wldev *dev) b43_gphy_tssi_power_lt_init() argument
266 struct b43_phy_g *gphy = dev->phy.g; b43_gphy_tssi_power_lt_init()
271 b43_ofdmtab_write16(dev, 0x3C20, i, gphy->tssi2dbm[i]); b43_gphy_tssi_power_lt_init()
273 b43_ofdmtab_write16(dev, 0x3C00, i - 32, gphy->tssi2dbm[i]); b43_gphy_tssi_power_lt_init()
277 b43_phy_write(dev, 0x380 + (i / 2), value); b43_gphy_tssi_power_lt_init()
282 static void b43_gphy_gain_lt_init(struct b43_wldev *dev) b43_gphy_gain_lt_init() argument
284 struct b43_phy *phy = &dev->phy; b43_gphy_gain_lt_init()
302 b43_phy_write(dev, 0x3C0 + nr_written, tmp); b43_gphy_gain_lt_init()
308 static void b43_set_all_gains(struct b43_wldev *dev, b43_set_all_gains() argument
311 struct b43_phy *phy = &dev->phy; b43_set_all_gains()
326 b43_ofdmtab_write16(dev, table, i, first); b43_set_all_gains()
329 b43_ofdmtab_write16(dev, table, i, second); b43_set_all_gains()
333 b43_phy_maskset(dev, 0x04A0, 0xBFBF, tmp); b43_set_all_gains()
334 b43_phy_maskset(dev, 0x04A1, 0xBFBF, tmp); b43_set_all_gains()
335 b43_phy_maskset(dev, 0x04A2, 0xBFBF, tmp); b43_set_all_gains()
337 b43_dummy_transmission(dev, false, true); b43_set_all_gains()
340 static void b43_set_original_gains(struct b43_wldev *dev) b43_set_original_gains() argument
342 struct b43_phy *phy = &dev->phy; b43_set_original_gains()
360 b43_ofdmtab_write16(dev, table, i, tmp); b43_set_original_gains()
364 b43_ofdmtab_write16(dev, table, i, i - start); b43_set_original_gains()
366 b43_phy_maskset(dev, 0x04A0, 0xBFBF, 0x4040); b43_set_original_gains()
367 b43_phy_maskset(dev, 0x04A1, 0xBFBF, 0x4040); b43_set_original_gains()
368 b43_phy_maskset(dev, 0x04A2, 0xBFBF, 0x4000); b43_set_original_gains()
369 b43_dummy_transmission(dev, false, true); b43_set_original_gains()
373 static void b43_nrssi_hw_write(struct b43_wldev *dev, u16 offset, s16 val) b43_nrssi_hw_write() argument
375 b43_phy_write(dev, B43_PHY_NRSSILT_CTRL, offset); b43_nrssi_hw_write()
376 b43_phy_write(dev, B43_PHY_NRSSILT_DATA, (u16) val); b43_nrssi_hw_write()
380 static s16 b43_nrssi_hw_read(struct b43_wldev *dev, u16 offset) b43_nrssi_hw_read() argument
384 b43_phy_write(dev, B43_PHY_NRSSILT_CTRL, offset); b43_nrssi_hw_read()
385 val = b43_phy_read(dev, B43_PHY_NRSSILT_DATA); b43_nrssi_hw_read()
391 static void b43_nrssi_hw_update(struct b43_wldev *dev, u16 val) b43_nrssi_hw_update() argument
397 tmp = b43_nrssi_hw_read(dev, i); b43_nrssi_hw_update()
400 b43_nrssi_hw_write(dev, i, tmp); b43_nrssi_hw_update()
405 static void b43_nrssi_mem_update(struct b43_wldev *dev) b43_nrssi_mem_update() argument
407 struct b43_phy_g *gphy = dev->phy.g; b43_nrssi_mem_update()
421 static void b43_calc_nrssi_offset(struct b43_wldev *dev) b43_calc_nrssi_offset() argument
423 struct b43_phy *phy = &dev->phy; b43_calc_nrssi_offset()
429 backup[0] = b43_phy_read(dev, 0x0001); b43_calc_nrssi_offset()
430 backup[1] = b43_phy_read(dev, 0x0811); b43_calc_nrssi_offset()
431 backup[2] = b43_phy_read(dev, 0x0812); b43_calc_nrssi_offset()
433 backup[3] = b43_phy_read(dev, 0x0814); b43_calc_nrssi_offset()
434 backup[4] = b43_phy_read(dev, 0x0815); b43_calc_nrssi_offset()
436 backup[5] = b43_phy_read(dev, 0x005A); b43_calc_nrssi_offset()
437 backup[6] = b43_phy_read(dev, 0x0059); b43_calc_nrssi_offset()
438 backup[7] = b43_phy_read(dev, 0x0058); b43_calc_nrssi_offset()
439 backup[8] = b43_phy_read(dev, 0x000A); b43_calc_nrssi_offset()
440 backup[9] = b43_phy_read(dev, 0x0003); b43_calc_nrssi_offset()
441 backup[10] = b43_radio_read16(dev, 0x007A); b43_calc_nrssi_offset()
442 backup[11] = b43_radio_read16(dev, 0x0043); b43_calc_nrssi_offset()
444 b43_phy_mask(dev, 0x0429, 0x7FFF); b43_calc_nrssi_offset()
445 b43_phy_maskset(dev, 0x0001, 0x3FFF, 0x4000); b43_calc_nrssi_offset()
446 b43_phy_set(dev, 0x0811, 0x000C); b43_calc_nrssi_offset()
447 b43_phy_maskset(dev, 0x0812, 0xFFF3, 0x0004); b43_calc_nrssi_offset()
448 b43_phy_mask(dev, 0x0802, ~(0x1 | 0x2)); b43_calc_nrssi_offset()
450 backup[12] = b43_phy_read(dev, 0x002E); b43_calc_nrssi_offset()
451 backup[13] = b43_phy_read(dev, 0x002F); b43_calc_nrssi_offset()
452 backup[14] = b43_phy_read(dev, 0x080F); b43_calc_nrssi_offset()
453 backup[15] = b43_phy_read(dev, 0x0810); b43_calc_nrssi_offset()
454 backup[16] = b43_phy_read(dev, 0x0801); b43_calc_nrssi_offset()
455 backup[17] = b43_phy_read(dev, 0x0060); b43_calc_nrssi_offset()
456 backup[18] = b43_phy_read(dev, 0x0014); b43_calc_nrssi_offset()
457 backup[19] = b43_phy_read(dev, 0x0478); b43_calc_nrssi_offset()
459 b43_phy_write(dev, 0x002E, 0); b43_calc_nrssi_offset()
460 b43_phy_write(dev, 0x002F, 0); b43_calc_nrssi_offset()
461 b43_phy_write(dev, 0x080F, 0); b43_calc_nrssi_offset()
462 b43_phy_write(dev, 0x0810, 0); b43_calc_nrssi_offset()
463 b43_phy_set(dev, 0x0478, 0x0100); b43_calc_nrssi_offset()
464 b43_phy_set(dev, 0x0801, 0x0040); b43_calc_nrssi_offset()
465 b43_phy_set(dev, 0x0060, 0x0040); b43_calc_nrssi_offset()
466 b43_phy_set(dev, 0x0014, 0x0200); b43_calc_nrssi_offset()
468 b43_radio_set(dev, 0x007A, 0x0070); b43_calc_nrssi_offset()
469 b43_radio_set(dev, 0x007A, 0x0080); b43_calc_nrssi_offset()
472 v47F = (s16) ((b43_phy_read(dev, 0x047F) >> 8) & 0x003F); b43_calc_nrssi_offset()
477 b43_radio_write16(dev, 0x007B, i); b43_calc_nrssi_offset()
480 (s16) ((b43_phy_read(dev, 0x047F) >> 8) & 0x003F); b43_calc_nrssi_offset()
489 b43_radio_mask(dev, 0x007A, 0x007F); b43_calc_nrssi_offset()
491 b43_phy_set(dev, 0x0814, 0x0001); b43_calc_nrssi_offset()
492 b43_phy_mask(dev, 0x0815, 0xFFFE); b43_calc_nrssi_offset()
494 b43_phy_set(dev, 0x0811, 0x000C); b43_calc_nrssi_offset()
495 b43_phy_set(dev, 0x0812, 0x000C); b43_calc_nrssi_offset()
496 b43_phy_set(dev, 0x0811, 0x0030); b43_calc_nrssi_offset()
497 b43_phy_set(dev, 0x0812, 0x0030); b43_calc_nrssi_offset()
498 b43_phy_write(dev, 0x005A, 0x0480); b43_calc_nrssi_offset()
499 b43_phy_write(dev, 0x0059, 0x0810); b43_calc_nrssi_offset()
500 b43_phy_write(dev, 0x0058, 0x000D); b43_calc_nrssi_offset()
502 b43_phy_write(dev, 0x0003, 0x0122); b43_calc_nrssi_offset()
504 b43_phy_set(dev, 0x000A, 0x2000); b43_calc_nrssi_offset()
507 b43_phy_set(dev, 0x0814, 0x0004); b43_calc_nrssi_offset()
508 b43_phy_mask(dev, 0x0815, 0xFFFB); b43_calc_nrssi_offset()
510 b43_phy_maskset(dev, 0x0003, 0xFF9F, 0x0040); b43_calc_nrssi_offset()
511 b43_radio_set(dev, 0x007A, 0x000F); b43_calc_nrssi_offset()
512 b43_set_all_gains(dev, 3, 0, 1); b43_calc_nrssi_offset()
513 b43_radio_maskset(dev, 0x0043, 0x00F0, 0x000F); b43_calc_nrssi_offset()
515 v47F = (s16) ((b43_phy_read(dev, 0x047F) >> 8) & 0x003F); b43_calc_nrssi_offset()
520 b43_radio_write16(dev, 0x007B, i); b43_calc_nrssi_offset()
523 (s16) ((b43_phy_read(dev, 0x047F) >> 8) & b43_calc_nrssi_offset()
535 b43_radio_write16(dev, 0x007B, saved); b43_calc_nrssi_offset()
538 b43_phy_write(dev, 0x002E, backup[12]); b43_calc_nrssi_offset()
539 b43_phy_write(dev, 0x002F, backup[13]); b43_calc_nrssi_offset()
540 b43_phy_write(dev, 0x080F, backup[14]); b43_calc_nrssi_offset()
541 b43_phy_write(dev, 0x0810, backup[15]); b43_calc_nrssi_offset()
544 b43_phy_write(dev, 0x0814, backup[3]); b43_calc_nrssi_offset()
545 b43_phy_write(dev, 0x0815, backup[4]); b43_calc_nrssi_offset()
547 b43_phy_write(dev, 0x005A, backup[5]); b43_calc_nrssi_offset()
548 b43_phy_write(dev, 0x0059, backup[6]); b43_calc_nrssi_offset()
549 b43_phy_write(dev, 0x0058, backup[7]); b43_calc_nrssi_offset()
550 b43_phy_write(dev, 0x000A, backup[8]); b43_calc_nrssi_offset()
551 b43_phy_write(dev, 0x0003, backup[9]); b43_calc_nrssi_offset()
552 b43_radio_write16(dev, 0x0043, backup[11]); b43_calc_nrssi_offset()
553 b43_radio_write16(dev, 0x007A, backup[10]); b43_calc_nrssi_offset()
554 b43_phy_write(dev, 0x0802, b43_phy_read(dev, 0x0802) | 0x1 | 0x2); b43_calc_nrssi_offset()
555 b43_phy_set(dev, 0x0429, 0x8000); b43_calc_nrssi_offset()
556 b43_set_original_gains(dev); b43_calc_nrssi_offset()
558 b43_phy_write(dev, 0x0801, backup[16]); b43_calc_nrssi_offset()
559 b43_phy_write(dev, 0x0060, backup[17]); b43_calc_nrssi_offset()
560 b43_phy_write(dev, 0x0014, backup[18]); b43_calc_nrssi_offset()
561 b43_phy_write(dev, 0x0478, backup[19]); b43_calc_nrssi_offset()
563 b43_phy_write(dev, 0x0001, backup[0]); b43_calc_nrssi_offset()
564 b43_phy_write(dev, 0x0812, backup[2]); b43_calc_nrssi_offset()
565 b43_phy_write(dev, 0x0811, backup[1]); b43_calc_nrssi_offset()
568 static void b43_calc_nrssi_slope(struct b43_wldev *dev) b43_calc_nrssi_slope() argument
570 struct b43_phy *phy = &dev->phy; b43_calc_nrssi_slope()
581 b43_calc_nrssi_offset(dev); b43_calc_nrssi_slope()
583 b43_phy_mask(dev, B43_PHY_G_CRS, 0x7FFF); b43_calc_nrssi_slope()
584 b43_phy_mask(dev, 0x0802, 0xFFFC); b43_calc_nrssi_slope()
585 backup[7] = b43_read16(dev, 0x03E2); b43_calc_nrssi_slope()
586 b43_write16(dev, 0x03E2, b43_read16(dev, 0x03E2) | 0x8000); b43_calc_nrssi_slope()
587 backup[0] = b43_radio_read16(dev, 0x007A); b43_calc_nrssi_slope()
588 backup[1] = b43_radio_read16(dev, 0x0052); b43_calc_nrssi_slope()
589 backup[2] = b43_radio_read16(dev, 0x0043); b43_calc_nrssi_slope()
590 backup[3] = b43_phy_read(dev, 0x0015); b43_calc_nrssi_slope()
591 backup[4] = b43_phy_read(dev, 0x005A); b43_calc_nrssi_slope()
592 backup[5] = b43_phy_read(dev, 0x0059); b43_calc_nrssi_slope()
593 backup[6] = b43_phy_read(dev, 0x0058); b43_calc_nrssi_slope()
594 backup[8] = b43_read16(dev, 0x03E6); b43_calc_nrssi_slope()
595 backup[9] = b43_read16(dev, B43_MMIO_CHANNEL_EXT); b43_calc_nrssi_slope()
597 backup[10] = b43_phy_read(dev, 0x002E); b43_calc_nrssi_slope()
598 backup[11] = b43_phy_read(dev, 0x002F); b43_calc_nrssi_slope()
599 backup[12] = b43_phy_read(dev, 0x080F); b43_calc_nrssi_slope()
600 backup[13] = b43_phy_read(dev, B43_PHY_G_LO_CONTROL); b43_calc_nrssi_slope()
601 backup[14] = b43_phy_read(dev, 0x0801); b43_calc_nrssi_slope()
602 backup[15] = b43_phy_read(dev, 0x0060); b43_calc_nrssi_slope()
603 backup[16] = b43_phy_read(dev, 0x0014); b43_calc_nrssi_slope()
604 backup[17] = b43_phy_read(dev, 0x0478); b43_calc_nrssi_slope()
605 b43_phy_write(dev, 0x002E, 0); b43_calc_nrssi_slope()
606 b43_phy_write(dev, B43_PHY_G_LO_CONTROL, 0); b43_calc_nrssi_slope()
611 b43_phy_set(dev, 0x0478, 0x0100); b43_calc_nrssi_slope()
612 b43_phy_set(dev, 0x0801, 0x0040); b43_calc_nrssi_slope()
616 b43_phy_mask(dev, 0x0801, 0xFFBF); b43_calc_nrssi_slope()
619 b43_phy_set(dev, 0x0060, 0x0040); b43_calc_nrssi_slope()
620 b43_phy_set(dev, 0x0014, 0x0200); b43_calc_nrssi_slope()
622 b43_radio_set(dev, 0x007A, 0x0070); b43_calc_nrssi_slope()
623 b43_set_all_gains(dev, 0, 8, 0); b43_calc_nrssi_slope()
624 b43_radio_mask(dev, 0x007A, 0x00F7); b43_calc_nrssi_slope()
626 b43_phy_maskset(dev, 0x0811, 0xFFCF, 0x0030); b43_calc_nrssi_slope()
627 b43_phy_maskset(dev, 0x0812, 0xFFCF, 0x0010); b43_calc_nrssi_slope()
629 b43_radio_set(dev, 0x007A, 0x0080); b43_calc_nrssi_slope()
632 nrssi0 = (s16) ((b43_phy_read(dev, 0x047F) >> 8) & 0x003F); b43_calc_nrssi_slope()
636 b43_radio_mask(dev, 0x007A, 0x007F); b43_calc_nrssi_slope()
638 b43_phy_maskset(dev, 0x0003, 0xFF9F, 0x0040); b43_calc_nrssi_slope()
641 b43_write16(dev, B43_MMIO_CHANNEL_EXT, b43_calc_nrssi_slope()
642 b43_read16(dev, B43_MMIO_CHANNEL_EXT) b43_calc_nrssi_slope()
644 b43_radio_set(dev, 0x007A, 0x000F); b43_calc_nrssi_slope()
645 b43_phy_write(dev, 0x0015, 0xF330); b43_calc_nrssi_slope()
647 b43_phy_maskset(dev, 0x0812, 0xFFCF, 0x0020); b43_calc_nrssi_slope()
648 b43_phy_maskset(dev, 0x0811, 0xFFCF, 0x0020); b43_calc_nrssi_slope()
651 b43_set_all_gains(dev, 3, 0, 1); b43_calc_nrssi_slope()
653 b43_radio_write16(dev, 0x0043, 0x001F); b43_calc_nrssi_slope()
655 tmp = b43_radio_read16(dev, 0x0052) & 0xFF0F; b43_calc_nrssi_slope()
656 b43_radio_write16(dev, 0x0052, tmp | 0x0060); b43_calc_nrssi_slope()
657 tmp = b43_radio_read16(dev, 0x0043) & 0xFFF0; b43_calc_nrssi_slope()
658 b43_radio_write16(dev, 0x0043, tmp | 0x0009); b43_calc_nrssi_slope()
660 b43_phy_write(dev, 0x005A, 0x0480); b43_calc_nrssi_slope()
661 b43_phy_write(dev, 0x0059, 0x0810); b43_calc_nrssi_slope()
662 b43_phy_write(dev, 0x0058, 0x000D); b43_calc_nrssi_slope()
664 nrssi1 = (s16) ((b43_phy_read(dev, 0x047F) >> 8) & 0x003F); b43_calc_nrssi_slope()
676 b43_phy_write(dev, 0x002E, backup[10]); b43_calc_nrssi_slope()
677 b43_phy_write(dev, 0x002F, backup[11]); b43_calc_nrssi_slope()
678 b43_phy_write(dev, 0x080F, backup[12]); b43_calc_nrssi_slope()
679 b43_phy_write(dev, B43_PHY_G_LO_CONTROL, backup[13]); b43_calc_nrssi_slope()
682 b43_phy_mask(dev, 0x0812, 0xFFCF); b43_calc_nrssi_slope()
683 b43_phy_mask(dev, 0x0811, 0xFFCF); b43_calc_nrssi_slope()
686 b43_radio_write16(dev, 0x007A, backup[0]); b43_calc_nrssi_slope()
687 b43_radio_write16(dev, 0x0052, backup[1]); b43_calc_nrssi_slope()
688 b43_radio_write16(dev, 0x0043, backup[2]); b43_calc_nrssi_slope()
689 b43_write16(dev, 0x03E2, backup[7]); b43_calc_nrssi_slope()
690 b43_write16(dev, 0x03E6, backup[8]); b43_calc_nrssi_slope()
691 b43_write16(dev, B43_MMIO_CHANNEL_EXT, backup[9]); b43_calc_nrssi_slope()
692 b43_phy_write(dev, 0x0015, backup[3]); b43_calc_nrssi_slope()
693 b43_phy_write(dev, 0x005A, backup[4]); b43_calc_nrssi_slope()
694 b43_phy_write(dev, 0x0059, backup[5]); b43_calc_nrssi_slope()
695 b43_phy_write(dev, 0x0058, backup[6]); b43_calc_nrssi_slope()
696 b43_synth_pu_workaround(dev, phy->channel); b43_calc_nrssi_slope()
697 b43_phy_set(dev, 0x0802, (0x0001 | 0x0002)); b43_calc_nrssi_slope()
698 b43_set_original_gains(dev); b43_calc_nrssi_slope()
699 b43_phy_set(dev, B43_PHY_G_CRS, 0x8000); b43_calc_nrssi_slope()
701 b43_phy_write(dev, 0x0801, backup[14]); b43_calc_nrssi_slope()
702 b43_phy_write(dev, 0x0060, backup[15]); b43_calc_nrssi_slope()
703 b43_phy_write(dev, 0x0014, backup[16]); b43_calc_nrssi_slope()
704 b43_phy_write(dev, 0x0478, backup[17]); b43_calc_nrssi_slope()
706 b43_nrssi_mem_update(dev); b43_calc_nrssi_slope()
707 b43_calc_nrssi_threshold(dev); b43_calc_nrssi_slope()
710 static void b43_calc_nrssi_threshold(struct b43_wldev *dev) b43_calc_nrssi_threshold() argument
712 struct b43_phy *phy = &dev->phy; b43_calc_nrssi_threshold()
721 !(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) { b43_calc_nrssi_threshold()
722 tmp16 = b43_nrssi_hw_read(dev, 0x20); b43_calc_nrssi_threshold()
726 b43_phy_maskset(dev, 0x048A, 0xF000, 0x09EB); b43_calc_nrssi_threshold()
728 b43_phy_maskset(dev, 0x048A, 0xF000, 0x0AED); b43_calc_nrssi_threshold()
760 tmp_u16 = b43_phy_read(dev, 0x048A) & 0xF000; b43_calc_nrssi_threshold()
763 b43_phy_write(dev, 0x048A, tmp_u16); b43_calc_nrssi_threshold()
806 b43_phy_read(dev, (offset))); \
810 b43_phy_write(dev, (offset), \
817 b43_radio_read16(dev, (offset))); \
821 b43_radio_write16(dev, (offset), \
828 b43_ofdmtab_read16(dev, (table), (offset))); \
832 b43_ofdmtab_write16(dev, (table), (offset), \
838 b43_radio_interference_mitigation_enable(struct b43_wldev *dev, int mode) b43_radio_interference_mitigation_enable() argument
840 struct b43_phy *phy = &dev->phy; b43_radio_interference_mitigation_enable()
849 b43_phy_set(dev, 0x042B, 0x0800); b43_radio_interference_mitigation_enable()
850 b43_phy_mask(dev, B43_PHY_G_CRS, ~0x4000); b43_radio_interference_mitigation_enable()
854 tmp = (b43_radio_read16(dev, 0x0078) & 0x001E); b43_radio_interference_mitigation_enable()
862 b43_radio_write16(dev, 0x0078, flipped); b43_radio_interference_mitigation_enable()
864 b43_calc_nrssi_threshold(dev); b43_radio_interference_mitigation_enable()
867 b43_phy_write(dev, 0x0406, 0x7E28); b43_radio_interference_mitigation_enable()
869 b43_phy_set(dev, 0x042B, 0x0800); b43_radio_interference_mitigation_enable()
870 b43_phy_set(dev, B43_PHY_RADIO_BITFIELD, 0x1000); b43_radio_interference_mitigation_enable()
873 b43_phy_maskset(dev, 0x04A0, 0xC0C0, 0x0008); b43_radio_interference_mitigation_enable()
875 b43_phy_maskset(dev, 0x04A1, 0xC0C0, 0x0605); b43_radio_interference_mitigation_enable()
877 b43_phy_maskset(dev, 0x04A2, 0xC0C0, 0x0204); b43_radio_interference_mitigation_enable()
879 b43_phy_maskset(dev, 0x04A8, 0xC0C0, 0x0803); b43_radio_interference_mitigation_enable()
881 b43_phy_maskset(dev, 0x04AB, 0xC0C0, 0x0605); b43_radio_interference_mitigation_enable()
884 b43_phy_write(dev, 0x04A7, 0x0002); b43_radio_interference_mitigation_enable()
886 b43_phy_write(dev, 0x04A3, 0x287A); b43_radio_interference_mitigation_enable()
888 b43_phy_write(dev, 0x04A9, 0x2027); b43_radio_interference_mitigation_enable()
890 b43_phy_write(dev, 0x0493, 0x32F5); b43_radio_interference_mitigation_enable()
892 b43_phy_write(dev, 0x04AA, 0x2027); b43_radio_interference_mitigation_enable()
894 b43_phy_write(dev, 0x04AC, 0x32F5); b43_radio_interference_mitigation_enable()
897 if (b43_phy_read(dev, 0x0033) & 0x0800) b43_radio_interference_mitigation_enable()
937 b43_phy_mask(dev, B43_PHY_RADIO_BITFIELD, ~0x1000); b43_radio_interference_mitigation_enable()
938 b43_phy_maskset(dev, B43_PHY_G_CRS, 0xFFFC, 0x0002); b43_radio_interference_mitigation_enable()
940 b43_phy_write(dev, 0x0033, 0x0800); b43_radio_interference_mitigation_enable()
941 b43_phy_write(dev, 0x04A3, 0x2027); b43_radio_interference_mitigation_enable()
942 b43_phy_write(dev, 0x04A9, 0x1CA8); b43_radio_interference_mitigation_enable()
943 b43_phy_write(dev, 0x0493, 0x287A); b43_radio_interference_mitigation_enable()
944 b43_phy_write(dev, 0x04AA, 0x1CA8); b43_radio_interference_mitigation_enable()
945 b43_phy_write(dev, 0x04AC, 0x287A); b43_radio_interference_mitigation_enable()
947 b43_phy_maskset(dev, 0x04A0, 0xFFC0, 0x001A); b43_radio_interference_mitigation_enable()
948 b43_phy_write(dev, 0x04A7, 0x000D); b43_radio_interference_mitigation_enable()
951 b43_phy_write(dev, 0x0406, 0xFF0D); b43_radio_interference_mitigation_enable()
953 b43_phy_write(dev, 0x04C0, 0xFFFF); b43_radio_interference_mitigation_enable()
954 b43_phy_write(dev, 0x04C1, 0x00A9); b43_radio_interference_mitigation_enable()
956 b43_phy_write(dev, 0x04C0, 0x00C1); b43_radio_interference_mitigation_enable()
957 b43_phy_write(dev, 0x04C1, 0x0059); b43_radio_interference_mitigation_enable()
960 b43_phy_maskset(dev, 0x04A1, 0xC0FF, 0x1800); b43_radio_interference_mitigation_enable()
961 b43_phy_maskset(dev, 0x04A1, 0xFFC0, 0x0015); b43_radio_interference_mitigation_enable()
962 b43_phy_maskset(dev, 0x04A8, 0xCFFF, 0x1000); b43_radio_interference_mitigation_enable()
963 b43_phy_maskset(dev, 0x04A8, 0xF0FF, 0x0A00); b43_radio_interference_mitigation_enable()
964 b43_phy_maskset(dev, 0x04AB, 0xCFFF, 0x1000); b43_radio_interference_mitigation_enable()
965 b43_phy_maskset(dev, 0x04AB, 0xF0FF, 0x0800); b43_radio_interference_mitigation_enable()
966 b43_phy_maskset(dev, 0x04AB, 0xFFCF, 0x0010); b43_radio_interference_mitigation_enable()
967 b43_phy_maskset(dev, 0x04AB, 0xFFF0, 0x0005); b43_radio_interference_mitigation_enable()
968 b43_phy_maskset(dev, 0x04A8, 0xFFCF, 0x0010); b43_radio_interference_mitigation_enable()
969 b43_phy_maskset(dev, 0x04A8, 0xFFF0, 0x0006); b43_radio_interference_mitigation_enable()
970 b43_phy_maskset(dev, 0x04A2, 0xF0FF, 0x0800); b43_radio_interference_mitigation_enable()
971 b43_phy_maskset(dev, 0x04A0, 0xF0FF, 0x0500); b43_radio_interference_mitigation_enable()
972 b43_phy_maskset(dev, 0x04A2, 0xFFF0, 0x000B); b43_radio_interference_mitigation_enable()
975 b43_phy_mask(dev, 0x048A, 0x7FFF); b43_radio_interference_mitigation_enable()
976 b43_phy_maskset(dev, 0x0415, 0x8000, 0x36D8); b43_radio_interference_mitigation_enable()
977 b43_phy_maskset(dev, 0x0416, 0x8000, 0x36D8); b43_radio_interference_mitigation_enable()
978 b43_phy_maskset(dev, 0x0417, 0xFE00, 0x016D); b43_radio_interference_mitigation_enable()
980 b43_phy_set(dev, 0x048A, 0x1000); b43_radio_interference_mitigation_enable()
981 b43_phy_maskset(dev, 0x048A, 0x9FFF, 0x2000); b43_radio_interference_mitigation_enable()
982 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_ACIW); b43_radio_interference_mitigation_enable()
985 b43_phy_set(dev, 0x042B, 0x0800); b43_radio_interference_mitigation_enable()
987 b43_phy_maskset(dev, 0x048C, 0xF0FF, 0x0200); b43_radio_interference_mitigation_enable()
989 b43_phy_maskset(dev, 0x04AE, 0xFF00, 0x007F); b43_radio_interference_mitigation_enable()
990 b43_phy_maskset(dev, 0x04AD, 0x00FF, 0x1300); b43_radio_interference_mitigation_enable()
992 b43_ofdmtab_write16(dev, 0x1A00, 0x3, 0x007F); b43_radio_interference_mitigation_enable()
993 b43_ofdmtab_write16(dev, 0x1A00, 0x2, 0x007F); b43_radio_interference_mitigation_enable()
994 b43_phy_mask(dev, 0x04AD, 0x00FF); b43_radio_interference_mitigation_enable()
996 b43_calc_nrssi_slope(dev); b43_radio_interference_mitigation_enable()
1004 b43_radio_interference_mitigation_disable(struct b43_wldev *dev, int mode) b43_radio_interference_mitigation_disable() argument
1006 struct b43_phy *phy = &dev->phy; b43_radio_interference_mitigation_disable()
1013 b43_phy_mask(dev, 0x042B, ~0x0800); b43_radio_interference_mitigation_disable()
1014 b43_phy_set(dev, B43_PHY_G_CRS, 0x4000); b43_radio_interference_mitigation_disable()
1018 b43_calc_nrssi_threshold(dev); b43_radio_interference_mitigation_disable()
1020 b43_phy_mask(dev, 0x042B, ~0x0800); b43_radio_interference_mitigation_disable()
1021 if (!dev->bad_frames_preempt) { b43_radio_interference_mitigation_disable()
1022 b43_phy_mask(dev, B43_PHY_RADIO_BITFIELD, ~(1 << 11)); b43_radio_interference_mitigation_disable()
1024 b43_phy_set(dev, B43_PHY_G_CRS, 0x4000); b43_radio_interference_mitigation_disable()
1038 if (!(b43_phy_read(dev, 0x0033) & 0x0800)) b43_radio_interference_mitigation_disable()
1076 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_ACIW); b43_radio_interference_mitigation_disable()
1077 b43_calc_nrssi_slope(dev); b43_radio_interference_mitigation_disable()
1091 static u16 b43_radio_core_calibration_value(struct b43_wldev *dev) b43_radio_core_calibration_value() argument
1102 reg = b43_radio_read16(dev, 0x60); b43_radio_core_calibration_value()
1112 static u16 radio2050_rfover_val(struct b43_wldev *dev, radio2050_rfover_val() argument
1115 struct b43_phy *phy = &dev->phy; radio2050_rfover_val()
1117 struct ssb_sprom *sprom = dev->dev->bus_sprom; radio2050_rfover_val()
1257 static u16 b43_radio_init2050(struct b43_wldev *dev) b43_radio_init2050() argument
1259 struct b43_phy *phy = &dev->phy; b43_radio_init2050()
1269 sav.radio_43 = b43_radio_read16(dev, 0x43); b43_radio_init2050()
1270 sav.radio_51 = b43_radio_read16(dev, 0x51); b43_radio_init2050()
1271 sav.radio_52 = b43_radio_read16(dev, 0x52); b43_radio_init2050()
1272 sav.phy_pgactl = b43_phy_read(dev, B43_PHY_PGACTL); b43_radio_init2050()
1273 sav.phy_cck_5A = b43_phy_read(dev, B43_PHY_CCK(0x5A)); b43_radio_init2050()
1274 sav.phy_cck_59 = b43_phy_read(dev, B43_PHY_CCK(0x59)); b43_radio_init2050()
1275 sav.phy_cck_58 = b43_phy_read(dev, B43_PHY_CCK(0x58)); b43_radio_init2050()
1278 sav.phy_cck_30 = b43_phy_read(dev, B43_PHY_CCK(0x30)); b43_radio_init2050()
1279 sav.reg_3EC = b43_read16(dev, 0x3EC); b43_radio_init2050()
1281 b43_phy_write(dev, B43_PHY_CCK(0x30), 0xFF); b43_radio_init2050()
1282 b43_write16(dev, 0x3EC, 0x3F3F); b43_radio_init2050()
1284 sav.phy_rfover = b43_phy_read(dev, B43_PHY_RFOVER); b43_radio_init2050()
1285 sav.phy_rfoverval = b43_phy_read(dev, B43_PHY_RFOVERVAL); b43_radio_init2050()
1286 sav.phy_analogover = b43_phy_read(dev, B43_PHY_ANALOGOVER); b43_radio_init2050()
1288 b43_phy_read(dev, B43_PHY_ANALOGOVERVAL); b43_radio_init2050()
1289 sav.phy_crs0 = b43_phy_read(dev, B43_PHY_CRS0); b43_radio_init2050()
1290 sav.phy_classctl = b43_phy_read(dev, B43_PHY_CLASSCTL); b43_radio_init2050()
1292 b43_phy_set(dev, B43_PHY_ANALOGOVER, 0x0003); b43_radio_init2050()
1293 b43_phy_mask(dev, B43_PHY_ANALOGOVERVAL, 0xFFFC); b43_radio_init2050()
1294 b43_phy_mask(dev, B43_PHY_CRS0, 0x7FFF); b43_radio_init2050()
1295 b43_phy_mask(dev, B43_PHY_CLASSCTL, 0xFFFC); b43_radio_init2050()
1297 sav.phy_lo_mask = b43_phy_read(dev, B43_PHY_LO_MASK); b43_radio_init2050()
1298 sav.phy_lo_ctl = b43_phy_read(dev, B43_PHY_LO_CTL); b43_radio_init2050()
1301 b43_phy_write(dev, B43_PHY_LO_MASK, 0xC020); b43_radio_init2050()
1303 b43_phy_write(dev, B43_PHY_LO_MASK, 0x8020); b43_radio_init2050()
1304 b43_phy_write(dev, B43_PHY_LO_CTL, 0); b43_radio_init2050()
1307 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1308 radio2050_rfover_val(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1310 b43_phy_write(dev, B43_PHY_RFOVER, b43_radio_init2050()
1311 radio2050_rfover_val(dev, B43_PHY_RFOVER, 0)); b43_radio_init2050()
1313 b43_write16(dev, 0x3E2, b43_read16(dev, 0x3E2) | 0x8000); b43_radio_init2050()
1315 sav.phy_syncctl = b43_phy_read(dev, B43_PHY_SYNCCTL); b43_radio_init2050()
1316 b43_phy_mask(dev, B43_PHY_SYNCCTL, 0xFF7F); b43_radio_init2050()
1317 sav.reg_3E6 = b43_read16(dev, 0x3E6); b43_radio_init2050()
1318 sav.reg_3F4 = b43_read16(dev, 0x3F4); b43_radio_init2050()
1321 b43_write16(dev, 0x03E6, 0x0122); b43_radio_init2050()
1324 b43_phy_maskset(dev, B43_PHY_CCK(0x03), 0xFFBF, 0x40); b43_radio_init2050()
1326 b43_write16(dev, B43_MMIO_CHANNEL_EXT, b43_radio_init2050()
1327 (b43_read16(dev, B43_MMIO_CHANNEL_EXT) | 0x2000)); b43_radio_init2050()
1330 rcc = b43_radio_core_calibration_value(dev); b43_radio_init2050()
1333 b43_radio_write16(dev, 0x78, 0x26); b43_radio_init2050()
1335 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1336 radio2050_rfover_val(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1339 b43_phy_write(dev, B43_PHY_PGACTL, 0xBFAF); b43_radio_init2050()
1340 b43_phy_write(dev, B43_PHY_CCK(0x2B), 0x1403); b43_radio_init2050()
1342 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1343 radio2050_rfover_val(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1346 b43_phy_write(dev, B43_PHY_PGACTL, 0xBFA0); b43_radio_init2050()
1347 b43_radio_set(dev, 0x51, 0x0004); b43_radio_init2050()
1349 b43_radio_write16(dev, 0x43, 0x1F); b43_radio_init2050()
1351 b43_radio_write16(dev, 0x52, 0); b43_radio_init2050()
1352 b43_radio_maskset(dev, 0x43, 0xFFF0, 0x0009); b43_radio_init2050()
1354 b43_phy_write(dev, B43_PHY_CCK(0x58), 0); b43_radio_init2050()
1357 b43_phy_write(dev, B43_PHY_CCK(0x5A), 0x0480); b43_radio_init2050()
1358 b43_phy_write(dev, B43_PHY_CCK(0x59), 0xC810); b43_radio_init2050()
1359 b43_phy_write(dev, B43_PHY_CCK(0x58), 0x000D); b43_radio_init2050()
1361 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1362 radio2050_rfover_val(dev, b43_radio_init2050()
1366 b43_phy_write(dev, B43_PHY_PGACTL, 0xAFB0); b43_radio_init2050()
1369 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1370 radio2050_rfover_val(dev, b43_radio_init2050()
1374 b43_phy_write(dev, B43_PHY_PGACTL, 0xEFB0); b43_radio_init2050()
1377 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1378 radio2050_rfover_val(dev, b43_radio_init2050()
1382 b43_phy_write(dev, B43_PHY_PGACTL, 0xFFF0); b43_radio_init2050()
1384 tmp1 += b43_phy_read(dev, B43_PHY_LO_LEAKAGE); b43_radio_init2050()
1385 b43_phy_write(dev, B43_PHY_CCK(0x58), 0); b43_radio_init2050()
1387 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1388 radio2050_rfover_val(dev, b43_radio_init2050()
1392 b43_phy_write(dev, B43_PHY_PGACTL, 0xAFB0); b43_radio_init2050()
1396 b43_phy_write(dev, B43_PHY_CCK(0x58), 0); b43_radio_init2050()
1402 b43_radio_write16(dev, 0x78, radio78); b43_radio_init2050()
1405 b43_phy_write(dev, B43_PHY_CCK(0x5A), 0x0D80); b43_radio_init2050()
1406 b43_phy_write(dev, B43_PHY_CCK(0x59), 0xC810); b43_radio_init2050()
1407 b43_phy_write(dev, B43_PHY_CCK(0x58), 0x000D); b43_radio_init2050()
1409 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1410 radio2050_rfover_val(dev, b43_radio_init2050()
1415 b43_phy_write(dev, B43_PHY_PGACTL, 0xAFB0); b43_radio_init2050()
1418 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1419 radio2050_rfover_val(dev, b43_radio_init2050()
1424 b43_phy_write(dev, B43_PHY_PGACTL, 0xEFB0); b43_radio_init2050()
1427 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1428 radio2050_rfover_val(dev, b43_radio_init2050()
1433 b43_phy_write(dev, B43_PHY_PGACTL, 0xFFF0); b43_radio_init2050()
1435 tmp2 += b43_phy_read(dev, B43_PHY_LO_LEAKAGE); b43_radio_init2050()
1436 b43_phy_write(dev, B43_PHY_CCK(0x58), 0); b43_radio_init2050()
1438 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_radio_init2050()
1439 radio2050_rfover_val(dev, b43_radio_init2050()
1444 b43_phy_write(dev, B43_PHY_PGACTL, 0xAFB0); b43_radio_init2050()
1453 b43_phy_write(dev, B43_PHY_PGACTL, sav.phy_pgactl); b43_radio_init2050()
1454 b43_radio_write16(dev, 0x51, sav.radio_51); b43_radio_init2050()
1455 b43_radio_write16(dev, 0x52, sav.radio_52); b43_radio_init2050()
1456 b43_radio_write16(dev, 0x43, sav.radio_43); b43_radio_init2050()
1457 b43_phy_write(dev, B43_PHY_CCK(0x5A), sav.phy_cck_5A); b43_radio_init2050()
1458 b43_phy_write(dev, B43_PHY_CCK(0x59), sav.phy_cck_59); b43_radio_init2050()
1459 b43_phy_write(dev, B43_PHY_CCK(0x58), sav.phy_cck_58); b43_radio_init2050()
1460 b43_write16(dev, 0x3E6, sav.reg_3E6); b43_radio_init2050()
1462 b43_write16(dev, 0x3F4, sav.reg_3F4); b43_radio_init2050()
1463 b43_phy_write(dev, B43_PHY_SYNCCTL, sav.phy_syncctl); b43_radio_init2050()
1464 b43_synth_pu_workaround(dev, phy->channel); b43_radio_init2050()
1466 b43_phy_write(dev, B43_PHY_CCK(0x30), sav.phy_cck_30); b43_radio_init2050()
1467 b43_write16(dev, 0x3EC, sav.reg_3EC); b43_radio_init2050()
1469 b43_write16(dev, B43_MMIO_PHY_RADIO, b43_radio_init2050()
1470 b43_read16(dev, B43_MMIO_PHY_RADIO) b43_radio_init2050()
1472 b43_phy_write(dev, B43_PHY_RFOVER, sav.phy_rfover); b43_radio_init2050()
1473 b43_phy_write(dev, B43_PHY_RFOVERVAL, sav.phy_rfoverval); b43_radio_init2050()
1474 b43_phy_write(dev, B43_PHY_ANALOGOVER, sav.phy_analogover); b43_radio_init2050()
1475 b43_phy_write(dev, B43_PHY_ANALOGOVERVAL, b43_radio_init2050()
1477 b43_phy_write(dev, B43_PHY_CRS0, sav.phy_crs0); b43_radio_init2050()
1478 b43_phy_write(dev, B43_PHY_CLASSCTL, sav.phy_classctl); b43_radio_init2050()
1480 b43_phy_write(dev, B43_PHY_LO_MASK, sav.phy_lo_mask); b43_radio_init2050()
1481 b43_phy_write(dev, B43_PHY_LO_CTL, sav.phy_lo_ctl); b43_radio_init2050()
1492 static void b43_phy_initb5(struct b43_wldev *dev) b43_phy_initb5() argument
1494 struct b43_phy *phy = &dev->phy; b43_phy_initb5()
1500 b43_radio_set(dev, 0x007A, 0x0050); b43_phy_initb5()
1502 if ((dev->dev->board_vendor != SSB_BOARDVENDOR_BCM) && b43_phy_initb5()
1503 (dev->dev->board_type != SSB_BOARD_BU4306)) { b43_phy_initb5()
1506 b43_phy_write(dev, offset, value); b43_phy_initb5()
1510 b43_phy_maskset(dev, 0x0035, 0xF0FF, 0x0700); b43_phy_initb5()
1512 b43_phy_write(dev, 0x0038, 0x0667); b43_phy_initb5()
1516 b43_radio_set(dev, 0x007A, 0x0020); b43_phy_initb5()
1517 b43_radio_set(dev, 0x0051, 0x0004); b43_phy_initb5()
1519 b43_write16(dev, B43_MMIO_PHY_RADIO, 0x0000); b43_phy_initb5()
1521 b43_phy_set(dev, 0x0802, 0x0100); b43_phy_initb5()
1522 b43_phy_set(dev, 0x042B, 0x2000); b43_phy_initb5()
1524 b43_phy_write(dev, 0x001C, 0x186A); b43_phy_initb5()
1526 b43_phy_maskset(dev, 0x0013, 0x00FF, 0x1900); b43_phy_initb5()
1527 b43_phy_maskset(dev, 0x0035, 0xFFC0, 0x0064); b43_phy_initb5()
1528 b43_phy_maskset(dev, 0x005D, 0xFF80, 0x000A); b43_phy_initb5()
1531 if (dev->bad_frames_preempt) { b43_phy_initb5()
1532 b43_phy_set(dev, B43_PHY_RADIO_BITFIELD, (1 << 11)); b43_phy_initb5()
1536 b43_phy_write(dev, 0x0026, 0xCE00); b43_phy_initb5()
1537 b43_phy_write(dev, 0x0021, 0x3763); b43_phy_initb5()
1538 b43_phy_write(dev, 0x0022, 0x1BC3); b43_phy_initb5()
1539 b43_phy_write(dev, 0x0023, 0x06F9); b43_phy_initb5()
1540 b43_phy_write(dev, 0x0024, 0x037E); b43_phy_initb5()
1542 b43_phy_write(dev, 0x0026, 0xCC00); b43_phy_initb5()
1543 b43_phy_write(dev, 0x0030, 0x00C6); b43_phy_initb5()
1544 b43_write16(dev, 0x03EC, 0x3F22); b43_phy_initb5()
1547 b43_phy_write(dev, 0x0020, 0x3E1C); b43_phy_initb5()
1549 b43_phy_write(dev, 0x0020, 0x301C); b43_phy_initb5()
1552 b43_write16(dev, 0x03E4, 0x3000); b43_phy_initb5()
1556 b43_gphy_channel_switch(dev, 7, 0); b43_phy_initb5()
1559 b43_radio_write16(dev, 0x0075, 0x0080); b43_phy_initb5()
1560 b43_radio_write16(dev, 0x0079, 0x0081); b43_phy_initb5()
1563 b43_radio_write16(dev, 0x0050, 0x0020); b43_phy_initb5()
1564 b43_radio_write16(dev, 0x0050, 0x0023); b43_phy_initb5()
1567 b43_radio_write16(dev, 0x0050, 0x0020); b43_phy_initb5()
1568 b43_radio_write16(dev, 0x005A, 0x0070); b43_phy_initb5()
1571 b43_radio_write16(dev, 0x005B, 0x007B); b43_phy_initb5()
1572 b43_radio_write16(dev, 0x005C, 0x00B0); b43_phy_initb5()
1574 b43_radio_set(dev, 0x007A, 0x0007); b43_phy_initb5()
1576 b43_gphy_channel_switch(dev, old_channel, 0); b43_phy_initb5()
1578 b43_phy_write(dev, 0x0014, 0x0080); b43_phy_initb5()
1579 b43_phy_write(dev, 0x0032, 0x00CA); b43_phy_initb5()
1580 b43_phy_write(dev, 0x002A, 0x88A3); b43_phy_initb5()
1582 b43_set_txpower_g(dev, &gphy->bbatt, &gphy->rfatt, gphy->tx_control); b43_phy_initb5()
1585 b43_radio_write16(dev, 0x005D, 0x000D); b43_phy_initb5()
1587 b43_write16(dev, 0x03E4, (b43_read16(dev, 0x03E4) & 0xFFC0) | 0x0004); b43_phy_initb5()
1591 static void b43_phy_initb6(struct b43_wldev *dev) b43_phy_initb6() argument
1593 struct b43_phy *phy = &dev->phy; b43_phy_initb6()
1598 b43_phy_write(dev, 0x003E, 0x817A); b43_phy_initb6()
1599 b43_radio_write16(dev, 0x007A, b43_phy_initb6()
1600 (b43_radio_read16(dev, 0x007A) | 0x0058)); b43_phy_initb6()
1602 b43_radio_write16(dev, 0x51, 0x37); b43_phy_initb6()
1603 b43_radio_write16(dev, 0x52, 0x70); b43_phy_initb6()
1604 b43_radio_write16(dev, 0x53, 0xB3); b43_phy_initb6()
1605 b43_radio_write16(dev, 0x54, 0x9B); b43_phy_initb6()
1606 b43_radio_write16(dev, 0x5A, 0x88); b43_phy_initb6()
1607 b43_radio_write16(dev, 0x5B, 0x88); b43_phy_initb6()
1608 b43_radio_write16(dev, 0x5D, 0x88); b43_phy_initb6()
1609 b43_radio_write16(dev, 0x5E, 0x88); b43_phy_initb6()
1610 b43_radio_write16(dev, 0x7D, 0x88); b43_phy_initb6()
1611 b43_hf_write(dev, b43_hf_read(dev) b43_phy_initb6()
1616 b43_radio_write16(dev, 0x51, 0); b43_phy_initb6()
1617 b43_radio_write16(dev, 0x52, 0x40); b43_phy_initb6()
1618 b43_radio_write16(dev, 0x53, 0xB7); b43_phy_initb6()
1619 b43_radio_write16(dev, 0x54, 0x98); b43_phy_initb6()
1620 b43_radio_write16(dev, 0x5A, 0x88); b43_phy_initb6()
1621 b43_radio_write16(dev, 0x5B, 0x6B); b43_phy_initb6()
1622 b43_radio_write16(dev, 0x5C, 0x0F); b43_phy_initb6()
1623 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_ALTIQ) { b43_phy_initb6()
1624 b43_radio_write16(dev, 0x5D, 0xFA); b43_phy_initb6()
1625 b43_radio_write16(dev, 0x5E, 0xD8); b43_phy_initb6()
1627 b43_radio_write16(dev, 0x5D, 0xF5); b43_phy_initb6()
1628 b43_radio_write16(dev, 0x5E, 0xB8); b43_phy_initb6()
1630 b43_radio_write16(dev, 0x0073, 0x0003); b43_phy_initb6()
1631 b43_radio_write16(dev, 0x007D, 0x00A8); b43_phy_initb6()
1632 b43_radio_write16(dev, 0x007C, 0x0001); b43_phy_initb6()
1633 b43_radio_write16(dev, 0x007E, 0x0008); b43_phy_initb6()
1637 b43_phy_write(dev, offset, val); b43_phy_initb6()
1642 b43_phy_write(dev, offset, val); b43_phy_initb6()
1647 b43_phy_write(dev, offset, (val & 0x3F3F)); b43_phy_initb6()
1651 b43_radio_set(dev, 0x007A, 0x0020); b43_phy_initb6()
1652 b43_radio_set(dev, 0x0051, 0x0004); b43_phy_initb6()
1653 b43_phy_set(dev, 0x0802, 0x0100); b43_phy_initb6()
1654 b43_phy_set(dev, 0x042B, 0x2000); b43_phy_initb6()
1655 b43_phy_write(dev, 0x5B, 0); b43_phy_initb6()
1656 b43_phy_write(dev, 0x5C, 0); b43_phy_initb6()
1661 b43_gphy_channel_switch(dev, 1, 0); b43_phy_initb6()
1663 b43_gphy_channel_switch(dev, 13, 0); b43_phy_initb6()
1665 b43_radio_write16(dev, 0x0050, 0x0020); b43_phy_initb6()
1666 b43_radio_write16(dev, 0x0050, 0x0023); b43_phy_initb6()
1669 b43_radio_write16(dev, 0x7C, (b43_radio_read16(dev, 0x7C) b43_phy_initb6()
1671 b43_radio_write16(dev, 0x50, 0x20); b43_phy_initb6()
1674 b43_radio_write16(dev, 0x50, 0x20); b43_phy_initb6()
1675 b43_radio_write16(dev, 0x5A, 0x70); b43_phy_initb6()
1676 b43_radio_write16(dev, 0x5B, 0x7B); b43_phy_initb6()
1677 b43_radio_write16(dev, 0x5C, 0xB0); b43_phy_initb6()
1679 b43_radio_maskset(dev, 0x007A, 0x00F8, 0x0007); b43_phy_initb6()
1681 b43_gphy_channel_switch(dev, old_channel, 0); b43_phy_initb6()
1683 b43_phy_write(dev, 0x0014, 0x0200); b43_phy_initb6()
1685 b43_phy_write(dev, 0x2A, 0x88C2); b43_phy_initb6()
1687 b43_phy_write(dev, 0x2A, 0x8AC0); b43_phy_initb6()
1688 b43_phy_write(dev, 0x0038, 0x0668); b43_phy_initb6()
1689 b43_set_txpower_g(dev, &gphy->bbatt, &gphy->rfatt, gphy->tx_control); b43_phy_initb6()
1691 b43_phy_maskset(dev, 0x5D, 0xFF80, 0x0003); b43_phy_initb6()
1693 b43_radio_write16(dev, 0x005D, 0x000D); b43_phy_initb6()
1696 b43_write16(dev, 0x3E4, 9); b43_phy_initb6()
1697 b43_phy_mask(dev, 0x61, 0x0FFF); b43_phy_initb6()
1699 b43_phy_maskset(dev, 0x0002, 0xFFC0, 0x0004); b43_phy_initb6()
1704 b43_write16(dev, 0x03E6, 0x0); b43_phy_initb6()
1707 static void b43_calc_loopback_gain(struct b43_wldev *dev) b43_calc_loopback_gain() argument
1709 struct b43_phy *phy = &dev->phy; b43_calc_loopback_gain()
1718 backup_phy[0] = b43_phy_read(dev, B43_PHY_CRS0); b43_calc_loopback_gain()
1719 backup_phy[1] = b43_phy_read(dev, B43_PHY_CCKBBANDCFG); b43_calc_loopback_gain()
1720 backup_phy[2] = b43_phy_read(dev, B43_PHY_RFOVER); b43_calc_loopback_gain()
1721 backup_phy[3] = b43_phy_read(dev, B43_PHY_RFOVERVAL); b43_calc_loopback_gain()
1723 backup_phy[4] = b43_phy_read(dev, B43_PHY_ANALOGOVER); b43_calc_loopback_gain()
1724 backup_phy[5] = b43_phy_read(dev, B43_PHY_ANALOGOVERVAL); b43_calc_loopback_gain()
1726 backup_phy[6] = b43_phy_read(dev, B43_PHY_CCK(0x5A)); b43_calc_loopback_gain()
1727 backup_phy[7] = b43_phy_read(dev, B43_PHY_CCK(0x59)); b43_calc_loopback_gain()
1728 backup_phy[8] = b43_phy_read(dev, B43_PHY_CCK(0x58)); b43_calc_loopback_gain()
1729 backup_phy[9] = b43_phy_read(dev, B43_PHY_CCK(0x0A)); b43_calc_loopback_gain()
1730 backup_phy[10] = b43_phy_read(dev, B43_PHY_CCK(0x03)); b43_calc_loopback_gain()
1731 backup_phy[11] = b43_phy_read(dev, B43_PHY_LO_MASK); b43_calc_loopback_gain()
1732 backup_phy[12] = b43_phy_read(dev, B43_PHY_LO_CTL); b43_calc_loopback_gain()
1733 backup_phy[13] = b43_phy_read(dev, B43_PHY_CCK(0x2B)); b43_calc_loopback_gain()
1734 backup_phy[14] = b43_phy_read(dev, B43_PHY_PGACTL); b43_calc_loopback_gain()
1735 backup_phy[15] = b43_phy_read(dev, B43_PHY_LO_LEAKAGE); b43_calc_loopback_gain()
1737 backup_radio[0] = b43_radio_read16(dev, 0x52); b43_calc_loopback_gain()
1738 backup_radio[1] = b43_radio_read16(dev, 0x43); b43_calc_loopback_gain()
1739 backup_radio[2] = b43_radio_read16(dev, 0x7A); b43_calc_loopback_gain()
1741 b43_phy_mask(dev, B43_PHY_CRS0, 0x3FFF); b43_calc_loopback_gain()
1742 b43_phy_set(dev, B43_PHY_CCKBBANDCFG, 0x8000); b43_calc_loopback_gain()
1743 b43_phy_set(dev, B43_PHY_RFOVER, 0x0002); b43_calc_loopback_gain()
1744 b43_phy_mask(dev, B43_PHY_RFOVERVAL, 0xFFFD); b43_calc_loopback_gain()
1745 b43_phy_set(dev, B43_PHY_RFOVER, 0x0001); b43_calc_loopback_gain()
1746 b43_phy_mask(dev, B43_PHY_RFOVERVAL, 0xFFFE); b43_calc_loopback_gain()
1748 b43_phy_set(dev, B43_PHY_ANALOGOVER, 0x0001); b43_calc_loopback_gain()
1749 b43_phy_mask(dev, B43_PHY_ANALOGOVERVAL, 0xFFFE); b43_calc_loopback_gain()
1750 b43_phy_set(dev, B43_PHY_ANALOGOVER, 0x0002); b43_calc_loopback_gain()
1751 b43_phy_mask(dev, B43_PHY_ANALOGOVERVAL, 0xFFFD); b43_calc_loopback_gain()
1753 b43_phy_set(dev, B43_PHY_RFOVER, 0x000C); b43_calc_loopback_gain()
1754 b43_phy_set(dev, B43_PHY_RFOVERVAL, 0x000C); b43_calc_loopback_gain()
1755 b43_phy_set(dev, B43_PHY_RFOVER, 0x0030); b43_calc_loopback_gain()
1756 b43_phy_maskset(dev, B43_PHY_RFOVERVAL, 0xFFCF, 0x10); b43_calc_loopback_gain()
1758 b43_phy_write(dev, B43_PHY_CCK(0x5A), 0x0780); b43_calc_loopback_gain()
1759 b43_phy_write(dev, B43_PHY_CCK(0x59), 0xC810); b43_calc_loopback_gain()
1760 b43_phy_write(dev, B43_PHY_CCK(0x58), 0x000D); b43_calc_loopback_gain()
1762 b43_phy_set(dev, B43_PHY_CCK(0x0A), 0x2000); b43_calc_loopback_gain()
1764 b43_phy_set(dev, B43_PHY_ANALOGOVER, 0x0004); b43_calc_loopback_gain()
1765 b43_phy_mask(dev, B43_PHY_ANALOGOVERVAL, 0xFFFB); b43_calc_loopback_gain()
1767 b43_phy_maskset(dev, B43_PHY_CCK(0x03), 0xFF9F, 0x40); b43_calc_loopback_gain()
1770 b43_radio_write16(dev, 0x43, 0x000F); b43_calc_loopback_gain()
1772 b43_radio_write16(dev, 0x52, 0); b43_calc_loopback_gain()
1773 b43_radio_maskset(dev, 0x43, 0xFFF0, 0x9); b43_calc_loopback_gain()
1775 b43_gphy_set_baseband_attenuation(dev, 11); b43_calc_loopback_gain()
1778 b43_phy_write(dev, B43_PHY_LO_MASK, 0xC020); b43_calc_loopback_gain()
1780 b43_phy_write(dev, B43_PHY_LO_MASK, 0x8020); b43_calc_loopback_gain()
1781 b43_phy_write(dev, B43_PHY_LO_CTL, 0); b43_calc_loopback_gain()
1783 b43_phy_maskset(dev, B43_PHY_CCK(0x2B), 0xFFC0, 0x01); b43_calc_loopback_gain()
1784 b43_phy_maskset(dev, B43_PHY_CCK(0x2B), 0xC0FF, 0x800); b43_calc_loopback_gain()
1786 b43_phy_set(dev, B43_PHY_RFOVER, 0x0100); b43_calc_loopback_gain()
1787 b43_phy_mask(dev, B43_PHY_RFOVERVAL, 0xCFFF); b43_calc_loopback_gain()
1789 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_EXTLNA) { b43_calc_loopback_gain()
1791 b43_phy_set(dev, B43_PHY_RFOVER, 0x0800); b43_calc_loopback_gain()
1792 b43_phy_set(dev, B43_PHY_RFOVERVAL, 0x8000); b43_calc_loopback_gain()
1795 b43_radio_mask(dev, 0x7A, 0x00F7); b43_calc_loopback_gain()
1801 b43_radio_write16(dev, 0x43, i); b43_calc_loopback_gain()
1802 b43_phy_maskset(dev, B43_PHY_RFOVERVAL, 0xF0FF, (j << 8)); b43_calc_loopback_gain()
1803 b43_phy_maskset(dev, B43_PHY_PGACTL, 0x0FFF, 0xA000); b43_calc_loopback_gain()
1804 b43_phy_set(dev, B43_PHY_PGACTL, 0xF000); b43_calc_loopback_gain()
1806 if (b43_phy_read(dev, B43_PHY_LO_LEAKAGE) >= 0xDFC) b43_calc_loopback_gain()
1814 b43_phy_set(dev, B43_PHY_RFOVERVAL, 0x30); b43_calc_loopback_gain()
1817 b43_phy_maskset(dev, B43_PHY_RFOVERVAL, 0xF0FF, (j << 8)); b43_calc_loopback_gain()
1818 b43_phy_maskset(dev, B43_PHY_PGACTL, 0x0FFF, 0xA000); b43_calc_loopback_gain()
1819 b43_phy_set(dev, B43_PHY_PGACTL, 0xF000); b43_calc_loopback_gain()
1822 if (b43_phy_read(dev, B43_PHY_LO_LEAKAGE) >= 0xDFC) b43_calc_loopback_gain()
1830 b43_phy_write(dev, B43_PHY_ANALOGOVER, backup_phy[4]); b43_calc_loopback_gain()
1831 b43_phy_write(dev, B43_PHY_ANALOGOVERVAL, backup_phy[5]); b43_calc_loopback_gain()
1833 b43_phy_write(dev, B43_PHY_CCK(0x5A), backup_phy[6]); b43_calc_loopback_gain()
1834 b43_phy_write(dev, B43_PHY_CCK(0x59), backup_phy[7]); b43_calc_loopback_gain()
1835 b43_phy_write(dev, B43_PHY_CCK(0x58), backup_phy[8]); b43_calc_loopback_gain()
1836 b43_phy_write(dev, B43_PHY_CCK(0x0A), backup_phy[9]); b43_calc_loopback_gain()
1837 b43_phy_write(dev, B43_PHY_CCK(0x03), backup_phy[10]); b43_calc_loopback_gain()
1838 b43_phy_write(dev, B43_PHY_LO_MASK, backup_phy[11]); b43_calc_loopback_gain()
1839 b43_phy_write(dev, B43_PHY_LO_CTL, backup_phy[12]); b43_calc_loopback_gain()
1840 b43_phy_write(dev, B43_PHY_CCK(0x2B), backup_phy[13]); b43_calc_loopback_gain()
1841 b43_phy_write(dev, B43_PHY_PGACTL, backup_phy[14]); b43_calc_loopback_gain()
1843 b43_gphy_set_baseband_attenuation(dev, backup_bband); b43_calc_loopback_gain()
1845 b43_radio_write16(dev, 0x52, backup_radio[0]); b43_calc_loopback_gain()
1846 b43_radio_write16(dev, 0x43, backup_radio[1]); b43_calc_loopback_gain()
1847 b43_radio_write16(dev, 0x7A, backup_radio[2]); b43_calc_loopback_gain()
1849 b43_phy_write(dev, B43_PHY_RFOVER, backup_phy[2] | 0x0003); b43_calc_loopback_gain()
1851 b43_phy_write(dev, B43_PHY_RFOVER, backup_phy[2]); b43_calc_loopback_gain()
1852 b43_phy_write(dev, B43_PHY_RFOVERVAL, backup_phy[3]); b43_calc_loopback_gain()
1853 b43_phy_write(dev, B43_PHY_CRS0, backup_phy[0]); b43_calc_loopback_gain()
1854 b43_phy_write(dev, B43_PHY_CCKBBANDCFG, backup_phy[1]); b43_calc_loopback_gain()
1861 static void b43_hardware_pctl_early_init(struct b43_wldev *dev) b43_hardware_pctl_early_init() argument
1863 struct b43_phy *phy = &dev->phy; b43_hardware_pctl_early_init()
1865 if (!b43_has_hardware_pctl(dev)) { b43_hardware_pctl_early_init()
1866 b43_phy_write(dev, 0x047A, 0xC111); b43_hardware_pctl_early_init()
1870 b43_phy_mask(dev, 0x0036, 0xFEFF); b43_hardware_pctl_early_init()
1871 b43_phy_write(dev, 0x002F, 0x0202); b43_hardware_pctl_early_init()
1872 b43_phy_set(dev, 0x047C, 0x0002); b43_hardware_pctl_early_init()
1873 b43_phy_set(dev, 0x047A, 0xF000); b43_hardware_pctl_early_init()
1875 b43_phy_maskset(dev, 0x047A, 0xFF0F, 0x0010); b43_hardware_pctl_early_init()
1876 b43_phy_set(dev, 0x005D, 0x8000); b43_hardware_pctl_early_init()
1877 b43_phy_maskset(dev, 0x004E, 0xFFC0, 0x0010); b43_hardware_pctl_early_init()
1878 b43_phy_write(dev, 0x002E, 0xC07F); b43_hardware_pctl_early_init()
1879 b43_phy_set(dev, 0x0036, 0x0400); b43_hardware_pctl_early_init()
1881 b43_phy_set(dev, 0x0036, 0x0200); b43_hardware_pctl_early_init()
1882 b43_phy_set(dev, 0x0036, 0x0400); b43_hardware_pctl_early_init()
1883 b43_phy_mask(dev, 0x005D, 0x7FFF); b43_hardware_pctl_early_init()
1884 b43_phy_mask(dev, 0x004F, 0xFFFE); b43_hardware_pctl_early_init()
1885 b43_phy_maskset(dev, 0x004E, 0xFFC0, 0x0010); b43_hardware_pctl_early_init()
1886 b43_phy_write(dev, 0x002E, 0xC07F); b43_hardware_pctl_early_init()
1887 b43_phy_maskset(dev, 0x047A, 0xFF0F, 0x0010); b43_hardware_pctl_early_init()
1892 static void b43_hardware_pctl_init_gphy(struct b43_wldev *dev) b43_hardware_pctl_init_gphy() argument
1894 struct b43_phy *phy = &dev->phy; b43_hardware_pctl_init_gphy()
1897 if (!b43_has_hardware_pctl(dev)) { b43_hardware_pctl_init_gphy()
1899 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_HWPCTL); b43_hardware_pctl_init_gphy()
1903 b43_phy_maskset(dev, 0x0036, 0xFFC0, (gphy->tgt_idle_tssi - gphy->cur_idle_tssi)); b43_hardware_pctl_init_gphy()
1904 b43_phy_maskset(dev, 0x0478, 0xFF00, (gphy->tgt_idle_tssi - gphy->cur_idle_tssi)); b43_hardware_pctl_init_gphy()
1905 b43_gphy_tssi_power_lt_init(dev); b43_hardware_pctl_init_gphy()
1906 b43_gphy_gain_lt_init(dev); b43_hardware_pctl_init_gphy()
1907 b43_phy_mask(dev, 0x0060, 0xFFBF); b43_hardware_pctl_init_gphy()
1908 b43_phy_write(dev, 0x0014, 0x0000); b43_hardware_pctl_init_gphy()
1911 b43_phy_set(dev, 0x0478, 0x0800); b43_hardware_pctl_init_gphy()
1912 b43_phy_mask(dev, 0x0478, 0xFEFF); b43_hardware_pctl_init_gphy()
1913 b43_phy_mask(dev, 0x0801, 0xFFBF); b43_hardware_pctl_init_gphy()
1915 b43_gphy_dc_lt_init(dev, 1); b43_hardware_pctl_init_gphy()
1918 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_HWPCTL); b43_hardware_pctl_init_gphy()
1922 static void b43_phy_init_pctl(struct b43_wldev *dev) b43_phy_init_pctl() argument
1924 struct b43_phy *phy = &dev->phy; b43_phy_init_pctl()
1932 if ((dev->dev->board_vendor == SSB_BOARDVENDOR_BCM) && b43_phy_init_pctl()
1933 (dev->dev->board_type == SSB_BOARD_BU4306)) b43_phy_init_pctl()
1936 b43_phy_write(dev, 0x0028, 0x8018); b43_phy_init_pctl()
1939 b43_write16(dev, B43_MMIO_PHY0, b43_read16(dev, B43_MMIO_PHY0) b43_phy_init_pctl()
1944 b43_hardware_pctl_early_init(dev); b43_phy_init_pctl()
1947 b43_radio_maskset(dev, 0x0076, 0x00F7, 0x0084); b43_phy_init_pctl()
1964 b43_set_txpower_g(dev, &bbatt, &rfatt, 0); b43_phy_init_pctl()
1966 b43_dummy_transmission(dev, false, true); b43_phy_init_pctl()
1967 gphy->cur_idle_tssi = b43_phy_read(dev, B43_PHY_ITSSI); b43_phy_init_pctl()
1971 b43dbg(dev->wl, b43_phy_init_pctl()
1980 b43_radio_mask(dev, 0x0076, 0xFF7B); b43_phy_init_pctl()
1982 b43_set_txpower_g(dev, &old_bbatt, b43_phy_init_pctl()
1986 b43_hardware_pctl_init_gphy(dev); b43_phy_init_pctl()
1987 b43_shm_clear_tssi(dev); b43_phy_init_pctl()
1990 static void b43_phy_initg(struct b43_wldev *dev) b43_phy_initg() argument
1992 struct b43_phy *phy = &dev->phy; b43_phy_initg()
1997 b43_phy_initb5(dev); b43_phy_initg()
1999 b43_phy_initb6(dev); b43_phy_initg()
2002 b43_phy_inita(dev); b43_phy_initg()
2005 b43_phy_write(dev, B43_PHY_ANALOGOVER, 0); b43_phy_initg()
2006 b43_phy_write(dev, B43_PHY_ANALOGOVERVAL, 0); b43_phy_initg()
2009 b43_phy_write(dev, B43_PHY_RFOVER, 0); b43_phy_initg()
2010 b43_phy_write(dev, B43_PHY_PGACTL, 0xC0); b43_phy_initg()
2013 b43_phy_write(dev, B43_PHY_RFOVER, 0x400); b43_phy_initg()
2014 b43_phy_write(dev, B43_PHY_PGACTL, 0xC0); b43_phy_initg()
2017 tmp = b43_phy_read(dev, B43_PHY_VERSION_OFDM); b43_phy_initg()
2020 b43_phy_write(dev, B43_PHY_OFDM(0xC2), 0x1816); b43_phy_initg()
2021 b43_phy_write(dev, B43_PHY_OFDM(0xC3), 0x8006); b43_phy_initg()
2024 b43_phy_maskset(dev, B43_PHY_OFDM(0xCC), 0x00FF, 0x1F00); b43_phy_initg()
2028 b43_phy_write(dev, B43_PHY_OFDM(0x7E), 0x78); b43_phy_initg()
2030 b43_phy_set(dev, B43_PHY_EXTG(0x01), 0x80); b43_phy_initg()
2031 b43_phy_set(dev, B43_PHY_OFDM(0x3E), 0x4); b43_phy_initg()
2034 b43_calc_loopback_gain(dev); b43_phy_initg()
2038 gphy->initval = b43_radio_init2050(dev); b43_phy_initg()
2040 b43_radio_write16(dev, 0x0078, gphy->initval); b43_phy_initg()
2042 b43_lo_g_init(dev); b43_phy_initg()
2044 b43_radio_write16(dev, 0x52, b43_phy_initg()
2045 (b43_radio_read16(dev, 0x52) & 0xFF00) b43_phy_initg()
2049 b43_radio_maskset(dev, 0x52, 0xFFF0, gphy->lo_control->tx_bias); b43_phy_initg()
2052 b43_phy_maskset(dev, B43_PHY_CCK(0x36), 0x0FFF, (gphy->lo_control->tx_bias << 12)); b43_phy_initg()
2054 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL) b43_phy_initg()
2055 b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x8075); b43_phy_initg()
2057 b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x807F); b43_phy_initg()
2059 b43_phy_write(dev, B43_PHY_CCK(0x2F), 0x101); b43_phy_initg()
2061 b43_phy_write(dev, B43_PHY_CCK(0x2F), 0x202); b43_phy_initg()
2063 b43_lo_g_adjust(dev); b43_phy_initg()
2064 b43_phy_write(dev, B43_PHY_LO_MASK, 0x8078); b43_phy_initg()
2067 if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) { b43_phy_initg()
2074 b43_nrssi_hw_update(dev, 0xFFFF); //FIXME? b43_phy_initg()
2075 b43_calc_nrssi_threshold(dev); b43_phy_initg()
2079 b43_calc_nrssi_slope(dev); b43_phy_initg()
2081 b43_calc_nrssi_threshold(dev); b43_phy_initg()
2084 b43_phy_write(dev, B43_PHY_EXTG(0x05), 0x3230); b43_phy_initg()
2085 b43_phy_init_pctl(dev); b43_phy_initg()
2089 if ((dev->dev->chip_id == 0x4306 b43_phy_initg()
2090 && dev->dev->chip_pkg == 2) || 0) { b43_phy_initg()
2091 b43_phy_mask(dev, B43_PHY_CRS0, 0xBFFF); b43_phy_initg()
2092 b43_phy_mask(dev, B43_PHY_OFDM(0xC3), 0x7FFF); b43_phy_initg()
2096 void b43_gphy_channel_switch(struct b43_wldev *dev, b43_gphy_channel_switch() argument
2101 b43_synth_pu_workaround(dev, channel); b43_gphy_channel_switch()
2103 b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel)); b43_gphy_channel_switch()
2106 if (dev->dev->bus_sprom->country_code == b43_gphy_channel_switch()
2108 b43_hf_write(dev, b43_gphy_channel_switch()
2109 b43_hf_read(dev) & ~B43_HF_ACPR); b43_gphy_channel_switch()
2111 b43_hf_write(dev, b43_gphy_channel_switch()
2112 b43_hf_read(dev) | B43_HF_ACPR); b43_gphy_channel_switch()
2113 b43_write16(dev, B43_MMIO_CHANNEL_EXT, b43_gphy_channel_switch()
2114 b43_read16(dev, B43_MMIO_CHANNEL_EXT) b43_gphy_channel_switch()
2117 b43_write16(dev, B43_MMIO_CHANNEL_EXT, b43_gphy_channel_switch()
2118 b43_read16(dev, B43_MMIO_CHANNEL_EXT) b43_gphy_channel_switch()
2123 static void default_baseband_attenuation(struct b43_wldev *dev, default_baseband_attenuation() argument
2126 struct b43_phy *phy = &dev->phy; default_baseband_attenuation()
2134 static void default_radio_attenuation(struct b43_wldev *dev, default_radio_attenuation() argument
2137 struct b43_bus_dev *bdev = dev->dev; default_radio_attenuation()
2138 struct b43_phy *phy = &dev->phy; default_radio_attenuation()
2142 if (dev->dev->board_vendor == SSB_BOARDVENDOR_BCM && default_radio_attenuation()
2143 dev->dev->board_type == SSB_BOARD_BCM4309G) { default_radio_attenuation()
2144 if (dev->dev->board_rev < 0x43) { default_radio_attenuation()
2147 } else if (dev->dev->board_rev < 0x51) { default_radio_attenuation()
2235 static u16 default_tx_control(struct b43_wldev *dev) default_tx_control() argument
2237 struct b43_phy *phy = &dev->phy; default_tx_control()
2250 static u8 b43_gphy_aci_detect(struct b43_wldev *dev, u8 channel) b43_gphy_aci_detect() argument
2252 struct b43_phy *phy = &dev->phy; b43_gphy_aci_detect()
2258 saved = b43_phy_read(dev, 0x0403); b43_gphy_aci_detect()
2259 b43_switch_channel(dev, channel); b43_gphy_aci_detect()
2260 b43_phy_write(dev, 0x0403, (saved & 0xFFF8) | 5); b43_gphy_aci_detect()
2262 rssi = b43_phy_read(dev, 0x048A) & 0x3F; b43_gphy_aci_detect()
2269 temp = (b43_phy_read(dev, 0x047F) >> 8) & 0x3F; b43_gphy_aci_detect()
2277 b43_phy_write(dev, 0x0403, saved); b43_gphy_aci_detect()
2282 static u8 b43_gphy_aci_scan(struct b43_wldev *dev) b43_gphy_aci_scan() argument
2284 struct b43_phy *phy = &dev->phy; b43_gphy_aci_scan()
2292 b43_phy_lock(dev); b43_gphy_aci_scan()
2293 b43_radio_lock(dev); b43_gphy_aci_scan()
2294 b43_phy_mask(dev, 0x0802, 0xFFFC); b43_gphy_aci_scan()
2295 b43_phy_mask(dev, B43_PHY_G_CRS, 0x7FFF); b43_gphy_aci_scan()
2296 b43_set_all_gains(dev, 3, 8, 1); b43_gphy_aci_scan()
2303 ret[i - 1] = b43_gphy_aci_detect(dev, i); b43_gphy_aci_scan()
2305 b43_switch_channel(dev, channel); b43_gphy_aci_scan()
2306 b43_phy_maskset(dev, 0x0802, 0xFFFC, 0x0003); b43_gphy_aci_scan()
2307 b43_phy_mask(dev, 0x0403, 0xFFF8); b43_gphy_aci_scan()
2308 b43_phy_set(dev, B43_PHY_G_CRS, 0x8000); b43_gphy_aci_scan()
2309 b43_set_original_gains(dev); b43_gphy_aci_scan()
2317 b43_radio_unlock(dev); b43_gphy_aci_scan()
2318 b43_phy_unlock(dev); b43_gphy_aci_scan()
2352 u8 *b43_generate_dyn_tssi2dbm_tab(struct b43_wldev *dev, b43_generate_dyn_tssi2dbm_tab() argument
2361 b43err(dev->wl, "Could not allocate memory " b43_generate_dyn_tssi2dbm_tab()
2368 b43err(dev->wl, "Could not generate " b43_generate_dyn_tssi2dbm_tab()
2379 static int b43_gphy_init_tssi2dbm_table(struct b43_wldev *dev) b43_gphy_init_tssi2dbm_table() argument
2381 struct b43_phy *phy = &dev->phy; b43_gphy_init_tssi2dbm_table()
2385 pab0 = (s16) (dev->dev->bus_sprom->pa0b0); b43_gphy_init_tssi2dbm_table()
2386 pab1 = (s16) (dev->dev->bus_sprom->pa0b1); b43_gphy_init_tssi2dbm_table()
2387 pab2 = (s16) (dev->dev->bus_sprom->pa0b2); b43_gphy_init_tssi2dbm_table()
2389 B43_WARN_ON((dev->dev->chip_id == 0x4301) && b43_gphy_init_tssi2dbm_table()
2397 if ((s8) dev->dev->bus_sprom->itssi_bg != 0 && b43_gphy_init_tssi2dbm_table()
2398 (s8) dev->dev->bus_sprom->itssi_bg != -1) { b43_gphy_init_tssi2dbm_table()
2400 (s8) (dev->dev->bus_sprom->itssi_bg); b43_gphy_init_tssi2dbm_table()
2403 gphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0, b43_gphy_init_tssi2dbm_table()
2417 static int b43_gphy_op_allocate(struct b43_wldev *dev) b43_gphy_op_allocate() argument
2428 dev->phy.g = gphy; b43_gphy_op_allocate()
2437 err = b43_gphy_init_tssi2dbm_table(dev); b43_gphy_op_allocate()
2451 static void b43_gphy_op_prepare_structs(struct b43_wldev *dev) b43_gphy_op_prepare_structs() argument
2453 struct b43_phy *phy = &dev->phy; b43_gphy_op_prepare_structs()
2498 static void b43_gphy_op_free(struct b43_wldev *dev) b43_gphy_op_free() argument
2500 struct b43_phy *phy = &dev->phy; b43_gphy_op_free()
2511 dev->phy.g = NULL; b43_gphy_op_free()
2514 static int b43_gphy_op_prepare_hardware(struct b43_wldev *dev) b43_gphy_op_prepare_hardware() argument
2516 struct b43_phy *phy = &dev->phy; b43_gphy_op_prepare_hardware()
2522 default_baseband_attenuation(dev, &gphy->bbatt); b43_gphy_op_prepare_hardware()
2523 default_radio_attenuation(dev, &gphy->rfatt); b43_gphy_op_prepare_hardware()
2524 gphy->tx_control = (default_tx_control(dev) << 4); b43_gphy_op_prepare_hardware()
2525 generate_rfatt_list(dev, &lo->rfatt_list); b43_gphy_op_prepare_hardware()
2526 generate_bbatt_list(dev, &lo->bbatt_list); b43_gphy_op_prepare_hardware()
2529 b43_read32(dev, B43_MMIO_MACCTL); b43_gphy_op_prepare_hardware()
2535 b43_wireless_core_reset(dev, 0); b43_gphy_op_prepare_hardware()
2536 b43_phy_initg(dev); b43_gphy_op_prepare_hardware()
2538 b43_wireless_core_reset(dev, 1); b43_gphy_op_prepare_hardware()
2544 static int b43_gphy_op_init(struct b43_wldev *dev) b43_gphy_op_init() argument
2546 b43_phy_initg(dev); b43_gphy_op_init()
2551 static void b43_gphy_op_exit(struct b43_wldev *dev) b43_gphy_op_exit() argument
2553 b43_lo_g_cleanup(dev); b43_gphy_op_exit()
2556 static u16 b43_gphy_op_read(struct b43_wldev *dev, u16 reg) b43_gphy_op_read() argument
2558 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_gphy_op_read()
2559 return b43_read16(dev, B43_MMIO_PHY_DATA); b43_gphy_op_read()
2562 static void b43_gphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) b43_gphy_op_write() argument
2564 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_gphy_op_write()
2565 b43_write16(dev, B43_MMIO_PHY_DATA, value); b43_gphy_op_write()
2568 static u16 b43_gphy_op_radio_read(struct b43_wldev *dev, u16 reg) b43_gphy_op_radio_read() argument
2575 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_gphy_op_radio_read()
2576 return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); b43_gphy_op_radio_read()
2579 static void b43_gphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) b43_gphy_op_radio_write() argument
2584 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_gphy_op_radio_write()
2585 b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); b43_gphy_op_radio_write()
2588 static bool b43_gphy_op_supports_hwpctl(struct b43_wldev *dev) b43_gphy_op_supports_hwpctl() argument
2590 return (dev->phy.rev >= 6); b43_gphy_op_supports_hwpctl()
2593 static void b43_gphy_op_software_rfkill(struct b43_wldev *dev, b43_gphy_op_software_rfkill() argument
2596 struct b43_phy *phy = &dev->phy; b43_gphy_op_software_rfkill()
2607 b43_phy_write(dev, 0x0015, 0x8000); b43_gphy_op_software_rfkill()
2608 b43_phy_write(dev, 0x0015, 0xCC00); b43_gphy_op_software_rfkill()
2609 b43_phy_write(dev, 0x0015, (phy->gmode ? 0x00C0 : 0x0000)); b43_gphy_op_software_rfkill()
2612 b43_phy_write(dev, B43_PHY_RFOVER, b43_gphy_op_software_rfkill()
2614 b43_phy_write(dev, B43_PHY_RFOVERVAL, b43_gphy_op_software_rfkill()
2619 b43_gphy_channel_switch(dev, 6, 1); b43_gphy_op_software_rfkill()
2620 b43_gphy_channel_switch(dev, channel, 0); b43_gphy_op_software_rfkill()
2625 rfover = b43_phy_read(dev, B43_PHY_RFOVER); b43_gphy_op_software_rfkill()
2626 rfoverval = b43_phy_read(dev, B43_PHY_RFOVERVAL); b43_gphy_op_software_rfkill()
2630 b43_phy_write(dev, B43_PHY_RFOVER, rfover | 0x008C); b43_gphy_op_software_rfkill()
2631 b43_phy_write(dev, B43_PHY_RFOVERVAL, rfoverval & 0xFF73); b43_gphy_op_software_rfkill()
2635 static int b43_gphy_op_switch_channel(struct b43_wldev *dev, b43_gphy_op_switch_channel() argument
2640 b43_gphy_channel_switch(dev, new_channel, 0); b43_gphy_op_switch_channel()
2645 static unsigned int b43_gphy_op_get_default_chan(struct b43_wldev *dev) b43_gphy_op_get_default_chan() argument
2650 static void b43_gphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) b43_gphy_op_set_rx_antenna() argument
2652 struct b43_phy *phy = &dev->phy; b43_gphy_op_set_rx_antenna()
2659 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_ANTDIVHELP); b43_gphy_op_set_rx_antenna()
2661 b43_phy_maskset(dev, B43_PHY_BBANDCFG, ~B43_PHY_BBANDCFG_RXANT, b43_gphy_op_set_rx_antenna()
2666 tmp = b43_phy_read(dev, B43_PHY_ANTDWELL); b43_gphy_op_set_rx_antenna()
2671 b43_phy_write(dev, B43_PHY_ANTDWELL, tmp); b43_gphy_op_set_rx_antenna()
2674 tmp = b43_phy_read(dev, B43_PHY_ANTWRSETT); b43_gphy_op_set_rx_antenna()
2679 b43_phy_write(dev, B43_PHY_ANTWRSETT, tmp); b43_gphy_op_set_rx_antenna()
2682 b43_phy_set(dev, B43_PHY_ANTWRSETT, B43_PHY_ANTWRSETT_ARXDIV); b43_gphy_op_set_rx_antenna()
2684 b43_phy_mask(dev, B43_PHY_ANTWRSETT, b43_gphy_op_set_rx_antenna()
2689 b43_phy_set(dev, B43_PHY_OFDM61, B43_PHY_OFDM61_10); b43_gphy_op_set_rx_antenna()
2690 b43_phy_maskset(dev, B43_PHY_DIVSRCHGAINBACK, 0xFF00, 0x15); b43_gphy_op_set_rx_antenna()
2693 b43_phy_write(dev, B43_PHY_ADIVRELATED, 8); b43_gphy_op_set_rx_antenna()
2695 b43_phy_maskset(dev, B43_PHY_ADIVRELATED, 0xFF00, 8); b43_gphy_op_set_rx_antenna()
2698 b43_phy_write(dev, B43_PHY_OFDM9B, 0xDC); b43_gphy_op_set_rx_antenna()
2700 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_ANTDIVHELP); b43_gphy_op_set_rx_antenna()
2703 static int b43_gphy_op_interf_mitigation(struct b43_wldev *dev, b43_gphy_op_interf_mitigation() argument
2706 struct b43_phy *phy = &dev->phy; b43_gphy_op_interf_mitigation()
2735 b43_radio_interference_mitigation_disable(dev, currentmode); b43_gphy_op_interf_mitigation()
2741 b43_radio_interference_mitigation_enable(dev, mode); b43_gphy_op_interf_mitigation()
2750 static s8 b43_gphy_estimate_power_out(struct b43_wldev *dev, s8 tssi) b43_gphy_estimate_power_out() argument
2752 struct b43_phy_g *gphy = dev->phy.g; b43_gphy_estimate_power_out()
2763 static void b43_put_attenuation_into_ranges(struct b43_wldev *dev, b43_put_attenuation_into_ranges() argument
2768 struct b43_txpower_lo_control *lo = dev->phy.g->lo_control; b43_put_attenuation_into_ranges()
2816 static void b43_gphy_op_adjust_txpower(struct b43_wldev *dev) b43_gphy_op_adjust_txpower() argument
2818 struct b43_phy *phy = &dev->phy; b43_gphy_op_adjust_txpower()
2823 b43_mac_suspend(dev); b43_gphy_op_adjust_txpower()
2831 b43_put_attenuation_into_ranges(dev, &bbatt, &rfatt); b43_gphy_op_adjust_txpower()
2841 } else if (dev->dev->bus_sprom-> b43_gphy_op_adjust_txpower()
2860 b43_put_attenuation_into_ranges(dev, &bbatt, &rfatt); b43_gphy_op_adjust_txpower()
2864 if (b43_debug(dev, B43_DBG_XMITPOWER)) b43_gphy_op_adjust_txpower()
2865 b43dbg(dev->wl, "Adjusting TX power\n"); b43_gphy_op_adjust_txpower()
2868 b43_phy_lock(dev); b43_gphy_op_adjust_txpower()
2869 b43_radio_lock(dev); b43_gphy_op_adjust_txpower()
2870 b43_set_txpower_g(dev, &gphy->bbatt, &gphy->rfatt, b43_gphy_op_adjust_txpower()
2872 b43_radio_unlock(dev); b43_gphy_op_adjust_txpower()
2873 b43_phy_unlock(dev); b43_gphy_op_adjust_txpower()
2875 b43_mac_enable(dev); b43_gphy_op_adjust_txpower()
2878 static enum b43_txpwr_result b43_gphy_op_recalc_txpower(struct b43_wldev *dev, b43_gphy_op_recalc_txpower() argument
2881 struct b43_phy *phy = &dev->phy; b43_gphy_op_recalc_txpower()
2890 cck_result = b43_phy_shm_tssi_read(dev, B43_SHM_SH_TSSI_CCK); b43_gphy_op_recalc_txpower()
2891 ofdm_result = b43_phy_shm_tssi_read(dev, B43_SHM_SH_TSSI_OFDM_G); b43_gphy_op_recalc_txpower()
2912 estimated_pwr = b43_gphy_estimate_power_out(dev, average_tssi); b43_gphy_op_recalc_txpower()
2915 max_pwr = dev->dev->bus_sprom->maxpwr_bg; b43_gphy_op_recalc_txpower()
2916 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL) b43_gphy_op_recalc_txpower()
2919 b43warn(dev->wl, b43_gphy_op_recalc_txpower()
2922 dev->dev->bus_sprom->maxpwr_bg = max_pwr; b43_gphy_op_recalc_txpower()
2932 if (b43_debug(dev, B43_DBG_XMITPOWER)) { b43_gphy_op_recalc_txpower()
2933 b43dbg(dev->wl, b43_gphy_op_recalc_txpower()
2961 if (b43_debug(dev, B43_DBG_XMITPOWER)) { b43_gphy_op_recalc_txpower()
2963 b43dbg(dev->wl, b43_gphy_op_recalc_txpower()
2986 static void b43_gphy_op_pwork_15sec(struct b43_wldev *dev) b43_gphy_op_pwork_15sec() argument
2988 struct b43_phy *phy = &dev->phy; b43_gphy_op_pwork_15sec()
2991 b43_mac_suspend(dev); b43_gphy_op_pwork_15sec()
2996 phy->ops->interf_mitigation(dev, b43_gphy_op_pwork_15sec()
3000 if (/*(aci_average > 1000) &&*/ !b43_gphy_aci_scan(dev)) b43_gphy_op_pwork_15sec()
3001 phy->ops->interf_mitigation(dev, B43_INTERFMODE_NONE); b43_gphy_op_pwork_15sec()
3007 b43_lo_g_maintenance_work(dev); b43_gphy_op_pwork_15sec()
3008 b43_mac_enable(dev); b43_gphy_op_pwork_15sec()
3011 static void b43_gphy_op_pwork_60sec(struct b43_wldev *dev) b43_gphy_op_pwork_60sec() argument
3013 struct b43_phy *phy = &dev->phy; b43_gphy_op_pwork_60sec()
3015 if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) b43_gphy_op_pwork_60sec()
3018 b43_mac_suspend(dev); b43_gphy_op_pwork_60sec()
3019 b43_calc_nrssi_slope(dev); b43_gphy_op_pwork_60sec()
3025 b43_switch_channel(dev, 1); b43_gphy_op_pwork_60sec()
3027 b43_switch_channel(dev, 13); b43_gphy_op_pwork_60sec()
3028 b43_switch_channel(dev, old_chan); b43_gphy_op_pwork_60sec()
3030 b43_mac_enable(dev); b43_gphy_op_pwork_60sec()
H A Dphy_lp.c47 static unsigned int b43_lpphy_op_get_default_chan(struct b43_wldev *dev) b43_lpphy_op_get_default_chan() argument
49 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) b43_lpphy_op_get_default_chan()
54 static int b43_lpphy_op_allocate(struct b43_wldev *dev) b43_lpphy_op_allocate() argument
61 dev->phy.lp = lpphy; b43_lpphy_op_allocate()
66 static void b43_lpphy_op_prepare_structs(struct b43_wldev *dev) b43_lpphy_op_prepare_structs() argument
68 struct b43_phy *phy = &dev->phy; b43_lpphy_op_prepare_structs()
77 static void b43_lpphy_op_free(struct b43_wldev *dev) b43_lpphy_op_free() argument
79 struct b43_phy_lp *lpphy = dev->phy.lp; b43_lpphy_op_free()
82 dev->phy.lp = NULL; b43_lpphy_op_free()
86 static void lpphy_read_band_sprom(struct b43_wldev *dev) lpphy_read_band_sprom() argument
88 struct ssb_sprom *sprom = dev->dev->bus_sprom; lpphy_read_band_sprom()
89 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_read_band_sprom()
94 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_read_band_sprom()
169 static void lpphy_adjust_gain_table(struct b43_wldev *dev, u32 freq) lpphy_adjust_gain_table() argument
171 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_adjust_gain_table()
175 B43_WARN_ON(dev->phy.rev >= 2); lpphy_adjust_gain_table()
177 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) lpphy_adjust_gain_table()
190 b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), 3, temp); lpphy_adjust_gain_table()
191 b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), 3, temp); lpphy_adjust_gain_table()
194 static void lpphy_table_init(struct b43_wldev *dev) lpphy_table_init() argument
196 u32 freq = channel2freq_lp(b43_lpphy_op_get_default_chan(dev)); lpphy_table_init()
198 if (dev->phy.rev < 2) lpphy_table_init()
199 lpphy_rev0_1_table_init(dev); lpphy_table_init()
201 lpphy_rev2plus_table_init(dev); lpphy_table_init()
203 lpphy_init_tx_gain_table(dev); lpphy_table_init()
205 if (dev->phy.rev < 2) lpphy_table_init()
206 lpphy_adjust_gain_table(dev, freq); lpphy_table_init()
209 static void lpphy_baseband_rev0_1_init(struct b43_wldev *dev) lpphy_baseband_rev0_1_init() argument
211 struct ssb_bus *bus = dev->dev->sdev->bus; lpphy_baseband_rev0_1_init()
212 struct ssb_sprom *sprom = dev->dev->bus_sprom; lpphy_baseband_rev0_1_init()
213 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_baseband_rev0_1_init()
216 b43_phy_mask(dev, B43_LPPHY_AFE_DAC_CTL, 0xF7FF); lpphy_baseband_rev0_1_init()
217 b43_phy_write(dev, B43_LPPHY_AFE_CTL, 0); lpphy_baseband_rev0_1_init()
218 b43_phy_write(dev, B43_LPPHY_AFE_CTL_OVR, 0); lpphy_baseband_rev0_1_init()
219 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_0, 0); lpphy_baseband_rev0_1_init()
220 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_2, 0); lpphy_baseband_rev0_1_init()
221 b43_phy_set(dev, B43_LPPHY_AFE_DAC_CTL, 0x0004); lpphy_baseband_rev0_1_init()
222 b43_phy_maskset(dev, B43_LPPHY_OFDMSYNCTHRESH0, 0xFF00, 0x0078); lpphy_baseband_rev0_1_init()
223 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0x83FF, 0x5800); lpphy_baseband_rev0_1_init()
224 b43_phy_write(dev, B43_LPPHY_ADC_COMPENSATION_CTL, 0x0016); lpphy_baseband_rev0_1_init()
225 b43_phy_maskset(dev, B43_LPPHY_AFE_ADC_CTL_0, 0xFFF8, 0x0004); lpphy_baseband_rev0_1_init()
226 b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0x00FF, 0x5400); lpphy_baseband_rev0_1_init()
227 b43_phy_maskset(dev, B43_LPPHY_HIGAINDB, 0x00FF, 0x2400); lpphy_baseband_rev0_1_init()
228 b43_phy_maskset(dev, B43_LPPHY_LOWGAINDB, 0x00FF, 0x2100); lpphy_baseband_rev0_1_init()
229 b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0xFF00, 0x0006); lpphy_baseband_rev0_1_init()
230 b43_phy_mask(dev, B43_LPPHY_RX_RADIO_CTL, 0xFFFE); lpphy_baseband_rev0_1_init()
231 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFFE0, 0x0005); lpphy_baseband_rev0_1_init()
232 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFC1F, 0x0180); lpphy_baseband_rev0_1_init()
233 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0x83FF, 0x3C00); lpphy_baseband_rev0_1_init()
234 b43_phy_maskset(dev, B43_LPPHY_GAINDIRECTMISMATCH, 0xFFF0, 0x0005); lpphy_baseband_rev0_1_init()
235 b43_phy_maskset(dev, B43_LPPHY_GAIN_MISMATCH_LIMIT, 0xFFC0, 0x001A); lpphy_baseband_rev0_1_init()
236 b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0xFF00, 0x00B3); lpphy_baseband_rev0_1_init()
237 b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0x00FF, 0xAD00); lpphy_baseband_rev0_1_init()
238 b43_phy_maskset(dev, B43_LPPHY_INPUT_PWRDB, lpphy_baseband_rev0_1_init()
241 ((b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) || lpphy_baseband_rev0_1_init()
245 if (dev->phy.rev == 0) { lpphy_baseband_rev0_1_init()
246 b43_phy_maskset(dev, B43_LPPHY_LP_RF_SIGNAL_LUT, lpphy_baseband_rev0_1_init()
249 b43_lptab_write(dev, B43_LPTAB16(11, 7), 60); lpphy_baseband_rev0_1_init()
252 b43_phy_maskset(dev, B43_LPPHY_LP_RF_SIGNAL_LUT, lpphy_baseband_rev0_1_init()
254 b43_lptab_write(dev, B43_LPTAB16(11, 7), 100); lpphy_baseband_rev0_1_init()
257 b43_phy_write(dev, B43_LPPHY_AFE_RSSI_CTL_0, tmp); lpphy_baseband_rev0_1_init()
259 b43_phy_maskset(dev, B43_LPPHY_AFE_RSSI_CTL_1, 0xF000, 0x0AAA); lpphy_baseband_rev0_1_init()
261 b43_phy_maskset(dev, B43_LPPHY_AFE_RSSI_CTL_1, 0xF000, 0x02AA); lpphy_baseband_rev0_1_init()
262 b43_lptab_write(dev, B43_LPTAB16(11, 1), 24); lpphy_baseband_rev0_1_init()
263 b43_phy_maskset(dev, B43_LPPHY_RX_RADIO_CTL, lpphy_baseband_rev0_1_init()
265 if (dev->phy.rev == 1 && lpphy_baseband_rev0_1_init()
267 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
268 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0x3F00, 0x0900); lpphy_baseband_rev0_1_init()
269 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
270 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xC0FF, 0x0B00); lpphy_baseband_rev0_1_init()
271 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
272 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xC0FF, 0x0400); lpphy_baseband_rev0_1_init()
273 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
274 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xC0FF, 0x0B00); lpphy_baseband_rev0_1_init()
275 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_5, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
276 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_5, 0xC0FF, 0x0900); lpphy_baseband_rev0_1_init()
277 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_6, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
278 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_6, 0xC0FF, 0x0B00); lpphy_baseband_rev0_1_init()
279 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_7, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
280 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_7, 0xC0FF, 0x0900); lpphy_baseband_rev0_1_init()
281 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_8, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
282 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_8, 0xC0FF, 0x0B00); lpphy_baseband_rev0_1_init()
283 } else if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ || lpphy_baseband_rev0_1_init()
284 (dev->dev->board_type == SSB_BOARD_BU4312) || lpphy_baseband_rev0_1_init()
285 (dev->phy.rev == 0 && (sprom->boardflags_lo & B43_BFL_FEM))) { lpphy_baseband_rev0_1_init()
286 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xFFC0, 0x0001); lpphy_baseband_rev0_1_init()
287 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xC0FF, 0x0400); lpphy_baseband_rev0_1_init()
288 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xFFC0, 0x0001); lpphy_baseband_rev0_1_init()
289 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xC0FF, 0x0500); lpphy_baseband_rev0_1_init()
290 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xFFC0, 0x0002); lpphy_baseband_rev0_1_init()
291 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xC0FF, 0x0800); lpphy_baseband_rev0_1_init()
292 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xFFC0, 0x0002); lpphy_baseband_rev0_1_init()
293 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xC0FF, 0x0A00); lpphy_baseband_rev0_1_init()
294 } else if (dev->phy.rev == 1 || lpphy_baseband_rev0_1_init()
296 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xFFC0, 0x0004); lpphy_baseband_rev0_1_init()
297 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xC0FF, 0x0800); lpphy_baseband_rev0_1_init()
298 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xFFC0, 0x0004); lpphy_baseband_rev0_1_init()
299 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xC0FF, 0x0C00); lpphy_baseband_rev0_1_init()
300 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xFFC0, 0x0002); lpphy_baseband_rev0_1_init()
301 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xC0FF, 0x0100); lpphy_baseband_rev0_1_init()
302 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xFFC0, 0x0002); lpphy_baseband_rev0_1_init()
303 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xC0FF, 0x0300); lpphy_baseband_rev0_1_init()
305 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
306 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_1, 0xC0FF, 0x0900); lpphy_baseband_rev0_1_init()
307 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xFFC0, 0x000A); lpphy_baseband_rev0_1_init()
308 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_2, 0xC0FF, 0x0B00); lpphy_baseband_rev0_1_init()
309 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xFFC0, 0x0006); lpphy_baseband_rev0_1_init()
310 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_3, 0xC0FF, 0x0500); lpphy_baseband_rev0_1_init()
311 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xFFC0, 0x0006); lpphy_baseband_rev0_1_init()
312 b43_phy_maskset(dev, B43_LPPHY_TR_LOOKUP_4, 0xC0FF, 0x0700); lpphy_baseband_rev0_1_init()
314 if (dev->phy.rev == 1 && (sprom->boardflags_hi & B43_BFH_PAREF)) { lpphy_baseband_rev0_1_init()
315 b43_phy_copy(dev, B43_LPPHY_TR_LOOKUP_5, B43_LPPHY_TR_LOOKUP_1); lpphy_baseband_rev0_1_init()
316 b43_phy_copy(dev, B43_LPPHY_TR_LOOKUP_6, B43_LPPHY_TR_LOOKUP_2); lpphy_baseband_rev0_1_init()
317 b43_phy_copy(dev, B43_LPPHY_TR_LOOKUP_7, B43_LPPHY_TR_LOOKUP_3); lpphy_baseband_rev0_1_init()
318 b43_phy_copy(dev, B43_LPPHY_TR_LOOKUP_8, B43_LPPHY_TR_LOOKUP_4); lpphy_baseband_rev0_1_init()
321 (dev->dev->chip_id == 0x5354) && lpphy_baseband_rev0_1_init()
322 (dev->dev->chip_pkg == SSB_CHIPPACK_BCM4712S)) { lpphy_baseband_rev0_1_init()
323 b43_phy_set(dev, B43_LPPHY_CRSGAIN_CTL, 0x0006); lpphy_baseband_rev0_1_init()
324 b43_phy_write(dev, B43_LPPHY_GPIO_SELECT, 0x0005); lpphy_baseband_rev0_1_init()
325 b43_phy_write(dev, B43_LPPHY_GPIO_OUTEN, 0xFFFF); lpphy_baseband_rev0_1_init()
327 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_PR45960W); lpphy_baseband_rev0_1_init()
329 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_baseband_rev0_1_init()
330 b43_phy_set(dev, B43_LPPHY_LP_PHY_CTL, 0x8000); lpphy_baseband_rev0_1_init()
331 b43_phy_set(dev, B43_LPPHY_CRSGAIN_CTL, 0x0040); lpphy_baseband_rev0_1_init()
332 b43_phy_maskset(dev, B43_LPPHY_MINPWR_LEVEL, 0x00FF, 0xA400); lpphy_baseband_rev0_1_init()
333 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xF0FF, 0x0B00); lpphy_baseband_rev0_1_init()
334 b43_phy_maskset(dev, B43_LPPHY_SYNCPEAKCNT, 0xFFF8, 0x0007); lpphy_baseband_rev0_1_init()
335 b43_phy_maskset(dev, B43_LPPHY_DSSS_CONFIRM_CNT, 0xFFF8, 0x0003); lpphy_baseband_rev0_1_init()
336 b43_phy_maskset(dev, B43_LPPHY_DSSS_CONFIRM_CNT, 0xFFC7, 0x0020); lpphy_baseband_rev0_1_init()
337 b43_phy_mask(dev, B43_LPPHY_IDLEAFTERPKTRXTO, 0x00FF); lpphy_baseband_rev0_1_init()
339 b43_phy_mask(dev, B43_LPPHY_LP_PHY_CTL, 0x7FFF); lpphy_baseband_rev0_1_init()
340 b43_phy_mask(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFBF); lpphy_baseband_rev0_1_init()
342 if (dev->phy.rev == 1) { lpphy_baseband_rev0_1_init()
343 tmp = b43_phy_read(dev, B43_LPPHY_CLIPCTRTHRESH); lpphy_baseband_rev0_1_init()
346 b43_phy_write(dev, B43_LPPHY_4C3, tmp2); lpphy_baseband_rev0_1_init()
347 tmp = b43_phy_read(dev, B43_LPPHY_GAINDIRECTMISMATCH); lpphy_baseband_rev0_1_init()
350 b43_phy_write(dev, B43_LPPHY_4C4, tmp2); lpphy_baseband_rev0_1_init()
351 tmp = b43_phy_read(dev, B43_LPPHY_VERYLOWGAINDB); lpphy_baseband_rev0_1_init()
354 b43_phy_write(dev, B43_LPPHY_4C5, tmp2); lpphy_baseband_rev0_1_init()
358 static void lpphy_save_dig_flt_state(struct b43_wldev *dev) lpphy_save_dig_flt_state() argument
378 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_save_dig_flt_state()
382 lpphy->dig_flt_state[i] = b43_phy_read(dev, addr[i]); lpphy_save_dig_flt_state()
383 b43_phy_write(dev, addr[i], coefs[i]); lpphy_save_dig_flt_state()
387 static void lpphy_restore_dig_flt_state(struct b43_wldev *dev) lpphy_restore_dig_flt_state() argument
401 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_restore_dig_flt_state()
405 b43_phy_write(dev, addr[i], lpphy->dig_flt_state[i]); lpphy_restore_dig_flt_state()
408 static void lpphy_baseband_rev2plus_init(struct b43_wldev *dev) lpphy_baseband_rev2plus_init() argument
410 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_baseband_rev2plus_init()
412 b43_phy_write(dev, B43_LPPHY_AFE_DAC_CTL, 0x50); lpphy_baseband_rev2plus_init()
413 b43_phy_write(dev, B43_LPPHY_AFE_CTL, 0x8800); lpphy_baseband_rev2plus_init()
414 b43_phy_write(dev, B43_LPPHY_AFE_CTL_OVR, 0); lpphy_baseband_rev2plus_init()
415 b43_phy_write(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0); lpphy_baseband_rev2plus_init()
416 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_0, 0); lpphy_baseband_rev2plus_init()
417 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_2, 0); lpphy_baseband_rev2plus_init()
418 b43_phy_write(dev, B43_PHY_OFDM(0xF9), 0); lpphy_baseband_rev2plus_init()
419 b43_phy_write(dev, B43_LPPHY_TR_LOOKUP_1, 0); lpphy_baseband_rev2plus_init()
420 b43_phy_set(dev, B43_LPPHY_ADC_COMPENSATION_CTL, 0x10); lpphy_baseband_rev2plus_init()
421 b43_phy_maskset(dev, B43_LPPHY_OFDMSYNCTHRESH0, 0xFF00, 0xB4); lpphy_baseband_rev2plus_init()
422 b43_phy_maskset(dev, B43_LPPHY_DCOFFSETTRANSIENT, 0xF8FF, 0x200); lpphy_baseband_rev2plus_init()
423 b43_phy_maskset(dev, B43_LPPHY_DCOFFSETTRANSIENT, 0xFF00, 0x7F); lpphy_baseband_rev2plus_init()
424 b43_phy_maskset(dev, B43_LPPHY_GAINDIRECTMISMATCH, 0xFF0F, 0x40); lpphy_baseband_rev2plus_init()
425 b43_phy_maskset(dev, B43_LPPHY_PREAMBLECONFIRMTO, 0xFF00, 0x2); lpphy_baseband_rev2plus_init()
426 b43_phy_mask(dev, B43_LPPHY_CRSGAIN_CTL, ~0x4000); lpphy_baseband_rev2plus_init()
427 b43_phy_mask(dev, B43_LPPHY_CRSGAIN_CTL, ~0x2000); lpphy_baseband_rev2plus_init()
428 b43_phy_set(dev, B43_PHY_OFDM(0x10A), 0x1); lpphy_baseband_rev2plus_init()
429 if (dev->dev->board_rev >= 0x18) { lpphy_baseband_rev2plus_init()
430 b43_lptab_write(dev, B43_LPTAB32(17, 65), 0xEC); lpphy_baseband_rev2plus_init()
431 b43_phy_maskset(dev, B43_PHY_OFDM(0x10A), 0xFF01, 0x14); lpphy_baseband_rev2plus_init()
433 b43_phy_maskset(dev, B43_PHY_OFDM(0x10A), 0xFF01, 0x10); lpphy_baseband_rev2plus_init()
435 b43_phy_maskset(dev, B43_PHY_OFDM(0xDF), 0xFF00, 0xF4); lpphy_baseband_rev2plus_init()
436 b43_phy_maskset(dev, B43_PHY_OFDM(0xDF), 0x00FF, 0xF100); lpphy_baseband_rev2plus_init()
437 b43_phy_write(dev, B43_LPPHY_CLIPTHRESH, 0x48); lpphy_baseband_rev2plus_init()
438 b43_phy_maskset(dev, B43_LPPHY_HIGAINDB, 0xFF00, 0x46); lpphy_baseband_rev2plus_init()
439 b43_phy_maskset(dev, B43_PHY_OFDM(0xE4), 0xFF00, 0x10); lpphy_baseband_rev2plus_init()
440 b43_phy_maskset(dev, B43_LPPHY_PWR_THRESH1, 0xFFF0, 0x9); lpphy_baseband_rev2plus_init()
441 b43_phy_mask(dev, B43_LPPHY_GAINDIRECTMISMATCH, ~0xF); lpphy_baseband_rev2plus_init()
442 b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0x00FF, 0x5500); lpphy_baseband_rev2plus_init()
443 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFC1F, 0xA0); lpphy_baseband_rev2plus_init()
444 b43_phy_maskset(dev, B43_LPPHY_GAINDIRECTMISMATCH, 0xE0FF, 0x300); lpphy_baseband_rev2plus_init()
445 b43_phy_maskset(dev, B43_LPPHY_HIGAINDB, 0x00FF, 0x2A00); lpphy_baseband_rev2plus_init()
446 if ((dev->dev->chip_id == 0x4325) && (dev->dev->chip_rev == 0)) { lpphy_baseband_rev2plus_init()
447 b43_phy_maskset(dev, B43_LPPHY_LOWGAINDB, 0x00FF, 0x2100); lpphy_baseband_rev2plus_init()
448 b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0xFF00, 0xA); lpphy_baseband_rev2plus_init()
450 b43_phy_maskset(dev, B43_LPPHY_LOWGAINDB, 0x00FF, 0x1E00); lpphy_baseband_rev2plus_init()
451 b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0xFF00, 0xD); lpphy_baseband_rev2plus_init()
453 b43_phy_maskset(dev, B43_PHY_OFDM(0xFE), 0xFFE0, 0x1F); lpphy_baseband_rev2plus_init()
454 b43_phy_maskset(dev, B43_PHY_OFDM(0xFF), 0xFFE0, 0xC); lpphy_baseband_rev2plus_init()
455 b43_phy_maskset(dev, B43_PHY_OFDM(0x100), 0xFF00, 0x19); lpphy_baseband_rev2plus_init()
456 b43_phy_maskset(dev, B43_PHY_OFDM(0xFF), 0x03FF, 0x3C00); lpphy_baseband_rev2plus_init()
457 b43_phy_maskset(dev, B43_PHY_OFDM(0xFE), 0xFC1F, 0x3E0); lpphy_baseband_rev2plus_init()
458 b43_phy_maskset(dev, B43_PHY_OFDM(0xFF), 0xFFE0, 0xC); lpphy_baseband_rev2plus_init()
459 b43_phy_maskset(dev, B43_PHY_OFDM(0x100), 0x00FF, 0x1900); lpphy_baseband_rev2plus_init()
460 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0x83FF, 0x5800); lpphy_baseband_rev2plus_init()
461 b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFFE0, 0x12); lpphy_baseband_rev2plus_init()
462 b43_phy_maskset(dev, B43_LPPHY_GAINMISMATCH, 0x0FFF, 0x9000); lpphy_baseband_rev2plus_init()
464 if ((dev->dev->chip_id == 0x4325) && (dev->dev->chip_rev == 0)) { lpphy_baseband_rev2plus_init()
465 b43_lptab_write(dev, B43_LPTAB16(0x08, 0x14), 0); lpphy_baseband_rev2plus_init()
466 b43_lptab_write(dev, B43_LPTAB16(0x08, 0x12), 0x40); lpphy_baseband_rev2plus_init()
469 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_baseband_rev2plus_init()
470 b43_phy_set(dev, B43_LPPHY_CRSGAIN_CTL, 0x40); lpphy_baseband_rev2plus_init()
471 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xF0FF, 0xB00); lpphy_baseband_rev2plus_init()
472 b43_phy_maskset(dev, B43_LPPHY_SYNCPEAKCNT, 0xFFF8, 0x6); lpphy_baseband_rev2plus_init()
473 b43_phy_maskset(dev, B43_LPPHY_MINPWR_LEVEL, 0x00FF, 0x9D00); lpphy_baseband_rev2plus_init()
474 b43_phy_maskset(dev, B43_LPPHY_MINPWR_LEVEL, 0xFF00, 0xA1); lpphy_baseband_rev2plus_init()
475 b43_phy_mask(dev, B43_LPPHY_IDLEAFTERPKTRXTO, 0x00FF); lpphy_baseband_rev2plus_init()
477 b43_phy_mask(dev, B43_LPPHY_CRSGAIN_CTL, ~0x40); lpphy_baseband_rev2plus_init()
479 b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0xFF00, 0xB3); lpphy_baseband_rev2plus_init()
480 b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0x00FF, 0xAD00); lpphy_baseband_rev2plus_init()
481 b43_phy_maskset(dev, B43_LPPHY_INPUT_PWRDB, 0xFF00, lpphy->rx_pwr_offset); lpphy_baseband_rev2plus_init()
482 b43_phy_set(dev, B43_LPPHY_RESET_CTL, 0x44); lpphy_baseband_rev2plus_init()
483 b43_phy_write(dev, B43_LPPHY_RESET_CTL, 0x80); lpphy_baseband_rev2plus_init()
484 b43_phy_write(dev, B43_LPPHY_AFE_RSSI_CTL_0, 0xA954); lpphy_baseband_rev2plus_init()
485 b43_phy_write(dev, B43_LPPHY_AFE_RSSI_CTL_1, lpphy_baseband_rev2plus_init()
489 if ((dev->dev->chip_id == 0x4325) && (dev->dev->chip_rev == 0)) { lpphy_baseband_rev2plus_init()
490 b43_phy_set(dev, B43_LPPHY_AFE_ADC_CTL_0, 0x1C); lpphy_baseband_rev2plus_init()
491 b43_phy_maskset(dev, B43_LPPHY_AFE_CTL, 0x00FF, 0x8800); lpphy_baseband_rev2plus_init()
492 b43_phy_maskset(dev, B43_LPPHY_AFE_ADC_CTL_1, 0xFC3C, 0x0400); lpphy_baseband_rev2plus_init()
495 lpphy_save_dig_flt_state(dev); lpphy_baseband_rev2plus_init()
498 static void lpphy_baseband_init(struct b43_wldev *dev) lpphy_baseband_init() argument
500 lpphy_table_init(dev); lpphy_baseband_init()
501 if (dev->phy.rev >= 2) lpphy_baseband_init()
502 lpphy_baseband_rev2plus_init(dev); lpphy_baseband_init()
504 lpphy_baseband_rev0_1_init(dev); lpphy_baseband_init()
513 static void lpphy_2062_init(struct b43_wldev *dev) lpphy_2062_init() argument
515 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_2062_init()
516 struct ssb_bus *bus = dev->dev->sdev->bus; lpphy_2062_init()
536 b2062_upload_init_table(dev); lpphy_2062_init()
538 b43_radio_write(dev, B2062_N_TX_CTL3, 0); lpphy_2062_init()
539 b43_radio_write(dev, B2062_N_TX_CTL4, 0); lpphy_2062_init()
540 b43_radio_write(dev, B2062_N_TX_CTL5, 0); lpphy_2062_init()
541 b43_radio_write(dev, B2062_N_TX_CTL6, 0); lpphy_2062_init()
542 b43_radio_write(dev, B2062_N_PDN_CTL0, 0x40); lpphy_2062_init()
543 b43_radio_write(dev, B2062_N_PDN_CTL0, 0); lpphy_2062_init()
544 b43_radio_write(dev, B2062_N_CALIB_TS, 0x10); lpphy_2062_init()
545 b43_radio_write(dev, B2062_N_CALIB_TS, 0); lpphy_2062_init()
546 if (dev->phy.rev > 0) { lpphy_2062_init()
547 b43_radio_write(dev, B2062_S_BG_CTL1, lpphy_2062_init()
548 (b43_radio_read(dev, B2062_N_COMM2) >> 1) | 0x80); lpphy_2062_init()
550 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) lpphy_2062_init()
551 b43_radio_set(dev, B2062_N_TSSI_CTL0, 0x1); lpphy_2062_init()
553 b43_radio_mask(dev, B2062_N_TSSI_CTL0, ~0x1); lpphy_2062_init()
563 b43_radio_mask(dev, B2062_S_RFPLL_CTL1, 0xFFFB); lpphy_2062_init()
566 b43_radio_set(dev, B2062_S_RFPLL_CTL1, 0x4); lpphy_2062_init()
571 b43_radio_write(dev, B2062_S_RFPLL_CTL7, tmp); lpphy_2062_init()
575 b43_radio_write(dev, B2062_S_RFPLL_CTL18, tmp); lpphy_2062_init()
579 b43_radio_write(dev, B2062_S_RFPLL_CTL19, tmp); lpphy_2062_init()
591 b43dbg(dev->wl, "b2062: Using crystal tab entry %u kHz.\n", lpphy_2062_init()
594 b43_radio_write(dev, B2062_S_RFPLL_CTL8, lpphy_2062_init()
596 b43_radio_write(dev, B2062_S_RFPLL_CTL9, lpphy_2062_init()
598 b43_radio_write(dev, B2062_S_RFPLL_CTL10, fd->data[4]); lpphy_2062_init()
599 b43_radio_write(dev, B2062_S_RFPLL_CTL11, fd->data[5]); lpphy_2062_init()
603 static void lpphy_2063_init(struct b43_wldev *dev) lpphy_2063_init() argument
605 b2063_upload_init_table(dev); lpphy_2063_init()
606 b43_radio_write(dev, B2063_LOGEN_SP5, 0); lpphy_2063_init()
607 b43_radio_set(dev, B2063_COMM8, 0x38); lpphy_2063_init()
608 b43_radio_write(dev, B2063_REG_SP1, 0x56); lpphy_2063_init()
609 b43_radio_mask(dev, B2063_RX_BB_CTL2, ~0x2); lpphy_2063_init()
610 b43_radio_write(dev, B2063_PA_SP7, 0); lpphy_2063_init()
611 b43_radio_write(dev, B2063_TX_RF_SP6, 0x20); lpphy_2063_init()
612 b43_radio_write(dev, B2063_TX_RF_SP9, 0x40); lpphy_2063_init()
613 if (dev->phy.rev == 2) { lpphy_2063_init()
614 b43_radio_write(dev, B2063_PA_SP3, 0xa0); lpphy_2063_init()
615 b43_radio_write(dev, B2063_PA_SP4, 0xa0); lpphy_2063_init()
616 b43_radio_write(dev, B2063_PA_SP2, 0x18); lpphy_2063_init()
618 b43_radio_write(dev, B2063_PA_SP3, 0x20); lpphy_2063_init()
619 b43_radio_write(dev, B2063_PA_SP2, 0x20); lpphy_2063_init()
663 static void lpphy_sync_stx(struct b43_wldev *dev) lpphy_sync_stx() argument
671 tmp = b43_radio_read(dev, e->rf_addr); lpphy_sync_stx()
674 b43_phy_maskset(dev, B43_PHY_OFDM(0xF2 + e->phy_offset), lpphy_sync_stx()
679 static void lpphy_radio_init(struct b43_wldev *dev) lpphy_radio_init() argument
682 b43_phy_set(dev, B43_LPPHY_FOURWIRE_CTL, 0x2); lpphy_radio_init()
684 b43_phy_mask(dev, B43_LPPHY_FOURWIRE_CTL, 0xFFFD); lpphy_radio_init()
687 if (dev->phy.radio_ver == 0x2062) { lpphy_radio_init()
688 lpphy_2062_init(dev); lpphy_radio_init()
690 lpphy_2063_init(dev); lpphy_radio_init()
691 lpphy_sync_stx(dev); lpphy_radio_init()
692 b43_phy_write(dev, B43_PHY_OFDM(0xF0), 0x5F80); lpphy_radio_init()
693 b43_phy_write(dev, B43_PHY_OFDM(0xF1), 0); lpphy_radio_init()
694 if (dev->dev->chip_id == 0x4325) { lpphy_radio_init()
702 static void lpphy_set_rc_cap(struct b43_wldev *dev) lpphy_set_rc_cap() argument
704 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_set_rc_cap()
708 if (dev->phy.rev == 1) //FIXME check channel 14! lpphy_set_rc_cap()
711 b43_radio_write(dev, B2062_N_RXBB_CALIB2, lpphy_set_rc_cap()
713 b43_radio_write(dev, B2062_N_TX_CTL_A, rc_cap | 0x80); lpphy_set_rc_cap()
714 b43_radio_write(dev, B2062_S_RXG_CNT16, lpphy_set_rc_cap()
718 static u8 lpphy_get_bb_mult(struct b43_wldev *dev) lpphy_get_bb_mult() argument
720 return (b43_lptab_read(dev, B43_LPTAB16(0, 87)) & 0xFF00) >> 8; lpphy_get_bb_mult()
723 static void lpphy_set_bb_mult(struct b43_wldev *dev, u8 bb_mult) lpphy_set_bb_mult() argument
725 b43_lptab_write(dev, B43_LPTAB16(0, 87), (u16)bb_mult << 8); lpphy_set_bb_mult()
728 static void lpphy_set_deaf(struct b43_wldev *dev, bool user) lpphy_set_deaf() argument
730 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_set_deaf()
736 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xFF1F, 0x80); lpphy_set_deaf()
739 static void lpphy_clear_deaf(struct b43_wldev *dev, bool user) lpphy_clear_deaf() argument
741 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_clear_deaf()
749 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) lpphy_clear_deaf()
750 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, lpphy_clear_deaf()
753 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, lpphy_clear_deaf()
758 static void lpphy_set_trsw_over(struct b43_wldev *dev, bool tx, bool rx) lpphy_set_trsw_over() argument
761 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFC, trsw); lpphy_set_trsw_over()
762 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x3); lpphy_set_trsw_over()
765 static void lpphy_disable_crs(struct b43_wldev *dev, bool user) lpphy_disable_crs() argument
767 lpphy_set_deaf(dev, user); lpphy_disable_crs()
768 lpphy_set_trsw_over(dev, false, true); lpphy_disable_crs()
769 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFB); lpphy_disable_crs()
770 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x4); lpphy_disable_crs()
771 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFF7); lpphy_disable_crs()
772 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x8); lpphy_disable_crs()
773 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x10); lpphy_disable_crs()
774 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x10); lpphy_disable_crs()
775 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFDF); lpphy_disable_crs()
776 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x20); lpphy_disable_crs()
777 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFBF); lpphy_disable_crs()
778 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x40); lpphy_disable_crs()
779 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0x7); lpphy_disable_crs()
780 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0x38); lpphy_disable_crs()
781 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFF3F); lpphy_disable_crs()
782 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0x100); lpphy_disable_crs()
783 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFDFF); lpphy_disable_crs()
784 b43_phy_write(dev, B43_LPPHY_PS_CTL_OVERRIDE_VAL0, 0); lpphy_disable_crs()
785 b43_phy_write(dev, B43_LPPHY_PS_CTL_OVERRIDE_VAL1, 1); lpphy_disable_crs()
786 b43_phy_write(dev, B43_LPPHY_PS_CTL_OVERRIDE_VAL2, 0x20); lpphy_disable_crs()
787 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFBFF); lpphy_disable_crs()
788 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xF7FF); lpphy_disable_crs()
789 b43_phy_write(dev, B43_LPPHY_TX_GAIN_CTL_OVERRIDE_VAL, 0); lpphy_disable_crs()
790 b43_phy_write(dev, B43_LPPHY_RX_GAIN_CTL_OVERRIDE_VAL, 0x45AF); lpphy_disable_crs()
791 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_2, 0x3FF); lpphy_disable_crs()
794 static void lpphy_restore_crs(struct b43_wldev *dev, bool user) lpphy_restore_crs() argument
796 lpphy_clear_deaf(dev, user); lpphy_restore_crs()
797 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFF80); lpphy_restore_crs()
798 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFC00); lpphy_restore_crs()
803 static void lpphy_disable_rx_gain_override(struct b43_wldev *dev) lpphy_disable_rx_gain_override() argument
805 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFFE); lpphy_disable_rx_gain_override()
806 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFEF); lpphy_disable_rx_gain_override()
807 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFBF); lpphy_disable_rx_gain_override()
808 if (dev->phy.rev >= 2) { lpphy_disable_rx_gain_override()
809 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFEFF); lpphy_disable_rx_gain_override()
810 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_disable_rx_gain_override()
811 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFBFF); lpphy_disable_rx_gain_override()
812 b43_phy_mask(dev, B43_PHY_OFDM(0xE5), 0xFFF7); lpphy_disable_rx_gain_override()
815 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFDFF); lpphy_disable_rx_gain_override()
819 static void lpphy_enable_rx_gain_override(struct b43_wldev *dev) lpphy_enable_rx_gain_override() argument
821 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x1); lpphy_enable_rx_gain_override()
822 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x10); lpphy_enable_rx_gain_override()
823 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x40); lpphy_enable_rx_gain_override()
824 if (dev->phy.rev >= 2) { lpphy_enable_rx_gain_override()
825 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x100); lpphy_enable_rx_gain_override()
826 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_enable_rx_gain_override()
827 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x400); lpphy_enable_rx_gain_override()
828 b43_phy_set(dev, B43_PHY_OFDM(0xE5), 0x8); lpphy_enable_rx_gain_override()
831 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x200); lpphy_enable_rx_gain_override()
835 static void lpphy_disable_tx_gain_override(struct b43_wldev *dev) lpphy_disable_tx_gain_override() argument
837 if (dev->phy.rev < 2) lpphy_disable_tx_gain_override()
838 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFEFF); lpphy_disable_tx_gain_override()
840 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFF7F); lpphy_disable_tx_gain_override()
841 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xBFFF); lpphy_disable_tx_gain_override()
843 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVR, 0xFFBF); lpphy_disable_tx_gain_override()
846 static void lpphy_enable_tx_gain_override(struct b43_wldev *dev) lpphy_enable_tx_gain_override() argument
848 if (dev->phy.rev < 2) lpphy_enable_tx_gain_override()
849 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x100); lpphy_enable_tx_gain_override()
851 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x80); lpphy_enable_tx_gain_override()
852 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x4000); lpphy_enable_tx_gain_override()
854 b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVR, 0x40); lpphy_enable_tx_gain_override()
857 static struct lpphy_tx_gains lpphy_get_tx_gains(struct b43_wldev *dev) lpphy_get_tx_gains() argument
862 gains.dac = (b43_phy_read(dev, B43_LPPHY_AFE_DAC_CTL) & 0x380) >> 7; lpphy_get_tx_gains()
863 if (dev->phy.rev < 2) { lpphy_get_tx_gains()
864 tmp = b43_phy_read(dev, lpphy_get_tx_gains()
870 tmp = b43_phy_read(dev, B43_LPPHY_TX_GAIN_CTL_OVERRIDE_VAL); lpphy_get_tx_gains()
871 gains.pad = b43_phy_read(dev, B43_PHY_OFDM(0xFB)) & 0xFF; lpphy_get_tx_gains()
879 static void lpphy_set_dac_gain(struct b43_wldev *dev, u16 dac) lpphy_set_dac_gain() argument
881 u16 ctl = b43_phy_read(dev, B43_LPPHY_AFE_DAC_CTL) & 0xC7F; lpphy_set_dac_gain()
883 b43_phy_maskset(dev, B43_LPPHY_AFE_DAC_CTL, 0xF000, ctl); lpphy_set_dac_gain()
886 static u16 lpphy_get_pa_gain(struct b43_wldev *dev) lpphy_get_pa_gain() argument
888 return b43_phy_read(dev, B43_PHY_OFDM(0xFB)) & 0x7F; lpphy_get_pa_gain()
891 static void lpphy_set_pa_gain(struct b43_wldev *dev, u16 gain) lpphy_set_pa_gain() argument
893 b43_phy_maskset(dev, B43_PHY_OFDM(0xFB), 0xE03F, gain << 6); lpphy_set_pa_gain()
894 b43_phy_maskset(dev, B43_PHY_OFDM(0xFD), 0x80FF, gain << 8); lpphy_set_pa_gain()
897 static void lpphy_set_tx_gains(struct b43_wldev *dev, lpphy_set_tx_gains() argument
902 if (dev->phy.rev < 2) { lpphy_set_tx_gains()
904 b43_phy_maskset(dev, B43_LPPHY_TX_GAIN_CTL_OVERRIDE_VAL, lpphy_set_tx_gains()
907 pa_gain = lpphy_get_pa_gain(dev); lpphy_set_tx_gains()
908 b43_phy_write(dev, B43_LPPHY_TX_GAIN_CTL_OVERRIDE_VAL, lpphy_set_tx_gains()
914 b43_phy_maskset(dev, B43_PHY_OFDM(0xFB), lpphy_set_tx_gains()
916 b43_phy_write(dev, B43_PHY_OFDM(0xFC), lpphy_set_tx_gains()
918 b43_phy_maskset(dev, B43_PHY_OFDM(0xFD), lpphy_set_tx_gains()
921 lpphy_set_dac_gain(dev, gains.dac); lpphy_set_tx_gains()
922 lpphy_enable_tx_gain_override(dev); lpphy_set_tx_gains()
925 static void lpphy_rev0_1_set_rx_gain(struct b43_wldev *dev, u32 gain) lpphy_rev0_1_set_rx_gain() argument
931 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFE, trsw); lpphy_rev0_1_set_rx_gain()
932 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, lpphy_rev0_1_set_rx_gain()
934 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, lpphy_rev0_1_set_rx_gain()
936 b43_phy_write(dev, B43_LPPHY_RX_GAIN_CTL_OVERRIDE_VAL, lna); lpphy_rev0_1_set_rx_gain()
939 static void lpphy_rev2plus_set_rx_gain(struct b43_wldev *dev, u32 gain) lpphy_rev2plus_set_rx_gain() argument
947 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFE, trsw); lpphy_rev2plus_set_rx_gain()
948 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, lpphy_rev2plus_set_rx_gain()
950 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, lpphy_rev2plus_set_rx_gain()
952 b43_phy_write(dev, B43_LPPHY_RX_GAIN_CTL_OVERRIDE_VAL, low_gain); lpphy_rev2plus_set_rx_gain()
953 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFFF0, high_gain); lpphy_rev2plus_set_rx_gain()
954 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_rev2plus_set_rx_gain()
956 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, lpphy_rev2plus_set_rx_gain()
958 b43_phy_maskset(dev, B43_PHY_OFDM(0xE6), 0xFFE7, tmp << 3); lpphy_rev2plus_set_rx_gain()
962 static void lpphy_set_rx_gain(struct b43_wldev *dev, u32 gain) lpphy_set_rx_gain() argument
964 if (dev->phy.rev < 2) lpphy_set_rx_gain()
965 lpphy_rev0_1_set_rx_gain(dev, gain); lpphy_set_rx_gain()
967 lpphy_rev2plus_set_rx_gain(dev, gain); lpphy_set_rx_gain()
968 lpphy_enable_rx_gain_override(dev); lpphy_set_rx_gain()
971 static void lpphy_set_rx_gain_by_index(struct b43_wldev *dev, u16 idx) lpphy_set_rx_gain_by_index() argument
973 u32 gain = b43_lptab_read(dev, B43_LPTAB16(12, idx)); lpphy_set_rx_gain_by_index()
974 lpphy_set_rx_gain(dev, gain); lpphy_set_rx_gain_by_index()
977 static void lpphy_stop_ddfs(struct b43_wldev *dev) lpphy_stop_ddfs() argument
979 b43_phy_mask(dev, B43_LPPHY_AFE_DDFS, 0xFFFD); lpphy_stop_ddfs()
980 b43_phy_mask(dev, B43_LPPHY_LP_PHY_CTL, 0xFFDF); lpphy_stop_ddfs()
983 static void lpphy_run_ddfs(struct b43_wldev *dev, int i_on, int q_on, lpphy_run_ddfs() argument
986 lpphy_stop_ddfs(dev); lpphy_run_ddfs()
987 b43_phy_mask(dev, B43_LPPHY_AFE_DDFS_POINTER_INIT, 0xFF80); lpphy_run_ddfs()
988 b43_phy_mask(dev, B43_LPPHY_AFE_DDFS_POINTER_INIT, 0x80FF); lpphy_run_ddfs()
989 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS_INCR_INIT, 0xFF80, incr1); lpphy_run_ddfs()
990 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS_INCR_INIT, 0x80FF, incr2 << 8); lpphy_run_ddfs()
991 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFFF7, i_on << 3); lpphy_run_ddfs()
992 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFFEF, q_on << 4); lpphy_run_ddfs()
993 b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFF9F, scale_idx << 5); lpphy_run_ddfs()
994 b43_phy_mask(dev, B43_LPPHY_AFE_DDFS, 0xFFFB); lpphy_run_ddfs()
995 b43_phy_set(dev, B43_LPPHY_AFE_DDFS, 0x2); lpphy_run_ddfs()
996 b43_phy_set(dev, B43_LPPHY_LP_PHY_CTL, 0x20); lpphy_run_ddfs()
999 static bool lpphy_rx_iq_est(struct b43_wldev *dev, u16 samples, u8 time, lpphy_rx_iq_est() argument
1004 b43_phy_mask(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFF7); lpphy_rx_iq_est()
1005 b43_phy_write(dev, B43_LPPHY_IQ_NUM_SMPLS_ADDR, samples); lpphy_rx_iq_est()
1006 b43_phy_maskset(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFF00, time); lpphy_rx_iq_est()
1007 b43_phy_mask(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFEFF); lpphy_rx_iq_est()
1008 b43_phy_set(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0x200); lpphy_rx_iq_est()
1011 if (!(b43_phy_read(dev, lpphy_rx_iq_est()
1017 if ((b43_phy_read(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR) & 0x200)) { lpphy_rx_iq_est()
1018 b43_phy_set(dev, B43_LPPHY_CRSGAIN_CTL, 0x8); lpphy_rx_iq_est()
1022 iq_est->iq_prod = b43_phy_read(dev, B43_LPPHY_IQ_ACC_HI_ADDR); lpphy_rx_iq_est()
1024 iq_est->iq_prod |= b43_phy_read(dev, B43_LPPHY_IQ_ACC_LO_ADDR); lpphy_rx_iq_est()
1026 iq_est->i_pwr = b43_phy_read(dev, B43_LPPHY_IQ_I_PWR_ACC_HI_ADDR); lpphy_rx_iq_est()
1028 iq_est->i_pwr |= b43_phy_read(dev, B43_LPPHY_IQ_I_PWR_ACC_LO_ADDR); lpphy_rx_iq_est()
1030 iq_est->q_pwr = b43_phy_read(dev, B43_LPPHY_IQ_Q_PWR_ACC_HI_ADDR); lpphy_rx_iq_est()
1032 iq_est->q_pwr |= b43_phy_read(dev, B43_LPPHY_IQ_Q_PWR_ACC_LO_ADDR); lpphy_rx_iq_est()
1034 b43_phy_set(dev, B43_LPPHY_CRSGAIN_CTL, 0x8); lpphy_rx_iq_est()
1038 static int lpphy_loopback(struct b43_wldev *dev) lpphy_loopback() argument
1046 lpphy_set_trsw_over(dev, true, true); lpphy_loopback()
1047 b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVR, 1); lpphy_loopback()
1048 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0xFFFE); lpphy_loopback()
1049 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x800); lpphy_loopback()
1050 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x800); lpphy_loopback()
1051 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x8); lpphy_loopback()
1052 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x8); lpphy_loopback()
1053 b43_radio_write(dev, B2062_N_TX_CTL_A, 0x80); lpphy_loopback()
1054 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x80); lpphy_loopback()
1055 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x80); lpphy_loopback()
1057 lpphy_set_rx_gain_by_index(dev, i); lpphy_loopback()
1058 lpphy_run_ddfs(dev, 1, 1, 5, 5, 0); lpphy_loopback()
1059 if (!(lpphy_rx_iq_est(dev, 1000, 32, &iq_est))) lpphy_loopback()
1067 lpphy_stop_ddfs(dev); lpphy_loopback()
1098 static void lpphy_read_tx_pctl_mode_from_hardware(struct b43_wldev *dev) lpphy_read_tx_pctl_mode_from_hardware() argument
1100 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_read_tx_pctl_mode_from_hardware()
1103 ctl = b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_CMD); lpphy_read_tx_pctl_mode_from_hardware()
1122 static void lpphy_write_tx_pctl_mode_to_hardware(struct b43_wldev *dev) lpphy_write_tx_pctl_mode_to_hardware() argument
1124 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_write_tx_pctl_mode_to_hardware()
1141 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_CMD, lpphy_write_tx_pctl_mode_to_hardware()
1145 static void lpphy_set_tx_power_control(struct b43_wldev *dev, lpphy_set_tx_power_control() argument
1148 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_set_tx_power_control()
1151 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_set_tx_power_control()
1163 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_CMD, lpphy_set_tx_power_control()
1165 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_NNUM, lpphy_set_tx_power_control()
1168 lpphy_disable_tx_gain_override(dev); lpphy_set_tx_power_control()
1172 if (dev->phy.rev >= 2) { lpphy_set_tx_power_control()
1174 b43_phy_set(dev, B43_PHY_OFDM(0xD0), 0x2); lpphy_set_tx_power_control()
1176 b43_phy_mask(dev, B43_PHY_OFDM(0xD0), 0xFFFD); lpphy_set_tx_power_control()
1178 lpphy_write_tx_pctl_mode_to_hardware(dev); lpphy_set_tx_power_control()
1181 static int b43_lpphy_op_switch_channel(struct b43_wldev *dev,
1184 static void lpphy_rev0_1_rc_calib(struct b43_wldev *dev) lpphy_rev0_1_rc_calib() argument
1186 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_rev0_1_rc_calib()
1205 err = b43_lpphy_op_switch_channel(dev, 7); lpphy_rev0_1_rc_calib()
1207 b43dbg(dev->wl, lpphy_rev0_1_rc_calib()
1211 old_txg_ovr = !!(b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR) & 0x40); lpphy_rev0_1_rc_calib()
1212 old_bbmult = lpphy_get_bb_mult(dev); lpphy_rev0_1_rc_calib()
1214 tx_gains = lpphy_get_tx_gains(dev); lpphy_rev0_1_rc_calib()
1215 old_rf_ovr = b43_phy_read(dev, B43_LPPHY_RF_OVERRIDE_0); lpphy_rev0_1_rc_calib()
1216 old_rf_ovrval = b43_phy_read(dev, B43_LPPHY_RF_OVERRIDE_VAL_0); lpphy_rev0_1_rc_calib()
1217 old_afe_ovr = b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR); lpphy_rev0_1_rc_calib()
1218 old_afe_ovrval = b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVRVAL); lpphy_rev0_1_rc_calib()
1219 old_rf2_ovr = b43_phy_read(dev, B43_LPPHY_RF_OVERRIDE_2); lpphy_rev0_1_rc_calib()
1220 old_rf2_ovrval = b43_phy_read(dev, B43_LPPHY_RF_OVERRIDE_2_VAL); lpphy_rev0_1_rc_calib()
1221 old_phy_ctl = b43_phy_read(dev, B43_LPPHY_LP_PHY_CTL); lpphy_rev0_1_rc_calib()
1222 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_rev0_1_rc_calib()
1225 lpphy_set_tx_power_control(dev, B43_LPPHY_TXPCTL_OFF); lpphy_rev0_1_rc_calib()
1226 lpphy_disable_crs(dev, true); lpphy_rev0_1_rc_calib()
1227 loopback = lpphy_loopback(dev); lpphy_rev0_1_rc_calib()
1230 lpphy_set_rx_gain_by_index(dev, loopback); lpphy_rev0_1_rc_calib()
1231 b43_phy_maskset(dev, B43_LPPHY_LP_PHY_CTL, 0xFFBF, 0x40); lpphy_rev0_1_rc_calib()
1232 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFFF8, 0x1); lpphy_rev0_1_rc_calib()
1233 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFFC7, 0x8); lpphy_rev0_1_rc_calib()
1234 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFF3F, 0xC0); lpphy_rev0_1_rc_calib()
1236 b43_radio_write(dev, B2062_N_RXBB_CALIB2, i); lpphy_rev0_1_rc_calib()
1239 lpphy_run_ddfs(dev, 1, 1, j, j, 0); lpphy_rev0_1_rc_calib()
1240 if (!(lpphy_rx_iq_est(dev, 1000, 32, &iq_est))) lpphy_rev0_1_rc_calib()
1256 lpphy_stop_ddfs(dev); lpphy_rev0_1_rc_calib()
1259 lpphy_restore_crs(dev, true); lpphy_rev0_1_rc_calib()
1260 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, old_rf_ovrval); lpphy_rev0_1_rc_calib()
1261 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_0, old_rf_ovr); lpphy_rev0_1_rc_calib()
1262 b43_phy_write(dev, B43_LPPHY_AFE_CTL_OVRVAL, old_afe_ovrval); lpphy_rev0_1_rc_calib()
1263 b43_phy_write(dev, B43_LPPHY_AFE_CTL_OVR, old_afe_ovr); lpphy_rev0_1_rc_calib()
1264 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, old_rf2_ovrval); lpphy_rev0_1_rc_calib()
1265 b43_phy_write(dev, B43_LPPHY_RF_OVERRIDE_2, old_rf2_ovr); lpphy_rev0_1_rc_calib()
1266 b43_phy_write(dev, B43_LPPHY_LP_PHY_CTL, old_phy_ctl); lpphy_rev0_1_rc_calib()
1268 lpphy_set_bb_mult(dev, old_bbmult); lpphy_rev0_1_rc_calib()
1277 lpphy_set_tx_gains(dev, tx_gains); lpphy_rev0_1_rc_calib()
1279 lpphy_set_tx_power_control(dev, old_txpctl); lpphy_rev0_1_rc_calib()
1281 lpphy_set_rc_cap(dev); lpphy_rev0_1_rc_calib()
1284 static void lpphy_rev2plus_rc_calib(struct b43_wldev *dev) lpphy_rev2plus_rc_calib() argument
1286 struct ssb_bus *bus = dev->dev->sdev->bus; lpphy_rev2plus_rc_calib()
1288 u8 tmp = b43_radio_read(dev, B2063_RX_BB_SP8) & 0xFF; lpphy_rev2plus_rc_calib()
1291 b43_radio_write(dev, B2063_RX_BB_SP8, 0x0); lpphy_rev2plus_rc_calib()
1292 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7E); lpphy_rev2plus_rc_calib()
1293 b43_radio_mask(dev, B2063_PLL_SP1, 0xF7); lpphy_rev2plus_rc_calib()
1294 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7C); lpphy_rev2plus_rc_calib()
1295 b43_radio_write(dev, B2063_RC_CALIB_CTL2, 0x15); lpphy_rev2plus_rc_calib()
1296 b43_radio_write(dev, B2063_RC_CALIB_CTL3, 0x70); lpphy_rev2plus_rc_calib()
1297 b43_radio_write(dev, B2063_RC_CALIB_CTL4, 0x52); lpphy_rev2plus_rc_calib()
1298 b43_radio_write(dev, B2063_RC_CALIB_CTL5, 0x1); lpphy_rev2plus_rc_calib()
1299 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7D); lpphy_rev2plus_rc_calib()
1302 if (b43_radio_read(dev, B2063_RC_CALIB_CTL6) & 0x2) lpphy_rev2plus_rc_calib()
1307 if (!(b43_radio_read(dev, B2063_RC_CALIB_CTL6) & 0x2)) lpphy_rev2plus_rc_calib()
1308 b43_radio_write(dev, B2063_RX_BB_SP8, tmp); lpphy_rev2plus_rc_calib()
1310 tmp = b43_radio_read(dev, B2063_TX_BB_SP3) & 0xFF; lpphy_rev2plus_rc_calib()
1312 b43_radio_write(dev, B2063_TX_BB_SP3, 0x0); lpphy_rev2plus_rc_calib()
1313 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7E); lpphy_rev2plus_rc_calib()
1314 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7C); lpphy_rev2plus_rc_calib()
1315 b43_radio_write(dev, B2063_RC_CALIB_CTL2, 0x55); lpphy_rev2plus_rc_calib()
1316 b43_radio_write(dev, B2063_RC_CALIB_CTL3, 0x76); lpphy_rev2plus_rc_calib()
1319 b43_radio_write(dev, B2063_RC_CALIB_CTL4, 0xFC); lpphy_rev2plus_rc_calib()
1320 b43_radio_write(dev, B2063_RC_CALIB_CTL5, 0x0); lpphy_rev2plus_rc_calib()
1322 b43_radio_write(dev, B2063_RC_CALIB_CTL4, 0x13); lpphy_rev2plus_rc_calib()
1323 b43_radio_write(dev, B2063_RC_CALIB_CTL5, 0x1); lpphy_rev2plus_rc_calib()
1326 b43_radio_write(dev, B2063_PA_SP7, 0x7D); lpphy_rev2plus_rc_calib()
1329 if (b43_radio_read(dev, B2063_RC_CALIB_CTL6) & 0x2) lpphy_rev2plus_rc_calib()
1334 if (!(b43_radio_read(dev, B2063_RC_CALIB_CTL6) & 0x2)) lpphy_rev2plus_rc_calib()
1335 b43_radio_write(dev, B2063_TX_BB_SP3, tmp); lpphy_rev2plus_rc_calib()
1337 b43_radio_write(dev, B2063_RC_CALIB_CTL1, 0x7E); lpphy_rev2plus_rc_calib()
1340 static void lpphy_calibrate_rc(struct b43_wldev *dev) lpphy_calibrate_rc() argument
1342 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_calibrate_rc()
1344 if (dev->phy.rev >= 2) { lpphy_calibrate_rc()
1345 lpphy_rev2plus_rc_calib(dev); lpphy_calibrate_rc()
1347 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) lpphy_calibrate_rc()
1348 lpphy_rev0_1_rc_calib(dev); lpphy_calibrate_rc()
1350 lpphy_set_rc_cap(dev); lpphy_calibrate_rc()
1354 static void b43_lpphy_op_set_rx_antenna(struct b43_wldev *dev, int antenna) b43_lpphy_op_set_rx_antenna() argument
1356 if (dev->phy.rev >= 2) b43_lpphy_op_set_rx_antenna()
1362 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_ANTDIVHELP); b43_lpphy_op_set_rx_antenna()
1364 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFFD, antenna & 0x2); b43_lpphy_op_set_rx_antenna()
1365 b43_phy_maskset(dev, B43_LPPHY_CRSGAIN_CTL, 0xFFFE, antenna & 0x1); b43_lpphy_op_set_rx_antenna()
1367 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_ANTDIVHELP); b43_lpphy_op_set_rx_antenna()
1369 dev->phy.lp->antenna = antenna; b43_lpphy_op_set_rx_antenna()
1372 static void lpphy_set_tx_iqcc(struct b43_wldev *dev, u16 a, u16 b) lpphy_set_tx_iqcc() argument
1378 b43_lptab_write_bulk(dev, B43_LPTAB16(0, 80), 2, tmp); lpphy_set_tx_iqcc()
1381 static void lpphy_set_tx_power_by_index(struct b43_wldev *dev, u8 index) lpphy_set_tx_power_by_index() argument
1383 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_set_tx_power_by_index()
1388 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_set_tx_power_by_index()
1390 lpphy_set_tx_power_control(dev, B43_LPPHY_TXPCTL_SW); lpphy_set_tx_power_by_index()
1391 if (dev->phy.rev >= 2) { lpphy_set_tx_power_by_index()
1392 iq_comp = b43_lptab_read(dev, B43_LPTAB32(7, index + 320)); lpphy_set_tx_power_by_index()
1393 tx_gain = b43_lptab_read(dev, B43_LPTAB32(7, index + 192)); lpphy_set_tx_power_by_index()
1398 lpphy_set_tx_gains(dev, gains); lpphy_set_tx_power_by_index()
1400 iq_comp = b43_lptab_read(dev, B43_LPTAB32(10, index + 320)); lpphy_set_tx_power_by_index()
1401 tx_gain = b43_lptab_read(dev, B43_LPTAB32(10, index + 192)); lpphy_set_tx_power_by_index()
1402 b43_phy_maskset(dev, B43_LPPHY_TX_GAIN_CTL_OVERRIDE_VAL, lpphy_set_tx_power_by_index()
1404 lpphy_set_dac_gain(dev, tx_gain & 0x7); lpphy_set_tx_power_by_index()
1405 lpphy_set_pa_gain(dev, (tx_gain >> 24) & 0x7F); lpphy_set_tx_power_by_index()
1407 lpphy_set_bb_mult(dev, (iq_comp >> 20) & 0xFF); lpphy_set_tx_power_by_index()
1408 lpphy_set_tx_iqcc(dev, (iq_comp >> 10) & 0x3FF, iq_comp & 0x3FF); lpphy_set_tx_power_by_index()
1409 if (dev->phy.rev >= 2) { lpphy_set_tx_power_by_index()
1410 coeff = b43_lptab_read(dev, B43_LPTAB32(7, index + 448)); lpphy_set_tx_power_by_index()
1412 coeff = b43_lptab_read(dev, B43_LPTAB32(10, index + 448)); lpphy_set_tx_power_by_index()
1414 b43_lptab_write(dev, B43_LPTAB16(0, 85), coeff & 0xFFFF); lpphy_set_tx_power_by_index()
1415 if (dev->phy.rev >= 2) { lpphy_set_tx_power_by_index()
1416 rf_power = b43_lptab_read(dev, B43_LPTAB32(7, index + 576)); lpphy_set_tx_power_by_index()
1417 b43_phy_maskset(dev, B43_LPPHY_RF_PWR_OVERRIDE, 0xFF00, lpphy_set_tx_power_by_index()
1420 lpphy_enable_tx_gain_override(dev); lpphy_set_tx_power_by_index()
1423 static void lpphy_btcoex_override(struct b43_wldev *dev) lpphy_btcoex_override() argument
1425 b43_write16(dev, B43_MMIO_BTCOEX_CTL, 0x3); lpphy_btcoex_override()
1426 b43_write16(dev, B43_MMIO_BTCOEX_TXCTL, 0xFF); lpphy_btcoex_override()
1429 static void b43_lpphy_op_software_rfkill(struct b43_wldev *dev, b43_lpphy_op_software_rfkill() argument
1434 if (dev->phy.rev >= 2) { b43_lpphy_op_software_rfkill()
1435 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x83FF); b43_lpphy_op_software_rfkill()
1436 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x1F00); b43_lpphy_op_software_rfkill()
1437 b43_phy_mask(dev, B43_LPPHY_AFE_DDFS, 0x80FF); b43_lpphy_op_software_rfkill()
1438 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xDFFF); b43_lpphy_op_software_rfkill()
1439 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x0808); b43_lpphy_op_software_rfkill()
1441 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xE0FF); b43_lpphy_op_software_rfkill()
1442 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x1F00); b43_lpphy_op_software_rfkill()
1443 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2_VAL, 0xFCFF); b43_lpphy_op_software_rfkill()
1444 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_2, 0x0018); b43_lpphy_op_software_rfkill()
1447 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xE0FF); b43_lpphy_op_software_rfkill()
1448 if (dev->phy.rev >= 2) b43_lpphy_op_software_rfkill()
1449 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xF7F7); b43_lpphy_op_software_rfkill()
1451 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_2, 0xFFE7); b43_lpphy_op_software_rfkill()
1456 static void lpphy_set_analog_filter(struct b43_wldev *dev, int channel) lpphy_set_analog_filter() argument
1458 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_set_analog_filter()
1461 if (dev->phy.rev < 2) { //SPEC FIXME Isn't this rev0/1-specific? lpphy_set_analog_filter()
1462 b43_phy_maskset(dev, B43_LPPHY_LP_PHY_CTL, 0xFCFF, tmp << 9); lpphy_set_analog_filter()
1463 if ((dev->phy.rev == 1) && (lpphy->rc_cap)) lpphy_set_analog_filter()
1464 lpphy_set_rc_cap(dev); lpphy_set_analog_filter()
1466 b43_radio_write(dev, B2063_TX_BB_SP3, 0x3F); lpphy_set_analog_filter()
1470 static void lpphy_set_tssi_mux(struct b43_wldev *dev, enum tssi_mux_mode mode) lpphy_set_tssi_mux() argument
1473 b43_radio_set(dev, B2063_PA_SP1, 0x2); lpphy_set_tssi_mux()
1474 b43_phy_set(dev, B43_PHY_OFDM(0xF3), 0x1000); lpphy_set_tssi_mux()
1475 b43_radio_write(dev, B2063_PA_CTL10, 0x51); lpphy_set_tssi_mux()
1477 b43_radio_mask(dev, B2063_PA_SP1, 0xFFFE); lpphy_set_tssi_mux()
1478 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0xFFC7); lpphy_set_tssi_mux()
1480 b43_radio_maskset(dev, B2063_PA_SP1, 0xFFFE, 0x1); lpphy_set_tssi_mux()
1481 b43_phy_maskset(dev, B43_LPPHY_AFE_CTL_OVRVAL, lpphy_set_tssi_mux()
1489 static void lpphy_tx_pctl_init_hw(struct b43_wldev *dev) lpphy_tx_pctl_init_hw() argument
1496 if (dev->phy.rev >= 2) lpphy_tx_pctl_init_hw()
1497 b43_lptab_write(dev, B43_LPTAB32(7, i + 1), i); lpphy_tx_pctl_init_hw()
1499 b43_lptab_write(dev, B43_LPTAB32(10, i + 1), i); lpphy_tx_pctl_init_hw()
1502 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_NNUM, 0xFF00, 0xFF); lpphy_tx_pctl_init_hw()
1503 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_NNUM, 0x8FFF, 0x5000); lpphy_tx_pctl_init_hw()
1504 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_IDLETSSI, 0xFFC0, 0x1F); lpphy_tx_pctl_init_hw()
1505 if (dev->phy.rev < 2) { lpphy_tx_pctl_init_hw()
1506 b43_phy_mask(dev, B43_LPPHY_LP_PHY_CTL, 0xEFFF); lpphy_tx_pctl_init_hw()
1507 b43_phy_maskset(dev, B43_LPPHY_LP_PHY_CTL, 0xDFFF, 0x2000); lpphy_tx_pctl_init_hw()
1509 b43_phy_mask(dev, B43_PHY_OFDM(0x103), 0xFFFE); lpphy_tx_pctl_init_hw()
1510 b43_phy_maskset(dev, B43_PHY_OFDM(0x103), 0xFFFB, 0x4); lpphy_tx_pctl_init_hw()
1511 b43_phy_maskset(dev, B43_PHY_OFDM(0x103), 0xFFEF, 0x10); lpphy_tx_pctl_init_hw()
1512 b43_radio_maskset(dev, B2063_IQ_CALIB_CTL2, 0xF3, 0x1); lpphy_tx_pctl_init_hw()
1513 lpphy_set_tssi_mux(dev, TSSI_MUX_POSTPA); lpphy_tx_pctl_init_hw()
1515 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_IDLETSSI, 0x7FFF, 0x8000); lpphy_tx_pctl_init_hw()
1516 b43_phy_mask(dev, B43_LPPHY_TX_PWR_CTL_DELTAPWR_LIMIT, 0xFF); lpphy_tx_pctl_init_hw()
1517 b43_phy_write(dev, B43_LPPHY_TX_PWR_CTL_DELTAPWR_LIMIT, 0xA); lpphy_tx_pctl_init_hw()
1518 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_CMD, lpphy_tx_pctl_init_hw()
1521 b43_phy_mask(dev, B43_LPPHY_TX_PWR_CTL_NNUM, 0xF8FF); lpphy_tx_pctl_init_hw()
1522 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_CMD, lpphy_tx_pctl_init_hw()
1526 if (dev->phy.rev < 2) { lpphy_tx_pctl_init_hw()
1527 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_0, 0xEFFF, 0x1000); lpphy_tx_pctl_init_hw()
1528 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xEFFF); lpphy_tx_pctl_init_hw()
1530 lpphy_set_tx_power_by_index(dev, 0x7F); lpphy_tx_pctl_init_hw()
1533 b43_dummy_transmission(dev, true, true); lpphy_tx_pctl_init_hw()
1535 tmp = b43_phy_read(dev, B43_LPPHY_TX_PWR_CTL_STAT); lpphy_tx_pctl_init_hw()
1537 b43_phy_maskset(dev, B43_LPPHY_TX_PWR_CTL_IDLETSSI, lpphy_tx_pctl_init_hw()
1541 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xEFFF); lpphy_tx_pctl_init_hw()
1547 static void lpphy_tx_pctl_init_sw(struct b43_wldev *dev) lpphy_tx_pctl_init_sw() argument
1551 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_tx_pctl_init_sw()
1562 lpphy_set_tx_gains(dev, gains); lpphy_tx_pctl_init_sw()
1563 lpphy_set_bb_mult(dev, 150); lpphy_tx_pctl_init_sw()
1567 static void lpphy_tx_pctl_init(struct b43_wldev *dev) lpphy_tx_pctl_init() argument
1570 lpphy_tx_pctl_init_hw(dev); lpphy_tx_pctl_init()
1572 lpphy_tx_pctl_init_sw(dev); lpphy_tx_pctl_init()
1576 static void lpphy_pr41573_workaround(struct b43_wldev *dev) lpphy_pr41573_workaround() argument
1578 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_pr41573_workaround()
1587 b43err(dev->wl, "PR41573 failed. Out of memory!\n"); lpphy_pr41573_workaround()
1591 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_pr41573_workaround()
1597 if (dev->phy.rev < 2) { lpphy_pr41573_workaround()
1598 b43_lptab_read_bulk(dev, B43_LPTAB32(10, 0x140), lpphy_pr41573_workaround()
1601 b43_lptab_read_bulk(dev, B43_LPTAB32(7, 0x140), lpphy_pr41573_workaround()
1605 lpphy_table_init(dev); //FIXME is table init needed? lpphy_pr41573_workaround()
1606 lpphy_baseband_init(dev); lpphy_pr41573_workaround()
1607 lpphy_tx_pctl_init(dev); lpphy_pr41573_workaround()
1608 b43_lpphy_op_software_rfkill(dev, false); lpphy_pr41573_workaround()
1609 lpphy_set_tx_power_control(dev, B43_LPPHY_TXPCTL_OFF); lpphy_pr41573_workaround()
1610 if (dev->phy.rev < 2) { lpphy_pr41573_workaround()
1611 b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0x140), lpphy_pr41573_workaround()
1614 b43_lptab_write_bulk(dev, B43_LPTAB32(7, 0x140), lpphy_pr41573_workaround()
1617 b43_write16(dev, B43_MMIO_CHANNEL, lpphy->channel); lpphy_pr41573_workaround()
1620 lpphy_set_analog_filter(dev, lpphy->channel); lpphy_pr41573_workaround()
1622 lpphy_set_tx_power_by_index(dev, tx_pwr_idx_over); lpphy_pr41573_workaround()
1624 lpphy_set_rc_cap(dev); lpphy_pr41573_workaround()
1625 b43_lpphy_op_set_rx_antenna(dev, lpphy->antenna); lpphy_pr41573_workaround()
1626 lpphy_set_tx_power_control(dev, txpctl_mode); lpphy_pr41573_workaround()
1709 static int lpphy_calc_rx_iq_comp(struct b43_wldev *dev, u16 samples) lpphy_calc_rx_iq_comp() argument
1715 c1 = b43_phy_read(dev, B43_LPPHY_RX_COMP_COEFF_S); lpphy_calc_rx_iq_comp()
1719 b43_phy_maskset(dev, B43_LPPHY_RX_COMP_COEFF_S, 0xFF00, 0x00C0); lpphy_calc_rx_iq_comp()
1720 b43_phy_mask(dev, B43_LPPHY_RX_COMP_COEFF_S, 0x00FF); lpphy_calc_rx_iq_comp()
1722 ret = lpphy_rx_iq_est(dev, samples, 32, &iq_est); lpphy_calc_rx_iq_comp()
1761 b43_phy_maskset(dev, B43_LPPHY_RX_COMP_COEFF_S, 0xFF00, c1); lpphy_calc_rx_iq_comp()
1762 b43_phy_maskset(dev, B43_LPPHY_RX_COMP_COEFF_S, 0x00FF, c0 << 8); lpphy_calc_rx_iq_comp()
1766 static void lpphy_run_samples(struct b43_wldev *dev, u16 samples, u16 loops, lpphy_run_samples() argument
1769 b43_phy_maskset(dev, B43_LPPHY_SMPL_PLAY_BUFFER_CTL, lpphy_run_samples()
1773 b43_phy_maskset(dev, B43_LPPHY_SMPL_PLAY_COUNT, 0xF000, loops); lpphy_run_samples()
1774 b43_phy_maskset(dev, B43_LPPHY_SMPL_PLAY_BUFFER_CTL, 0x3F, wait << 6); lpphy_run_samples()
1775 b43_phy_set(dev, B43_LPPHY_A_PHY_CTL_ADDR, 0x1); lpphy_run_samples()
1779 static void lpphy_start_tx_tone(struct b43_wldev *dev, s32 freq, u16 max) lpphy_start_tx_tone() argument
1781 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_start_tx_tone()
1807 b43_lptab_write_bulk(dev, B43_LPTAB16(5, 0), samples, buf); lpphy_start_tx_tone()
1809 lpphy_run_samples(dev, samples, 0xFFFF, 0); lpphy_start_tx_tone()
1812 static void lpphy_stop_tx_tone(struct b43_wldev *dev) lpphy_stop_tx_tone() argument
1814 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_stop_tx_tone()
1819 b43_phy_mask(dev, B43_LPPHY_SMPL_PLAY_COUNT, 0xF000); lpphy_stop_tx_tone()
1821 if (!(b43_phy_read(dev, B43_LPPHY_A_PHY_CTL_ADDR) & 0x1)) lpphy_stop_tx_tone()
1828 static void lpphy_papd_cal(struct b43_wldev *dev, struct lpphy_tx_gains gains, lpphy_papd_cal() argument
1834 static void lpphy_papd_cal_txpwr(struct b43_wldev *dev) lpphy_papd_cal_txpwr() argument
1836 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_papd_cal_txpwr()
1840 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_papd_cal_txpwr()
1842 old_afe_ovr = b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR) & 0x40; lpphy_papd_cal_txpwr()
1844 oldgains = lpphy_get_tx_gains(dev); lpphy_papd_cal_txpwr()
1845 old_rf = b43_phy_read(dev, B43_LPPHY_RF_PWR_OVERRIDE) & 0xFF; lpphy_papd_cal_txpwr()
1846 old_bbmult = lpphy_get_bb_mult(dev); lpphy_papd_cal_txpwr()
1848 lpphy_set_tx_power_control(dev, B43_LPPHY_TXPCTL_OFF); lpphy_papd_cal_txpwr()
1850 if (dev->dev->chip_id == 0x4325 && dev->dev->chip_rev == 0) lpphy_papd_cal_txpwr()
1851 lpphy_papd_cal(dev, gains, 0, 1, 30); lpphy_papd_cal_txpwr()
1853 lpphy_papd_cal(dev, gains, 0, 1, 65); lpphy_papd_cal_txpwr()
1856 lpphy_set_tx_gains(dev, oldgains); lpphy_papd_cal_txpwr()
1857 lpphy_set_bb_mult(dev, old_bbmult); lpphy_papd_cal_txpwr()
1858 lpphy_set_tx_power_control(dev, old_txpctl); lpphy_papd_cal_txpwr()
1859 b43_phy_maskset(dev, B43_LPPHY_RF_PWR_OVERRIDE, 0xFF00, old_rf); lpphy_papd_cal_txpwr()
1862 static int lpphy_rx_iq_cal(struct b43_wldev *dev, bool noise, bool tx, lpphy_rx_iq_cal() argument
1865 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_rx_iq_cal()
1874 if (dev->dev->chip_id == 0x5354) { lpphy_rx_iq_cal()
1880 } else if (dev->phy.rev >= 2) { lpphy_rx_iq_cal()
1893 b43_phy_maskset(dev, B43_LPPHY_RX_COMP_COEFF_S, 0xFF00, iqcomp->c1); lpphy_rx_iq_cal()
1894 b43_phy_maskset(dev, B43_LPPHY_RX_COMP_COEFF_S, lpphy_rx_iq_cal()
1903 lpphy_set_trsw_over(dev, tx, rx); lpphy_rx_iq_cal()
1905 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { lpphy_rx_iq_cal()
1906 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x8); lpphy_rx_iq_cal()
1907 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, lpphy_rx_iq_cal()
1910 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x20); lpphy_rx_iq_cal()
1911 b43_phy_maskset(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, lpphy_rx_iq_cal()
1915 tmp = b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR) & 0x40; lpphy_rx_iq_cal()
1918 lpphy_set_rx_gain(dev, 0x2D5D); lpphy_rx_iq_cal()
1921 oldgains = lpphy_get_tx_gains(dev); lpphy_rx_iq_cal()
1924 lpphy_set_tx_gains(dev, *gains); lpphy_rx_iq_cal()
1927 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVR, 0xFFFE); lpphy_rx_iq_cal()
1928 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0xFFFE); lpphy_rx_iq_cal()
1929 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x800); lpphy_rx_iq_cal()
1930 b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x800); lpphy_rx_iq_cal()
1931 lpphy_set_deaf(dev, false); lpphy_rx_iq_cal()
1933 ret = lpphy_calc_rx_iq_comp(dev, 0xFFF0); lpphy_rx_iq_cal()
1935 lpphy_start_tx_tone(dev, 4000, 100); lpphy_rx_iq_cal()
1936 ret = lpphy_calc_rx_iq_comp(dev, 0x4000); lpphy_rx_iq_cal()
1937 lpphy_stop_tx_tone(dev); lpphy_rx_iq_cal()
1939 lpphy_clear_deaf(dev, false); lpphy_rx_iq_cal()
1940 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFFC); lpphy_rx_iq_cal()
1941 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFF7); lpphy_rx_iq_cal()
1942 b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFDF); lpphy_rx_iq_cal()
1945 lpphy_set_tx_gains(dev, oldgains); lpphy_rx_iq_cal()
1947 lpphy_disable_tx_gain_override(dev); lpphy_rx_iq_cal()
1949 lpphy_disable_rx_gain_override(dev); lpphy_rx_iq_cal()
1950 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVR, 0xFFFE); lpphy_rx_iq_cal()
1951 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0xF7FF); lpphy_rx_iq_cal()
1955 static void lpphy_calibration(struct b43_wldev *dev) lpphy_calibration() argument
1957 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_calibration()
1966 b43_mac_suspend(dev); lpphy_calibration()
1968 lpphy_btcoex_override(dev); lpphy_calibration()
1969 if (dev->phy.rev >= 2) lpphy_calibration()
1970 lpphy_save_dig_flt_state(dev); lpphy_calibration()
1971 lpphy_read_tx_pctl_mode_from_hardware(dev); lpphy_calibration()
1973 lpphy_set_tx_power_control(dev, B43_LPPHY_TXPCTL_OFF); lpphy_calibration()
1975 if ((dev->phy.rev == 0) && (saved_pctl_mode != B43_LPPHY_TXPCTL_OFF)) lpphy_calibration()
1976 lpphy_pr41573_workaround(dev); lpphy_calibration()
1977 if ((dev->phy.rev >= 2) && full_cal) { lpphy_calibration()
1978 lpphy_papd_cal_txpwr(dev); lpphy_calibration()
1980 lpphy_set_tx_power_control(dev, saved_pctl_mode); lpphy_calibration()
1981 if (dev->phy.rev >= 2) lpphy_calibration()
1982 lpphy_restore_dig_flt_state(dev); lpphy_calibration()
1983 lpphy_rx_iq_cal(dev, true, true, false, false, NULL); lpphy_calibration()
1985 b43_mac_enable(dev); lpphy_calibration()
1988 static void b43_lpphy_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask, b43_lpphy_op_maskset() argument
1991 b43_write16f(dev, B43_MMIO_PHY_CONTROL, reg); b43_lpphy_op_maskset()
1992 b43_write16(dev, B43_MMIO_PHY_DATA, b43_lpphy_op_maskset()
1993 (b43_read16(dev, B43_MMIO_PHY_DATA) & mask) | set); b43_lpphy_op_maskset()
1996 static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg) b43_lpphy_op_radio_read() argument
2001 if (dev->phy.rev < 2) { b43_lpphy_op_radio_read()
2007 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_lpphy_op_radio_read()
2008 return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); b43_lpphy_op_radio_read()
2011 static void b43_lpphy_op_radio_write(struct b43_wldev *dev, u16 reg, u16 value) b43_lpphy_op_radio_write() argument
2016 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, reg); b43_lpphy_op_radio_write()
2017 b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); b43_lpphy_op_radio_write()
2389 static void lpphy_b2062_reset_pll_bias(struct b43_wldev *dev) lpphy_b2062_reset_pll_bias() argument
2391 b43_radio_write(dev, B2062_S_RFPLL_CTL2, 0xFF); lpphy_b2062_reset_pll_bias()
2393 if (dev->dev->chip_id == 0x5354) { lpphy_b2062_reset_pll_bias()
2394 b43_radio_write(dev, B2062_N_COMM1, 4); lpphy_b2062_reset_pll_bias()
2395 b43_radio_write(dev, B2062_S_RFPLL_CTL2, 4); lpphy_b2062_reset_pll_bias()
2397 b43_radio_write(dev, B2062_S_RFPLL_CTL2, 0); lpphy_b2062_reset_pll_bias()
2402 static void lpphy_b2062_vco_calib(struct b43_wldev *dev) lpphy_b2062_vco_calib() argument
2404 b43_radio_write(dev, B2062_S_RFPLL_CTL21, 0x42); lpphy_b2062_vco_calib()
2405 b43_radio_write(dev, B2062_S_RFPLL_CTL21, 0x62); lpphy_b2062_vco_calib()
2409 static int lpphy_b2062_tune(struct b43_wldev *dev, lpphy_b2062_tune() argument
2412 struct b43_phy_lp *lpphy = dev->phy.lp; lpphy_b2062_tune()
2413 struct ssb_bus *bus = dev->dev->sdev->bus; lpphy_b2062_tune()
2429 b43_radio_set(dev, B2062_S_RFPLL_CTL14, 0x04); lpphy_b2062_tune()
2430 b43_radio_write(dev, B2062_N_LGENA_TUNE0, chandata->data[0]); lpphy_b2062_tune()
2431 b43_radio_write(dev, B2062_N_LGENA_TUNE2, chandata->data[1]); lpphy_b2062_tune()
2432 b43_radio_write(dev, B2062_N_LGENA_TUNE3, chandata->data[2]); lpphy_b2062_tune()
2433 b43_radio_write(dev, B2062_N_TX_TUNE, chandata->data[3]); lpphy_b2062_tune()
2434 b43_radio_write(dev, B2062_S_LGENG_CTL1, chandata->data[4]); lpphy_b2062_tune()
2435 b43_radio_write(dev, B2062_N_LGENA_CTL5, chandata->data[5]); lpphy_b2062_tune()
2436 b43_radio_write(dev, B2062_N_LGENA_CTL6, chandata->data[6]); lpphy_b2062_tune()
2437 b43_radio_write(dev, B2062_N_TX_PGA, chandata->data[7]); lpphy_b2062_tune()
2438 b43_radio_write(dev, B2062_N_TX_PAD, chandata->data[8]); lpphy_b2062_tune()
2442 b43_radio_write(dev, B2062_S_RFPLL_CTL33, 0xCC); lpphy_b2062_tune()
2443 b43_radio_write(dev, B2062_S_RFPLL_CTL34, 0x07); lpphy_b2062_tune()
2444 lpphy_b2062_reset_pll_bias(dev); lpphy_b2062_tune()
2451 b43_radio_write(dev, B2062_S_RFPLL_CTL26, tmp6); lpphy_b2062_tune()
2455 b43_radio_write(dev, B2062_S_RFPLL_CTL27, tmp6); lpphy_b2062_tune()
2459 b43_radio_write(dev, B2062_S_RFPLL_CTL28, tmp6); lpphy_b2062_tune()
2463 b43_radio_write(dev, B2062_S_RFPLL_CTL29, tmp6 + ((2 * tmp7) / tmp4)); lpphy_b2062_tune()
2464 tmp8 = b43_radio_read(dev, B2062_S_RFPLL_CTL19); lpphy_b2062_tune()
2466 b43_radio_write(dev, B2062_S_RFPLL_CTL23, (tmp9 >> 8) + 16); lpphy_b2062_tune()
2467 b43_radio_write(dev, B2062_S_RFPLL_CTL24, tmp9 & 0xFF); lpphy_b2062_tune()
2469 lpphy_b2062_vco_calib(dev); lpphy_b2062_tune()
2470 if (b43_radio_read(dev, B2062_S_RFPLL_CTL3) & 0x10) { lpphy_b2062_tune()
2471 b43_radio_write(dev, B2062_S_RFPLL_CTL33, 0xFC); lpphy_b2062_tune()
2472 b43_radio_write(dev, B2062_S_RFPLL_CTL34, 0); lpphy_b2062_tune()
2473 lpphy_b2062_reset_pll_bias(dev); lpphy_b2062_tune()
2474 lpphy_b2062_vco_calib(dev); lpphy_b2062_tune()
2475 if (b43_radio_read(dev, B2062_S_RFPLL_CTL3) & 0x10) lpphy_b2062_tune()
2479 b43_radio_mask(dev, B2062_S_RFPLL_CTL14, ~0x04); lpphy_b2062_tune()
2483 static void lpphy_b2063_vco_calib(struct b43_wldev *dev) lpphy_b2063_vco_calib() argument
2487 b43_radio_mask(dev, B2063_PLL_SP1, ~0x40); lpphy_b2063_vco_calib()
2488 tmp = b43_radio_read(dev, B2063_PLL_JTAG_CALNRST) & 0xF8; lpphy_b2063_vco_calib()
2489 b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp); lpphy_b2063_vco_calib()
2491 b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x4); lpphy_b2063_vco_calib()
2493 b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x6); lpphy_b2063_vco_calib()
2495 b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x7); lpphy_b2063_vco_calib()
2497 b43_radio_set(dev, B2063_PLL_SP1, 0x40); lpphy_b2063_vco_calib()
2500 static int lpphy_b2063_tune(struct b43_wldev *dev, lpphy_b2063_tune() argument
2503 struct ssb_bus *bus = dev->dev->sdev->bus; lpphy_b2063_tune()
2522 b43_radio_write(dev, B2063_LOGEN_VCOBUF1, chandata->data[0]); lpphy_b2063_tune()
2523 b43_radio_write(dev, B2063_LOGEN_MIXER2, chandata->data[1]); lpphy_b2063_tune()
2524 b43_radio_write(dev, B2063_LOGEN_BUF2, chandata->data[2]); lpphy_b2063_tune()
2525 b43_radio_write(dev, B2063_LOGEN_RCCR1, chandata->data[3]); lpphy_b2063_tune()
2526 b43_radio_write(dev, B2063_A_RX_1ST3, chandata->data[4]); lpphy_b2063_tune()
2527 b43_radio_write(dev, B2063_A_RX_2ND1, chandata->data[5]); lpphy_b2063_tune()
2528 b43_radio_write(dev, B2063_A_RX_2ND4, chandata->data[6]); lpphy_b2063_tune()
2529 b43_radio_write(dev, B2063_A_RX_2ND7, chandata->data[7]); lpphy_b2063_tune()
2530 b43_radio_write(dev, B2063_A_RX_PS6, chandata->data[8]); lpphy_b2063_tune()
2531 b43_radio_write(dev, B2063_TX_RF_CTL2, chandata->data[9]); lpphy_b2063_tune()
2532 b43_radio_write(dev, B2063_TX_RF_CTL5, chandata->data[10]); lpphy_b2063_tune()
2533 b43_radio_write(dev, B2063_PA_CTL11, chandata->data[11]); lpphy_b2063_tune()
2535 old_comm15 = b43_radio_read(dev, B2063_COMM15); lpphy_b2063_tune()
2536 b43_radio_set(dev, B2063_COMM15, 0x1E); lpphy_b2063_tune()
2548 b43_radio_write(dev, B2063_PLL_JTAG_PLL_VCO_CALIB3, 0x2); lpphy_b2063_tune()
2549 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_VCO_CALIB6, lpphy_b2063_tune()
2551 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_VCO_CALIB7, lpphy_b2063_tune()
2556 b43_radio_write(dev, B2063_PLL_JTAG_PLL_VCO_CALIB5, timeoutref); lpphy_b2063_tune()
2561 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_VCO_CALIB7, lpphy_b2063_tune()
2563 b43_radio_write(dev, B2063_PLL_JTAG_PLL_VCO_CALIB8, count & 0xFF); lpphy_b2063_tune()
2571 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_SG1, 0xFFE0, tmp1 >> 4); lpphy_b2063_tune()
2572 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_SG2, 0xFE0F, tmp1 << 4); lpphy_b2063_tune()
2573 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_SG2, 0xFFF0, tmp1 >> 16); lpphy_b2063_tune()
2574 b43_radio_write(dev, B2063_PLL_JTAG_PLL_SG3, (tmp2 >> 8) & 0xFF); lpphy_b2063_tune()
2575 b43_radio_write(dev, B2063_PLL_JTAG_PLL_SG4, tmp2 & 0xFF); lpphy_b2063_tune()
2577 b43_radio_write(dev, B2063_PLL_JTAG_PLL_LF1, 0xB9); lpphy_b2063_tune()
2578 b43_radio_write(dev, B2063_PLL_JTAG_PLL_LF2, 0x88); lpphy_b2063_tune()
2579 b43_radio_write(dev, B2063_PLL_JTAG_PLL_LF3, 0x28); lpphy_b2063_tune()
2580 b43_radio_write(dev, B2063_PLL_JTAG_PLL_LF4, 0x63); lpphy_b2063_tune()
2592 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFC0, tmp5); lpphy_b2063_tune()
2593 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFBF, scale << 6); lpphy_b2063_tune()
2600 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFE0, tmp6); lpphy_b2063_tune()
2601 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFDF, scale << 5); lpphy_b2063_tune()
2603 b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFFFB, 0x4); lpphy_b2063_tune()
2605 b43_radio_set(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0x2); lpphy_b2063_tune()
2607 b43_radio_mask(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFD); lpphy_b2063_tune()
2610 b43_radio_set(dev, B2063_PLL_JTAG_PLL_VCO1, 0x2); lpphy_b2063_tune()
2612 b43_radio_mask(dev, B2063_PLL_JTAG_PLL_VCO1, 0xFD); lpphy_b2063_tune()
2614 b43_radio_set(dev, B2063_PLL_SP2, 0x3); lpphy_b2063_tune()
2616 b43_radio_mask(dev, B2063_PLL_SP2, 0xFFFC); lpphy_b2063_tune()
2617 lpphy_b2063_vco_calib(dev); lpphy_b2063_tune()
2618 b43_radio_write(dev, B2063_COMM15, old_comm15); lpphy_b2063_tune()
2623 static int b43_lpphy_op_switch_channel(struct b43_wldev *dev, b43_lpphy_op_switch_channel() argument
2626 struct b43_phy_lp *lpphy = dev->phy.lp; b43_lpphy_op_switch_channel()
2629 if (dev->phy.radio_ver == 0x2063) { b43_lpphy_op_switch_channel()
2630 err = lpphy_b2063_tune(dev, new_channel); b43_lpphy_op_switch_channel()
2634 err = lpphy_b2062_tune(dev, new_channel); b43_lpphy_op_switch_channel()
2637 lpphy_set_analog_filter(dev, new_channel); b43_lpphy_op_switch_channel()
2638 lpphy_adjust_gain_table(dev, channel2freq_lp(new_channel)); b43_lpphy_op_switch_channel()
2642 b43_write16(dev, B43_MMIO_CHANNEL, new_channel); b43_lpphy_op_switch_channel()
2647 static int b43_lpphy_op_init(struct b43_wldev *dev) b43_lpphy_op_init() argument
2651 if (dev->dev->bus_type != B43_BUS_SSB) { b43_lpphy_op_init()
2652 b43err(dev->wl, "LP-PHY is supported only on SSB!\n"); b43_lpphy_op_init()
2656 lpphy_read_band_sprom(dev); //FIXME should this be in prepare_structs? b43_lpphy_op_init()
2657 lpphy_baseband_init(dev); b43_lpphy_op_init()
2658 lpphy_radio_init(dev); b43_lpphy_op_init()
2659 lpphy_calibrate_rc(dev); b43_lpphy_op_init()
2660 err = b43_lpphy_op_switch_channel(dev, 7); b43_lpphy_op_init()
2662 b43dbg(dev->wl, "Switch to channel 7 failed, error = %d.\n", b43_lpphy_op_init()
2665 lpphy_tx_pctl_init(dev); b43_lpphy_op_init()
2666 lpphy_calibration(dev); b43_lpphy_op_init()
2672 static void b43_lpphy_op_adjust_txpower(struct b43_wldev *dev) b43_lpphy_op_adjust_txpower() argument
2677 static enum b43_txpwr_result b43_lpphy_op_recalc_txpower(struct b43_wldev *dev, b43_lpphy_op_recalc_txpower() argument
2684 static void b43_lpphy_op_switch_analog(struct b43_wldev *dev, bool on) b43_lpphy_op_switch_analog() argument
2687 b43_phy_mask(dev, B43_LPPHY_AFE_CTL_OVR, 0xfff8); b43_lpphy_op_switch_analog()
2689 b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVRVAL, 0x0007); b43_lpphy_op_switch_analog()
2690 b43_phy_set(dev, B43_LPPHY_AFE_CTL_OVR, 0x0007); b43_lpphy_op_switch_analog()
2694 static void b43_lpphy_op_pwork_15sec(struct b43_wldev *dev) b43_lpphy_op_pwork_15sec() argument
H A Dsdio.h14 void (*irq_handler)(struct b43_wldev *dev);
17 int b43_sdio_request_irq(struct b43_wldev *dev,
18 void (*handler)(struct b43_wldev *dev));
19 void b43_sdio_free_irq(struct b43_wldev *dev);
28 static inline int b43_sdio_request_irq(struct b43_wldev *dev, b43_sdio_request_irq() argument
29 void (*handler)(struct b43_wldev *dev)) b43_sdio_request_irq()
33 static inline void b43_sdio_free_irq(struct b43_wldev *dev) b43_sdio_free_irq() argument
H A Dmain.c365 static void b43_wireless_core_exit(struct b43_wldev *dev);
366 static int b43_wireless_core_init(struct b43_wldev *dev);
367 static struct b43_wldev * b43_wireless_core_stop(struct b43_wldev *dev);
368 static int b43_wireless_core_start(struct b43_wldev *dev);
467 static void b43_ram_write(struct b43_wldev *dev, u16 offset, u32 val) b43_ram_write() argument
473 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_ram_write()
477 b43_write32(dev, B43_MMIO_RAM_CONTROL, offset); b43_ram_write()
479 b43_write32(dev, B43_MMIO_RAM_DATA, val); b43_ram_write()
482 static inline void b43_shm_control_word(struct b43_wldev *dev, b43_shm_control_word() argument
491 b43_write32(dev, B43_MMIO_SHM_CONTROL, control); b43_shm_control_word()
494 u32 b43_shm_read32(struct b43_wldev *dev, u16 routing, u16 offset) b43_shm_read32() argument
502 b43_shm_control_word(dev, routing, offset >> 2); b43_shm_read32()
503 ret = b43_read16(dev, B43_MMIO_SHM_DATA_UNALIGNED); b43_shm_read32()
504 b43_shm_control_word(dev, routing, (offset >> 2) + 1); b43_shm_read32()
505 ret |= ((u32)b43_read16(dev, B43_MMIO_SHM_DATA)) << 16; b43_shm_read32()
511 b43_shm_control_word(dev, routing, offset); b43_shm_read32()
512 ret = b43_read32(dev, B43_MMIO_SHM_DATA); b43_shm_read32()
517 u16 b43_shm_read16(struct b43_wldev *dev, u16 routing, u16 offset) b43_shm_read16() argument
525 b43_shm_control_word(dev, routing, offset >> 2); b43_shm_read16()
526 ret = b43_read16(dev, B43_MMIO_SHM_DATA_UNALIGNED); b43_shm_read16()
532 b43_shm_control_word(dev, routing, offset); b43_shm_read16()
533 ret = b43_read16(dev, B43_MMIO_SHM_DATA); b43_shm_read16()
538 void b43_shm_write32(struct b43_wldev *dev, u16 routing, u16 offset, u32 value) b43_shm_write32() argument
544 b43_shm_control_word(dev, routing, offset >> 2); b43_shm_write32()
545 b43_write16(dev, B43_MMIO_SHM_DATA_UNALIGNED, b43_shm_write32()
547 b43_shm_control_word(dev, routing, (offset >> 2) + 1); b43_shm_write32()
548 b43_write16(dev, B43_MMIO_SHM_DATA, b43_shm_write32()
554 b43_shm_control_word(dev, routing, offset); b43_shm_write32()
555 b43_write32(dev, B43_MMIO_SHM_DATA, value); b43_shm_write32()
558 void b43_shm_write16(struct b43_wldev *dev, u16 routing, u16 offset, u16 value) b43_shm_write16() argument
564 b43_shm_control_word(dev, routing, offset >> 2); b43_shm_write16()
565 b43_write16(dev, B43_MMIO_SHM_DATA_UNALIGNED, value); b43_shm_write16()
570 b43_shm_control_word(dev, routing, offset); b43_shm_write16()
571 b43_write16(dev, B43_MMIO_SHM_DATA, value); b43_shm_write16()
575 u64 b43_hf_read(struct b43_wldev *dev) b43_hf_read() argument
579 ret = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF3); b43_hf_read()
581 ret |= b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF2); b43_hf_read()
583 ret |= b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF1); b43_hf_read()
589 void b43_hf_write(struct b43_wldev *dev, u64 value) b43_hf_write() argument
596 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF1, lo); b43_hf_write()
597 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF2, mi); b43_hf_write()
598 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_HOSTF3, hi); b43_hf_write()
602 static u16 b43_fwcapa_read(struct b43_wldev *dev) b43_fwcapa_read() argument
604 B43_WARN_ON(!dev->fw.opensource); b43_fwcapa_read()
605 return b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_FWCAPA); b43_fwcapa_read()
608 void b43_tsf_read(struct b43_wldev *dev, u64 *tsf) b43_tsf_read() argument
612 B43_WARN_ON(dev->dev->core_rev < 3); b43_tsf_read()
616 low = b43_read32(dev, B43_MMIO_REV3PLUS_TSF_LOW); b43_tsf_read()
617 high = b43_read32(dev, B43_MMIO_REV3PLUS_TSF_HIGH); b43_tsf_read()
624 static void b43_time_lock(struct b43_wldev *dev) b43_time_lock() argument
626 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, B43_MACCTL_TBTTHOLD); b43_time_lock()
628 b43_read32(dev, B43_MMIO_MACCTL); b43_time_lock()
631 static void b43_time_unlock(struct b43_wldev *dev) b43_time_unlock() argument
633 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_TBTTHOLD, 0); b43_time_unlock()
635 b43_read32(dev, B43_MMIO_MACCTL); b43_time_unlock()
638 static void b43_tsf_write_locked(struct b43_wldev *dev, u64 tsf) b43_tsf_write_locked() argument
642 B43_WARN_ON(dev->dev->core_rev < 3); b43_tsf_write_locked()
648 b43_write32(dev, B43_MMIO_REV3PLUS_TSF_LOW, low); b43_tsf_write_locked()
650 b43_write32(dev, B43_MMIO_REV3PLUS_TSF_HIGH, high); b43_tsf_write_locked()
654 void b43_tsf_write(struct b43_wldev *dev, u64 tsf) b43_tsf_write() argument
656 b43_time_lock(dev); b43_tsf_write()
657 b43_tsf_write_locked(dev, tsf); b43_tsf_write()
658 b43_time_unlock(dev); b43_tsf_write()
662 void b43_macfilter_set(struct b43_wldev *dev, u16 offset, const u8 *mac) b43_macfilter_set() argument
671 b43_write16(dev, B43_MMIO_MACFILTER_CONTROL, offset); b43_macfilter_set()
675 b43_write16(dev, B43_MMIO_MACFILTER_DATA, data); b43_macfilter_set()
678 b43_write16(dev, B43_MMIO_MACFILTER_DATA, data); b43_macfilter_set()
681 b43_write16(dev, B43_MMIO_MACFILTER_DATA, data); b43_macfilter_set()
684 static void b43_write_mac_bssid_templates(struct b43_wldev *dev) b43_write_mac_bssid_templates() argument
692 bssid = dev->wl->bssid; b43_write_mac_bssid_templates()
693 mac = dev->wl->mac_addr; b43_write_mac_bssid_templates()
695 b43_macfilter_set(dev, B43_MACFILTER_BSSID, bssid); b43_write_mac_bssid_templates()
706 b43_ram_write(dev, 0x20 + i, tmp); b43_write_mac_bssid_templates()
710 static void b43_upload_card_macaddress(struct b43_wldev *dev) b43_upload_card_macaddress() argument
712 b43_write_mac_bssid_templates(dev); b43_upload_card_macaddress()
713 b43_macfilter_set(dev, B43_MACFILTER_SELF, dev->wl->mac_addr); b43_upload_card_macaddress()
716 static void b43_set_slot_time(struct b43_wldev *dev, u16 slot_time) b43_set_slot_time() argument
720 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) b43_set_slot_time()
722 b43_write16(dev, B43_MMIO_IFSSLOT, 510 + slot_time); b43_set_slot_time()
728 * b43_shm_write16(dev, B43_SHM_SHARED, 0x0010, slot_time); b43_set_slot_time()
732 static void b43_short_slot_timing_enable(struct b43_wldev *dev) b43_short_slot_timing_enable() argument
734 b43_set_slot_time(dev, 9); b43_short_slot_timing_enable()
737 static void b43_short_slot_timing_disable(struct b43_wldev *dev) b43_short_slot_timing_disable() argument
739 b43_set_slot_time(dev, 20); b43_short_slot_timing_disable()
745 void b43_dummy_transmission(struct b43_wldev *dev, bool ofdm, bool pa_on) b43_dummy_transmission() argument
747 struct b43_phy *phy = &dev->phy; b43_dummy_transmission()
767 b43_ram_write(dev, i * 4, buffer[i]); b43_dummy_transmission()
769 b43_write16(dev, B43_MMIO_XMTSEL, 0x0000); b43_dummy_transmission()
771 if (dev->dev->core_rev < 11) b43_dummy_transmission()
772 b43_write16(dev, B43_MMIO_WEPCTL, 0x0000); b43_dummy_transmission()
774 b43_write16(dev, B43_MMIO_WEPCTL, 0x0100); b43_dummy_transmission()
777 b43_write16(dev, B43_MMIO_TXE0_PHYCTL, value); b43_dummy_transmission()
780 b43_write16(dev, B43_MMIO_TXE0_PHYCTL1, 0x1A02); b43_dummy_transmission()
782 b43_write16(dev, B43_MMIO_TXE0_WM_0, 0x0000); b43_dummy_transmission()
783 b43_write16(dev, B43_MMIO_TXE0_WM_1, 0x0000); b43_dummy_transmission()
785 b43_write16(dev, B43_MMIO_XMTTPLATETXPTR, 0x0000); b43_dummy_transmission()
786 b43_write16(dev, B43_MMIO_XMTTXCNT, 0x0014); b43_dummy_transmission()
787 b43_write16(dev, B43_MMIO_XMTSEL, 0x0826); b43_dummy_transmission()
788 b43_write16(dev, B43_MMIO_TXE0_CTL, 0x0000); b43_dummy_transmission()
791 ; /*b43_nphy_pa_override(dev, false) */ b43_dummy_transmission()
796 b43_write16(dev, B43_MMIO_TXE0_AUX, 0x00D0); b43_dummy_transmission()
799 b43_write16(dev, B43_MMIO_TXE0_AUX, 0x0050); b43_dummy_transmission()
802 b43_write16(dev, B43_MMIO_TXE0_AUX, 0x0030); b43_dummy_transmission()
804 b43_read16(dev, B43_MMIO_TXE0_AUX); b43_dummy_transmission()
807 b43_radio_write16(dev, 0x0051, 0x0017); b43_dummy_transmission()
809 value = b43_read16(dev, B43_MMIO_TXE0_STATUS); b43_dummy_transmission()
815 value = b43_read16(dev, B43_MMIO_TXE0_STATUS); b43_dummy_transmission()
821 value = b43_read16(dev, B43_MMIO_IFSSTAT); b43_dummy_transmission()
827 b43_radio_write16(dev, 0x0051, 0x0037); b43_dummy_transmission()
830 static void key_write(struct b43_wldev *dev, key_write() argument
839 kidx = b43_kidx_to_fw(dev, index); key_write()
841 b43_shm_write16(dev, B43_SHM_SHARED, key_write()
845 offset = dev->ktp + (index * B43_SEC_KEYSIZE); key_write()
849 b43_shm_write16(dev, B43_SHM_SHARED, offset + i, value); key_write()
853 static void keymac_write(struct b43_wldev *dev, u8 index, const u8 *addr) keymac_write() argument
858 if (b43_new_kidx_api(dev)) keymac_write()
880 b43_shm_write32(dev, B43_SHM_RCMTA, keymac_write()
882 b43_shm_write16(dev, B43_SHM_RCMTA, keymac_write()
903 static void rx_tkip_phase1_write(struct b43_wldev *dev, u8 index, u32 iv32, rx_tkip_phase1_write() argument
913 if (b43_new_kidx_api(dev)) rx_tkip_phase1_write()
925 if (b43_debug(dev, B43_DBG_KEYS)) { rx_tkip_phase1_write()
926 b43dbg(dev->wl, "rx_tkip_phase1_write : idx 0x%x, iv32 0x%x\n", rx_tkip_phase1_write()
932 b43_shm_write16(dev, B43_SHM_SHARED, offset + i, rx_tkip_phase1_write()
935 b43_shm_write16(dev, B43_SHM_SHARED, offset + i, iv32); rx_tkip_phase1_write()
936 b43_shm_write16(dev, B43_SHM_SHARED, offset + i + 2, iv32 >> 16); rx_tkip_phase1_write()
946 struct b43_wldev *dev; b43_op_update_tkip_key() local
955 dev = wl->current_dev; b43_op_update_tkip_key()
956 B43_WARN_ON(!dev || b43_status(dev) < B43_STAT_INITIALIZED); b43_op_update_tkip_key()
958 keymac_write(dev, index, NULL); /* First zero out mac to avoid race */ b43_op_update_tkip_key()
960 rx_tkip_phase1_write(dev, index, iv32, phase1key); b43_op_update_tkip_key()
964 keymac_write(dev, index, sta->addr); b43_op_update_tkip_key()
967 static void do_key_write(struct b43_wldev *dev, do_key_write() argument
974 if (b43_new_kidx_api(dev)) do_key_write()
977 B43_WARN_ON(index >= ARRAY_SIZE(dev->key)); do_key_write()
981 keymac_write(dev, index, NULL); /* First zero out mac. */ do_key_write()
992 rx_tkip_phase1_write(dev, index, 0xffffffff, (u16*)buf); do_key_write()
994 rx_tkip_phase1_write(dev, index, 0, NULL); do_key_write()
997 key_write(dev, index, algorithm, buf); do_key_write()
999 keymac_write(dev, index, mac_addr); do_key_write()
1001 dev->key[index].algorithm = algorithm; do_key_write()
1004 static int b43_key_write(struct b43_wldev *dev, b43_key_write() argument
1024 for (i = 0; i < ARRAY_SIZE(dev->key); i++) { b43_key_write()
1026 B43_WARN_ON(dev->key[i].keyconf == keyconf); b43_key_write()
1030 if (b43_new_kidx_api(dev)) b43_key_write()
1037 B43_WARN_ON(i >= ARRAY_SIZE(dev->key)); b43_key_write()
1038 if (!dev->key[i].keyconf) { b43_key_write()
1045 b43warn(dev->wl, "Out of hardware key memory\n"); b43_key_write()
1051 do_key_write(dev, index, algorithm, key, key_len, mac_addr); b43_key_write()
1052 if ((index <= 3) && !b43_new_kidx_api(dev)) { b43_key_write()
1055 do_key_write(dev, index + 4, algorithm, key, key_len, NULL); b43_key_write()
1058 dev->key[index].keyconf = keyconf; b43_key_write()
1063 static int b43_key_clear(struct b43_wldev *dev, int index) b43_key_clear() argument
1065 if (B43_WARN_ON((index < 0) || (index >= ARRAY_SIZE(dev->key)))) b43_key_clear()
1067 do_key_write(dev, index, B43_SEC_ALGO_NONE, b43_key_clear()
1069 if ((index <= 3) && !b43_new_kidx_api(dev)) { b43_key_clear()
1070 do_key_write(dev, index + 4, B43_SEC_ALGO_NONE, b43_key_clear()
1073 dev->key[index].keyconf = NULL; b43_key_clear()
1078 static void b43_clear_keys(struct b43_wldev *dev) b43_clear_keys() argument
1082 if (b43_new_kidx_api(dev)) b43_clear_keys()
1087 b43_key_clear(dev, i); b43_clear_keys()
1090 static void b43_dump_keymemory(struct b43_wldev *dev) b43_dump_keymemory() argument
1100 if (!b43_debug(dev, B43_DBG_KEYS)) b43_dump_keymemory()
1103 hf = b43_hf_read(dev); b43_dump_keymemory()
1104 b43dbg(dev->wl, "Hardware key memory dump: USEDEFKEYS=%u\n", b43_dump_keymemory()
1106 if (b43_new_kidx_api(dev)) { b43_dump_keymemory()
1114 key = &(dev->key[index]); b43_dump_keymemory()
1117 offset = dev->ktp + (index * B43_SEC_KEYSIZE); b43_dump_keymemory()
1119 u16 tmp = b43_shm_read16(dev, B43_SHM_SHARED, offset + i); b43_dump_keymemory()
1123 algo = b43_shm_read16(dev, B43_SHM_SHARED, b43_dump_keymemory()
1132 u16 tmp = b43_shm_read16(dev, B43_SHM_SHARED, offset + i); b43_dump_keymemory()
1136 rcmta0 = b43_shm_read32(dev, B43_SHM_RCMTA, b43_dump_keymemory()
1138 rcmta1 = b43_shm_read16(dev, B43_SHM_RCMTA, b43_dump_keymemory()
1149 void b43_power_saving_ctl_bits(struct b43_wldev *dev, unsigned int ps_flags) b43_power_saving_ctl_bits() argument
1183 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_power_saving_ctl_bits()
1192 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_power_saving_ctl_bits()
1194 b43_read32(dev, B43_MMIO_MACCTL); b43_power_saving_ctl_bits()
1195 if (awake && dev->dev->core_rev >= 5) { b43_power_saving_ctl_bits()
1198 ucstat = b43_shm_read16(dev, B43_SHM_SHARED, b43_power_saving_ctl_bits()
1208 void b43_wireless_core_phy_pll_reset(struct b43_wldev *dev) b43_wireless_core_phy_pll_reset() argument
1213 switch (dev->dev->bus_type) { b43_wireless_core_phy_pll_reset()
1216 bcma_cc = &dev->dev->bdev->bus->drv_cc; b43_wireless_core_phy_pll_reset()
1226 ssb_cc = &dev->dev->sdev->bus->chipco; b43_wireless_core_phy_pll_reset()
1238 static void b43_bcma_phy_reset(struct b43_wldev *dev) b43_bcma_phy_reset() argument
1243 flags = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_bcma_phy_reset()
1246 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, flags); b43_bcma_phy_reset()
1249 b43_phy_take_out_of_reset(dev); b43_bcma_phy_reset()
1252 static void b43_bcma_wireless_core_reset(struct b43_wldev *dev, bool gmode) b43_bcma_wireless_core_reset() argument
1263 b43_device_enable(dev, flags); b43_bcma_wireless_core_reset()
1265 if (dev->phy.type == B43_PHYTYPE_AC) { b43_bcma_wireless_core_reset()
1268 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_bcma_wireless_core_reset()
1271 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_bcma_wireless_core_reset()
1273 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_bcma_wireless_core_reset()
1275 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_bcma_wireless_core_reset()
1277 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_bcma_wireless_core_reset()
1279 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_bcma_wireless_core_reset()
1282 bcma_core_set_clockmode(dev->dev->bdev, BCMA_CLKMODE_FAST); b43_bcma_wireless_core_reset()
1283 b43_bcma_phy_reset(dev); b43_bcma_wireless_core_reset()
1284 bcma_core_pll_ctl(dev->dev->bdev, req, status, true); b43_bcma_wireless_core_reset()
1289 static void b43_ssb_wireless_core_reset(struct b43_wldev *dev, bool gmode) b43_ssb_wireless_core_reset() argument
1297 if (dev->phy.type == B43_PHYTYPE_N) b43_ssb_wireless_core_reset()
1299 b43_device_enable(dev, flags); b43_ssb_wireless_core_reset()
1302 b43_phy_take_out_of_reset(dev); b43_ssb_wireless_core_reset()
1306 void b43_wireless_core_reset(struct b43_wldev *dev, bool gmode) b43_wireless_core_reset() argument
1310 switch (dev->dev->bus_type) { b43_wireless_core_reset()
1313 b43_bcma_wireless_core_reset(dev, gmode); b43_wireless_core_reset()
1318 b43_ssb_wireless_core_reset(dev, gmode); b43_wireless_core_reset()
1327 if (dev->phy.ops) b43_wireless_core_reset()
1328 dev->phy.ops->switch_analog(dev, 1); b43_wireless_core_reset()
1330 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_wireless_core_reset()
1335 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_wireless_core_reset()
1338 static void handle_irq_transmit_status(struct b43_wldev *dev) handle_irq_transmit_status() argument
1345 v0 = b43_read32(dev, B43_MMIO_XMITSTAT_0); handle_irq_transmit_status()
1348 v1 = b43_read32(dev, B43_MMIO_XMITSTAT_1); handle_irq_transmit_status()
1362 b43_handle_txstatus(dev, &stat); handle_irq_transmit_status()
1366 static void drain_txstatus_queue(struct b43_wldev *dev) drain_txstatus_queue() argument
1370 if (dev->dev->core_rev < 5) drain_txstatus_queue()
1376 dummy = b43_read32(dev, B43_MMIO_XMITSTAT_0); drain_txstatus_queue()
1379 dummy = b43_read32(dev, B43_MMIO_XMITSTAT_1); drain_txstatus_queue()
1383 static u32 b43_jssi_read(struct b43_wldev *dev) b43_jssi_read() argument
1387 val = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_JSSI1); b43_jssi_read()
1389 val |= b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_JSSI0); b43_jssi_read()
1394 static void b43_jssi_write(struct b43_wldev *dev, u32 jssi) b43_jssi_write() argument
1396 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_JSSI0, b43_jssi_write()
1398 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_JSSI1, b43_jssi_write()
1402 static void b43_generate_noise_sample(struct b43_wldev *dev) b43_generate_noise_sample() argument
1404 b43_jssi_write(dev, 0x7F7F7F7F); b43_generate_noise_sample()
1405 b43_write32(dev, B43_MMIO_MACCMD, b43_generate_noise_sample()
1406 b43_read32(dev, B43_MMIO_MACCMD) | B43_MACCMD_BGNOISE); b43_generate_noise_sample()
1409 static void b43_calculate_link_quality(struct b43_wldev *dev) b43_calculate_link_quality() argument
1413 if (dev->phy.type != B43_PHYTYPE_G) b43_calculate_link_quality()
1415 if (dev->noisecalc.calculation_running) b43_calculate_link_quality()
1417 dev->noisecalc.calculation_running = true; b43_calculate_link_quality()
1418 dev->noisecalc.nr_samples = 0; b43_calculate_link_quality()
1420 b43_generate_noise_sample(dev); b43_calculate_link_quality()
1423 static void handle_irq_noise(struct b43_wldev *dev) handle_irq_noise() argument
1425 struct b43_phy_g *phy = dev->phy.g; handle_irq_noise()
1433 if (dev->phy.type != B43_PHYTYPE_G) handle_irq_noise()
1445 B43_WARN_ON(!dev->noisecalc.calculation_running); handle_irq_noise()
1446 *((__le32 *)noise) = cpu_to_le32(b43_jssi_read(dev)); handle_irq_noise()
1452 B43_WARN_ON(dev->noisecalc.nr_samples >= 8); handle_irq_noise()
1453 i = dev->noisecalc.nr_samples; handle_irq_noise()
1458 dev->noisecalc.samples[i][0] = phy->nrssi_lt[noise[0]]; handle_irq_noise()
1459 dev->noisecalc.samples[i][1] = phy->nrssi_lt[noise[1]]; handle_irq_noise()
1460 dev->noisecalc.samples[i][2] = phy->nrssi_lt[noise[2]]; handle_irq_noise()
1461 dev->noisecalc.samples[i][3] = phy->nrssi_lt[noise[3]]; handle_irq_noise()
1462 dev->noisecalc.nr_samples++; handle_irq_noise()
1463 if (dev->noisecalc.nr_samples == 8) { handle_irq_noise()
1468 average += dev->noisecalc.samples[i][j]; handle_irq_noise()
1474 tmp = b43_shm_read16(dev, B43_SHM_SHARED, 0x40C); handle_irq_noise()
1485 dev->stats.link_noise = average; handle_irq_noise()
1486 dev->noisecalc.calculation_running = false; handle_irq_noise()
1490 b43_generate_noise_sample(dev); handle_irq_noise()
1493 static void handle_irq_tbtt_indication(struct b43_wldev *dev) handle_irq_tbtt_indication() argument
1495 if (b43_is_mode(dev->wl, NL80211_IFTYPE_AP)) { handle_irq_tbtt_indication()
1499 b43_power_saving_ctl_bits(dev, 0); handle_irq_tbtt_indication()
1501 if (b43_is_mode(dev->wl, NL80211_IFTYPE_ADHOC)) handle_irq_tbtt_indication()
1502 dev->dfq_valid = true; handle_irq_tbtt_indication()
1505 static void handle_irq_atim_end(struct b43_wldev *dev) handle_irq_atim_end() argument
1507 if (dev->dfq_valid) { handle_irq_atim_end()
1508 b43_write32(dev, B43_MMIO_MACCMD, handle_irq_atim_end()
1509 b43_read32(dev, B43_MMIO_MACCMD) handle_irq_atim_end()
1511 dev->dfq_valid = false; handle_irq_atim_end()
1515 static void handle_irq_pmq(struct b43_wldev *dev) handle_irq_pmq() argument
1522 tmp = b43_read32(dev, B43_MMIO_PS_STATUS); handle_irq_pmq()
1527 b43_write16(dev, B43_MMIO_PS_STATUS, 0x0002); handle_irq_pmq()
1530 static void b43_write_template_common(struct b43_wldev *dev, b43_write_template_common() argument
1540 b43_ram_write(dev, ram_offset, le32_to_cpu(plcp.data)); b43_write_template_common()
1547 b43_ram_write(dev, ram_offset, tmp); b43_write_template_common()
1557 b43_ram_write(dev, ram_offset + i - 2, tmp); b43_write_template_common()
1559 b43_shm_write16(dev, B43_SHM_SHARED, shm_size_offset, b43_write_template_common()
1566 u8 b43_ieee80211_antenna_sanitize(struct b43_wldev *dev, b43_ieee80211_antenna_sanitize() argument
1577 if (dev->phy.gmode) b43_ieee80211_antenna_sanitize()
1578 antenna_mask = dev->dev->bus_sprom->ant_available_bg; b43_ieee80211_antenna_sanitize()
1580 antenna_mask = dev->dev->bus_sprom->ant_available_a; b43_ieee80211_antenna_sanitize()
1610 static void b43_write_beacon_template(struct b43_wldev *dev, b43_write_beacon_template() argument
1625 spin_lock_irqsave(&dev->wl->beacon_lock, flags); b43_write_beacon_template()
1626 info = IEEE80211_SKB_CB(dev->wl->current_beacon); b43_write_beacon_template()
1627 rate = ieee80211_get_tx_rate(dev->wl->hw, info)->hw_value; b43_write_beacon_template()
1629 beacon_skb = skb_clone(dev->wl->current_beacon, GFP_ATOMIC); b43_write_beacon_template()
1630 spin_unlock_irqrestore(&dev->wl->beacon_lock, flags); b43_write_beacon_template()
1633 b43dbg(dev->wl, "Could not upload beacon. " b43_write_beacon_template()
1642 b43_write_template_common(dev, (const u8 *)bcn, b43_write_beacon_template()
1648 ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL); b43_write_beacon_template()
1658 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL, ctl); b43_write_beacon_template()
1688 b43_shm_write16(dev, B43_SHM_SHARED, b43_write_beacon_template()
1690 b43_shm_write16(dev, B43_SHM_SHARED, b43_write_beacon_template()
1701 b43_shm_write16(dev, B43_SHM_SHARED, b43_write_beacon_template()
1704 b43_shm_write16(dev, B43_SHM_SHARED, b43_write_beacon_template()
1707 b43dbg(dev->wl, "Updated beacon template at 0x%x\n", ram_offset); b43_write_beacon_template()
1712 static void b43_upload_beacon0(struct b43_wldev *dev) b43_upload_beacon0() argument
1714 struct b43_wl *wl = dev->wl; b43_upload_beacon0()
1718 b43_write_beacon_template(dev, B43_SHM_SH_BT_BASE0, B43_SHM_SH_BTL0); b43_upload_beacon0()
1722 static void b43_upload_beacon1(struct b43_wldev *dev) b43_upload_beacon1() argument
1724 struct b43_wl *wl = dev->wl; b43_upload_beacon1()
1728 b43_write_beacon_template(dev, B43_SHM_SH_BT_BASE1, B43_SHM_SH_BTL1); b43_upload_beacon1()
1732 static void handle_irq_beacon(struct b43_wldev *dev) handle_irq_beacon() argument
1734 struct b43_wl *wl = dev->wl; handle_irq_beacon()
1745 dev->irq_mask &= ~B43_IRQ_BEACON; handle_irq_beacon()
1747 cmd = b43_read32(dev, B43_MMIO_MACCMD); handle_irq_beacon()
1753 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, B43_IRQ_BEACON); handle_irq_beacon()
1754 dev->irq_mask |= B43_IRQ_BEACON; handle_irq_beacon()
1762 b43_upload_beacon0(dev); handle_irq_beacon()
1763 b43_upload_beacon1(dev); handle_irq_beacon()
1764 cmd = b43_read32(dev, B43_MMIO_MACCMD); handle_irq_beacon()
1766 b43_write32(dev, B43_MMIO_MACCMD, cmd); handle_irq_beacon()
1769 b43_upload_beacon0(dev); handle_irq_beacon()
1770 cmd = b43_read32(dev, B43_MMIO_MACCMD); handle_irq_beacon()
1772 b43_write32(dev, B43_MMIO_MACCMD, cmd); handle_irq_beacon()
1774 b43_upload_beacon1(dev); handle_irq_beacon()
1775 cmd = b43_read32(dev, B43_MMIO_MACCMD); handle_irq_beacon()
1777 b43_write32(dev, B43_MMIO_MACCMD, cmd); handle_irq_beacon()
1782 static void b43_do_beacon_update_trigger_work(struct b43_wldev *dev) b43_do_beacon_update_trigger_work() argument
1784 u32 old_irq_mask = dev->irq_mask; b43_do_beacon_update_trigger_work()
1787 handle_irq_beacon(dev); b43_do_beacon_update_trigger_work()
1788 if (old_irq_mask != dev->irq_mask) { b43_do_beacon_update_trigger_work()
1790 B43_WARN_ON(!dev->irq_mask); b43_do_beacon_update_trigger_work()
1791 if (b43_read32(dev, B43_MMIO_GEN_IRQ_MASK)) { b43_do_beacon_update_trigger_work()
1792 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43_do_beacon_update_trigger_work()
1807 struct b43_wldev *dev; b43_beacon_update_trigger_work() local
1810 dev = wl->current_dev; b43_beacon_update_trigger_work()
1811 if (likely(dev && (b43_status(dev) >= B43_STAT_INITIALIZED))) { b43_beacon_update_trigger_work()
1812 if (b43_bus_host_is_sdio(dev->dev)) { b43_beacon_update_trigger_work()
1814 b43_do_beacon_update_trigger_work(dev); b43_beacon_update_trigger_work()
1818 b43_do_beacon_update_trigger_work(dev); b43_beacon_update_trigger_work()
1859 static void b43_set_beacon_int(struct b43_wldev *dev, u16 beacon_int) b43_set_beacon_int() argument
1861 b43_time_lock(dev); b43_set_beacon_int()
1862 if (dev->dev->core_rev >= 3) { b43_set_beacon_int()
1863 b43_write32(dev, B43_MMIO_TSF_CFP_REP, (beacon_int << 16)); b43_set_beacon_int()
1864 b43_write32(dev, B43_MMIO_TSF_CFP_START, (beacon_int << 10)); b43_set_beacon_int()
1866 b43_write16(dev, 0x606, (beacon_int >> 6)); b43_set_beacon_int()
1867 b43_write16(dev, 0x610, beacon_int); b43_set_beacon_int()
1869 b43_time_unlock(dev); b43_set_beacon_int()
1870 b43dbg(dev->wl, "Set beacon interval to %u\n", beacon_int); b43_set_beacon_int()
1873 static void b43_handle_firmware_panic(struct b43_wldev *dev) b43_handle_firmware_panic() argument
1878 reason = b43_shm_read16(dev, B43_SHM_SCRATCH, B43_FWPANIC_REASON_REG); b43_handle_firmware_panic()
1879 b43err(dev->wl, "Whoopsy, firmware panic! Reason: %u\n", reason); b43_handle_firmware_panic()
1883 b43dbg(dev->wl, "The panic reason is unknown.\n"); b43_handle_firmware_panic()
1892 b43_controller_restart(dev, "Microcode panic"); b43_handle_firmware_panic()
1897 static void handle_irq_ucode_debug(struct b43_wldev *dev) handle_irq_ucode_debug() argument
1904 if (!dev->fw.opensource) handle_irq_ucode_debug()
1908 reason = b43_shm_read16(dev, B43_SHM_SCRATCH, B43_DEBUGIRQ_REASON_REG); handle_irq_ucode_debug()
1912 b43_handle_firmware_panic(dev); handle_irq_ucode_debug()
1919 b43dbg(dev->wl, "SHM-dump: Failed to allocate memory\n"); handle_irq_ucode_debug()
1923 u16 tmp = b43_shm_read16(dev, B43_SHM_SHARED, i); handle_irq_ucode_debug()
1926 b43info(dev->wl, "Shared memory dump:\n"); handle_irq_ucode_debug()
1934 b43info(dev->wl, "Microcode register dump:\n"); handle_irq_ucode_debug()
1936 u16 tmp = b43_shm_read16(dev, B43_SHM_SCRATCH, i); handle_irq_ucode_debug()
1951 marker_id = b43_shm_read16(dev, B43_SHM_SCRATCH, handle_irq_ucode_debug()
1953 marker_line = b43_shm_read16(dev, B43_SHM_SCRATCH, handle_irq_ucode_debug()
1955 b43info(dev->wl, "The firmware just executed the MARKER(%u) " handle_irq_ucode_debug()
1960 b43dbg(dev->wl, "Debug-IRQ triggered for unknown reason: %u\n", handle_irq_ucode_debug()
1965 b43_shm_write16(dev, B43_SHM_SCRATCH, handle_irq_ucode_debug()
1969 static void b43_do_interrupt_thread(struct b43_wldev *dev) b43_do_interrupt_thread() argument
1972 u32 dma_reason[ARRAY_SIZE(dev->dma_reason)]; b43_do_interrupt_thread()
1976 if (unlikely(b43_status(dev) != B43_STAT_STARTED)) b43_do_interrupt_thread()
1979 reason = dev->irq_reason; b43_do_interrupt_thread()
1981 dma_reason[i] = dev->dma_reason[i]; b43_do_interrupt_thread()
1986 b43err(dev->wl, "MAC transmission error\n"); b43_do_interrupt_thread()
1989 b43err(dev->wl, "PHY transmission error\n"); b43_do_interrupt_thread()
1991 if (unlikely(atomic_dec_and_test(&dev->phy.txerr_cnt))) { b43_do_interrupt_thread()
1992 atomic_set(&dev->phy.txerr_cnt, b43_do_interrupt_thread()
1994 b43err(dev->wl, "Too many PHY TX errors, " b43_do_interrupt_thread()
1996 b43_controller_restart(dev, "PHY TX errors"); b43_do_interrupt_thread()
2001 b43err(dev->wl, b43_do_interrupt_thread()
2006 b43err(dev->wl, "This device does not support DMA " b43_do_interrupt_thread()
2009 dev->use_pio = true; b43_do_interrupt_thread()
2010 b43_controller_restart(dev, "DMA error"); b43_do_interrupt_thread()
2015 handle_irq_ucode_debug(dev); b43_do_interrupt_thread()
2017 handle_irq_tbtt_indication(dev); b43_do_interrupt_thread()
2019 handle_irq_atim_end(dev); b43_do_interrupt_thread()
2021 handle_irq_beacon(dev); b43_do_interrupt_thread()
2023 handle_irq_pmq(dev); b43_do_interrupt_thread()
2027 handle_irq_noise(dev); b43_do_interrupt_thread()
2032 b43warn(dev->wl, "RX descriptor underrun\n"); b43_do_interrupt_thread()
2033 b43_dma_handle_rx_overflow(dev->dma.rx_ring); b43_do_interrupt_thread()
2036 if (b43_using_pio_transfers(dev)) b43_do_interrupt_thread()
2037 b43_pio_rx(dev->pio.rx_queue); b43_do_interrupt_thread()
2039 b43_dma_rx(dev->dma.rx_ring); b43_do_interrupt_thread()
2048 handle_irq_transmit_status(dev); b43_do_interrupt_thread()
2051 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43_do_interrupt_thread()
2054 if (b43_debug(dev, B43_DBG_VERBOSESTATS)) { b43_do_interrupt_thread()
2055 dev->irq_count++; b43_do_interrupt_thread()
2056 for (i = 0; i < ARRAY_SIZE(dev->irq_bit_count); i++) { b43_do_interrupt_thread()
2058 dev->irq_bit_count[i]++; b43_do_interrupt_thread()
2067 struct b43_wldev *dev = dev_id; b43_interrupt_thread_handler() local
2069 mutex_lock(&dev->wl->mutex); b43_interrupt_thread_handler()
2070 b43_do_interrupt_thread(dev); b43_interrupt_thread_handler()
2072 mutex_unlock(&dev->wl->mutex); b43_interrupt_thread_handler()
2077 static irqreturn_t b43_do_interrupt(struct b43_wldev *dev) b43_do_interrupt() argument
2084 reason = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); b43_do_interrupt()
2087 reason &= dev->irq_mask; b43_do_interrupt()
2091 dev->dma_reason[0] = b43_read32(dev, B43_MMIO_DMA0_REASON) b43_do_interrupt()
2093 dev->dma_reason[1] = b43_read32(dev, B43_MMIO_DMA1_REASON) b43_do_interrupt()
2095 dev->dma_reason[2] = b43_read32(dev, B43_MMIO_DMA2_REASON) b43_do_interrupt()
2097 dev->dma_reason[3] = b43_read32(dev, B43_MMIO_DMA3_REASON) b43_do_interrupt()
2099 dev->dma_reason[4] = b43_read32(dev, B43_MMIO_DMA4_REASON) b43_do_interrupt()
2102 dev->dma_reason[5] = b43_read32(dev, B43_MMIO_DMA5_REASON) b43_do_interrupt()
2107 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, reason); b43_do_interrupt()
2108 b43_write32(dev, B43_MMIO_DMA0_REASON, dev->dma_reason[0]); b43_do_interrupt()
2109 b43_write32(dev, B43_MMIO_DMA1_REASON, dev->dma_reason[1]); b43_do_interrupt()
2110 b43_write32(dev, B43_MMIO_DMA2_REASON, dev->dma_reason[2]); b43_do_interrupt()
2111 b43_write32(dev, B43_MMIO_DMA3_REASON, dev->dma_reason[3]); b43_do_interrupt()
2112 b43_write32(dev, B43_MMIO_DMA4_REASON, dev->dma_reason[4]); b43_do_interrupt()
2114 b43_write32(dev, B43_MMIO_DMA5_REASON, dev->dma_reason[5]); b43_do_interrupt()
2118 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0); b43_do_interrupt()
2120 dev->irq_reason = reason; b43_do_interrupt()
2128 struct b43_wldev *dev = dev_id; b43_interrupt_handler() local
2131 if (unlikely(b43_status(dev) < B43_STAT_STARTED)) b43_interrupt_handler()
2134 spin_lock(&dev->wl->hardirq_lock); b43_interrupt_handler()
2135 ret = b43_do_interrupt(dev); b43_interrupt_handler()
2137 spin_unlock(&dev->wl->hardirq_lock); b43_interrupt_handler()
2143 static void b43_sdio_interrupt_handler(struct b43_wldev *dev) b43_sdio_interrupt_handler() argument
2145 struct b43_wl *wl = dev->wl; b43_sdio_interrupt_handler()
2150 ret = b43_do_interrupt(dev); b43_sdio_interrupt_handler()
2152 b43_do_interrupt_thread(dev); b43_sdio_interrupt_handler()
2164 static void b43_release_firmware(struct b43_wldev *dev) b43_release_firmware() argument
2166 complete(&dev->fw_load_complete); b43_release_firmware()
2167 b43_do_release_fw(&dev->fw.ucode); b43_release_firmware()
2168 b43_do_release_fw(&dev->fw.pcm); b43_release_firmware()
2169 b43_do_release_fw(&dev->fw.initvals); b43_release_firmware()
2170 b43_do_release_fw(&dev->fw.initvals_band); b43_release_firmware()
2192 complete(&ctx->dev->fw_load_complete); b43_fw_cb()
2239 init_completion(&ctx->dev->fw_load_complete); b43_do_request_fw()
2241 ctx->dev->dev->dev, GFP_KERNEL, b43_do_request_fw()
2247 wait_for_completion(&ctx->dev->fw_load_complete); b43_do_request_fw()
2255 ctx->dev->dev->dev); b43_do_request_fw()
2306 struct b43_wldev *dev = ctx->dev; b43_try_request_fw() local
2307 struct b43_firmware *fw = &ctx->dev->fw; b43_try_request_fw()
2308 struct b43_phy *phy = &dev->phy; b43_try_request_fw()
2309 const u8 rev = ctx->dev->dev->core_rev; b43_try_request_fw()
2401 switch (dev->phy.type) { b43_try_request_fw()
2461 switch (dev->phy.type) { b43_try_request_fw()
2525 b43err(dev->wl, "The driver does not know which firmware (ucode) " b43_try_request_fw()
2531 b43err(dev->wl, "The driver does not know which firmware (PCM) " b43_try_request_fw()
2537 b43err(dev->wl, "The driver does not know which firmware (initvals) " b43_try_request_fw()
2548 b43_release_firmware(dev); b43_try_request_fw()
2552 static int b43_one_core_attach(struct b43_bus_dev *dev, struct b43_wl *wl);
2553 static void b43_one_core_detach(struct b43_bus_dev *dev);
2560 struct b43_wldev *dev = wl->current_dev; b43_request_firmware() local
2569 ctx->dev = dev; b43_request_firmware()
2591 b43err(dev->wl, "%s", errmsg); b43_request_firmware()
2593 b43_print_fw_helptext(dev->wl, 1); b43_request_firmware()
2598 if (!modparam_qos || dev->fw.opensource) b43_request_firmware()
2613 b43_one_core_detach(dev->dev); b43_request_firmware()
2619 static int b43_upload_microcode(struct b43_wldev *dev) b43_upload_microcode() argument
2621 struct wiphy *wiphy = dev->wl->hw->wiphy; b43_upload_microcode()
2630 macctl = b43_read32(dev, B43_MMIO_MACCTL); b43_upload_microcode()
2633 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_upload_microcode()
2636 b43_shm_write16(dev, B43_SHM_SCRATCH, i, 0); b43_upload_microcode()
2638 b43_shm_write16(dev, B43_SHM_SHARED, i, 0); b43_upload_microcode()
2641 data = (__be32 *) (dev->fw.ucode.data->data + hdr_len); b43_upload_microcode()
2642 len = (dev->fw.ucode.data->size - hdr_len) / sizeof(__be32); b43_upload_microcode()
2643 b43_shm_control_word(dev, B43_SHM_UCODE | B43_SHM_AUTOINC_W, 0x0000); b43_upload_microcode()
2645 b43_write32(dev, B43_MMIO_SHM_DATA, be32_to_cpu(data[i])); b43_upload_microcode()
2649 if (dev->fw.pcm.data) { b43_upload_microcode()
2651 data = (__be32 *) (dev->fw.pcm.data->data + hdr_len); b43_upload_microcode()
2652 len = (dev->fw.pcm.data->size - hdr_len) / sizeof(__be32); b43_upload_microcode()
2653 b43_shm_control_word(dev, B43_SHM_HW, 0x01EA); b43_upload_microcode()
2654 b43_write32(dev, B43_MMIO_SHM_DATA, 0x00004000); b43_upload_microcode()
2656 b43_shm_control_word(dev, B43_SHM_HW, 0x01EB); b43_upload_microcode()
2658 b43_write32(dev, B43_MMIO_SHM_DATA, be32_to_cpu(data[i])); b43_upload_microcode()
2663 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, B43_IRQ_ALL); b43_upload_microcode()
2666 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_PSM_JMP0, b43_upload_microcode()
2672 tmp = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); b43_upload_microcode()
2677 b43err(dev->wl, "Microcode not responding\n"); b43_upload_microcode()
2678 b43_print_fw_helptext(dev->wl, 1); b43_upload_microcode()
2684 b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); /* dummy read */ b43_upload_microcode()
2687 fwrev = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_UCODEREV); b43_upload_microcode()
2688 fwpatch = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_UCODEPATCH); b43_upload_microcode()
2689 fwdate = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_UCODEDATE); b43_upload_microcode()
2690 fwtime = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_UCODETIME); b43_upload_microcode()
2693 b43err(dev->wl, "YOUR FIRMWARE IS TOO OLD. Firmware from " b43_upload_microcode()
2696 b43_print_fw_helptext(dev->wl, 1); b43_upload_microcode()
2700 dev->fw.rev = fwrev; b43_upload_microcode()
2701 dev->fw.patch = fwpatch; b43_upload_microcode()
2702 if (dev->fw.rev >= 598) b43_upload_microcode()
2703 dev->fw.hdr_format = B43_FW_HDR_598; b43_upload_microcode()
2704 else if (dev->fw.rev >= 410) b43_upload_microcode()
2705 dev->fw.hdr_format = B43_FW_HDR_410; b43_upload_microcode()
2707 dev->fw.hdr_format = B43_FW_HDR_351; b43_upload_microcode()
2708 WARN_ON(dev->fw.opensource != (fwdate == 0xFFFF)); b43_upload_microcode()
2710 dev->qos_enabled = dev->wl->hw->queues > 1; b43_upload_microcode()
2712 dev->hwcrypto_enabled = true; b43_upload_microcode()
2714 if (dev->fw.opensource) { b43_upload_microcode()
2718 dev->fw.patch = fwtime; b43_upload_microcode()
2719 b43info(dev->wl, "Loading OpenSource firmware version %u.%u\n", b43_upload_microcode()
2720 dev->fw.rev, dev->fw.patch); b43_upload_microcode()
2722 fwcapa = b43_fwcapa_read(dev); b43_upload_microcode()
2723 if (!(fwcapa & B43_FWCAPA_HWCRYPTO) || dev->fw.pcm_request_failed) { b43_upload_microcode()
2724 b43info(dev->wl, "Hardware crypto acceleration not supported by firmware\n"); b43_upload_microcode()
2726 dev->hwcrypto_enabled = false; b43_upload_microcode()
2731 b43info(dev->wl, "Loading firmware version %u.%u " b43_upload_microcode()
2736 if (dev->fw.pcm_request_failed) { b43_upload_microcode()
2737 b43warn(dev->wl, "No \"pcm5.fw\" firmware file found. " b43_upload_microcode()
2739 b43_print_fw_helptext(dev->wl, 0); b43_upload_microcode()
2744 dev->fw.rev, dev->fw.patch); b43_upload_microcode()
2745 wiphy->hw_version = dev->dev->core_id; b43_upload_microcode()
2747 if (dev->fw.hdr_format == B43_FW_HDR_351) { b43_upload_microcode()
2750 b43warn(dev->wl, "You are using an old firmware image. " b43_upload_microcode()
2753 b43_print_fw_helptext(dev->wl, 0); b43_upload_microcode()
2760 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_PSM_RUN, b43_upload_microcode()
2766 static int b43_write_initvals(struct b43_wldev *dev, b43_write_initvals() argument
2795 b43_write32(dev, offset, value); b43_write_initvals()
2808 b43_write16(dev, offset, value); b43_write_initvals()
2821 b43err(dev->wl, "Initial Values Firmware file-format error.\n"); b43_write_initvals()
2822 b43_print_fw_helptext(dev->wl, 1); b43_write_initvals()
2827 static int b43_upload_initvals(struct b43_wldev *dev) b43_upload_initvals() argument
2831 struct b43_firmware *fw = &dev->fw; b43_upload_initvals()
2838 return b43_write_initvals(dev, ivals, count, b43_upload_initvals()
2842 static int b43_upload_initvals_band(struct b43_wldev *dev) b43_upload_initvals_band() argument
2846 struct b43_firmware *fw = &dev->fw; b43_upload_initvals_band()
2856 return b43_write_initvals(dev, ivals, count, b43_upload_initvals_band()
2865 static struct ssb_device *b43_ssb_gpio_dev(struct b43_wldev *dev) b43_ssb_gpio_dev() argument
2867 struct ssb_bus *bus = dev->dev->sdev->bus; b43_ssb_gpio_dev()
2870 return (bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev); b43_ssb_gpio_dev()
2872 return bus->chipco.dev; b43_ssb_gpio_dev()
2877 static int b43_gpio_init(struct b43_wldev *dev) b43_gpio_init() argument
2884 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0); b43_gpio_init()
2885 b43_maskset16(dev, B43_MMIO_GPIO_MASK, ~0, 0xF); b43_gpio_init()
2889 if (dev->dev->chip_id == 0x4301) { b43_gpio_init()
2892 } else if (dev->dev->chip_id == 0x5354) { b43_gpio_init()
2898 b43_write16(dev, B43_MMIO_GPIO_MASK, b43_gpio_init()
2899 b43_read16(dev, B43_MMIO_GPIO_MASK) b43_gpio_init()
2908 if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL) { b43_gpio_init()
2910 b43_write16(dev, B43_MMIO_GPIO_MASK, b43_gpio_init()
2911 b43_read16(dev, B43_MMIO_GPIO_MASK) b43_gpio_init()
2917 switch (dev->dev->bus_type) { b43_gpio_init()
2920 bcma_chipco_gpio_control(&dev->dev->bdev->bus->drv_cc, mask, set); b43_gpio_init()
2925 gpiodev = b43_ssb_gpio_dev(dev); b43_gpio_init()
2938 static void b43_gpio_cleanup(struct b43_wldev *dev) b43_gpio_cleanup() argument
2944 switch (dev->dev->bus_type) { b43_gpio_cleanup()
2947 bcma_chipco_gpio_control(&dev->dev->bdev->bus->drv_cc, ~0, 0); b43_gpio_cleanup()
2952 gpiodev = b43_ssb_gpio_dev(dev); b43_gpio_cleanup()
2961 void b43_mac_enable(struct b43_wldev *dev) b43_mac_enable() argument
2963 if (b43_debug(dev, B43_DBG_FIRMWARE)) { b43_mac_enable()
2966 fwstate = b43_shm_read16(dev, B43_SHM_SHARED, b43_mac_enable()
2970 b43err(dev->wl, "b43_mac_enable(): The firmware " b43_mac_enable()
2976 dev->mac_suspended--; b43_mac_enable()
2977 B43_WARN_ON(dev->mac_suspended < 0); b43_mac_enable()
2978 if (dev->mac_suspended == 0) { b43_mac_enable()
2979 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, B43_MACCTL_ENABLED); b43_mac_enable()
2980 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, b43_mac_enable()
2983 b43_read32(dev, B43_MMIO_MACCTL); b43_mac_enable()
2984 b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); b43_mac_enable()
2985 b43_power_saving_ctl_bits(dev, 0); b43_mac_enable()
2990 void b43_mac_suspend(struct b43_wldev *dev) b43_mac_suspend() argument
2996 B43_WARN_ON(dev->mac_suspended < 0); b43_mac_suspend()
2998 if (dev->mac_suspended == 0) { b43_mac_suspend()
2999 b43_power_saving_ctl_bits(dev, B43_PS_AWAKE); b43_mac_suspend()
3000 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_ENABLED, 0); b43_mac_suspend()
3002 b43_read32(dev, B43_MMIO_MACCTL); b43_mac_suspend()
3004 tmp = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); b43_mac_suspend()
3011 tmp = b43_read32(dev, B43_MMIO_GEN_IRQ_REASON); b43_mac_suspend()
3016 b43err(dev->wl, "MAC suspend failed\n"); b43_mac_suspend()
3019 dev->mac_suspended++; b43_mac_suspend()
3023 void b43_mac_phy_clock_set(struct b43_wldev *dev, bool on) b43_mac_phy_clock_set() argument
3027 switch (dev->dev->bus_type) { b43_mac_phy_clock_set()
3030 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_mac_phy_clock_set()
3035 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_mac_phy_clock_set()
3040 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_mac_phy_clock_set()
3045 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_mac_phy_clock_set()
3052 void b43_mac_switch_freq(struct b43_wldev *dev, u8 spurmode) b43_mac_switch_freq() argument
3054 u16 chip_id = dev->dev->chip_id; b43_mac_switch_freq()
3059 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x1862); b43_mac_switch_freq()
3060 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x6); b43_mac_switch_freq()
3063 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x3e70); b43_mac_switch_freq()
3064 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x6); b43_mac_switch_freq()
3067 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x6666); b43_mac_switch_freq()
3068 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x6); b43_mac_switch_freq()
3080 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x2082); b43_mac_switch_freq()
3081 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x8); b43_mac_switch_freq()
3084 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x5341); b43_mac_switch_freq()
3085 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x8); b43_mac_switch_freq()
3088 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x8889); b43_mac_switch_freq()
3089 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0x8); b43_mac_switch_freq()
3092 } else if (dev->phy.type == B43_PHYTYPE_LCN) { b43_mac_switch_freq()
3095 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0x7CE0); b43_mac_switch_freq()
3096 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0xC); b43_mac_switch_freq()
3099 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_LOW, 0xCCCD); b43_mac_switch_freq()
3100 b43_write16(dev, B43_MMIO_TSF_CLK_FRAC_HIGH, 0xC); b43_mac_switch_freq()
3106 static void b43_adjust_opmode(struct b43_wldev *dev) b43_adjust_opmode() argument
3108 struct b43_wl *wl = dev->wl; b43_adjust_opmode()
3112 ctl = b43_read32(dev, B43_MMIO_MACCTL); b43_adjust_opmode()
3140 if (dev->dev->core_rev <= 4) b43_adjust_opmode()
3143 b43_write32(dev, B43_MMIO_MACCTL, ctl); b43_adjust_opmode()
3147 if (dev->dev->chip_id == 0x4306 && b43_adjust_opmode()
3148 dev->dev->chip_rev == 3) b43_adjust_opmode()
3153 b43_write16(dev, 0x612, cfp_pretbtt); b43_adjust_opmode()
3160 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_DISCPMQ, 0); b43_adjust_opmode()
3162 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, B43_MACCTL_DISCPMQ); b43_adjust_opmode()
3165 static void b43_rate_memory_write(struct b43_wldev *dev, u16 rate, int is_ofdm) b43_rate_memory_write() argument
3176 b43_shm_write16(dev, B43_SHM_SHARED, offset + 0x20, b43_rate_memory_write()
3177 b43_shm_read16(dev, B43_SHM_SHARED, offset)); b43_rate_memory_write()
3180 static void b43_rate_memory_init(struct b43_wldev *dev) b43_rate_memory_init() argument
3182 switch (dev->phy.type) { b43_rate_memory_init()
3189 b43_rate_memory_write(dev, B43_OFDM_RATE_6MB, 1); b43_rate_memory_init()
3190 b43_rate_memory_write(dev, B43_OFDM_RATE_9MB, 1); b43_rate_memory_init()
3191 b43_rate_memory_write(dev, B43_OFDM_RATE_12MB, 1); b43_rate_memory_init()
3192 b43_rate_memory_write(dev, B43_OFDM_RATE_18MB, 1); b43_rate_memory_init()
3193 b43_rate_memory_write(dev, B43_OFDM_RATE_24MB, 1); b43_rate_memory_init()
3194 b43_rate_memory_write(dev, B43_OFDM_RATE_36MB, 1); b43_rate_memory_init()
3195 b43_rate_memory_write(dev, B43_OFDM_RATE_48MB, 1); b43_rate_memory_init()
3196 b43_rate_memory_write(dev, B43_OFDM_RATE_54MB, 1); b43_rate_memory_init()
3197 if (dev->phy.type == B43_PHYTYPE_A) b43_rate_memory_init()
3201 b43_rate_memory_write(dev, B43_CCK_RATE_1MB, 0); b43_rate_memory_init()
3202 b43_rate_memory_write(dev, B43_CCK_RATE_2MB, 0); b43_rate_memory_init()
3203 b43_rate_memory_write(dev, B43_CCK_RATE_5MB, 0); b43_rate_memory_init()
3204 b43_rate_memory_write(dev, B43_CCK_RATE_11MB, 0); b43_rate_memory_init()
3212 static void b43_set_phytxctl_defaults(struct b43_wldev *dev) b43_set_phytxctl_defaults() argument
3220 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL, ctl); b43_set_phytxctl_defaults()
3221 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_ACKCTSPHYCTL, ctl); b43_set_phytxctl_defaults()
3222 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRPHYCTL, ctl); b43_set_phytxctl_defaults()
3226 static void b43_mgmtframe_txantenna(struct b43_wldev *dev, int antenna) b43_mgmtframe_txantenna() argument
3234 tmp = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_ACKCTSPHYCTL); b43_mgmtframe_txantenna()
3236 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_ACKCTSPHYCTL, tmp); b43_mgmtframe_txantenna()
3238 tmp = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_PRPHYCTL); b43_mgmtframe_txantenna()
3240 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRPHYCTL, tmp); b43_mgmtframe_txantenna()
3244 static void b43_chip_exit(struct b43_wldev *dev) b43_chip_exit() argument
3246 b43_phy_exit(dev); b43_chip_exit()
3247 b43_gpio_cleanup(dev); b43_chip_exit()
3254 static int b43_chip_init(struct b43_wldev *dev) b43_chip_init() argument
3256 struct b43_phy *phy = &dev->phy; b43_chip_init()
3263 if (dev->phy.gmode) b43_chip_init()
3266 b43_write32(dev, B43_MMIO_MACCTL, macctl); b43_chip_init()
3268 err = b43_upload_microcode(dev); b43_chip_init()
3272 err = b43_gpio_init(dev); b43_chip_init()
3276 err = b43_upload_initvals(dev); b43_chip_init()
3280 err = b43_upload_initvals_band(dev); b43_chip_init()
3285 phy->ops->switch_analog(dev, 1); b43_chip_init()
3286 err = b43_phy_init(dev); b43_chip_init()
3292 phy->ops->interf_mitigation(dev, B43_INTERFMODE_NONE); b43_chip_init()
3296 phy->ops->set_rx_antenna(dev, B43_ANTENNA_DEFAULT); b43_chip_init()
3297 b43_mgmtframe_txantenna(dev, B43_ANTENNA_DEFAULT); b43_chip_init()
3300 value16 = b43_read16(dev, 0x005E); b43_chip_init()
3302 b43_write16(dev, 0x005E, value16); b43_chip_init()
3304 b43_write32(dev, 0x0100, 0x01000000); b43_chip_init()
3305 if (dev->dev->core_rev < 5) b43_chip_init()
3306 b43_write32(dev, 0x010C, 0x01000000); b43_chip_init()
3308 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_INFRA, 0); b43_chip_init()
3309 b43_maskset32(dev, B43_MMIO_MACCTL, ~0, B43_MACCTL_INFRA); b43_chip_init()
3313 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRMAXTIME, 0); b43_chip_init()
3316 b43_adjust_opmode(dev); b43_chip_init()
3318 if (dev->dev->core_rev < 3) { b43_chip_init()
3319 b43_write16(dev, 0x060E, 0x0000); b43_chip_init()
3320 b43_write16(dev, 0x0610, 0x8000); b43_chip_init()
3321 b43_write16(dev, 0x0604, 0x0000); b43_chip_init()
3322 b43_write16(dev, 0x0606, 0x0200); b43_chip_init()
3324 b43_write32(dev, 0x0188, 0x80000000); b43_chip_init()
3325 b43_write32(dev, 0x018C, 0x02000000); b43_chip_init()
3327 b43_write32(dev, B43_MMIO_GEN_IRQ_REASON, 0x00004000); b43_chip_init()
3328 b43_write32(dev, B43_MMIO_DMA0_IRQ_MASK, 0x0001FC00); b43_chip_init()
3329 b43_write32(dev, B43_MMIO_DMA1_IRQ_MASK, 0x0000DC00); b43_chip_init()
3330 b43_write32(dev, B43_MMIO_DMA2_IRQ_MASK, 0x0000DC00); b43_chip_init()
3331 b43_write32(dev, B43_MMIO_DMA3_IRQ_MASK, 0x0001DC00); b43_chip_init()
3332 b43_write32(dev, B43_MMIO_DMA4_IRQ_MASK, 0x0000DC00); b43_chip_init()
3333 b43_write32(dev, B43_MMIO_DMA5_IRQ_MASK, 0x0000DC00); b43_chip_init()
3335 b43_mac_phy_clock_set(dev, true); b43_chip_init()
3337 switch (dev->dev->bus_type) { b43_chip_init()
3341 b43_write16(dev, B43_MMIO_POWERUP_DELAY, 0xE74); b43_chip_init()
3346 b43_write16(dev, B43_MMIO_POWERUP_DELAY, b43_chip_init()
3347 dev->dev->sdev->bus->chipco.fast_pwrup_delay); b43_chip_init()
3353 b43dbg(dev->wl, "Chip initialized\n"); b43_chip_init()
3358 b43_gpio_cleanup(dev); b43_chip_init()
3362 static void b43_periodic_every60sec(struct b43_wldev *dev) b43_periodic_every60sec() argument
3364 const struct b43_phy_operations *ops = dev->phy.ops; b43_periodic_every60sec()
3367 ops->pwork_60sec(dev); b43_periodic_every60sec()
3370 b43_phy_txpower_check(dev, B43_TXPWR_IGNORE_TIME); b43_periodic_every60sec()
3373 static void b43_periodic_every30sec(struct b43_wldev *dev) b43_periodic_every30sec() argument
3376 b43_calculate_link_quality(dev); b43_periodic_every30sec()
3379 static void b43_periodic_every15sec(struct b43_wldev *dev) b43_periodic_every15sec() argument
3381 struct b43_phy *phy = &dev->phy; b43_periodic_every15sec()
3384 if (dev->fw.opensource) { b43_periodic_every15sec()
3387 wdr = b43_shm_read16(dev, B43_SHM_SCRATCH, B43_WATCHDOG_REG); b43_periodic_every15sec()
3389 b43err(dev->wl, "Firmware watchdog: The firmware died!\n"); b43_periodic_every15sec()
3390 b43_controller_restart(dev, "Firmware watchdog"); b43_periodic_every15sec()
3393 b43_shm_write16(dev, B43_SHM_SCRATCH, b43_periodic_every15sec()
3399 phy->ops->pwork_15sec(dev); b43_periodic_every15sec()
3405 if (b43_debug(dev, B43_DBG_VERBOSESTATS)) { b43_periodic_every15sec()
3408 b43dbg(dev->wl, "Stats: %7u IRQs/sec, %7u TX/sec, %7u RX/sec\n", b43_periodic_every15sec()
3409 dev->irq_count / 15, b43_periodic_every15sec()
3410 dev->tx_count / 15, b43_periodic_every15sec()
3411 dev->rx_count / 15); b43_periodic_every15sec()
3412 dev->irq_count = 0; b43_periodic_every15sec()
3413 dev->tx_count = 0; b43_periodic_every15sec()
3414 dev->rx_count = 0; b43_periodic_every15sec()
3415 for (i = 0; i < ARRAY_SIZE(dev->irq_bit_count); i++) { b43_periodic_every15sec()
3416 if (dev->irq_bit_count[i]) { b43_periodic_every15sec()
3417 b43dbg(dev->wl, "Stats: %7u IRQ-%02u/sec (0x%08X)\n", b43_periodic_every15sec()
3418 dev->irq_bit_count[i] / 15, i, (1 << i)); b43_periodic_every15sec()
3419 dev->irq_bit_count[i] = 0; b43_periodic_every15sec()
3426 static void do_periodic_work(struct b43_wldev *dev) do_periodic_work() argument
3430 state = dev->periodic_state; do_periodic_work()
3432 b43_periodic_every60sec(dev); do_periodic_work()
3434 b43_periodic_every30sec(dev); do_periodic_work()
3435 b43_periodic_every15sec(dev); do_periodic_work()
3445 struct b43_wldev *dev = container_of(work, struct b43_wldev, b43_periodic_work_handler() local
3447 struct b43_wl *wl = dev->wl; b43_periodic_work_handler()
3452 if (unlikely(b43_status(dev) != B43_STAT_STARTED)) b43_periodic_work_handler()
3454 if (b43_debug(dev, B43_DBG_PWORK_STOP)) b43_periodic_work_handler()
3457 do_periodic_work(dev); b43_periodic_work_handler()
3459 dev->periodic_state++; b43_periodic_work_handler()
3461 if (b43_debug(dev, B43_DBG_PWORK_FAST)) b43_periodic_work_handler()
3465 ieee80211_queue_delayed_work(wl->hw, &dev->periodic_work, delay); b43_periodic_work_handler()
3470 static void b43_periodic_tasks_setup(struct b43_wldev *dev) b43_periodic_tasks_setup() argument
3472 struct delayed_work *work = &dev->periodic_work; b43_periodic_tasks_setup()
3474 dev->periodic_state = 0; b43_periodic_tasks_setup()
3476 ieee80211_queue_delayed_work(dev->wl->hw, work, 0); b43_periodic_tasks_setup()
3480 static int b43_validate_chipaccess(struct b43_wldev *dev) b43_validate_chipaccess() argument
3484 backup0 = b43_shm_read32(dev, B43_SHM_SHARED, 0); b43_validate_chipaccess()
3485 backup4 = b43_shm_read32(dev, B43_SHM_SHARED, 4); b43_validate_chipaccess()
3488 b43_shm_write32(dev, B43_SHM_SHARED, 0, 0x55AAAA55); b43_validate_chipaccess()
3489 if (b43_shm_read32(dev, B43_SHM_SHARED, 0) != 0x55AAAA55) b43_validate_chipaccess()
3491 b43_shm_write32(dev, B43_SHM_SHARED, 0, 0xAA5555AA); b43_validate_chipaccess()
3492 if (b43_shm_read32(dev, B43_SHM_SHARED, 0) != 0xAA5555AA) b43_validate_chipaccess()
3497 b43_shm_write16(dev, B43_SHM_SHARED, 0, 0x1122); b43_validate_chipaccess()
3498 b43_shm_write16(dev, B43_SHM_SHARED, 2, 0x3344); b43_validate_chipaccess()
3499 b43_shm_write16(dev, B43_SHM_SHARED, 4, 0x5566); b43_validate_chipaccess()
3500 b43_shm_write16(dev, B43_SHM_SHARED, 6, 0x7788); b43_validate_chipaccess()
3501 if (b43_shm_read32(dev, B43_SHM_SHARED, 2) != 0x55663344) b43_validate_chipaccess()
3502 b43warn(dev->wl, "Unaligned 32bit SHM read access is broken\n"); b43_validate_chipaccess()
3503 b43_shm_write32(dev, B43_SHM_SHARED, 2, 0xAABBCCDD); b43_validate_chipaccess()
3504 if (b43_shm_read16(dev, B43_SHM_SHARED, 0) != 0x1122 || b43_validate_chipaccess()
3505 b43_shm_read16(dev, B43_SHM_SHARED, 2) != 0xCCDD || b43_validate_chipaccess()
3506 b43_shm_read16(dev, B43_SHM_SHARED, 4) != 0xAABB || b43_validate_chipaccess()
3507 b43_shm_read16(dev, B43_SHM_SHARED, 6) != 0x7788) b43_validate_chipaccess()
3508 b43warn(dev->wl, "Unaligned 32bit SHM write access is broken\n"); b43_validate_chipaccess()
3510 b43_shm_write32(dev, B43_SHM_SHARED, 0, backup0); b43_validate_chipaccess()
3511 b43_shm_write32(dev, B43_SHM_SHARED, 4, backup4); b43_validate_chipaccess()
3513 if ((dev->dev->core_rev >= 3) && (dev->dev->core_rev <= 10)) { b43_validate_chipaccess()
3516 b43_write16(dev, B43_MMIO_TSF_CFP_START, 0xAAAA); b43_validate_chipaccess()
3517 b43_write32(dev, B43_MMIO_TSF_CFP_START, 0xCCCCBBBB); b43_validate_chipaccess()
3518 if (b43_read16(dev, B43_MMIO_TSF_CFP_START_LOW) != 0xBBBB) b43_validate_chipaccess()
3520 if (b43_read16(dev, B43_MMIO_TSF_CFP_START_HIGH) != 0xCCCC) b43_validate_chipaccess()
3523 b43_write32(dev, B43_MMIO_TSF_CFP_START, 0); b43_validate_chipaccess()
3525 v = b43_read32(dev, B43_MMIO_MACCTL); b43_validate_chipaccess()
3532 b43err(dev->wl, "Failed to validate the chipaccess\n"); b43_validate_chipaccess()
3536 static void b43_security_init(struct b43_wldev *dev) b43_security_init() argument
3538 dev->ktp = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_KTP); b43_security_init()
3542 dev->ktp *= 2; b43_security_init()
3544 b43_write16(dev, B43_MMIO_RCMTA_COUNT, B43_NR_PAIRWISE_KEYS); b43_security_init()
3546 b43_clear_keys(dev); b43_security_init()
3553 struct b43_wldev *dev; b43_rng_read() local
3557 dev = wl->current_dev; b43_rng_read()
3558 if (likely(dev && b43_status(dev) >= B43_STAT_INITIALIZED)) { b43_rng_read()
3559 *data = b43_read16(dev, B43_MMIO_RNG); b43_rng_read()
3601 struct b43_wldev *dev; b43_tx_work() local
3607 dev = wl->current_dev; b43_tx_work()
3608 if (unlikely(!dev || b43_status(dev) < B43_STAT_STARTED)) { b43_tx_work()
3616 if (b43_using_pio_transfers(dev)) b43_tx_work()
3617 err = b43_pio_tx(dev, skb); b43_tx_work()
3619 err = b43_dma_tx(dev, skb); b43_tx_work()
3636 dev->tx_count++; b43_tx_work()
3662 static void b43_qos_params_upload(struct b43_wldev *dev, b43_qos_params_upload() argument
3670 if (!dev->qos_enabled) b43_qos_params_upload()
3673 bslots = b43_read16(dev, B43_MMIO_RNG) & p->cw_min; b43_qos_params_upload()
3687 tmp = b43_shm_read16(dev, B43_SHM_SHARED, b43_qos_params_upload()
3691 b43_shm_write16(dev, B43_SHM_SHARED, b43_qos_params_upload()
3695 b43_shm_write16(dev, B43_SHM_SHARED, b43_qos_params_upload()
3712 static void b43_qos_upload_all(struct b43_wldev *dev) b43_qos_upload_all() argument
3714 struct b43_wl *wl = dev->wl; b43_qos_upload_all()
3718 if (!dev->qos_enabled) b43_qos_upload_all()
3724 b43_mac_suspend(dev); b43_qos_upload_all()
3727 b43_qos_params_upload(dev, &(params->p), b43_qos_upload_all()
3730 b43_mac_enable(dev); b43_qos_upload_all()
3778 static void b43_qos_init(struct b43_wldev *dev) b43_qos_init() argument
3780 if (!dev->qos_enabled) { b43_qos_init()
3782 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_EDCF); b43_qos_init()
3783 b43_write16(dev, B43_MMIO_IFSCTL, b43_qos_init()
3784 b43_read16(dev, B43_MMIO_IFSCTL) b43_qos_init()
3786 b43dbg(dev->wl, "QoS disabled\n"); b43_qos_init()
3791 b43_qos_upload_all(dev); b43_qos_init()
3794 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_EDCF); b43_qos_init()
3795 b43_write16(dev, B43_MMIO_IFSCTL, b43_qos_init()
3796 b43_read16(dev, B43_MMIO_IFSCTL) b43_qos_init()
3798 b43dbg(dev->wl, "QoS enabled\n"); b43_qos_init()
3806 struct b43_wldev *dev; b43_op_conf_tx() local
3820 dev = wl->current_dev; b43_op_conf_tx()
3821 if (unlikely(!dev || (b43_status(dev) < B43_STAT_INITIALIZED))) b43_op_conf_tx()
3825 b43_mac_suspend(dev); b43_op_conf_tx()
3826 b43_qos_params_upload(dev, &(wl->qos_params[queue].p), b43_op_conf_tx()
3828 b43_mac_enable(dev); b43_op_conf_tx()
3852 struct b43_wldev *dev; b43_op_get_tsf() local
3856 dev = wl->current_dev; b43_op_get_tsf()
3858 if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED)) b43_op_get_tsf()
3859 b43_tsf_read(dev, &tsf); b43_op_get_tsf()
3872 struct b43_wldev *dev; b43_op_set_tsf() local
3875 dev = wl->current_dev; b43_op_set_tsf()
3877 if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED)) b43_op_set_tsf()
3878 b43_tsf_write(dev, tsf); b43_op_set_tsf()
3898 static int b43_switch_band(struct b43_wldev *dev, b43_switch_band() argument
3901 struct b43_phy *phy = &dev->phy; b43_switch_band()
3919 b43err(dev->wl, "This device doesn't support %s-GHz band\n", b43_switch_band()
3929 b43dbg(dev->wl, "Switching to %s GHz band\n", b43_switch_band()
3934 b43_software_rfkill(dev, true); b43_switch_band()
3937 b43_phy_put_into_reset(dev); b43_switch_band()
3938 switch (dev->dev->bus_type) { b43_switch_band()
3941 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOCTL); b43_switch_band()
3946 bcma_awrite32(dev->dev->bdev, BCMA_IOCTL, tmp); b43_switch_band()
3951 tmp = ssb_read32(dev->dev->sdev, SSB_TMSLOW); b43_switch_band()
3956 ssb_write32(dev->dev->sdev, SSB_TMSLOW, tmp); b43_switch_band()
3960 b43_phy_take_out_of_reset(dev); b43_switch_band()
3962 b43_upload_initvals_band(dev); b43_switch_band()
3964 b43_phy_init(dev); b43_switch_band()
3969 static void b43_set_beacon_listen_interval(struct b43_wldev *dev, u16 interval) b43_set_beacon_listen_interval() argument
3972 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_BCN_LI, interval); b43_set_beacon_listen_interval()
3976 static void b43_set_retry_limits(struct b43_wldev *dev, b43_set_retry_limits() argument
3985 b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_SRLIMIT, b43_set_retry_limits()
3987 b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_LRLIMIT, b43_set_retry_limits()
3994 struct b43_wldev *dev = wl->current_dev; b43_op_config() local
3995 struct b43_phy *phy = &dev->phy; b43_op_config()
4001 b43_mac_suspend(dev); b43_op_config()
4004 b43_set_beacon_listen_interval(dev, conf->listen_interval); b43_op_config()
4011 err = b43_switch_band(dev, conf->chandef.chan); b43_op_config()
4018 b43_switch_channel(dev, phy->channel); b43_op_config()
4022 b43_set_retry_limits(dev, conf->short_frame_max_tx_count, b43_op_config()
4028 dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR); b43_op_config()
4034 b43_phy_txpower_check(dev, B43_TXPWR_IGNORE_TIME | b43_op_config()
4041 b43_mgmtframe_txantenna(dev, antenna); b43_op_config()
4044 phy->ops->set_rx_antenna(dev, antenna); b43_op_config()
4048 b43_software_rfkill(dev, false); b43_op_config()
4049 b43info(dev->wl, "Radio turned on by software\n"); b43_op_config()
4050 if (!dev->radio_hw_enable) { b43_op_config()
4051 b43info(dev->wl, "The hardware RF-kill button " b43_op_config()
4056 b43_software_rfkill(dev, true); b43_op_config()
4057 b43info(dev->wl, "Radio turned off by software\n"); b43_op_config()
4062 b43_mac_enable(dev); b43_op_config()
4068 static void b43_update_basic_rates(struct b43_wldev *dev, u32 brates) b43_update_basic_rates() argument
4071 dev->wl->hw->wiphy->bands[b43_current_band(dev->wl)]; b43_update_basic_rates()
4105 rateptr = b43_shm_read16(dev, B43_SHM_SHARED, b43_update_basic_rates()
4108 b43_shm_write16(dev, B43_SHM_SHARED, basic + 2 * offset, b43_update_basic_rates()
4119 struct b43_wldev *dev; b43_op_bss_info_changed() local
4123 dev = wl->current_dev; b43_op_bss_info_changed()
4124 if (!dev || b43_status(dev) < B43_STAT_STARTED) b43_op_bss_info_changed()
4136 if (b43_status(dev) >= B43_STAT_INITIALIZED) { b43_op_bss_info_changed()
4144 b43_write_mac_bssid_templates(dev); b43_op_bss_info_changed()
4147 b43_mac_suspend(dev); b43_op_bss_info_changed()
4155 b43_set_beacon_int(dev, conf->beacon_int); b43_op_bss_info_changed()
4158 b43_update_basic_rates(dev, conf->basic_rates); b43_op_bss_info_changed()
4162 b43_short_slot_timing_enable(dev); b43_op_bss_info_changed()
4164 b43_short_slot_timing_disable(dev); b43_op_bss_info_changed()
4167 b43_mac_enable(dev); b43_op_bss_info_changed()
4177 struct b43_wldev *dev; b43_op_set_key() local
4202 dev = wl->current_dev; b43_op_set_key()
4204 if (!dev || b43_status(dev) < B43_STAT_INITIALIZED) b43_op_set_key()
4207 if (dev->fw.pcm_request_failed || !dev->hwcrypto_enabled) { b43_op_set_key()
4252 err = b43_key_write(dev, -1, algorithm, b43_op_set_key()
4257 err = b43_key_write(dev, index, algorithm, b43_op_set_key()
4265 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_USEDEFKEYS); b43_op_set_key()
4267 b43_hf_write(dev, b43_op_set_key()
4268 b43_hf_read(dev) & ~B43_HF_USEDEFKEYS); b43_op_set_key()
4275 err = b43_key_clear(dev, key->hw_key_idx); b43_op_set_key()
4290 b43_dump_keymemory(dev); b43_op_set_key()
4302 struct b43_wldev *dev; b43_op_configure_filter() local
4305 dev = wl->current_dev; b43_op_configure_filter()
4306 if (!dev) { b43_op_configure_filter()
4327 if (changed && b43_status(dev) >= B43_STAT_INITIALIZED) b43_op_configure_filter()
4328 b43_adjust_opmode(dev); b43_op_configure_filter()
4335 * Returns the current dev. This might be different from the passed in dev,
4337 static struct b43_wldev * b43_wireless_core_stop(struct b43_wldev *dev) b43_wireless_core_stop() argument
4344 if (!dev) b43_wireless_core_stop()
4346 wl = dev->wl; b43_wireless_core_stop()
4348 if (!dev || b43_status(dev) < B43_STAT_STARTED) b43_wireless_core_stop()
4349 return dev; b43_wireless_core_stop()
4353 cancel_delayed_work_sync(&dev->periodic_work); b43_wireless_core_stop()
4355 b43_leds_stop(dev); b43_wireless_core_stop()
4357 dev = wl->current_dev; b43_wireless_core_stop()
4358 if (!dev || b43_status(dev) < B43_STAT_STARTED) { b43_wireless_core_stop()
4360 return dev; b43_wireless_core_stop()
4364 b43_set_status(dev, B43_STAT_INITIALIZED); b43_wireless_core_stop()
4365 if (b43_bus_host_is_sdio(dev->dev)) { b43_wireless_core_stop()
4367 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0); b43_wireless_core_stop()
4368 b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */ b43_wireless_core_stop()
4371 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, 0); b43_wireless_core_stop()
4372 b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); /* Flush */ b43_wireless_core_stop()
4376 orig_dev = dev; b43_wireless_core_stop()
4378 if (b43_bus_host_is_sdio(dev->dev)) { b43_wireless_core_stop()
4379 b43_sdio_free_irq(dev); b43_wireless_core_stop()
4381 synchronize_irq(dev->dev->irq); b43_wireless_core_stop()
4382 free_irq(dev->dev->irq, dev); b43_wireless_core_stop()
4385 dev = wl->current_dev; b43_wireless_core_stop()
4386 if (!dev) b43_wireless_core_stop()
4387 return dev; b43_wireless_core_stop()
4388 if (dev != orig_dev) { b43_wireless_core_stop()
4389 if (b43_status(dev) >= B43_STAT_STARTED) b43_wireless_core_stop()
4391 return dev; b43_wireless_core_stop()
4393 mask = b43_read32(dev, B43_MMIO_GEN_IRQ_MASK); b43_wireless_core_stop()
4406 b43_mac_suspend(dev); b43_wireless_core_stop()
4407 b43_leds_exit(dev); b43_wireless_core_stop()
4410 return dev; b43_wireless_core_stop()
4414 static int b43_wireless_core_start(struct b43_wldev *dev) b43_wireless_core_start() argument
4418 B43_WARN_ON(b43_status(dev) != B43_STAT_INITIALIZED); b43_wireless_core_start()
4420 drain_txstatus_queue(dev); b43_wireless_core_start()
4421 if (b43_bus_host_is_sdio(dev->dev)) { b43_wireless_core_start()
4422 err = b43_sdio_request_irq(dev, b43_sdio_interrupt_handler); b43_wireless_core_start()
4424 b43err(dev->wl, "Cannot request SDIO IRQ\n"); b43_wireless_core_start()
4428 err = request_threaded_irq(dev->dev->irq, b43_interrupt_handler, b43_wireless_core_start()
4430 IRQF_SHARED, KBUILD_MODNAME, dev); b43_wireless_core_start()
4432 b43err(dev->wl, "Cannot request IRQ-%d\n", b43_wireless_core_start()
4433 dev->dev->irq); b43_wireless_core_start()
4439 ieee80211_wake_queues(dev->wl->hw); b43_wireless_core_start()
4440 b43_set_status(dev, B43_STAT_STARTED); b43_wireless_core_start()
4443 b43_mac_enable(dev); b43_wireless_core_start()
4444 b43_write32(dev, B43_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43_wireless_core_start()
4447 b43_periodic_tasks_setup(dev); b43_wireless_core_start()
4449 b43_leds_init(dev); b43_wireless_core_start()
4451 b43dbg(dev->wl, "Wireless interface started\n"); b43_wireless_core_start()
4456 static char *b43_phy_name(struct b43_wldev *dev, u8 phy_type) b43_phy_name() argument
4486 static int b43_phy_versioning(struct b43_wldev *dev) b43_phy_versioning() argument
4488 struct b43_phy *phy = &dev->phy; b43_phy_versioning()
4489 const u8 core_rev = dev->dev->core_rev; b43_phy_versioning()
4501 tmp = b43_read16(dev, B43_MMIO_PHY_VER); b43_phy_versioning()
4553 b43err(dev->wl, "FOUND UNSUPPORTED PHY (Analog %u, Type %d (%s), Revision %u)\n", b43_phy_versioning()
4554 analog_type, phy_type, b43_phy_name(dev, phy_type), b43_phy_versioning()
4558 b43info(dev->wl, "Found PHY: Analog %u, Type %d (%s), Revision %u\n", b43_phy_versioning()
4559 analog_type, phy_type, b43_phy_name(dev, phy_type), phy_rev); b43_phy_versioning()
4565 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, 0); b43_phy_versioning()
4566 radio_rev = b43_read16(dev, B43_MMIO_RADIO24_DATA); b43_phy_versioning()
4568 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, 1); b43_phy_versioning()
4569 radio_id = b43_read16(dev, B43_MMIO_RADIO24_DATA); b43_phy_versioning()
4576 b43_write16f(dev, B43_MMIO_RADIO24_CONTROL, tmp); b43_phy_versioning()
4577 radio24[tmp] = b43_read16(dev, B43_MMIO_RADIO24_DATA); b43_phy_versioning()
4585 if (dev->dev->chip_id == 0x4317) { b43_phy_versioning()
4586 if (dev->dev->chip_rev == 0) b43_phy_versioning()
4588 else if (dev->dev->chip_rev == 1) b43_phy_versioning()
4593 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, b43_phy_versioning()
4595 tmp = b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); b43_phy_versioning()
4596 b43_write16f(dev, B43_MMIO_RADIO_CONTROL, b43_phy_versioning()
4598 tmp |= b43_read16(dev, B43_MMIO_RADIO_DATA_HIGH) << 16; b43_phy_versioning()
4653 b43err(dev->wl, b43_phy_versioning()
4658 b43info(dev->wl, b43_phy_versioning()
4674 static void setup_struct_phy_for_init(struct b43_wldev *dev, setup_struct_phy_for_init() argument
4688 static void setup_struct_wldev_for_init(struct b43_wldev *dev) setup_struct_wldev_for_init() argument
4690 dev->dfq_valid = false; setup_struct_wldev_for_init()
4694 dev->radio_hw_enable = true; setup_struct_wldev_for_init()
4697 memset(&dev->stats, 0, sizeof(dev->stats)); setup_struct_wldev_for_init()
4699 setup_struct_phy_for_init(dev, &dev->phy); setup_struct_wldev_for_init()
4702 dev->irq_reason = 0; setup_struct_wldev_for_init()
4703 memset(dev->dma_reason, 0, sizeof(dev->dma_reason)); setup_struct_wldev_for_init()
4704 dev->irq_mask = B43_IRQ_MASKTEMPLATE; setup_struct_wldev_for_init()
4706 dev->irq_mask &= ~B43_IRQ_PHY_TXERR; setup_struct_wldev_for_init()
4708 dev->mac_suspended = 1; setup_struct_wldev_for_init()
4711 memset(&dev->noisecalc, 0, sizeof(dev->noisecalc)); setup_struct_wldev_for_init()
4714 static void b43_bluetooth_coext_enable(struct b43_wldev *dev) b43_bluetooth_coext_enable() argument
4716 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_bluetooth_coext_enable()
4723 if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode) b43_bluetooth_coext_enable()
4726 hf = b43_hf_read(dev); b43_bluetooth_coext_enable()
4731 b43_hf_write(dev, hf); b43_bluetooth_coext_enable()
4734 static void b43_bluetooth_coext_disable(struct b43_wldev *dev) b43_bluetooth_coext_disable() argument
4741 static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev) b43_imcfglo_timeouts_workaround() argument
4747 if (dev->dev->bus_type != B43_BUS_SSB) b43_imcfglo_timeouts_workaround()
4753 bus = dev->dev->sdev->bus; b43_imcfglo_timeouts_workaround()
4757 tmp = ssb_read32(dev->dev->sdev, SSB_IMCFGLO); b43_imcfglo_timeouts_workaround()
4761 ssb_write32(dev->dev->sdev, SSB_IMCFGLO, tmp); b43_imcfglo_timeouts_workaround()
4766 static void b43_set_synth_pu_delay(struct b43_wldev *dev, bool idle) b43_set_synth_pu_delay() argument
4771 if (dev->phy.type == B43_PHYTYPE_A) b43_set_synth_pu_delay()
4775 if (b43_is_mode(dev->wl, NL80211_IFTYPE_ADHOC) || idle) b43_set_synth_pu_delay()
4777 if ((dev->phy.radio_ver == 0x2050) && (dev->phy.radio_rev == 8)) b43_set_synth_pu_delay()
4780 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_SPUWKUP, pu_delay); b43_set_synth_pu_delay()
4784 static void b43_set_pretbtt(struct b43_wldev *dev) b43_set_pretbtt() argument
4789 if (b43_is_mode(dev->wl, NL80211_IFTYPE_ADHOC)) { b43_set_pretbtt()
4792 if (dev->phy.type == B43_PHYTYPE_A) b43_set_pretbtt()
4797 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRETBTT, pretbtt); b43_set_pretbtt()
4798 b43_write16(dev, B43_MMIO_TSF_CFP_PRETBTT, pretbtt); b43_set_pretbtt()
4803 static void b43_wireless_core_exit(struct b43_wldev *dev) b43_wireless_core_exit() argument
4805 B43_WARN_ON(dev && b43_status(dev) > B43_STAT_INITIALIZED); b43_wireless_core_exit()
4806 if (!dev || b43_status(dev) != B43_STAT_INITIALIZED) b43_wireless_core_exit()
4809 b43_set_status(dev, B43_STAT_UNINIT); b43_wireless_core_exit()
4812 b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_PSM_RUN, b43_wireless_core_exit()
4815 switch (dev->dev->bus_type) { b43_wireless_core_exit()
4818 bcma_host_pci_down(dev->dev->bdev->bus); b43_wireless_core_exit()
4828 b43_dma_free(dev); b43_wireless_core_exit()
4829 b43_pio_free(dev); b43_wireless_core_exit()
4830 b43_chip_exit(dev); b43_wireless_core_exit()
4831 dev->phy.ops->switch_analog(dev, 0); b43_wireless_core_exit()
4832 if (dev->wl->current_beacon) { b43_wireless_core_exit()
4833 dev_kfree_skb_any(dev->wl->current_beacon); b43_wireless_core_exit()
4834 dev->wl->current_beacon = NULL; b43_wireless_core_exit()
4837 b43_device_disable(dev, 0); b43_wireless_core_exit()
4838 b43_bus_may_powerdown(dev); b43_wireless_core_exit()
4842 static int b43_wireless_core_init(struct b43_wldev *dev) b43_wireless_core_init() argument
4844 struct ssb_sprom *sprom = dev->dev->bus_sprom; b43_wireless_core_init()
4845 struct b43_phy *phy = &dev->phy; b43_wireless_core_init()
4849 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT); b43_wireless_core_init()
4851 err = b43_bus_powerup(dev, 0); b43_wireless_core_init()
4854 if (!b43_device_is_enabled(dev)) b43_wireless_core_init()
4855 b43_wireless_core_reset(dev, phy->gmode); b43_wireless_core_init()
4858 setup_struct_wldev_for_init(dev); b43_wireless_core_init()
4859 phy->ops->prepare_structs(dev); b43_wireless_core_init()
4862 switch (dev->dev->bus_type) { b43_wireless_core_init()
4865 bcma_host_pci_irq_ctl(dev->dev->bdev->bus, b43_wireless_core_init()
4866 dev->dev->bdev, true); b43_wireless_core_init()
4867 bcma_host_pci_up(dev->dev->bdev->bus); b43_wireless_core_init()
4872 ssb_pcicore_dev_irqvecs_enable(&dev->dev->sdev->bus->pcicore, b43_wireless_core_init()
4873 dev->dev->sdev); b43_wireless_core_init()
4878 b43_imcfglo_timeouts_workaround(dev); b43_wireless_core_init()
4879 b43_bluetooth_coext_disable(dev); b43_wireless_core_init()
4881 err = phy->ops->prepare_hardware(dev); b43_wireless_core_init()
4885 err = b43_chip_init(dev); b43_wireless_core_init()
4888 b43_shm_write16(dev, B43_SHM_SHARED, b43_wireless_core_init()
4889 B43_SHM_SH_WLCOREREV, dev->dev->core_rev); b43_wireless_core_init()
4890 hf = b43_hf_read(dev); b43_wireless_core_init()
4907 if (dev->dev->bus_type == B43_BUS_SSB && b43_wireless_core_init()
4908 dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI && b43_wireless_core_init()
4909 dev->dev->sdev->bus->pcicore.dev->id.revision <= 10) b43_wireless_core_init()
4913 b43_hf_write(dev, hf); b43_wireless_core_init()
4916 if (dev->dev->core_rev >= 13) { b43_wireless_core_init()
4917 u32 mac_hw_cap = b43_read32(dev, B43_MMIO_MAC_HW_CAP); b43_wireless_core_init()
4919 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_MACHW_L, b43_wireless_core_init()
4921 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_MACHW_H, b43_wireless_core_init()
4925 b43_set_retry_limits(dev, B43_DEFAULT_SHORT_RETRY_LIMIT, b43_wireless_core_init()
4927 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_SFFBLIM, 3); b43_wireless_core_init()
4928 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_LFFBLIM, 2); b43_wireless_core_init()
4934 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRMAXTIME, 1); b43_wireless_core_init()
4936 b43_rate_memory_init(dev); b43_wireless_core_init()
4937 b43_set_phytxctl_defaults(dev); b43_wireless_core_init()
4941 b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_MINCONT, 0x1F); b43_wireless_core_init()
4943 b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_MINCONT, 0xF); b43_wireless_core_init()
4945 b43_shm_write16(dev, B43_SHM_SCRATCH, B43_SHM_SC_MAXCONT, 0x3FF); b43_wireless_core_init()
4948 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PHYTYPE, phy->type); b43_wireless_core_init()
4949 b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PHYVER, phy->rev); b43_wireless_core_init()
4951 if (b43_bus_host_is_pcmcia(dev->dev) || b43_wireless_core_init()
4952 b43_bus_host_is_sdio(dev->dev)) { b43_wireless_core_init()
4953 dev->__using_pio_transfers = true; b43_wireless_core_init()
4954 err = b43_pio_init(dev); b43_wireless_core_init()
4955 } else if (dev->use_pio) { b43_wireless_core_init()
4956 b43warn(dev->wl, "Forced PIO by use_pio module parameter. " b43_wireless_core_init()
4959 dev->__using_pio_transfers = true; b43_wireless_core_init()
4960 err = b43_pio_init(dev); b43_wireless_core_init()
4962 dev->__using_pio_transfers = false; b43_wireless_core_init()
4963 err = b43_dma_init(dev); b43_wireless_core_init()
4967 b43_qos_init(dev); b43_wireless_core_init()
4968 b43_set_synth_pu_delay(dev, 1); b43_wireless_core_init()
4969 b43_bluetooth_coext_enable(dev); b43_wireless_core_init()
4971 b43_bus_powerup(dev, !(sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW)); b43_wireless_core_init()
4972 b43_upload_card_macaddress(dev); b43_wireless_core_init()
4973 b43_security_init(dev); b43_wireless_core_init()
4975 ieee80211_wake_queues(dev->wl->hw); b43_wireless_core_init()
4977 b43_set_status(dev, B43_STAT_INITIALIZED); b43_wireless_core_init()
4983 b43_chip_exit(dev); b43_wireless_core_init()
4985 b43_bus_may_powerdown(dev); b43_wireless_core_init()
4986 B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT); b43_wireless_core_init()
4994 struct b43_wldev *dev; b43_op_add_interface() local
5012 dev = wl->current_dev; b43_op_add_interface()
5018 b43_adjust_opmode(dev); b43_op_add_interface()
5019 b43_set_pretbtt(dev); b43_op_add_interface()
5020 b43_set_synth_pu_delay(dev, 0); b43_op_add_interface()
5021 b43_upload_card_macaddress(dev); b43_op_add_interface()
5037 struct b43_wldev *dev = wl->current_dev; b43_op_remove_interface() local
5049 b43_adjust_opmode(dev); b43_op_remove_interface()
5051 b43_upload_card_macaddress(dev); b43_op_remove_interface()
5059 struct b43_wldev *dev = wl->current_dev; b43_op_start() local
5078 if (b43_status(dev) < B43_STAT_INITIALIZED) { b43_op_start()
5079 err = b43_wireless_core_init(dev); b43_op_start()
5085 if (b43_status(dev) < B43_STAT_STARTED) { b43_op_start()
5086 err = b43_wireless_core_start(dev); b43_op_start()
5089 b43_wireless_core_exit(dev); b43_op_start()
5115 struct b43_wldev *dev = wl->current_dev; b43_op_stop() local
5119 if (!dev) b43_op_stop()
5123 if (b43_status(dev) >= B43_STAT_STARTED) { b43_op_stop()
5124 dev = b43_wireless_core_stop(dev); b43_op_stop()
5125 if (!dev) b43_op_stop()
5128 b43_wireless_core_exit(dev); b43_op_stop()
5162 struct b43_wldev *dev; b43_op_sw_scan_start_notifier() local
5165 dev = wl->current_dev; b43_op_sw_scan_start_notifier()
5166 if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED)) { b43_op_sw_scan_start_notifier()
5168 b43_hf_write(dev, b43_hf_read(dev) | B43_HF_SKCFPUP); b43_op_sw_scan_start_notifier()
5177 struct b43_wldev *dev; b43_op_sw_scan_complete_notifier() local
5180 dev = wl->current_dev; b43_op_sw_scan_complete_notifier()
5181 if (dev && (b43_status(dev) >= B43_STAT_INITIALIZED)) { b43_op_sw_scan_complete_notifier()
5183 b43_hf_write(dev, b43_hf_read(dev) & ~B43_HF_SKCFPUP); b43_op_sw_scan_complete_notifier()
5192 struct b43_wldev *dev = wl->current_dev; b43_op_get_survey() local
5200 survey->noise = dev->stats.link_noise; b43_op_get_survey()
5233 struct b43_wldev *dev = b43_chip_reset() local
5235 struct b43_wl *wl = dev->wl; b43_chip_reset()
5241 prev_status = b43_status(dev); b43_chip_reset()
5244 dev = b43_wireless_core_stop(dev); b43_chip_reset()
5245 if (!dev) { b43_chip_reset()
5251 b43_wireless_core_exit(dev); b43_chip_reset()
5255 err = b43_wireless_core_init(dev); b43_chip_reset()
5260 err = b43_wireless_core_start(dev); b43_chip_reset()
5262 b43_wireless_core_exit(dev); b43_chip_reset()
5268 wl->current_dev = NULL; /* Failed to init the dev. */ b43_chip_reset()
5284 static int b43_setup_bands(struct b43_wldev *dev, b43_setup_bands() argument
5287 struct ieee80211_hw *hw = dev->wl->hw; b43_setup_bands()
5288 struct b43_phy *phy = &dev->phy; b43_setup_bands()
5301 if (dev->phy.type == B43_PHYTYPE_N) { b43_setup_bands()
5311 dev->phy.supports_2ghz = have_2ghz_phy; b43_setup_bands()
5312 dev->phy.supports_5ghz = have_5ghz_phy; b43_setup_bands()
5317 static void b43_wireless_core_detach(struct b43_wldev *dev) b43_wireless_core_detach() argument
5321 b43_release_firmware(dev); b43_wireless_core_detach()
5322 b43_phy_free(dev); b43_wireless_core_detach()
5325 static void b43_supported_bands(struct b43_wldev *dev, bool *have_2ghz_phy, b43_supported_bands() argument
5331 if (dev->dev->bus_type == B43_BUS_BCMA && b43_supported_bands()
5332 dev->dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI) b43_supported_bands()
5333 dev_id = dev->dev->bdev->bus->host_pci->device; b43_supported_bands()
5336 if (dev->dev->bus_type == B43_BUS_SSB && b43_supported_bands()
5337 dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI) b43_supported_bands()
5338 dev_id = dev->dev->sdev->bus->host_pci->device; b43_supported_bands()
5341 if (dev->dev->bus_sprom->dev_id) b43_supported_bands()
5342 dev_id = dev->dev->bus_sprom->dev_id; b43_supported_bands()
5365 if (dev->phy.type != B43_PHYTYPE_G) b43_supported_bands()
5384 switch (dev->phy.type) { b43_supported_bands()
5402 static int b43_wireless_core_attach(struct b43_wldev *dev) b43_wireless_core_attach() argument
5404 struct b43_wl *wl = dev->wl; b43_wireless_core_attach()
5405 struct b43_phy *phy = &dev->phy; b43_wireless_core_attach()
5417 err = b43_bus_powerup(dev, 0); b43_wireless_core_attach()
5426 switch (dev->dev->bus_type) { b43_wireless_core_attach()
5429 tmp = bcma_aread32(dev->dev->bdev, BCMA_IOST); b43_wireless_core_attach()
5436 if (dev->dev->core_rev >= 5) { b43_wireless_core_attach()
5437 tmp = ssb_read32(dev->dev->sdev, SSB_TMSHIGH); b43_wireless_core_attach()
5446 dev->phy.gmode = have_2ghz_phy; b43_wireless_core_attach()
5447 b43_wireless_core_reset(dev, dev->phy.gmode); b43_wireless_core_attach()
5450 err = b43_phy_versioning(dev); b43_wireless_core_attach()
5455 b43_supported_bands(dev, &have_2ghz_phy, &have_5ghz_phy); b43_wireless_core_attach()
5459 switch (dev->phy.type) { b43_wireless_core_attach()
5475 err = b43_phy_allocate(dev); b43_wireless_core_attach()
5479 dev->phy.gmode = have_2ghz_phy; b43_wireless_core_attach()
5480 b43_wireless_core_reset(dev, dev->phy.gmode); b43_wireless_core_attach()
5482 err = b43_validate_chipaccess(dev); b43_wireless_core_attach()
5485 err = b43_setup_bands(dev, have_2ghz_phy, have_5ghz_phy); b43_wireless_core_attach()
5491 wl->current_dev = dev; b43_wireless_core_attach()
5492 INIT_WORK(&dev->restart_work, b43_chip_reset); b43_wireless_core_attach()
5494 dev->phy.ops->switch_analog(dev, 0); b43_wireless_core_attach()
5495 b43_device_disable(dev, 0); b43_wireless_core_attach()
5496 b43_bus_may_powerdown(dev); b43_wireless_core_attach()
5502 b43_phy_free(dev); b43_wireless_core_attach()
5504 b43_bus_may_powerdown(dev); b43_wireless_core_attach()
5508 static void b43_one_core_detach(struct b43_bus_dev *dev) b43_one_core_detach() argument
5516 wldev = b43_bus_get_wldev(dev); b43_one_core_detach()
5521 b43_bus_set_wldev(dev, NULL); b43_one_core_detach()
5525 static int b43_one_core_attach(struct b43_bus_dev *dev, struct b43_wl *wl) b43_one_core_attach() argument
5535 wldev->dev = dev; b43_one_core_attach()
5545 b43_bus_set_wldev(dev, wldev); b43_one_core_attach()
5587 static void b43_wireless_exit(struct b43_bus_dev *dev, struct b43_wl *wl) b43_wireless_exit() argument
5591 ssb_set_devtypedata(dev->sdev, NULL); b43_wireless_exit()
5596 static struct b43_wl *b43_wireless_init(struct b43_bus_dev *dev) b43_wireless_init() argument
5598 struct ssb_sprom *sprom = dev->bus_sprom; b43_wireless_init()
5626 SET_IEEE80211_DEV(hw, dev->dev); b43_wireless_init()
5648 (dev->chip_id > 0x9999) ? "%d" : "%04X", dev->chip_id); b43_wireless_init()
5650 dev->core_rev); b43_wireless_init()
5657 struct b43_bus_dev *dev; b43_bcma_probe() local
5667 dev = b43_bus_dev_bcma_init(core); b43_bcma_probe()
5668 if (!dev) b43_bcma_probe()
5671 wl = b43_wireless_init(dev); b43_bcma_probe()
5677 err = b43_one_core_attach(dev, wl); b43_bcma_probe()
5711 b43_one_core_detach(wldev->dev); b43_bcma_remove()
5733 struct b43_bus_dev *dev; b43_ssb_probe() local
5737 dev = b43_bus_dev_ssb_init(sdev); b43_ssb_probe()
5738 if (!dev) b43_ssb_probe()
5750 wl = b43_wireless_init(dev); b43_ssb_probe()
5758 err = b43_one_core_attach(dev, wl); b43_ssb_probe()
5769 b43_wireless_exit(dev, wl); b43_ssb_probe()
5771 kfree(dev); b43_ssb_probe()
5779 struct b43_bus_dev *dev = wldev->dev; b43_ssb_remove() local
5794 b43_one_core_detach(dev); b43_ssb_remove()
5800 b43_wireless_exit(dev, wl); b43_ssb_remove()
5812 void b43_controller_restart(struct b43_wldev *dev, const char *reason) b43_controller_restart() argument
5815 if (b43_status(dev) < B43_STAT_INITIALIZED) b43_controller_restart()
5817 b43info(dev->wl, "Controller RESET (%s) ...\n", reason); b43_controller_restart()
5818 ieee80211_queue_work(dev->wl->hw, &dev->restart_work); b43_controller_restart()
/linux-4.4.14/include/linux/
H A Dkdev_t.h9 #define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
10 #define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
13 #define print_dev_t(buffer, dev) \
14 sprintf((buffer), "%u:%u\n", MAJOR(dev), MINOR(dev))
16 #define format_dev_t(buffer, dev) \
18 sprintf(buffer, "%u:%u", MAJOR(dev), MINOR(dev)); \
23 static inline bool old_valid_dev(dev_t dev) old_valid_dev() argument
25 return MAJOR(dev) < 256 && MINOR(dev) < 256; old_valid_dev()
28 static inline u16 old_encode_dev(dev_t dev) old_encode_dev() argument
30 return (MAJOR(dev) << 8) | MINOR(dev); old_encode_dev()
38 static inline bool new_valid_dev(dev_t dev) new_valid_dev() argument
43 static inline u32 new_encode_dev(dev_t dev) new_encode_dev() argument
45 unsigned major = MAJOR(dev); new_encode_dev()
46 unsigned minor = MINOR(dev); new_encode_dev()
50 static inline dev_t new_decode_dev(u32 dev) new_decode_dev() argument
52 unsigned major = (dev & 0xfff00) >> 8; new_decode_dev()
53 unsigned minor = (dev & 0xff) | ((dev >> 12) & 0xfff00); new_decode_dev()
57 static inline u64 huge_encode_dev(dev_t dev) huge_encode_dev() argument
59 return new_encode_dev(dev); huge_encode_dev()
62 static inline dev_t huge_decode_dev(u64 dev) huge_decode_dev() argument
64 return new_decode_dev(dev); huge_decode_dev()
67 static inline int sysv_valid_dev(dev_t dev) sysv_valid_dev() argument
69 return MAJOR(dev) < (1<<14) && MINOR(dev) < (1<<18); sysv_valid_dev()
72 static inline u32 sysv_encode_dev(dev_t dev) sysv_encode_dev() argument
74 return MINOR(dev) | (MAJOR(dev) << 18); sysv_encode_dev()
77 static inline unsigned sysv_major(u32 dev) sysv_major() argument
79 return (dev >> 18) & 0x3fff; sysv_major()
82 static inline unsigned sysv_minor(u32 dev) sysv_minor() argument
84 return dev & 0x3ffff; sysv_minor()
H A Dpm_runtime.h34 extern int pm_generic_runtime_suspend(struct device *dev);
35 extern int pm_generic_runtime_resume(struct device *dev);
36 extern int pm_runtime_force_suspend(struct device *dev);
37 extern int pm_runtime_force_resume(struct device *dev);
39 extern int __pm_runtime_idle(struct device *dev, int rpmflags);
40 extern int __pm_runtime_suspend(struct device *dev, int rpmflags);
41 extern int __pm_runtime_resume(struct device *dev, int rpmflags);
42 extern int pm_schedule_suspend(struct device *dev, unsigned int delay);
43 extern int __pm_runtime_set_status(struct device *dev, unsigned int status);
44 extern int pm_runtime_barrier(struct device *dev);
45 extern void pm_runtime_enable(struct device *dev);
46 extern void __pm_runtime_disable(struct device *dev, bool check_resume);
47 extern void pm_runtime_allow(struct device *dev);
48 extern void pm_runtime_forbid(struct device *dev);
49 extern void pm_runtime_no_callbacks(struct device *dev);
50 extern void pm_runtime_irq_safe(struct device *dev);
51 extern void __pm_runtime_use_autosuspend(struct device *dev, bool use);
52 extern void pm_runtime_set_autosuspend_delay(struct device *dev, int delay);
53 extern unsigned long pm_runtime_autosuspend_expiration(struct device *dev);
54 extern void pm_runtime_update_max_time_suspended(struct device *dev,
56 extern void pm_runtime_set_memalloc_noio(struct device *dev, bool enable);
58 static inline bool pm_children_suspended(struct device *dev) pm_children_suspended() argument
60 return dev->power.ignore_children pm_children_suspended()
61 || !atomic_read(&dev->power.child_count); pm_children_suspended()
64 static inline void pm_runtime_get_noresume(struct device *dev) pm_runtime_get_noresume() argument
66 atomic_inc(&dev->power.usage_count); pm_runtime_get_noresume()
69 static inline void pm_runtime_put_noidle(struct device *dev) pm_runtime_put_noidle() argument
71 atomic_add_unless(&dev->power.usage_count, -1, 0); pm_runtime_put_noidle()
74 static inline bool device_run_wake(struct device *dev) device_run_wake() argument
76 return dev->power.run_wake; device_run_wake()
79 static inline void device_set_run_wake(struct device *dev, bool enable) device_set_run_wake() argument
81 dev->power.run_wake = enable; device_set_run_wake()
84 static inline bool pm_runtime_suspended(struct device *dev) pm_runtime_suspended() argument
86 return dev->power.runtime_status == RPM_SUSPENDED pm_runtime_suspended()
87 && !dev->power.disable_depth; pm_runtime_suspended()
90 static inline bool pm_runtime_active(struct device *dev) pm_runtime_active() argument
92 return dev->power.runtime_status == RPM_ACTIVE pm_runtime_active()
93 || dev->power.disable_depth; pm_runtime_active()
96 static inline bool pm_runtime_status_suspended(struct device *dev) pm_runtime_status_suspended() argument
98 return dev->power.runtime_status == RPM_SUSPENDED; pm_runtime_status_suspended()
101 static inline bool pm_runtime_enabled(struct device *dev) pm_runtime_enabled() argument
103 return !dev->power.disable_depth; pm_runtime_enabled()
106 static inline bool pm_runtime_callbacks_present(struct device *dev) pm_runtime_callbacks_present() argument
108 return !dev->power.no_callbacks; pm_runtime_callbacks_present()
111 static inline void pm_runtime_mark_last_busy(struct device *dev) pm_runtime_mark_last_busy() argument
113 ACCESS_ONCE(dev->power.last_busy) = jiffies; pm_runtime_mark_last_busy()
116 static inline bool pm_runtime_is_irq_safe(struct device *dev) pm_runtime_is_irq_safe() argument
118 return dev->power.irq_safe; pm_runtime_is_irq_safe()
125 static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } pm_generic_runtime_resume() argument
126 static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } pm_runtime_force_suspend() argument
127 static inline int pm_runtime_force_suspend(struct device *dev) { return 0; } pm_runtime_force_resume() argument
128 static inline int pm_runtime_force_resume(struct device *dev) { return 0; } pm_runtime_force_resume() argument
130 static inline int __pm_runtime_idle(struct device *dev, int rpmflags) __pm_runtime_idle() argument
134 static inline int __pm_runtime_suspend(struct device *dev, int rpmflags) __pm_runtime_suspend() argument
138 static inline int __pm_runtime_resume(struct device *dev, int rpmflags) __pm_runtime_resume() argument
142 static inline int pm_schedule_suspend(struct device *dev, unsigned int delay) pm_schedule_suspend() argument
146 static inline int __pm_runtime_set_status(struct device *dev, __pm_runtime_set_status() argument
148 static inline int pm_runtime_barrier(struct device *dev) { return 0; } pm_runtime_enable() argument
149 static inline void pm_runtime_enable(struct device *dev) {} __pm_runtime_disable() argument
150 static inline void __pm_runtime_disable(struct device *dev, bool c) {} pm_runtime_allow() argument
151 static inline void pm_runtime_allow(struct device *dev) {} pm_runtime_forbid() argument
152 static inline void pm_runtime_forbid(struct device *dev) {} pm_runtime_forbid() argument
154 static inline bool pm_children_suspended(struct device *dev) { return false; } pm_runtime_get_noresume() argument
155 static inline void pm_runtime_get_noresume(struct device *dev) {} pm_runtime_put_noidle() argument
156 static inline void pm_runtime_put_noidle(struct device *dev) {} device_run_wake() argument
157 static inline bool device_run_wake(struct device *dev) { return false; } device_set_run_wake() argument
158 static inline void device_set_run_wake(struct device *dev, bool enable) {} pm_runtime_suspended() argument
159 static inline bool pm_runtime_suspended(struct device *dev) { return false; } pm_runtime_active() argument
160 static inline bool pm_runtime_active(struct device *dev) { return true; } pm_runtime_status_suspended() argument
161 static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } pm_runtime_enabled() argument
162 static inline bool pm_runtime_enabled(struct device *dev) { return false; } pm_runtime_enabled() argument
164 static inline void pm_runtime_no_callbacks(struct device *dev) {} pm_runtime_irq_safe() argument
165 static inline void pm_runtime_irq_safe(struct device *dev) {} pm_runtime_is_irq_safe() argument
166 static inline bool pm_runtime_is_irq_safe(struct device *dev) { return false; } pm_runtime_is_irq_safe() argument
168 static inline bool pm_runtime_callbacks_present(struct device *dev) { return false; } pm_runtime_mark_last_busy() argument
169 static inline void pm_runtime_mark_last_busy(struct device *dev) {} __pm_runtime_use_autosuspend() argument
170 static inline void __pm_runtime_use_autosuspend(struct device *dev, __pm_runtime_use_autosuspend() argument
172 static inline void pm_runtime_set_autosuspend_delay(struct device *dev, pm_runtime_set_autosuspend_delay() argument
175 struct device *dev) { return 0; } pm_runtime_set_memalloc_noio()
176 static inline void pm_runtime_set_memalloc_noio(struct device *dev, pm_runtime_set_memalloc_noio() argument
181 static inline int pm_runtime_idle(struct device *dev) pm_runtime_idle() argument
183 return __pm_runtime_idle(dev, 0); pm_runtime_idle()
186 static inline int pm_runtime_suspend(struct device *dev) pm_runtime_suspend() argument
188 return __pm_runtime_suspend(dev, 0); pm_runtime_suspend()
191 static inline int pm_runtime_autosuspend(struct device *dev) pm_runtime_autosuspend() argument
193 return __pm_runtime_suspend(dev, RPM_AUTO); pm_runtime_autosuspend()
196 static inline int pm_runtime_resume(struct device *dev) pm_runtime_resume() argument
198 return __pm_runtime_resume(dev, 0); pm_runtime_resume()
201 static inline int pm_request_idle(struct device *dev) pm_request_idle() argument
203 return __pm_runtime_idle(dev, RPM_ASYNC); pm_request_idle()
206 static inline int pm_request_resume(struct device *dev) pm_request_resume() argument
208 return __pm_runtime_resume(dev, RPM_ASYNC); pm_request_resume()
211 static inline int pm_request_autosuspend(struct device *dev) pm_request_autosuspend() argument
213 return __pm_runtime_suspend(dev, RPM_ASYNC | RPM_AUTO); pm_request_autosuspend()
216 static inline int pm_runtime_get(struct device *dev) pm_runtime_get() argument
218 return __pm_runtime_resume(dev, RPM_GET_PUT | RPM_ASYNC); pm_runtime_get()
221 static inline int pm_runtime_get_sync(struct device *dev) pm_runtime_get_sync() argument
223 return __pm_runtime_resume(dev, RPM_GET_PUT); pm_runtime_get_sync()
226 static inline int pm_runtime_put(struct device *dev) pm_runtime_put() argument
228 return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC); pm_runtime_put()
231 static inline int pm_runtime_put_autosuspend(struct device *dev) pm_runtime_put_autosuspend() argument
233 return __pm_runtime_suspend(dev, pm_runtime_put_autosuspend()
237 static inline int pm_runtime_put_sync(struct device *dev) pm_runtime_put_sync() argument
239 return __pm_runtime_idle(dev, RPM_GET_PUT); pm_runtime_put_sync()
242 static inline int pm_runtime_put_sync_suspend(struct device *dev) pm_runtime_put_sync_suspend() argument
244 return __pm_runtime_suspend(dev, RPM_GET_PUT); pm_runtime_put_sync_suspend()
247 static inline int pm_runtime_put_sync_autosuspend(struct device *dev) pm_runtime_put_sync_autosuspend() argument
249 return __pm_runtime_suspend(dev, RPM_GET_PUT | RPM_AUTO); pm_runtime_put_sync_autosuspend()
252 static inline int pm_runtime_set_active(struct device *dev) pm_runtime_set_active() argument
254 return __pm_runtime_set_status(dev, RPM_ACTIVE); pm_runtime_set_active()
257 static inline void pm_runtime_set_suspended(struct device *dev) pm_runtime_set_suspended() argument
259 __pm_runtime_set_status(dev, RPM_SUSPENDED); pm_runtime_set_suspended()
262 static inline void pm_runtime_disable(struct device *dev) pm_runtime_disable() argument
264 __pm_runtime_disable(dev, true); pm_runtime_disable()
267 static inline void pm_runtime_use_autosuspend(struct device *dev) pm_runtime_use_autosuspend() argument
269 __pm_runtime_use_autosuspend(dev, true); pm_runtime_use_autosuspend()
272 static inline void pm_runtime_dont_use_autosuspend(struct device *dev) pm_runtime_dont_use_autosuspend() argument
274 __pm_runtime_use_autosuspend(dev, false); pm_runtime_dont_use_autosuspend()
174 pm_runtime_autosuspend_expiration( struct device *dev) pm_runtime_autosuspend_expiration() argument
H A Dpm_clock.h24 extern int pm_clk_runtime_suspend(struct device *dev);
25 extern int pm_clk_runtime_resume(struct device *dev);
34 static inline bool pm_clk_no_clocks(struct device *dev) pm_clk_no_clocks() argument
36 return dev && dev->power.subsys_data pm_clk_no_clocks()
37 && list_empty(&dev->power.subsys_data->clock_list); pm_clk_no_clocks()
40 extern void pm_clk_init(struct device *dev);
41 extern int pm_clk_create(struct device *dev);
42 extern void pm_clk_destroy(struct device *dev);
43 extern int pm_clk_add(struct device *dev, const char *con_id);
44 extern int pm_clk_add_clk(struct device *dev, struct clk *clk);
45 extern void pm_clk_remove(struct device *dev, const char *con_id);
46 extern int pm_clk_suspend(struct device *dev);
47 extern int pm_clk_resume(struct device *dev);
49 static inline bool pm_clk_no_clocks(struct device *dev) pm_clk_no_clocks() argument
53 static inline void pm_clk_init(struct device *dev) pm_clk_init() argument
56 static inline int pm_clk_create(struct device *dev) pm_clk_create() argument
60 static inline void pm_clk_destroy(struct device *dev) pm_clk_destroy() argument
63 static inline int pm_clk_add(struct device *dev, const char *con_id) pm_clk_add() argument
68 static inline int pm_clk_add_clk(struct device *dev, struct clk *clk) pm_clk_add_clk() argument
72 static inline void pm_clk_remove(struct device *dev, const char *con_id) pm_clk_remove() argument
H A Ddma-mapping.h19 void* (*alloc)(struct device *dev, size_t size,
22 void (*free)(struct device *dev, size_t size,
28 int (*get_sgtable)(struct device *dev, struct sg_table *sgt, void *,
31 dma_addr_t (*map_page)(struct device *dev, struct page *page,
35 void (*unmap_page)(struct device *dev, dma_addr_t dma_handle,
42 int (*map_sg)(struct device *dev, struct scatterlist *sg,
45 void (*unmap_sg)(struct device *dev,
49 void (*sync_single_for_cpu)(struct device *dev,
52 void (*sync_single_for_device)(struct device *dev,
55 void (*sync_sg_for_cpu)(struct device *dev,
58 void (*sync_sg_for_device)(struct device *dev,
61 int (*mapping_error)(struct device *dev, dma_addr_t dma_addr);
62 int (*dma_supported)(struct device *dev, u64 mask);
63 int (*set_dma_mask)(struct device *dev, u64 mask);
65 u64 (*get_required_mask)(struct device *dev);
81 static inline int is_device_dma_capable(struct device *dev) is_device_dma_capable() argument
83 return dev->dma_mask != NULL && *dev->dma_mask != DMA_MASK_NONE; is_device_dma_capable()
92 static inline u64 dma_get_mask(struct device *dev) dma_get_mask() argument
94 if (dev && dev->dma_mask && *dev->dma_mask) dma_get_mask()
95 return *dev->dma_mask; dma_get_mask()
100 int dma_set_coherent_mask(struct device *dev, u64 mask);
102 static inline int dma_set_coherent_mask(struct device *dev, u64 mask) dma_set_coherent_mask() argument
104 if (!dma_supported(dev, mask)) dma_set_coherent_mask()
106 dev->coherent_dma_mask = mask; dma_set_coherent_mask()
117 static inline int dma_set_mask_and_coherent(struct device *dev, u64 mask) dma_set_mask_and_coherent() argument
119 int rc = dma_set_mask(dev, mask); dma_set_mask_and_coherent()
121 dma_set_coherent_mask(dev, mask); dma_set_mask_and_coherent()
127 * does not have dev->dma_mask appropriately setup.
129 static inline int dma_coerce_mask_and_coherent(struct device *dev, u64 mask) dma_coerce_mask_and_coherent() argument
131 dev->dma_mask = &dev->coherent_dma_mask; dma_coerce_mask_and_coherent()
132 return dma_set_mask_and_coherent(dev, mask); dma_coerce_mask_and_coherent()
135 extern u64 dma_get_required_mask(struct device *dev);
138 static inline void arch_setup_dma_ops(struct device *dev, u64 dma_base, arch_setup_dma_ops() argument
144 static inline void arch_teardown_dma_ops(struct device *dev) { } arch_teardown_dma_ops() argument
147 static inline unsigned int dma_get_max_seg_size(struct device *dev) dma_get_max_seg_size() argument
149 if (dev->dma_parms && dev->dma_parms->max_segment_size) dma_get_max_seg_size()
150 return dev->dma_parms->max_segment_size; dma_get_max_seg_size()
154 static inline unsigned int dma_set_max_seg_size(struct device *dev, dma_set_max_seg_size() argument
157 if (dev->dma_parms) { dma_set_max_seg_size()
158 dev->dma_parms->max_segment_size = size; dma_set_max_seg_size()
164 static inline unsigned long dma_get_seg_boundary(struct device *dev) dma_get_seg_boundary() argument
166 if (dev->dma_parms && dev->dma_parms->segment_boundary_mask) dma_get_seg_boundary()
167 return dev->dma_parms->segment_boundary_mask; dma_get_seg_boundary()
171 static inline int dma_set_seg_boundary(struct device *dev, unsigned long mask) dma_set_seg_boundary() argument
173 if (dev->dma_parms) { dma_set_seg_boundary()
174 dev->dma_parms->segment_boundary_mask = mask; dma_set_seg_boundary()
181 static inline unsigned long dma_max_pfn(struct device *dev) dma_max_pfn() argument
183 return *dev->dma_mask >> PAGE_SHIFT; dma_max_pfn()
187 static inline void *dma_zalloc_coherent(struct device *dev, size_t size, dma_zalloc_coherent() argument
190 void *ret = dma_alloc_coherent(dev, size, dma_handle, dma_zalloc_coherent()
213 dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, dma_declare_coherent_memory() argument
220 dma_release_declared_memory(struct device *dev) dma_release_declared_memory() argument
225 dma_mark_declared_memory_occupied(struct device *dev, dma_mark_declared_memory_occupied() argument
235 extern void *dmam_alloc_coherent(struct device *dev, size_t size,
237 extern void dmam_free_coherent(struct device *dev, size_t size, void *vaddr,
239 extern void *dmam_alloc_noncoherent(struct device *dev, size_t size,
241 extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr,
244 extern int dmam_declare_coherent_memory(struct device *dev,
248 extern void dmam_release_declared_memory(struct device *dev);
250 static inline int dmam_declare_coherent_memory(struct device *dev, dmam_declare_coherent_memory() argument
257 static inline void dmam_release_declared_memory(struct device *dev) dmam_release_declared_memory() argument
265 #define dma_map_single_attrs(dev, cpu_addr, size, dir, attrs) \
266 dma_map_single(dev, cpu_addr, size, dir)
268 #define dma_unmap_single_attrs(dev, dma_addr, size, dir, attrs) \
269 dma_unmap_single(dev, dma_addr, size, dir)
271 #define dma_map_sg_attrs(dev, sgl, nents, dir, attrs) \
272 dma_map_sg(dev, sgl, nents, dir)
274 #define dma_unmap_sg_attrs(dev, sgl, nents, dir, attrs) \
275 dma_unmap_sg(dev, sgl, nents, dir)
278 static inline void *dma_alloc_writecombine(struct device *dev, size_t size, dma_alloc_writecombine() argument
283 return dma_alloc_attrs(dev, size, dma_addr, gfp, &attrs); dma_alloc_writecombine()
286 static inline void dma_free_writecombine(struct device *dev, size_t size, dma_free_writecombine() argument
291 return dma_free_attrs(dev, size, cpu_addr, dma_addr, &attrs); dma_free_writecombine()
294 static inline int dma_mmap_writecombine(struct device *dev, dma_mmap_writecombine() argument
301 return dma_mmap_attrs(dev, vma, cpu_addr, dma_addr, size, &attrs); dma_mmap_writecombine()
H A Dvlynq.h74 struct device dev; member in struct:vlynq_device
80 int (*probe)(struct vlynq_device *dev, struct vlynq_device_id *id);
81 void (*remove)(struct vlynq_device *dev);
86 int (*on)(struct vlynq_device *dev);
87 void (*off)(struct vlynq_device *dev);
97 return container_of(device, struct vlynq_device, dev); to_vlynq_device()
110 static inline void *vlynq_get_drvdata(struct vlynq_device *dev) vlynq_get_drvdata() argument
112 return dev_get_drvdata(&dev->dev); vlynq_get_drvdata()
115 static inline void vlynq_set_drvdata(struct vlynq_device *dev, void *data) vlynq_set_drvdata() argument
117 dev_set_drvdata(&dev->dev, data); vlynq_set_drvdata()
120 static inline u32 vlynq_mem_start(struct vlynq_device *dev) vlynq_mem_start() argument
122 return dev->mem_start; vlynq_mem_start()
125 static inline u32 vlynq_mem_end(struct vlynq_device *dev) vlynq_mem_end() argument
127 return dev->mem_end; vlynq_mem_end()
130 static inline u32 vlynq_mem_len(struct vlynq_device *dev) vlynq_mem_len() argument
132 return dev->mem_end - dev->mem_start + 1; vlynq_mem_len()
135 static inline int vlynq_virq_to_irq(struct vlynq_device *dev, int virq) vlynq_virq_to_irq() argument
137 int irq = dev->irq_start + virq; vlynq_virq_to_irq()
138 if ((irq < dev->irq_start) || (irq > dev->irq_end)) vlynq_virq_to_irq()
144 static inline int vlynq_irq_to_virq(struct vlynq_device *dev, int irq) vlynq_irq_to_virq() argument
146 if ((irq < dev->irq_start) || (irq > dev->irq_end)) vlynq_irq_to_virq()
149 return irq - dev->irq_start; vlynq_irq_to_virq()
153 extern int vlynq_enable_device(struct vlynq_device *dev);
154 extern void vlynq_disable_device(struct vlynq_device *dev);
155 extern int vlynq_set_local_mapping(struct vlynq_device *dev, u32 tx_offset,
157 extern int vlynq_set_remote_mapping(struct vlynq_device *dev, u32 tx_offset,
159 extern int vlynq_set_local_irq(struct vlynq_device *dev, int virq);
160 extern int vlynq_set_remote_irq(struct vlynq_device *dev, int virq);
H A Dof_device.h15 const struct of_device_id *matches, const struct device *dev);
16 extern void of_device_make_bus_id(struct device *dev);
21 * @dev: the device structure to match against
23 static inline int of_driver_match_device(struct device *dev, of_driver_match_device() argument
26 return of_match_device(drv->of_match_table, dev) != NULL; of_driver_match_device()
29 extern struct platform_device *of_dev_get(struct platform_device *dev);
30 extern void of_dev_put(struct platform_device *dev);
36 extern const void *of_device_get_match_data(const struct device *dev);
38 extern ssize_t of_device_get_modalias(struct device *dev,
41 extern void of_device_uevent(struct device *dev, struct kobj_uevent_env *env);
42 extern int of_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env);
44 static inline void of_device_node_put(struct device *dev) of_device_node_put() argument
46 of_node_put(dev->of_node); of_device_node_put()
58 void of_dma_configure(struct device *dev, struct device_node *np);
61 static inline int of_driver_match_device(struct device *dev, of_driver_match_device() argument
67 static inline void of_device_uevent(struct device *dev, of_device_uevent() argument
70 static inline const void *of_device_get_match_data(const struct device *dev) of_device_get_match_data() argument
75 static inline int of_device_get_modalias(struct device *dev, of_device_get_modalias() argument
81 static inline int of_device_uevent_modalias(struct device *dev, of_device_uevent_modalias() argument
87 static inline void of_device_node_put(struct device *dev) { } of_device_node_put() argument
90 const struct of_device_id *matches, const struct device *dev) __of_match_device()
94 #define of_match_device(matches, dev) \
95 __of_match_device(of_match_ptr(matches), (dev))
101 static inline void of_dma_configure(struct device *dev, struct device_node *np) of_dma_configure() argument
89 __of_match_device( const struct of_device_id *matches, const struct device *dev) __of_match_device() argument
/linux-4.4.14/arch/powerpc/include/asm/
H A Dlibata-portmap.h6 #define ATA_PRIMARY_IRQ(dev) pci_get_legacy_ide_irq(dev, 0)
10 #define ATA_SECONDARY_IRQ(dev) pci_get_legacy_ide_irq(dev, 1)
H A Dmacio.h48 #define to_macio_device(d) container_of(d, struct macio_dev, ofdev.dev)
51 extern struct macio_dev *macio_dev_get(struct macio_dev *dev);
52 extern void macio_dev_put(struct macio_dev *dev);
59 static inline int macio_resource_count(struct macio_dev *dev) macio_resource_count() argument
61 return dev->n_resources; macio_resource_count()
64 static inline unsigned long macio_resource_start(struct macio_dev *dev, int resource_no) macio_resource_start() argument
66 return dev->resource[resource_no].start; macio_resource_start()
69 static inline unsigned long macio_resource_end(struct macio_dev *dev, int resource_no) macio_resource_end() argument
71 return dev->resource[resource_no].end; macio_resource_end()
74 static inline unsigned long macio_resource_len(struct macio_dev *dev, int resource_no) macio_resource_len() argument
76 struct resource *res = &dev->resource[resource_no]; macio_resource_len()
82 extern int macio_enable_devres(struct macio_dev *dev);
84 extern int macio_request_resource(struct macio_dev *dev, int resource_no, const char *name);
85 extern void macio_release_resource(struct macio_dev *dev, int resource_no);
86 extern int macio_request_resources(struct macio_dev *dev, const char *name);
87 extern void macio_release_resources(struct macio_dev *dev);
89 static inline int macio_irq_count(struct macio_dev *dev) macio_irq_count() argument
91 return dev->n_interrupts; macio_irq_count()
94 static inline int macio_irq(struct macio_dev *dev, int irq_no) macio_irq() argument
96 return dev->interrupt[irq_no].start; macio_irq()
99 static inline void macio_set_drvdata(struct macio_dev *dev, void *data) macio_set_drvdata() argument
101 dev_set_drvdata(&dev->ofdev.dev, data); macio_set_drvdata()
104 static inline void* macio_get_drvdata(struct macio_dev *dev) macio_get_drvdata() argument
106 return dev_get_drvdata(&dev->ofdev.dev); macio_get_drvdata()
111 return mdev->ofdev.dev.of_node; macio_get_of_node()
126 int (*probe)(struct macio_dev* dev, const struct of_device_id *match);
127 int (*remove)(struct macio_dev* dev);
129 int (*suspend)(struct macio_dev* dev, pm_message_t state);
130 int (*resume)(struct macio_dev* dev);
131 int (*shutdown)(struct macio_dev* dev);
134 void (*mediabay_event)(struct macio_dev* dev, int mb_state);
/linux-4.4.14/drivers/net/wireless/b43legacy/
H A Dradio.c90 void b43legacy_radio_lock(struct b43legacy_wldev *dev) b43legacy_radio_lock() argument
94 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_radio_lock()
97 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status); b43legacy_radio_lock()
102 void b43legacy_radio_unlock(struct b43legacy_wldev *dev) b43legacy_radio_unlock() argument
106 b43legacy_read16(dev, B43legacy_MMIO_PHY_VER); /* dummy read */ b43legacy_radio_unlock()
107 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_radio_unlock()
110 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status); b43legacy_radio_unlock()
114 u16 b43legacy_radio_read16(struct b43legacy_wldev *dev, u16 offset) b43legacy_radio_read16() argument
116 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_read16()
137 b43legacy_write16(dev, B43legacy_MMIO_RADIO_CONTROL, offset); b43legacy_radio_read16()
138 return b43legacy_read16(dev, B43legacy_MMIO_RADIO_DATA_LOW); b43legacy_radio_read16()
141 void b43legacy_radio_write16(struct b43legacy_wldev *dev, u16 offset, u16 val) b43legacy_radio_write16() argument
143 b43legacy_write16(dev, B43legacy_MMIO_RADIO_CONTROL, offset); b43legacy_radio_write16()
145 b43legacy_write16(dev, B43legacy_MMIO_RADIO_DATA_LOW, val); b43legacy_radio_write16()
148 static void b43legacy_set_all_gains(struct b43legacy_wldev *dev, b43legacy_set_all_gains() argument
151 struct b43legacy_phy *phy = &dev->phy; b43legacy_set_all_gains()
165 b43legacy_ilt_write(dev, offset + i, first); b43legacy_set_all_gains()
168 b43legacy_ilt_write(dev, offset + i, second); b43legacy_set_all_gains()
172 b43legacy_phy_write(dev, 0x04A0, b43legacy_set_all_gains()
173 (b43legacy_phy_read(dev, 0x04A0) & 0xBFBF) b43legacy_set_all_gains()
175 b43legacy_phy_write(dev, 0x04A1, b43legacy_set_all_gains()
176 (b43legacy_phy_read(dev, 0x04A1) & 0xBFBF) b43legacy_set_all_gains()
178 b43legacy_phy_write(dev, 0x04A2, b43legacy_set_all_gains()
179 (b43legacy_phy_read(dev, 0x04A2) & 0xBFBF) b43legacy_set_all_gains()
182 b43legacy_dummy_transmission(dev); b43legacy_set_all_gains()
185 static void b43legacy_set_original_gains(struct b43legacy_wldev *dev) b43legacy_set_original_gains() argument
187 struct b43legacy_phy *phy = &dev->phy; b43legacy_set_original_gains()
205 b43legacy_ilt_write(dev, offset + i, tmp); b43legacy_set_original_gains()
209 b43legacy_ilt_write(dev, offset + i, i - start); b43legacy_set_original_gains()
211 b43legacy_phy_write(dev, 0x04A0, b43legacy_set_original_gains()
212 (b43legacy_phy_read(dev, 0x04A0) & 0xBFBF) b43legacy_set_original_gains()
214 b43legacy_phy_write(dev, 0x04A1, b43legacy_set_original_gains()
215 (b43legacy_phy_read(dev, 0x04A1) & 0xBFBF) b43legacy_set_original_gains()
217 b43legacy_phy_write(dev, 0x04A2, b43legacy_set_original_gains()
218 (b43legacy_phy_read(dev, 0x04A2) & 0xBFBF) b43legacy_set_original_gains()
220 b43legacy_dummy_transmission(dev); b43legacy_set_original_gains()
224 static void b43legacy_synth_pu_workaround(struct b43legacy_wldev *dev, b43legacy_synth_pu_workaround() argument
227 struct b43legacy_phy *phy = &dev->phy; b43legacy_synth_pu_workaround()
236 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL, b43legacy_synth_pu_workaround()
239 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL, b43legacy_synth_pu_workaround()
242 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL, b43legacy_synth_pu_workaround()
246 u8 b43legacy_radio_aci_detect(struct b43legacy_wldev *dev, u8 channel) b43legacy_radio_aci_detect() argument
248 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_aci_detect()
256 saved = b43legacy_phy_read(dev, 0x0403); b43legacy_radio_aci_detect()
257 b43legacy_radio_selectchannel(dev, channel, 0); b43legacy_radio_aci_detect()
258 b43legacy_phy_write(dev, 0x0403, (saved & 0xFFF8) | 5); b43legacy_radio_aci_detect()
260 rssi = b43legacy_phy_read(dev, 0x048A) & 0x3F; b43legacy_radio_aci_detect()
267 temp = (b43legacy_phy_read(dev, 0x047F) >> 8) & 0x3F; b43legacy_radio_aci_detect()
275 b43legacy_phy_write(dev, 0x0403, saved); b43legacy_radio_aci_detect()
280 u8 b43legacy_radio_aci_scan(struct b43legacy_wldev *dev) b43legacy_radio_aci_scan() argument
282 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_aci_scan()
293 b43legacy_phy_lock(dev); b43legacy_radio_aci_scan()
294 b43legacy_radio_lock(dev); b43legacy_radio_aci_scan()
295 b43legacy_phy_write(dev, 0x0802, b43legacy_radio_aci_scan()
296 b43legacy_phy_read(dev, 0x0802) & 0xFFFC); b43legacy_radio_aci_scan()
297 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_aci_scan()
298 b43legacy_phy_read(dev, B43legacy_PHY_G_CRS) b43legacy_radio_aci_scan()
300 b43legacy_set_all_gains(dev, 3, 8, 1); b43legacy_radio_aci_scan()
307 ret[i-1] = b43legacy_radio_aci_detect(dev, i); b43legacy_radio_aci_scan()
309 b43legacy_radio_selectchannel(dev, channel, 0); b43legacy_radio_aci_scan()
310 b43legacy_phy_write(dev, 0x0802, b43legacy_radio_aci_scan()
311 (b43legacy_phy_read(dev, 0x0802) & 0xFFFC) b43legacy_radio_aci_scan()
313 b43legacy_phy_write(dev, 0x0403, b43legacy_radio_aci_scan()
314 b43legacy_phy_read(dev, 0x0403) & 0xFFF8); b43legacy_radio_aci_scan()
315 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_aci_scan()
316 b43legacy_phy_read(dev, B43legacy_PHY_G_CRS) b43legacy_radio_aci_scan()
318 b43legacy_set_original_gains(dev); b43legacy_radio_aci_scan()
326 b43legacy_radio_unlock(dev); b43legacy_radio_aci_scan()
327 b43legacy_phy_unlock(dev); b43legacy_radio_aci_scan()
333 void b43legacy_nrssi_hw_write(struct b43legacy_wldev *dev, u16 offset, s16 val) b43legacy_nrssi_hw_write() argument
335 b43legacy_phy_write(dev, B43legacy_PHY_NRSSILT_CTRL, offset); b43legacy_nrssi_hw_write()
337 b43legacy_phy_write(dev, B43legacy_PHY_NRSSILT_DATA, (u16)val); b43legacy_nrssi_hw_write()
341 s16 b43legacy_nrssi_hw_read(struct b43legacy_wldev *dev, u16 offset) b43legacy_nrssi_hw_read() argument
345 b43legacy_phy_write(dev, B43legacy_PHY_NRSSILT_CTRL, offset); b43legacy_nrssi_hw_read()
346 val = b43legacy_phy_read(dev, B43legacy_PHY_NRSSILT_DATA); b43legacy_nrssi_hw_read()
352 void b43legacy_nrssi_hw_update(struct b43legacy_wldev *dev, u16 val) b43legacy_nrssi_hw_update() argument
358 tmp = b43legacy_nrssi_hw_read(dev, i); b43legacy_nrssi_hw_update()
361 b43legacy_nrssi_hw_write(dev, i, tmp); b43legacy_nrssi_hw_update()
366 void b43legacy_nrssi_mem_update(struct b43legacy_wldev *dev) b43legacy_nrssi_mem_update() argument
368 struct b43legacy_phy *phy = &dev->phy; b43legacy_nrssi_mem_update()
383 static void b43legacy_calc_nrssi_offset(struct b43legacy_wldev *dev) b43legacy_calc_nrssi_offset() argument
385 struct b43legacy_phy *phy = &dev->phy; b43legacy_calc_nrssi_offset()
391 backup[0] = b43legacy_phy_read(dev, 0x0001); b43legacy_calc_nrssi_offset()
392 backup[1] = b43legacy_phy_read(dev, 0x0811); b43legacy_calc_nrssi_offset()
393 backup[2] = b43legacy_phy_read(dev, 0x0812); b43legacy_calc_nrssi_offset()
394 backup[3] = b43legacy_phy_read(dev, 0x0814); b43legacy_calc_nrssi_offset()
395 backup[4] = b43legacy_phy_read(dev, 0x0815); b43legacy_calc_nrssi_offset()
396 backup[5] = b43legacy_phy_read(dev, 0x005A); b43legacy_calc_nrssi_offset()
397 backup[6] = b43legacy_phy_read(dev, 0x0059); b43legacy_calc_nrssi_offset()
398 backup[7] = b43legacy_phy_read(dev, 0x0058); b43legacy_calc_nrssi_offset()
399 backup[8] = b43legacy_phy_read(dev, 0x000A); b43legacy_calc_nrssi_offset()
400 backup[9] = b43legacy_phy_read(dev, 0x0003); b43legacy_calc_nrssi_offset()
401 backup[10] = b43legacy_radio_read16(dev, 0x007A); b43legacy_calc_nrssi_offset()
402 backup[11] = b43legacy_radio_read16(dev, 0x0043); b43legacy_calc_nrssi_offset()
404 b43legacy_phy_write(dev, 0x0429, b43legacy_calc_nrssi_offset()
405 b43legacy_phy_read(dev, 0x0429) & 0x7FFF); b43legacy_calc_nrssi_offset()
406 b43legacy_phy_write(dev, 0x0001, b43legacy_calc_nrssi_offset()
407 (b43legacy_phy_read(dev, 0x0001) & 0x3FFF) b43legacy_calc_nrssi_offset()
409 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_offset()
410 b43legacy_phy_read(dev, 0x0811) | 0x000C); b43legacy_calc_nrssi_offset()
411 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_offset()
412 (b43legacy_phy_read(dev, 0x0812) & 0xFFF3) b43legacy_calc_nrssi_offset()
414 b43legacy_phy_write(dev, 0x0802, b43legacy_calc_nrssi_offset()
415 b43legacy_phy_read(dev, 0x0802) & ~(0x1 | 0x2)); b43legacy_calc_nrssi_offset()
417 backup[12] = b43legacy_phy_read(dev, 0x002E); b43legacy_calc_nrssi_offset()
418 backup[13] = b43legacy_phy_read(dev, 0x002F); b43legacy_calc_nrssi_offset()
419 backup[14] = b43legacy_phy_read(dev, 0x080F); b43legacy_calc_nrssi_offset()
420 backup[15] = b43legacy_phy_read(dev, 0x0810); b43legacy_calc_nrssi_offset()
421 backup[16] = b43legacy_phy_read(dev, 0x0801); b43legacy_calc_nrssi_offset()
422 backup[17] = b43legacy_phy_read(dev, 0x0060); b43legacy_calc_nrssi_offset()
423 backup[18] = b43legacy_phy_read(dev, 0x0014); b43legacy_calc_nrssi_offset()
424 backup[19] = b43legacy_phy_read(dev, 0x0478); b43legacy_calc_nrssi_offset()
426 b43legacy_phy_write(dev, 0x002E, 0); b43legacy_calc_nrssi_offset()
427 b43legacy_phy_write(dev, 0x002F, 0); b43legacy_calc_nrssi_offset()
428 b43legacy_phy_write(dev, 0x080F, 0); b43legacy_calc_nrssi_offset()
429 b43legacy_phy_write(dev, 0x0810, 0); b43legacy_calc_nrssi_offset()
430 b43legacy_phy_write(dev, 0x0478, b43legacy_calc_nrssi_offset()
431 b43legacy_phy_read(dev, 0x0478) | 0x0100); b43legacy_calc_nrssi_offset()
432 b43legacy_phy_write(dev, 0x0801, b43legacy_calc_nrssi_offset()
433 b43legacy_phy_read(dev, 0x0801) | 0x0040); b43legacy_calc_nrssi_offset()
434 b43legacy_phy_write(dev, 0x0060, b43legacy_calc_nrssi_offset()
435 b43legacy_phy_read(dev, 0x0060) | 0x0040); b43legacy_calc_nrssi_offset()
436 b43legacy_phy_write(dev, 0x0014, b43legacy_calc_nrssi_offset()
437 b43legacy_phy_read(dev, 0x0014) | 0x0200); b43legacy_calc_nrssi_offset()
439 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_offset()
440 b43legacy_radio_read16(dev, 0x007A) | 0x0070); b43legacy_calc_nrssi_offset()
441 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_offset()
442 b43legacy_radio_read16(dev, 0x007A) | 0x0080); b43legacy_calc_nrssi_offset()
445 v47F = (s16)((b43legacy_phy_read(dev, 0x047F) >> 8) & 0x003F); b43legacy_calc_nrssi_offset()
450 b43legacy_radio_write16(dev, 0x007B, i); b43legacy_calc_nrssi_offset()
452 v47F = (s16)((b43legacy_phy_read(dev, 0x047F) >> 8) b43legacy_calc_nrssi_offset()
462 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_offset()
463 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_offset()
465 b43legacy_phy_write(dev, 0x0814, b43legacy_calc_nrssi_offset()
466 b43legacy_phy_read(dev, 0x0814) | 0x0001); b43legacy_calc_nrssi_offset()
467 b43legacy_phy_write(dev, 0x0815, b43legacy_calc_nrssi_offset()
468 b43legacy_phy_read(dev, 0x0815) & 0xFFFE); b43legacy_calc_nrssi_offset()
469 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_offset()
470 b43legacy_phy_read(dev, 0x0811) | 0x000C); b43legacy_calc_nrssi_offset()
471 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_offset()
472 b43legacy_phy_read(dev, 0x0812) | 0x000C); b43legacy_calc_nrssi_offset()
473 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_offset()
474 b43legacy_phy_read(dev, 0x0811) | 0x0030); b43legacy_calc_nrssi_offset()
475 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_offset()
476 b43legacy_phy_read(dev, 0x0812) | 0x0030); b43legacy_calc_nrssi_offset()
477 b43legacy_phy_write(dev, 0x005A, 0x0480); b43legacy_calc_nrssi_offset()
478 b43legacy_phy_write(dev, 0x0059, 0x0810); b43legacy_calc_nrssi_offset()
479 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_calc_nrssi_offset()
481 b43legacy_phy_write(dev, 0x0003, 0x0122); b43legacy_calc_nrssi_offset()
483 b43legacy_phy_write(dev, 0x000A, b43legacy_calc_nrssi_offset()
484 b43legacy_phy_read(dev, 0x000A) b43legacy_calc_nrssi_offset()
486 b43legacy_phy_write(dev, 0x0814, b43legacy_calc_nrssi_offset()
487 b43legacy_phy_read(dev, 0x0814) | 0x0004); b43legacy_calc_nrssi_offset()
488 b43legacy_phy_write(dev, 0x0815, b43legacy_calc_nrssi_offset()
489 b43legacy_phy_read(dev, 0x0815) & 0xFFFB); b43legacy_calc_nrssi_offset()
490 b43legacy_phy_write(dev, 0x0003, b43legacy_calc_nrssi_offset()
491 (b43legacy_phy_read(dev, 0x0003) & 0xFF9F) b43legacy_calc_nrssi_offset()
493 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_offset()
494 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_offset()
496 b43legacy_set_all_gains(dev, 3, 0, 1); b43legacy_calc_nrssi_offset()
497 b43legacy_radio_write16(dev, 0x0043, b43legacy_calc_nrssi_offset()
498 (b43legacy_radio_read16(dev, 0x0043) b43legacy_calc_nrssi_offset()
501 v47F = (s16)((b43legacy_phy_read(dev, 0x047F) >> 8) & 0x003F); b43legacy_calc_nrssi_offset()
506 b43legacy_radio_write16(dev, 0x007B, i); b43legacy_calc_nrssi_offset()
508 v47F = (s16)((b43legacy_phy_read(dev, 0x047F) >> b43legacy_calc_nrssi_offset()
520 b43legacy_radio_write16(dev, 0x007B, saved); b43legacy_calc_nrssi_offset()
523 b43legacy_phy_write(dev, 0x002E, backup[12]); b43legacy_calc_nrssi_offset()
524 b43legacy_phy_write(dev, 0x002F, backup[13]); b43legacy_calc_nrssi_offset()
525 b43legacy_phy_write(dev, 0x080F, backup[14]); b43legacy_calc_nrssi_offset()
526 b43legacy_phy_write(dev, 0x0810, backup[15]); b43legacy_calc_nrssi_offset()
528 b43legacy_phy_write(dev, 0x0814, backup[3]); b43legacy_calc_nrssi_offset()
529 b43legacy_phy_write(dev, 0x0815, backup[4]); b43legacy_calc_nrssi_offset()
530 b43legacy_phy_write(dev, 0x005A, backup[5]); b43legacy_calc_nrssi_offset()
531 b43legacy_phy_write(dev, 0x0059, backup[6]); b43legacy_calc_nrssi_offset()
532 b43legacy_phy_write(dev, 0x0058, backup[7]); b43legacy_calc_nrssi_offset()
533 b43legacy_phy_write(dev, 0x000A, backup[8]); b43legacy_calc_nrssi_offset()
534 b43legacy_phy_write(dev, 0x0003, backup[9]); b43legacy_calc_nrssi_offset()
535 b43legacy_radio_write16(dev, 0x0043, backup[11]); b43legacy_calc_nrssi_offset()
536 b43legacy_radio_write16(dev, 0x007A, backup[10]); b43legacy_calc_nrssi_offset()
537 b43legacy_phy_write(dev, 0x0802, b43legacy_calc_nrssi_offset()
538 b43legacy_phy_read(dev, 0x0802) | 0x1 | 0x2); b43legacy_calc_nrssi_offset()
539 b43legacy_phy_write(dev, 0x0429, b43legacy_calc_nrssi_offset()
540 b43legacy_phy_read(dev, 0x0429) | 0x8000); b43legacy_calc_nrssi_offset()
541 b43legacy_set_original_gains(dev); b43legacy_calc_nrssi_offset()
543 b43legacy_phy_write(dev, 0x0801, backup[16]); b43legacy_calc_nrssi_offset()
544 b43legacy_phy_write(dev, 0x0060, backup[17]); b43legacy_calc_nrssi_offset()
545 b43legacy_phy_write(dev, 0x0014, backup[18]); b43legacy_calc_nrssi_offset()
546 b43legacy_phy_write(dev, 0x0478, backup[19]); b43legacy_calc_nrssi_offset()
548 b43legacy_phy_write(dev, 0x0001, backup[0]); b43legacy_calc_nrssi_offset()
549 b43legacy_phy_write(dev, 0x0812, backup[2]); b43legacy_calc_nrssi_offset()
550 b43legacy_phy_write(dev, 0x0811, backup[1]); b43legacy_calc_nrssi_offset()
553 void b43legacy_calc_nrssi_slope(struct b43legacy_wldev *dev) b43legacy_calc_nrssi_slope() argument
555 struct b43legacy_phy *phy = &dev->phy; b43legacy_calc_nrssi_slope()
563 backup[0] = b43legacy_radio_read16(dev, 0x007A); b43legacy_calc_nrssi_slope()
564 backup[1] = b43legacy_radio_read16(dev, 0x0052); b43legacy_calc_nrssi_slope()
565 backup[2] = b43legacy_radio_read16(dev, 0x0043); b43legacy_calc_nrssi_slope()
566 backup[3] = b43legacy_phy_read(dev, 0x0030); b43legacy_calc_nrssi_slope()
567 backup[4] = b43legacy_phy_read(dev, 0x0026); b43legacy_calc_nrssi_slope()
568 backup[5] = b43legacy_phy_read(dev, 0x0015); b43legacy_calc_nrssi_slope()
569 backup[6] = b43legacy_phy_read(dev, 0x002A); b43legacy_calc_nrssi_slope()
570 backup[7] = b43legacy_phy_read(dev, 0x0020); b43legacy_calc_nrssi_slope()
571 backup[8] = b43legacy_phy_read(dev, 0x005A); b43legacy_calc_nrssi_slope()
572 backup[9] = b43legacy_phy_read(dev, 0x0059); b43legacy_calc_nrssi_slope()
573 backup[10] = b43legacy_phy_read(dev, 0x0058); b43legacy_calc_nrssi_slope()
574 backup[11] = b43legacy_read16(dev, 0x03E2); b43legacy_calc_nrssi_slope()
575 backup[12] = b43legacy_read16(dev, 0x03E6); b43legacy_calc_nrssi_slope()
576 backup[13] = b43legacy_read16(dev, B43legacy_MMIO_CHANNEL_EXT); b43legacy_calc_nrssi_slope()
578 tmp = b43legacy_radio_read16(dev, 0x007A); b43legacy_calc_nrssi_slope()
580 b43legacy_radio_write16(dev, 0x007A, tmp); b43legacy_calc_nrssi_slope()
581 b43legacy_phy_write(dev, 0x0030, 0x00FF); b43legacy_calc_nrssi_slope()
582 b43legacy_write16(dev, 0x03EC, 0x7F7F); b43legacy_calc_nrssi_slope()
583 b43legacy_phy_write(dev, 0x0026, 0x0000); b43legacy_calc_nrssi_slope()
584 b43legacy_phy_write(dev, 0x0015, b43legacy_calc_nrssi_slope()
585 b43legacy_phy_read(dev, 0x0015) | 0x0020); b43legacy_calc_nrssi_slope()
586 b43legacy_phy_write(dev, 0x002A, 0x08A3); b43legacy_calc_nrssi_slope()
587 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
588 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
591 nrssi0 = (s16)b43legacy_phy_read(dev, 0x0027); b43legacy_calc_nrssi_slope()
592 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
593 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
596 b43legacy_write16(dev, 0x03E6, 0x0040); b43legacy_calc_nrssi_slope()
598 b43legacy_write16(dev, 0x03E6, 0x0122); b43legacy_calc_nrssi_slope()
600 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, b43legacy_calc_nrssi_slope()
601 b43legacy_read16(dev, b43legacy_calc_nrssi_slope()
603 b43legacy_phy_write(dev, 0x0020, 0x3F3F); b43legacy_calc_nrssi_slope()
604 b43legacy_phy_write(dev, 0x0015, 0xF330); b43legacy_calc_nrssi_slope()
605 b43legacy_radio_write16(dev, 0x005A, 0x0060); b43legacy_calc_nrssi_slope()
606 b43legacy_radio_write16(dev, 0x0043, b43legacy_calc_nrssi_slope()
607 b43legacy_radio_read16(dev, 0x0043) b43legacy_calc_nrssi_slope()
609 b43legacy_phy_write(dev, 0x005A, 0x0480); b43legacy_calc_nrssi_slope()
610 b43legacy_phy_write(dev, 0x0059, 0x0810); b43legacy_calc_nrssi_slope()
611 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_calc_nrssi_slope()
614 nrssi1 = (s16)b43legacy_phy_read(dev, 0x0027); b43legacy_calc_nrssi_slope()
615 b43legacy_phy_write(dev, 0x0030, backup[3]); b43legacy_calc_nrssi_slope()
616 b43legacy_radio_write16(dev, 0x007A, backup[0]); b43legacy_calc_nrssi_slope()
617 b43legacy_write16(dev, 0x03E2, backup[11]); b43legacy_calc_nrssi_slope()
618 b43legacy_phy_write(dev, 0x0026, backup[4]); b43legacy_calc_nrssi_slope()
619 b43legacy_phy_write(dev, 0x0015, backup[5]); b43legacy_calc_nrssi_slope()
620 b43legacy_phy_write(dev, 0x002A, backup[6]); b43legacy_calc_nrssi_slope()
621 b43legacy_synth_pu_workaround(dev, phy->channel); b43legacy_calc_nrssi_slope()
623 b43legacy_write16(dev, 0x03F4, backup[13]); b43legacy_calc_nrssi_slope()
625 b43legacy_phy_write(dev, 0x0020, backup[7]); b43legacy_calc_nrssi_slope()
626 b43legacy_phy_write(dev, 0x005A, backup[8]); b43legacy_calc_nrssi_slope()
627 b43legacy_phy_write(dev, 0x0059, backup[9]); b43legacy_calc_nrssi_slope()
628 b43legacy_phy_write(dev, 0x0058, backup[10]); b43legacy_calc_nrssi_slope()
629 b43legacy_radio_write16(dev, 0x0052, backup[1]); b43legacy_calc_nrssi_slope()
630 b43legacy_radio_write16(dev, 0x0043, backup[2]); b43legacy_calc_nrssi_slope()
646 b43legacy_calc_nrssi_offset(dev); b43legacy_calc_nrssi_slope()
648 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_calc_nrssi_slope()
649 b43legacy_phy_read(dev, B43legacy_PHY_G_CRS) b43legacy_calc_nrssi_slope()
651 b43legacy_phy_write(dev, 0x0802, b43legacy_calc_nrssi_slope()
652 b43legacy_phy_read(dev, 0x0802) & 0xFFFC); b43legacy_calc_nrssi_slope()
653 backup[7] = b43legacy_read16(dev, 0x03E2); b43legacy_calc_nrssi_slope()
654 b43legacy_write16(dev, 0x03E2, b43legacy_calc_nrssi_slope()
655 b43legacy_read16(dev, 0x03E2) | 0x8000); b43legacy_calc_nrssi_slope()
656 backup[0] = b43legacy_radio_read16(dev, 0x007A); b43legacy_calc_nrssi_slope()
657 backup[1] = b43legacy_radio_read16(dev, 0x0052); b43legacy_calc_nrssi_slope()
658 backup[2] = b43legacy_radio_read16(dev, 0x0043); b43legacy_calc_nrssi_slope()
659 backup[3] = b43legacy_phy_read(dev, 0x0015); b43legacy_calc_nrssi_slope()
660 backup[4] = b43legacy_phy_read(dev, 0x005A); b43legacy_calc_nrssi_slope()
661 backup[5] = b43legacy_phy_read(dev, 0x0059); b43legacy_calc_nrssi_slope()
662 backup[6] = b43legacy_phy_read(dev, 0x0058); b43legacy_calc_nrssi_slope()
663 backup[8] = b43legacy_read16(dev, 0x03E6); b43legacy_calc_nrssi_slope()
664 backup[9] = b43legacy_read16(dev, B43legacy_MMIO_CHANNEL_EXT); b43legacy_calc_nrssi_slope()
666 backup[10] = b43legacy_phy_read(dev, 0x002E); b43legacy_calc_nrssi_slope()
667 backup[11] = b43legacy_phy_read(dev, 0x002F); b43legacy_calc_nrssi_slope()
668 backup[12] = b43legacy_phy_read(dev, 0x080F); b43legacy_calc_nrssi_slope()
669 backup[13] = b43legacy_phy_read(dev, b43legacy_calc_nrssi_slope()
671 backup[14] = b43legacy_phy_read(dev, 0x0801); b43legacy_calc_nrssi_slope()
672 backup[15] = b43legacy_phy_read(dev, 0x0060); b43legacy_calc_nrssi_slope()
673 backup[16] = b43legacy_phy_read(dev, 0x0014); b43legacy_calc_nrssi_slope()
674 backup[17] = b43legacy_phy_read(dev, 0x0478); b43legacy_calc_nrssi_slope()
675 b43legacy_phy_write(dev, 0x002E, 0); b43legacy_calc_nrssi_slope()
676 b43legacy_phy_write(dev, B43legacy_PHY_G_LO_CONTROL, 0); b43legacy_calc_nrssi_slope()
679 b43legacy_phy_write(dev, 0x0478, b43legacy_calc_nrssi_slope()
680 b43legacy_phy_read(dev, b43legacy_calc_nrssi_slope()
682 b43legacy_phy_write(dev, 0x0801, b43legacy_calc_nrssi_slope()
683 b43legacy_phy_read(dev, b43legacy_calc_nrssi_slope()
687 b43legacy_phy_write(dev, 0x0801, b43legacy_calc_nrssi_slope()
688 b43legacy_phy_read(dev, b43legacy_calc_nrssi_slope()
692 b43legacy_phy_write(dev, 0x0060, b43legacy_calc_nrssi_slope()
693 b43legacy_phy_read(dev, 0x0060) b43legacy_calc_nrssi_slope()
695 b43legacy_phy_write(dev, 0x0014, b43legacy_calc_nrssi_slope()
696 b43legacy_phy_read(dev, 0x0014) b43legacy_calc_nrssi_slope()
699 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
700 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
702 b43legacy_set_all_gains(dev, 0, 8, 0); b43legacy_calc_nrssi_slope()
703 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
704 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
707 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_slope()
708 (b43legacy_phy_read(dev, 0x0811) b43legacy_calc_nrssi_slope()
710 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_slope()
711 (b43legacy_phy_read(dev, 0x0812) b43legacy_calc_nrssi_slope()
714 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
715 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
719 nrssi0 = (s16)((b43legacy_phy_read(dev, 0x047F) >> 8) & 0x003F); b43legacy_calc_nrssi_slope()
723 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
724 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
727 b43legacy_phy_write(dev, 0x0003, b43legacy_calc_nrssi_slope()
728 (b43legacy_phy_read(dev, 0x0003) b43legacy_calc_nrssi_slope()
731 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, b43legacy_calc_nrssi_slope()
732 b43legacy_read16(dev, b43legacy_calc_nrssi_slope()
734 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_nrssi_slope()
735 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_nrssi_slope()
737 b43legacy_phy_write(dev, 0x0015, 0xF330); b43legacy_calc_nrssi_slope()
739 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_slope()
740 (b43legacy_phy_read(dev, 0x0812) b43legacy_calc_nrssi_slope()
742 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_slope()
743 (b43legacy_phy_read(dev, 0x0811) b43legacy_calc_nrssi_slope()
747 b43legacy_set_all_gains(dev, 3, 0, 1); b43legacy_calc_nrssi_slope()
749 b43legacy_radio_write16(dev, 0x0043, 0x001F); b43legacy_calc_nrssi_slope()
751 tmp = b43legacy_radio_read16(dev, 0x0052) & 0xFF0F; b43legacy_calc_nrssi_slope()
752 b43legacy_radio_write16(dev, 0x0052, tmp | 0x0060); b43legacy_calc_nrssi_slope()
753 tmp = b43legacy_radio_read16(dev, 0x0043) & 0xFFF0; b43legacy_calc_nrssi_slope()
754 b43legacy_radio_write16(dev, 0x0043, tmp | 0x0009); b43legacy_calc_nrssi_slope()
756 b43legacy_phy_write(dev, 0x005A, 0x0480); b43legacy_calc_nrssi_slope()
757 b43legacy_phy_write(dev, 0x0059, 0x0810); b43legacy_calc_nrssi_slope()
758 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_calc_nrssi_slope()
760 nrssi1 = (s16)((b43legacy_phy_read(dev, 0x047F) >> 8) & 0x003F); b43legacy_calc_nrssi_slope()
772 b43legacy_phy_write(dev, 0x002E, backup[10]); b43legacy_calc_nrssi_slope()
773 b43legacy_phy_write(dev, 0x002F, backup[11]); b43legacy_calc_nrssi_slope()
774 b43legacy_phy_write(dev, 0x080F, backup[12]); b43legacy_calc_nrssi_slope()
775 b43legacy_phy_write(dev, B43legacy_PHY_G_LO_CONTROL, b43legacy_calc_nrssi_slope()
779 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_nrssi_slope()
780 b43legacy_phy_read(dev, 0x0812) b43legacy_calc_nrssi_slope()
782 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_nrssi_slope()
783 b43legacy_phy_read(dev, 0x0811) b43legacy_calc_nrssi_slope()
787 b43legacy_radio_write16(dev, 0x007A, backup[0]); b43legacy_calc_nrssi_slope()
788 b43legacy_radio_write16(dev, 0x0052, backup[1]); b43legacy_calc_nrssi_slope()
789 b43legacy_radio_write16(dev, 0x0043, backup[2]); b43legacy_calc_nrssi_slope()
790 b43legacy_write16(dev, 0x03E2, backup[7]); b43legacy_calc_nrssi_slope()
791 b43legacy_write16(dev, 0x03E6, backup[8]); b43legacy_calc_nrssi_slope()
792 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, backup[9]); b43legacy_calc_nrssi_slope()
793 b43legacy_phy_write(dev, 0x0015, backup[3]); b43legacy_calc_nrssi_slope()
794 b43legacy_phy_write(dev, 0x005A, backup[4]); b43legacy_calc_nrssi_slope()
795 b43legacy_phy_write(dev, 0x0059, backup[5]); b43legacy_calc_nrssi_slope()
796 b43legacy_phy_write(dev, 0x0058, backup[6]); b43legacy_calc_nrssi_slope()
797 b43legacy_synth_pu_workaround(dev, phy->channel); b43legacy_calc_nrssi_slope()
798 b43legacy_phy_write(dev, 0x0802, b43legacy_calc_nrssi_slope()
799 b43legacy_phy_read(dev, 0x0802) | 0x0003); b43legacy_calc_nrssi_slope()
800 b43legacy_set_original_gains(dev); b43legacy_calc_nrssi_slope()
801 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_calc_nrssi_slope()
802 b43legacy_phy_read(dev, B43legacy_PHY_G_CRS) b43legacy_calc_nrssi_slope()
805 b43legacy_phy_write(dev, 0x0801, backup[14]); b43legacy_calc_nrssi_slope()
806 b43legacy_phy_write(dev, 0x0060, backup[15]); b43legacy_calc_nrssi_slope()
807 b43legacy_phy_write(dev, 0x0014, backup[16]); b43legacy_calc_nrssi_slope()
808 b43legacy_phy_write(dev, 0x0478, backup[17]); b43legacy_calc_nrssi_slope()
810 b43legacy_nrssi_mem_update(dev); b43legacy_calc_nrssi_slope()
811 b43legacy_calc_nrssi_threshold(dev); b43legacy_calc_nrssi_slope()
818 void b43legacy_calc_nrssi_threshold(struct b43legacy_wldev *dev) b43legacy_calc_nrssi_threshold() argument
820 struct b43legacy_phy *phy = &dev->phy; b43legacy_calc_nrssi_threshold()
831 if (!(dev->dev->bus->sprom.boardflags_lo & b43legacy_calc_nrssi_threshold()
843 b43legacy_phy_read(dev, 0x0020); /* dummy read */ b43legacy_calc_nrssi_threshold()
844 b43legacy_phy_write(dev, 0x0020, (((u16)threshold) << 8) b43legacy_calc_nrssi_threshold()
848 b43legacy_phy_write(dev, 0x0087, 0x0E0D); b43legacy_calc_nrssi_threshold()
849 b43legacy_phy_write(dev, 0x0086, 0x0C0B); b43legacy_calc_nrssi_threshold()
850 b43legacy_phy_write(dev, 0x0085, 0x0A09); b43legacy_calc_nrssi_threshold()
851 b43legacy_phy_write(dev, 0x0084, 0x0808); b43legacy_calc_nrssi_threshold()
852 b43legacy_phy_write(dev, 0x0083, 0x0808); b43legacy_calc_nrssi_threshold()
853 b43legacy_phy_write(dev, 0x0082, 0x0604); b43legacy_calc_nrssi_threshold()
854 b43legacy_phy_write(dev, 0x0081, 0x0302); b43legacy_calc_nrssi_threshold()
855 b43legacy_phy_write(dev, 0x0080, 0x0100); b43legacy_calc_nrssi_threshold()
861 !(dev->dev->bus->sprom.boardflags_lo & b43legacy_calc_nrssi_threshold()
863 tmp16 = b43legacy_nrssi_hw_read(dev, 0x20); b43legacy_calc_nrssi_threshold()
867 b43legacy_phy_write(dev, 0x048A, b43legacy_calc_nrssi_threshold()
868 (b43legacy_phy_read(dev, b43legacy_calc_nrssi_threshold()
871 b43legacy_phy_write(dev, 0x048A, b43legacy_calc_nrssi_threshold()
872 (b43legacy_phy_read(dev, b43legacy_calc_nrssi_threshold()
906 tmp_u16 = b43legacy_phy_read(dev, 0x048A) & 0xF000; b43legacy_calc_nrssi_threshold()
909 b43legacy_phy_write(dev, 0x048A, tmp_u16); b43legacy_calc_nrssi_threshold()
957 b43legacy_phy_read(dev, (offset))); \
961 b43legacy_phy_write(dev, (offset), \
968 b43legacy_radio_read16(dev, (offset))); \
972 b43legacy_radio_write16(dev, (offset), \
979 b43legacy_ilt_read(dev, (offset))); \
983 b43legacy_ilt_write(dev, (offset), \
989 b43legacy_radio_interference_mitigation_enable(struct b43legacy_wldev *dev, b43legacy_radio_interference_mitigation_enable() argument
992 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_interference_mitigation_enable()
1002 b43legacy_phy_write(dev, 0x042B, b43legacy_radio_interference_mitigation_enable()
1003 b43legacy_phy_read(dev, 0x042B) b43legacy_radio_interference_mitigation_enable()
1005 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_interference_mitigation_enable()
1006 b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_enable()
1011 tmp = (b43legacy_radio_read16(dev, 0x0078) & 0x001E); b43legacy_radio_interference_mitigation_enable()
1019 b43legacy_radio_write16(dev, 0x0078, flipped); b43legacy_radio_interference_mitigation_enable()
1021 b43legacy_calc_nrssi_threshold(dev); b43legacy_radio_interference_mitigation_enable()
1024 b43legacy_phy_write(dev, 0x0406, 0x7E28); b43legacy_radio_interference_mitigation_enable()
1026 b43legacy_phy_write(dev, 0x042B, b43legacy_radio_interference_mitigation_enable()
1027 b43legacy_phy_read(dev, 0x042B) | 0x0800); b43legacy_radio_interference_mitigation_enable()
1028 b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, b43legacy_radio_interference_mitigation_enable()
1029 b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_enable()
1033 b43legacy_phy_write(dev, 0x04A0, b43legacy_radio_interference_mitigation_enable()
1034 (b43legacy_phy_read(dev, 0x04A0) & 0xC0C0) b43legacy_radio_interference_mitigation_enable()
1037 b43legacy_phy_write(dev, 0x04A1, b43legacy_radio_interference_mitigation_enable()
1038 (b43legacy_phy_read(dev, 0x04A1) & 0xC0C0) b43legacy_radio_interference_mitigation_enable()
1041 b43legacy_phy_write(dev, 0x04A2, b43legacy_radio_interference_mitigation_enable()
1042 (b43legacy_phy_read(dev, 0x04A2) & 0xC0C0) b43legacy_radio_interference_mitigation_enable()
1045 b43legacy_phy_write(dev, 0x04A8, b43legacy_radio_interference_mitigation_enable()
1046 (b43legacy_phy_read(dev, 0x04A8) & 0xC0C0) b43legacy_radio_interference_mitigation_enable()
1049 b43legacy_phy_write(dev, 0x04AB, b43legacy_radio_interference_mitigation_enable()
1050 (b43legacy_phy_read(dev, 0x04AB) & 0xC0C0) b43legacy_radio_interference_mitigation_enable()
1054 b43legacy_phy_write(dev, 0x04A7, 0x0002); b43legacy_radio_interference_mitigation_enable()
1056 b43legacy_phy_write(dev, 0x04A3, 0x287A); b43legacy_radio_interference_mitigation_enable()
1058 b43legacy_phy_write(dev, 0x04A9, 0x2027); b43legacy_radio_interference_mitigation_enable()
1060 b43legacy_phy_write(dev, 0x0493, 0x32F5); b43legacy_radio_interference_mitigation_enable()
1062 b43legacy_phy_write(dev, 0x04AA, 0x2027); b43legacy_radio_interference_mitigation_enable()
1064 b43legacy_phy_write(dev, 0x04AC, 0x32F5); b43legacy_radio_interference_mitigation_enable()
1067 if (b43legacy_phy_read(dev, 0x0033) & 0x0800) b43legacy_radio_interference_mitigation_enable()
1107 b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, b43legacy_radio_interference_mitigation_enable()
1108 b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_enable()
1110 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_interference_mitigation_enable()
1111 (b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_enable()
1115 b43legacy_phy_write(dev, 0x0033, 0x0800); b43legacy_radio_interference_mitigation_enable()
1116 b43legacy_phy_write(dev, 0x04A3, 0x2027); b43legacy_radio_interference_mitigation_enable()
1117 b43legacy_phy_write(dev, 0x04A9, 0x1CA8); b43legacy_radio_interference_mitigation_enable()
1118 b43legacy_phy_write(dev, 0x0493, 0x287A); b43legacy_radio_interference_mitigation_enable()
1119 b43legacy_phy_write(dev, 0x04AA, 0x1CA8); b43legacy_radio_interference_mitigation_enable()
1120 b43legacy_phy_write(dev, 0x04AC, 0x287A); b43legacy_radio_interference_mitigation_enable()
1122 b43legacy_phy_write(dev, 0x04A0, b43legacy_radio_interference_mitigation_enable()
1123 (b43legacy_phy_read(dev, 0x04A0) b43legacy_radio_interference_mitigation_enable()
1125 b43legacy_phy_write(dev, 0x04A7, 0x000D); b43legacy_radio_interference_mitigation_enable()
1128 b43legacy_phy_write(dev, 0x0406, 0xFF0D); b43legacy_radio_interference_mitigation_enable()
1130 b43legacy_phy_write(dev, 0x04C0, 0xFFFF); b43legacy_radio_interference_mitigation_enable()
1131 b43legacy_phy_write(dev, 0x04C1, 0x00A9); b43legacy_radio_interference_mitigation_enable()
1133 b43legacy_phy_write(dev, 0x04C0, 0x00C1); b43legacy_radio_interference_mitigation_enable()
1134 b43legacy_phy_write(dev, 0x04C1, 0x0059); b43legacy_radio_interference_mitigation_enable()
1137 b43legacy_phy_write(dev, 0x04A1, b43legacy_radio_interference_mitigation_enable()
1138 (b43legacy_phy_read(dev, 0x04A1) b43legacy_radio_interference_mitigation_enable()
1140 b43legacy_phy_write(dev, 0x04A1, b43legacy_radio_interference_mitigation_enable()
1141 (b43legacy_phy_read(dev, 0x04A1) b43legacy_radio_interference_mitigation_enable()
1143 b43legacy_phy_write(dev, 0x04A8, b43legacy_radio_interference_mitigation_enable()
1144 (b43legacy_phy_read(dev, 0x04A8) b43legacy_radio_interference_mitigation_enable()
1146 b43legacy_phy_write(dev, 0x04A8, b43legacy_radio_interference_mitigation_enable()
1147 (b43legacy_phy_read(dev, 0x04A8) b43legacy_radio_interference_mitigation_enable()
1149 b43legacy_phy_write(dev, 0x04AB, b43legacy_radio_interference_mitigation_enable()
1150 (b43legacy_phy_read(dev, 0x04AB) b43legacy_radio_interference_mitigation_enable()
1152 b43legacy_phy_write(dev, 0x04AB, b43legacy_radio_interference_mitigation_enable()
1153 (b43legacy_phy_read(dev, 0x04AB) b43legacy_radio_interference_mitigation_enable()
1155 b43legacy_phy_write(dev, 0x04AB, b43legacy_radio_interference_mitigation_enable()
1156 (b43legacy_phy_read(dev, 0x04AB) b43legacy_radio_interference_mitigation_enable()
1158 b43legacy_phy_write(dev, 0x04AB, b43legacy_radio_interference_mitigation_enable()
1159 (b43legacy_phy_read(dev, 0x04AB) b43legacy_radio_interference_mitigation_enable()
1161 b43legacy_phy_write(dev, 0x04A8, b43legacy_radio_interference_mitigation_enable()
1162 (b43legacy_phy_read(dev, 0x04A8) b43legacy_radio_interference_mitigation_enable()
1164 b43legacy_phy_write(dev, 0x04A8, b43legacy_radio_interference_mitigation_enable()
1165 (b43legacy_phy_read(dev, 0x04A8) b43legacy_radio_interference_mitigation_enable()
1167 b43legacy_phy_write(dev, 0x04A2, b43legacy_radio_interference_mitigation_enable()
1168 (b43legacy_phy_read(dev, 0x04A2) b43legacy_radio_interference_mitigation_enable()
1170 b43legacy_phy_write(dev, 0x04A0, b43legacy_radio_interference_mitigation_enable()
1171 (b43legacy_phy_read(dev, 0x04A0) b43legacy_radio_interference_mitigation_enable()
1173 b43legacy_phy_write(dev, 0x04A2, b43legacy_radio_interference_mitigation_enable()
1174 (b43legacy_phy_read(dev, 0x04A2) b43legacy_radio_interference_mitigation_enable()
1178 b43legacy_phy_write(dev, 0x048A, b43legacy_radio_interference_mitigation_enable()
1179 b43legacy_phy_read(dev, 0x048A) b43legacy_radio_interference_mitigation_enable()
1181 b43legacy_phy_write(dev, 0x0415, b43legacy_radio_interference_mitigation_enable()
1182 (b43legacy_phy_read(dev, 0x0415) b43legacy_radio_interference_mitigation_enable()
1184 b43legacy_phy_write(dev, 0x0416, b43legacy_radio_interference_mitigation_enable()
1185 (b43legacy_phy_read(dev, 0x0416) b43legacy_radio_interference_mitigation_enable()
1187 b43legacy_phy_write(dev, 0x0417, b43legacy_radio_interference_mitigation_enable()
1188 (b43legacy_phy_read(dev, 0x0417) b43legacy_radio_interference_mitigation_enable()
1191 b43legacy_phy_write(dev, 0x048A, b43legacy_radio_interference_mitigation_enable()
1192 b43legacy_phy_read(dev, 0x048A) b43legacy_radio_interference_mitigation_enable()
1194 b43legacy_phy_write(dev, 0x048A, b43legacy_radio_interference_mitigation_enable()
1195 (b43legacy_phy_read(dev, 0x048A) b43legacy_radio_interference_mitigation_enable()
1197 tmp32 = b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, b43legacy_radio_interference_mitigation_enable()
1201 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_radio_interference_mitigation_enable()
1207 b43legacy_phy_write(dev, 0x042B, b43legacy_radio_interference_mitigation_enable()
1208 b43legacy_phy_read(dev, 0x042B) b43legacy_radio_interference_mitigation_enable()
1210 b43legacy_phy_write(dev, 0x048C, b43legacy_radio_interference_mitigation_enable()
1211 (b43legacy_phy_read(dev, 0x048C) b43legacy_radio_interference_mitigation_enable()
1214 b43legacy_phy_write(dev, 0x04AE, b43legacy_radio_interference_mitigation_enable()
1215 (b43legacy_phy_read(dev, 0x04AE) b43legacy_radio_interference_mitigation_enable()
1217 b43legacy_phy_write(dev, 0x04AD, b43legacy_radio_interference_mitigation_enable()
1218 (b43legacy_phy_read(dev, 0x04AD) b43legacy_radio_interference_mitigation_enable()
1221 b43legacy_ilt_write(dev, 0x1A00 + 0x3, 0x007F); b43legacy_radio_interference_mitigation_enable()
1222 b43legacy_ilt_write(dev, 0x1A00 + 0x2, 0x007F); b43legacy_radio_interference_mitigation_enable()
1223 b43legacy_phy_write(dev, 0x04AD, b43legacy_radio_interference_mitigation_enable()
1224 b43legacy_phy_read(dev, 0x04AD) b43legacy_radio_interference_mitigation_enable()
1227 b43legacy_calc_nrssi_slope(dev); b43legacy_radio_interference_mitigation_enable()
1235 b43legacy_radio_interference_mitigation_disable(struct b43legacy_wldev *dev, b43legacy_radio_interference_mitigation_disable() argument
1238 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_interference_mitigation_disable()
1245 b43legacy_phy_write(dev, 0x042B, b43legacy_radio_interference_mitigation_disable()
1246 b43legacy_phy_read(dev, 0x042B) b43legacy_radio_interference_mitigation_disable()
1248 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_interference_mitigation_disable()
1249 b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_disable()
1254 b43legacy_calc_nrssi_threshold(dev); b43legacy_radio_interference_mitigation_disable()
1256 b43legacy_phy_write(dev, 0x042B, b43legacy_radio_interference_mitigation_disable()
1257 b43legacy_phy_read(dev, 0x042B) & ~0x0800); b43legacy_radio_interference_mitigation_disable()
1258 if (!dev->bad_frames_preempt) b43legacy_radio_interference_mitigation_disable()
1259 b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, b43legacy_radio_interference_mitigation_disable()
1260 b43legacy_phy_read(dev, b43legacy_radio_interference_mitigation_disable()
1263 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_interference_mitigation_disable()
1264 b43legacy_phy_read(dev, B43legacy_PHY_G_CRS) b43legacy_radio_interference_mitigation_disable()
1279 if (!(b43legacy_phy_read(dev, 0x0033) & 0x0800)) b43legacy_radio_interference_mitigation_disable()
1317 tmp32 = b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, b43legacy_radio_interference_mitigation_disable()
1321 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_radio_interference_mitigation_disable()
1325 b43legacy_calc_nrssi_slope(dev); b43legacy_radio_interference_mitigation_disable()
1339 int b43legacy_radio_set_interference_mitigation(struct b43legacy_wldev *dev, b43legacy_radio_set_interference_mitigation() argument
1342 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_set_interference_mitigation()
1370 b43legacy_radio_interference_mitigation_disable(dev, b43legacy_radio_set_interference_mitigation()
1377 b43legacy_radio_interference_mitigation_enable(dev, mode); b43legacy_radio_set_interference_mitigation()
1383 u16 b43legacy_radio_calibrationvalue(struct b43legacy_wldev *dev) b43legacy_radio_calibrationvalue() argument
1389 reg = b43legacy_radio_read16(dev, 0x0060); b43legacy_radio_calibrationvalue()
1399 static u16 b43legacy_get_812_value(struct b43legacy_wldev *dev, u8 lpd) b43legacy_get_812_value() argument
1401 struct b43legacy_phy *phy = &dev->phy; b43legacy_get_812_value()
1410 if (phy->rev < 7 || !(dev->dev->bus->sprom.boardflags_lo b43legacy_get_812_value()
1463 if (phy->rev >= 7 && dev->dev->bus->sprom.boardflags_lo b43legacy_get_812_value()
1496 u16 b43legacy_radio_init2050(struct b43legacy_wldev *dev) b43legacy_radio_init2050() argument
1498 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_init2050()
1506 backup[0] = b43legacy_radio_read16(dev, 0x0043); b43legacy_radio_init2050()
1507 backup[14] = b43legacy_radio_read16(dev, 0x0051); b43legacy_radio_init2050()
1508 backup[15] = b43legacy_radio_read16(dev, 0x0052); b43legacy_radio_init2050()
1509 backup[1] = b43legacy_phy_read(dev, 0x0015); b43legacy_radio_init2050()
1510 backup[16] = b43legacy_phy_read(dev, 0x005A); b43legacy_radio_init2050()
1511 backup[17] = b43legacy_phy_read(dev, 0x0059); b43legacy_radio_init2050()
1512 backup[18] = b43legacy_phy_read(dev, 0x0058); b43legacy_radio_init2050()
1514 backup[2] = b43legacy_phy_read(dev, 0x0030); b43legacy_radio_init2050()
1515 backup[3] = b43legacy_read16(dev, 0x03EC); b43legacy_radio_init2050()
1516 b43legacy_phy_write(dev, 0x0030, 0x00FF); b43legacy_radio_init2050()
1517 b43legacy_write16(dev, 0x03EC, 0x3F3F); b43legacy_radio_init2050()
1520 backup[4] = b43legacy_phy_read(dev, 0x0811); b43legacy_radio_init2050()
1521 backup[5] = b43legacy_phy_read(dev, 0x0812); b43legacy_radio_init2050()
1522 backup[6] = b43legacy_phy_read(dev, 0x0814); b43legacy_radio_init2050()
1523 backup[7] = b43legacy_phy_read(dev, 0x0815); b43legacy_radio_init2050()
1524 backup[8] = b43legacy_phy_read(dev, b43legacy_radio_init2050()
1526 backup[9] = b43legacy_phy_read(dev, 0x0802); b43legacy_radio_init2050()
1527 b43legacy_phy_write(dev, 0x0814, b43legacy_radio_init2050()
1528 (b43legacy_phy_read(dev, 0x0814) b43legacy_radio_init2050()
1530 b43legacy_phy_write(dev, 0x0815, b43legacy_radio_init2050()
1531 (b43legacy_phy_read(dev, 0x0815) b43legacy_radio_init2050()
1533 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_init2050()
1534 (b43legacy_phy_read(dev, b43legacy_radio_init2050()
1536 b43legacy_phy_write(dev, 0x0802, b43legacy_radio_init2050()
1537 (b43legacy_phy_read(dev, 0x0802) b43legacy_radio_init2050()
1540 backup[19] = b43legacy_phy_read(dev, 0x080F); b43legacy_radio_init2050()
1541 backup[20] = b43legacy_phy_read(dev, 0x0810); b43legacy_radio_init2050()
1543 b43legacy_phy_write(dev, 0x080F, b43legacy_radio_init2050()
1546 b43legacy_phy_write(dev, 0x080F, b43legacy_radio_init2050()
1548 b43legacy_phy_write(dev, 0x0810, 0x0000); b43legacy_radio_init2050()
1550 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1551 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1554 !(dev->dev->bus->sprom.boardflags_lo b43legacy_radio_init2050()
1556 b43legacy_phy_write(dev, 0x0811, 0x01B3); b43legacy_radio_init2050()
1558 b43legacy_phy_write(dev, 0x0811, 0x09B3); b43legacy_radio_init2050()
1561 b43legacy_write16(dev, B43legacy_MMIO_PHY_RADIO, b43legacy_radio_init2050()
1562 (b43legacy_read16(dev, B43legacy_MMIO_PHY_RADIO) b43legacy_radio_init2050()
1564 backup[10] = b43legacy_phy_read(dev, 0x0035); b43legacy_radio_init2050()
1565 b43legacy_phy_write(dev, 0x0035, b43legacy_radio_init2050()
1566 (b43legacy_phy_read(dev, 0x0035) & 0xFF7F)); b43legacy_radio_init2050()
1567 backup[11] = b43legacy_read16(dev, 0x03E6); b43legacy_radio_init2050()
1568 backup[12] = b43legacy_read16(dev, B43legacy_MMIO_CHANNEL_EXT); b43legacy_radio_init2050()
1572 b43legacy_write16(dev, 0x03E6, 0x0122); b43legacy_radio_init2050()
1575 b43legacy_phy_write(dev, 0x0003, b43legacy_radio_init2050()
1576 (b43legacy_phy_read(dev, 0x0003) b43legacy_radio_init2050()
1578 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, b43legacy_radio_init2050()
1579 (b43legacy_read16(dev, b43legacy_radio_init2050()
1583 ret = b43legacy_radio_calibrationvalue(dev); b43legacy_radio_init2050()
1586 b43legacy_radio_write16(dev, 0x0078, 0x0026); b43legacy_radio_init2050()
1589 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1590 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1592 b43legacy_phy_write(dev, 0x0015, 0xBFAF); b43legacy_radio_init2050()
1593 b43legacy_phy_write(dev, 0x002B, 0x1403); b43legacy_radio_init2050()
1595 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1596 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1598 b43legacy_phy_write(dev, 0x0015, 0xBFA0); b43legacy_radio_init2050()
1599 b43legacy_radio_write16(dev, 0x0051, b43legacy_radio_init2050()
1600 (b43legacy_radio_read16(dev, 0x0051) b43legacy_radio_init2050()
1603 b43legacy_radio_write16(dev, 0x0043, 0x001F); b43legacy_radio_init2050()
1605 b43legacy_radio_write16(dev, 0x0052, 0x0000); b43legacy_radio_init2050()
1606 b43legacy_radio_write16(dev, 0x0043, b43legacy_radio_init2050()
1607 (b43legacy_radio_read16(dev, 0x0043) b43legacy_radio_init2050()
1610 b43legacy_phy_write(dev, 0x0058, 0x0000); b43legacy_radio_init2050()
1613 b43legacy_phy_write(dev, 0x005A, 0x0480); b43legacy_radio_init2050()
1614 b43legacy_phy_write(dev, 0x0059, 0xC810); b43legacy_radio_init2050()
1615 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_radio_init2050()
1617 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1618 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1620 b43legacy_phy_write(dev, 0x0015, 0xAFB0); b43legacy_radio_init2050()
1623 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1624 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1626 b43legacy_phy_write(dev, 0x0015, 0xEFB0); b43legacy_radio_init2050()
1629 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1630 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1632 b43legacy_phy_write(dev, 0x0015, 0xFFF0); b43legacy_radio_init2050()
1634 tmp1 += b43legacy_phy_read(dev, 0x002D); b43legacy_radio_init2050()
1635 b43legacy_phy_write(dev, 0x0058, 0x0000); b43legacy_radio_init2050()
1637 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1638 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1640 b43legacy_phy_write(dev, 0x0015, 0xAFB0); b43legacy_radio_init2050()
1646 b43legacy_phy_write(dev, 0x0058, 0x0000); b43legacy_radio_init2050()
1649 b43legacy_radio_write16(dev, 0x0078, (flip_4bit(i) << 1) b43legacy_radio_init2050()
1651 backup[13] = b43legacy_radio_read16(dev, 0x0078); b43legacy_radio_init2050()
1654 b43legacy_phy_write(dev, 0x005A, 0x0D80); b43legacy_radio_init2050()
1655 b43legacy_phy_write(dev, 0x0059, 0xC810); b43legacy_radio_init2050()
1656 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_radio_init2050()
1658 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1659 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1661 b43legacy_phy_write(dev, 0x0015, 0xAFB0); b43legacy_radio_init2050()
1664 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1665 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1667 b43legacy_phy_write(dev, 0x0015, 0xEFB0); b43legacy_radio_init2050()
1670 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1671 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1673 b43legacy_phy_write(dev, 0x0015, 0xFFF0); b43legacy_radio_init2050()
1675 tmp2 += b43legacy_phy_read(dev, 0x002D); b43legacy_radio_init2050()
1676 b43legacy_phy_write(dev, 0x0058, 0x0000); b43legacy_radio_init2050()
1678 b43legacy_phy_write(dev, 0x0812, b43legacy_radio_init2050()
1679 b43legacy_get_812_value(dev, b43legacy_radio_init2050()
1681 b43legacy_phy_write(dev, 0x0015, 0xAFB0); b43legacy_radio_init2050()
1690 b43legacy_phy_write(dev, 0x0015, backup[1]); b43legacy_radio_init2050()
1691 b43legacy_radio_write16(dev, 0x0051, backup[14]); b43legacy_radio_init2050()
1692 b43legacy_radio_write16(dev, 0x0052, backup[15]); b43legacy_radio_init2050()
1693 b43legacy_radio_write16(dev, 0x0043, backup[0]); b43legacy_radio_init2050()
1694 b43legacy_phy_write(dev, 0x005A, backup[16]); b43legacy_radio_init2050()
1695 b43legacy_phy_write(dev, 0x0059, backup[17]); b43legacy_radio_init2050()
1696 b43legacy_phy_write(dev, 0x0058, backup[18]); b43legacy_radio_init2050()
1697 b43legacy_write16(dev, 0x03E6, backup[11]); b43legacy_radio_init2050()
1699 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, backup[12]); b43legacy_radio_init2050()
1700 b43legacy_phy_write(dev, 0x0035, backup[10]); b43legacy_radio_init2050()
1701 b43legacy_radio_selectchannel(dev, phy->channel, 1); b43legacy_radio_init2050()
1703 b43legacy_phy_write(dev, 0x0030, backup[2]); b43legacy_radio_init2050()
1704 b43legacy_write16(dev, 0x03EC, backup[3]); b43legacy_radio_init2050()
1707 b43legacy_write16(dev, B43legacy_MMIO_PHY_RADIO, b43legacy_radio_init2050()
1708 (b43legacy_read16(dev, b43legacy_radio_init2050()
1710 b43legacy_phy_write(dev, 0x0811, backup[4]); b43legacy_radio_init2050()
1711 b43legacy_phy_write(dev, 0x0812, backup[5]); b43legacy_radio_init2050()
1712 b43legacy_phy_write(dev, 0x0814, backup[6]); b43legacy_radio_init2050()
1713 b43legacy_phy_write(dev, 0x0815, backup[7]); b43legacy_radio_init2050()
1714 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_radio_init2050()
1716 b43legacy_phy_write(dev, 0x0802, backup[9]); b43legacy_radio_init2050()
1718 b43legacy_phy_write(dev, 0x080F, backup[19]); b43legacy_radio_init2050()
1719 b43legacy_phy_write(dev, 0x0810, backup[20]); b43legacy_radio_init2050()
1746 int b43legacy_radio_selectchannel(struct b43legacy_wldev *dev, b43legacy_radio_selectchannel() argument
1750 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_selectchannel()
1765 b43legacy_synth_pu_workaround(dev, channel); b43legacy_radio_selectchannel()
1767 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL, b43legacy_radio_selectchannel()
1771 if (dev->dev->bus->sprom.country_code == 5) /* JAPAN) */ b43legacy_radio_selectchannel()
1772 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_radio_selectchannel()
1774 b43legacy_shm_read32(dev, b43legacy_radio_selectchannel()
1779 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_radio_selectchannel()
1781 b43legacy_shm_read32(dev, b43legacy_radio_selectchannel()
1785 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, b43legacy_radio_selectchannel()
1786 b43legacy_read16(dev, b43legacy_radio_selectchannel()
1789 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, b43legacy_radio_selectchannel()
1790 b43legacy_read16(dev, b43legacy_radio_selectchannel()
1801 void b43legacy_radio_set_txantenna(struct b43legacy_wldev *dev, u32 val) b43legacy_radio_set_txantenna() argument
1806 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x0022) & 0xFCFF; b43legacy_radio_set_txantenna()
1807 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0022, tmp | val); b43legacy_radio_set_txantenna()
1808 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x03A8) & 0xFCFF; b43legacy_radio_set_txantenna()
1809 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x03A8, tmp | val); b43legacy_radio_set_txantenna()
1810 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x0054) & 0xFCFF; b43legacy_radio_set_txantenna()
1811 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0054, tmp | val); b43legacy_radio_set_txantenna()
1881 void b43legacy_radio_set_txpower_a(struct b43legacy_wldev *dev, u16 txpower) b43legacy_radio_set_txpower_a() argument
1883 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_set_txpower_a()
1894 b43legacy_phy_write(dev, 0x0019, pamp); b43legacy_radio_set_txpower_a()
1898 b43legacy_phy_write(dev, 0x0017, base | 0x0020); b43legacy_radio_set_txpower_a()
1900 ilt = b43legacy_ilt_read(dev, 0x3001); b43legacy_radio_set_txpower_a()
1907 b43legacy_ilt_write(dev, 0x3001, dac); b43legacy_radio_set_txpower_a()
1914 void b43legacy_radio_set_txpower_bg(struct b43legacy_wldev *dev, b43legacy_radio_set_txpower_bg() argument
1919 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_set_txpower_bg()
1938 b43legacy_phy_set_baseband_attenuation(dev, baseband_attenuation); b43legacy_radio_set_txpower_bg()
1939 b43legacy_radio_write16(dev, 0x0043, radio_attenuation); b43legacy_radio_set_txpower_bg()
1940 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0064, b43legacy_radio_set_txpower_bg()
1943 b43legacy_radio_write16(dev, 0x0052, b43legacy_radio_set_txpower_bg()
1944 (b43legacy_radio_read16(dev, 0x0052) b43legacy_radio_set_txpower_bg()
1948 b43legacy_phy_lo_adjust(dev, 0); b43legacy_radio_set_txpower_bg()
1951 u16 b43legacy_default_baseband_attenuation(struct b43legacy_wldev *dev) b43legacy_default_baseband_attenuation() argument
1953 struct b43legacy_phy *phy = &dev->phy; b43legacy_default_baseband_attenuation()
1960 u16 b43legacy_default_radio_attenuation(struct b43legacy_wldev *dev) b43legacy_default_radio_attenuation() argument
1962 struct b43legacy_phy *phy = &dev->phy; b43legacy_default_radio_attenuation()
1980 if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
1981 dev->dev->bus->boardinfo.type == 0x421 && b43legacy_default_radio_attenuation()
1982 dev->dev->bus->sprom.board_rev >= 30) b43legacy_default_radio_attenuation()
1984 else if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
1985 dev->dev->bus->boardinfo.type == 0x416) b43legacy_default_radio_attenuation()
1990 if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
1991 dev->dev->bus->boardinfo.type == 0x421 && b43legacy_default_radio_attenuation()
1992 dev->dev->bus->sprom.board_rev >= 30) b43legacy_default_radio_attenuation()
2000 if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
2001 dev->dev->bus->boardinfo.type == 0x421 && b43legacy_default_radio_attenuation()
2002 dev->dev->bus->sprom.board_rev >= 30) b43legacy_default_radio_attenuation()
2004 else if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
2005 dev->dev->bus->boardinfo.type == b43legacy_default_radio_attenuation()
2008 else if (dev->dev->bus->chip_id == 0x4320) b43legacy_default_radio_attenuation()
2034 if (is_bcm_board_vendor(dev) && b43legacy_default_radio_attenuation()
2035 dev->dev->bus->boardinfo.type == 0x421) { b43legacy_default_radio_attenuation()
2036 if (dev->dev->bus->sprom.board_rev < 0x43) b43legacy_default_radio_attenuation()
2038 else if (dev->dev->bus->sprom.board_rev < 0x51) b43legacy_default_radio_attenuation()
2047 u16 b43legacy_default_txctl1(struct b43legacy_wldev *dev) b43legacy_default_txctl1() argument
2049 struct b43legacy_phy *phy = &dev->phy; b43legacy_default_txctl1()
2062 void b43legacy_radio_turn_on(struct b43legacy_wldev *dev) b43legacy_radio_turn_on() argument
2064 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_turn_on()
2076 b43legacy_phy_write(dev, 0x0015, 0x8000); b43legacy_radio_turn_on()
2077 b43legacy_phy_write(dev, 0x0015, 0xCC00); b43legacy_radio_turn_on()
2078 b43legacy_phy_write(dev, 0x0015, b43legacy_radio_turn_on()
2082 b43legacy_phy_write(dev, B43legacy_PHY_RFOVER, b43legacy_radio_turn_on()
2084 b43legacy_phy_write(dev, B43legacy_PHY_RFOVERVAL, b43legacy_radio_turn_on()
2089 err = b43legacy_radio_selectchannel(dev, b43legacy_radio_turn_on()
2091 err |= b43legacy_radio_selectchannel(dev, channel, 0); b43legacy_radio_turn_on()
2100 void b43legacy_radio_turn_off(struct b43legacy_wldev *dev, bool force) b43legacy_radio_turn_off() argument
2102 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_turn_off()
2107 if (phy->type == B43legacy_PHYTYPE_G && dev->dev->id.revision >= 5) { b43legacy_radio_turn_off()
2110 rfover = b43legacy_phy_read(dev, B43legacy_PHY_RFOVER); b43legacy_radio_turn_off()
2111 rfoverval = b43legacy_phy_read(dev, B43legacy_PHY_RFOVERVAL); b43legacy_radio_turn_off()
2117 b43legacy_phy_write(dev, B43legacy_PHY_RFOVER, rfover | 0x008C); b43legacy_radio_turn_off()
2118 b43legacy_phy_write(dev, B43legacy_PHY_RFOVERVAL, b43legacy_radio_turn_off()
2121 b43legacy_phy_write(dev, 0x0015, 0xAA00); b43legacy_radio_turn_off()
2123 b43legacydbg(dev->wl, "Radio initialized\n"); b43legacy_radio_turn_off()
2126 void b43legacy_radio_clear_tssi(struct b43legacy_wldev *dev) b43legacy_radio_clear_tssi() argument
2128 struct b43legacy_phy *phy = &dev->phy; b43legacy_radio_clear_tssi()
2133 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0058, b43legacy_radio_clear_tssi()
2135 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x005a, b43legacy_radio_clear_tssi()
2137 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0070, b43legacy_radio_clear_tssi()
2139 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0072, b43legacy_radio_clear_tssi()
H A Dphy.c83 static void b43legacy_phy_initg(struct b43legacy_wldev *dev);
98 void b43legacy_phy_lock(struct b43legacy_wldev *dev) b43legacy_phy_lock() argument
101 B43legacy_WARN_ON(dev->phy.phy_locked); b43legacy_phy_lock()
102 dev->phy.phy_locked = 1; b43legacy_phy_lock()
105 if (dev->dev->id.revision < 3) { b43legacy_phy_lock()
106 b43legacy_mac_suspend(dev); b43legacy_phy_lock()
108 if (!b43legacy_is_mode(dev->wl, NL80211_IFTYPE_AP)) b43legacy_phy_lock()
109 b43legacy_power_saving_ctl_bits(dev, -1, 1); b43legacy_phy_lock()
113 void b43legacy_phy_unlock(struct b43legacy_wldev *dev) b43legacy_phy_unlock() argument
116 B43legacy_WARN_ON(!dev->phy.phy_locked); b43legacy_phy_unlock()
117 dev->phy.phy_locked = 0; b43legacy_phy_unlock()
120 if (dev->dev->id.revision < 3) { b43legacy_phy_unlock()
121 b43legacy_mac_enable(dev); b43legacy_phy_unlock()
123 if (!b43legacy_is_mode(dev->wl, NL80211_IFTYPE_AP)) b43legacy_phy_unlock()
124 b43legacy_power_saving_ctl_bits(dev, -1, -1); b43legacy_phy_unlock()
128 u16 b43legacy_phy_read(struct b43legacy_wldev *dev, u16 offset) b43legacy_phy_read() argument
130 b43legacy_write16(dev, B43legacy_MMIO_PHY_CONTROL, offset); b43legacy_phy_read()
131 return b43legacy_read16(dev, B43legacy_MMIO_PHY_DATA); b43legacy_phy_read()
134 void b43legacy_phy_write(struct b43legacy_wldev *dev, u16 offset, u16 val) b43legacy_phy_write() argument
136 b43legacy_write16(dev, B43legacy_MMIO_PHY_CONTROL, offset); b43legacy_phy_write()
138 b43legacy_write16(dev, B43legacy_MMIO_PHY_DATA, val); b43legacy_phy_write()
141 void b43legacy_phy_calibrate(struct b43legacy_wldev *dev) b43legacy_phy_calibrate() argument
143 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_calibrate()
145 b43legacy_read32(dev, B43legacy_MMIO_MACCTL); /* Dummy read. */ b43legacy_phy_calibrate()
149 b43legacy_wireless_core_reset(dev, 0); b43legacy_phy_calibrate()
150 b43legacy_phy_initg(dev); b43legacy_phy_calibrate()
151 b43legacy_wireless_core_reset(dev, B43legacy_TMSLOW_GMODE); b43legacy_phy_calibrate()
159 static void b43legacy_phy_init_pctl(struct b43legacy_wldev *dev) b43legacy_phy_init_pctl() argument
161 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_init_pctl()
169 if (is_bcm_board_vendor(dev) && b43legacy_phy_init_pctl()
170 (dev->dev->bus->boardinfo.type == 0x0416)) b43legacy_phy_init_pctl()
173 b43legacy_phy_write(dev, 0x0028, 0x8018); b43legacy_phy_init_pctl()
174 b43legacy_write16(dev, 0x03E6, b43legacy_read16(dev, 0x03E6) & 0xFFDF); b43legacy_phy_init_pctl()
179 b43legacy_phy_write(dev, 0x047A, 0xC111); b43legacy_phy_init_pctl()
191 b43legacy_radio_write16(dev, 0x0076, b43legacy_phy_init_pctl()
192 b43legacy_radio_read16(dev, 0x0076) b43legacy_phy_init_pctl()
200 b43legacy_radio_set_txpower_bg(dev, 0xB, 0x1F, 0); b43legacy_phy_init_pctl()
202 b43legacy_radio_set_txpower_bg(dev, 0xB, 9, 0); b43legacy_phy_init_pctl()
205 b43legacy_dummy_transmission(dev); b43legacy_phy_init_pctl()
207 phy->savedpctlreg = b43legacy_phy_read(dev, B43legacy_PHY_G_PCTL); b43legacy_phy_init_pctl()
210 b43legacy_radio_set_txpower_bg(dev, saved_batt, saved_ratt, b43legacy_phy_init_pctl()
213 b43legacy_radio_write16(dev, 0x0076, b43legacy_radio_read16(dev, b43legacy_phy_init_pctl()
215 b43legacy_radio_clear_tssi(dev); b43legacy_phy_init_pctl()
218 static void b43legacy_phy_agcsetup(struct b43legacy_wldev *dev) b43legacy_phy_agcsetup() argument
220 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_agcsetup()
226 b43legacy_ilt_write(dev, offset, 0x00FE); b43legacy_phy_agcsetup()
227 b43legacy_ilt_write(dev, offset + 1, 0x000D); b43legacy_phy_agcsetup()
228 b43legacy_ilt_write(dev, offset + 2, 0x0013); b43legacy_phy_agcsetup()
229 b43legacy_ilt_write(dev, offset + 3, 0x0019); b43legacy_phy_agcsetup()
232 b43legacy_ilt_write(dev, 0x1800, 0x2710); b43legacy_phy_agcsetup()
233 b43legacy_ilt_write(dev, 0x1801, 0x9B83); b43legacy_phy_agcsetup()
234 b43legacy_ilt_write(dev, 0x1802, 0x9B83); b43legacy_phy_agcsetup()
235 b43legacy_ilt_write(dev, 0x1803, 0x0F8D); b43legacy_phy_agcsetup()
236 b43legacy_phy_write(dev, 0x0455, 0x0004); b43legacy_phy_agcsetup()
239 b43legacy_phy_write(dev, 0x04A5, (b43legacy_phy_read(dev, 0x04A5) b43legacy_phy_agcsetup()
241 b43legacy_phy_write(dev, 0x041A, (b43legacy_phy_read(dev, 0x041A) b43legacy_phy_agcsetup()
243 b43legacy_phy_write(dev, 0x041A, (b43legacy_phy_read(dev, 0x041A) b43legacy_phy_agcsetup()
245 b43legacy_phy_write(dev, 0x048C, (b43legacy_phy_read(dev, 0x048C) b43legacy_phy_agcsetup()
248 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_agcsetup()
249 b43legacy_radio_read16(dev, 0x007A) b43legacy_phy_agcsetup()
252 b43legacy_phy_write(dev, 0x04A0, (b43legacy_phy_read(dev, 0x04A0) b43legacy_phy_agcsetup()
254 b43legacy_phy_write(dev, 0x04A1, (b43legacy_phy_read(dev, 0x04A1) b43legacy_phy_agcsetup()
256 b43legacy_phy_write(dev, 0x04A2, (b43legacy_phy_read(dev, 0x04A2) b43legacy_phy_agcsetup()
258 b43legacy_phy_write(dev, 0x04A0, (b43legacy_phy_read(dev, 0x04A0) b43legacy_phy_agcsetup()
262 b43legacy_phy_write(dev, 0x04A2, b43legacy_phy_agcsetup()
263 (b43legacy_phy_read(dev, 0x04A2) b43legacy_phy_agcsetup()
266 b43legacy_phy_write(dev, 0x0488, (b43legacy_phy_read(dev, 0x0488) b43legacy_phy_agcsetup()
268 b43legacy_phy_write(dev, 0x0488, (b43legacy_phy_read(dev, 0x0488) b43legacy_phy_agcsetup()
270 b43legacy_phy_write(dev, 0x0496, (b43legacy_phy_read(dev, 0x0496) b43legacy_phy_agcsetup()
272 b43legacy_phy_write(dev, 0x0489, (b43legacy_phy_read(dev, 0x0489) b43legacy_phy_agcsetup()
274 b43legacy_phy_write(dev, 0x0489, (b43legacy_phy_read(dev, 0x0489) b43legacy_phy_agcsetup()
276 b43legacy_phy_write(dev, 0x0482, (b43legacy_phy_read(dev, 0x0482) b43legacy_phy_agcsetup()
278 b43legacy_phy_write(dev, 0x0496, (b43legacy_phy_read(dev, 0x0496) b43legacy_phy_agcsetup()
280 b43legacy_phy_write(dev, 0x0481, (b43legacy_phy_read(dev, 0x0481) b43legacy_phy_agcsetup()
282 b43legacy_phy_write(dev, 0x0481, (b43legacy_phy_read(dev, 0x0481) b43legacy_phy_agcsetup()
286 b43legacy_phy_write(dev, 0x0430, 0x092B); b43legacy_phy_agcsetup()
287 b43legacy_phy_write(dev, 0x041B, b43legacy_phy_agcsetup()
288 (b43legacy_phy_read(dev, 0x041B) b43legacy_phy_agcsetup()
291 b43legacy_phy_write(dev, 0x041B, b43legacy_phy_agcsetup()
292 b43legacy_phy_read(dev, 0x041B) & 0xFFE1); b43legacy_phy_agcsetup()
293 b43legacy_phy_write(dev, 0x041F, 0x287A); b43legacy_phy_agcsetup()
294 b43legacy_phy_write(dev, 0x0420, b43legacy_phy_agcsetup()
295 (b43legacy_phy_read(dev, 0x0420) b43legacy_phy_agcsetup()
300 b43legacy_phy_write(dev, 0x0422, 0x287A); b43legacy_phy_agcsetup()
301 b43legacy_phy_write(dev, 0x0420, b43legacy_phy_agcsetup()
302 (b43legacy_phy_read(dev, 0x0420) b43legacy_phy_agcsetup()
306 b43legacy_phy_write(dev, 0x04A8, (b43legacy_phy_read(dev, 0x04A8) b43legacy_phy_agcsetup()
308 b43legacy_phy_write(dev, 0x048E, 0x1C00); b43legacy_phy_agcsetup()
311 b43legacy_phy_write(dev, 0x04AB, b43legacy_phy_agcsetup()
312 (b43legacy_phy_read(dev, 0x04AB) b43legacy_phy_agcsetup()
314 b43legacy_phy_write(dev, 0x048B, 0x005E); b43legacy_phy_agcsetup()
315 b43legacy_phy_write(dev, 0x048C, b43legacy_phy_agcsetup()
316 (b43legacy_phy_read(dev, 0x048C) & 0xFF00) b43legacy_phy_agcsetup()
318 b43legacy_phy_write(dev, 0x048D, 0x0002); b43legacy_phy_agcsetup()
321 b43legacy_ilt_write(dev, offset + 0x0800, 0); b43legacy_phy_agcsetup()
322 b43legacy_ilt_write(dev, offset + 0x0801, 7); b43legacy_phy_agcsetup()
323 b43legacy_ilt_write(dev, offset + 0x0802, 16); b43legacy_phy_agcsetup()
324 b43legacy_ilt_write(dev, offset + 0x0803, 28); b43legacy_phy_agcsetup()
327 b43legacy_phy_write(dev, 0x0426, b43legacy_phy_agcsetup()
328 (b43legacy_phy_read(dev, 0x0426) & 0xFFFC)); b43legacy_phy_agcsetup()
329 b43legacy_phy_write(dev, 0x0426, b43legacy_phy_agcsetup()
330 (b43legacy_phy_read(dev, 0x0426) & 0xEFFF)); b43legacy_phy_agcsetup()
334 static void b43legacy_phy_setupg(struct b43legacy_wldev *dev) b43legacy_phy_setupg() argument
336 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_setupg()
341 b43legacy_phy_write(dev, 0x0406, 0x4F19); b43legacy_phy_setupg()
342 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, b43legacy_phy_setupg()
343 (b43legacy_phy_read(dev, b43legacy_phy_setupg()
345 b43legacy_phy_write(dev, 0x042C, 0x005A); b43legacy_phy_setupg()
346 b43legacy_phy_write(dev, 0x0427, 0x001A); b43legacy_phy_setupg()
349 b43legacy_ilt_write(dev, 0x5800 + i, b43legacy_phy_setupg()
352 b43legacy_ilt_write(dev, 0x1800 + i, b43legacy_phy_setupg()
355 b43legacy_ilt_write32(dev, 0x2000 + i, b43legacy_phy_setupg()
359 b43legacy_nrssi_hw_write(dev, 0xBA98, (s16)0x7654); b43legacy_phy_setupg()
362 b43legacy_phy_write(dev, 0x04C0, 0x1861); b43legacy_phy_setupg()
363 b43legacy_phy_write(dev, 0x04C1, 0x0271); b43legacy_phy_setupg()
365 b43legacy_phy_write(dev, 0x04C0, 0x0098); b43legacy_phy_setupg()
366 b43legacy_phy_write(dev, 0x04C1, 0x0070); b43legacy_phy_setupg()
367 b43legacy_phy_write(dev, 0x04C9, 0x0080); b43legacy_phy_setupg()
369 b43legacy_phy_write(dev, 0x042B, b43legacy_phy_read(dev, b43legacy_phy_setupg()
373 b43legacy_ilt_write(dev, 0x4000 + i, i); b43legacy_phy_setupg()
375 b43legacy_ilt_write(dev, 0x1800 + i, b43legacy_phy_setupg()
381 b43legacy_ilt_write(dev, 0x1400 + i, b43legacy_phy_setupg()
383 else if ((phy->rev >= 7) && (b43legacy_phy_read(dev, 0x0449) & 0x0200)) b43legacy_phy_setupg()
385 b43legacy_ilt_write(dev, 0x1400 + i, b43legacy_phy_setupg()
389 b43legacy_ilt_write(dev, 0x1400 + i, b43legacy_phy_setupg()
394 b43legacy_ilt_write(dev, 0x5000 + i, b43legacy_phy_setupg()
398 b43legacy_ilt_write(dev, 0x5000 + i, b43legacy_phy_setupg()
403 b43legacy_ilt_write32(dev, 0x2400 + i, b43legacy_phy_setupg()
406 b43legacy_ilt_write(dev, 0x5400 + i, 0x0020); b43legacy_phy_setupg()
407 b43legacy_phy_agcsetup(dev); b43legacy_phy_setupg()
409 if (is_bcm_board_vendor(dev) && b43legacy_phy_setupg()
410 (dev->dev->bus->boardinfo.type == 0x0416) && b43legacy_phy_setupg()
411 (dev->dev->bus->sprom.board_rev == 0x0017)) b43legacy_phy_setupg()
414 b43legacy_ilt_write(dev, 0x5001, 0x0002); b43legacy_phy_setupg()
415 b43legacy_ilt_write(dev, 0x5002, 0x0001); b43legacy_phy_setupg()
418 b43legacy_ilt_write(dev, 0x1000 + i, 0x0820); b43legacy_phy_setupg()
419 b43legacy_phy_agcsetup(dev); b43legacy_phy_setupg()
420 b43legacy_phy_read(dev, 0x0400); /* dummy read */ b43legacy_phy_setupg()
421 b43legacy_phy_write(dev, 0x0403, 0x1000); b43legacy_phy_setupg()
422 b43legacy_ilt_write(dev, 0x3C02, 0x000F); b43legacy_phy_setupg()
423 b43legacy_ilt_write(dev, 0x3C03, 0x0014); b43legacy_phy_setupg()
425 if (is_bcm_board_vendor(dev) && b43legacy_phy_setupg()
426 (dev->dev->bus->boardinfo.type == 0x0416) && b43legacy_phy_setupg()
427 (dev->dev->bus->sprom.board_rev == 0x0017)) b43legacy_phy_setupg()
430 b43legacy_ilt_write(dev, 0x0401, 0x0002); b43legacy_phy_setupg()
431 b43legacy_ilt_write(dev, 0x0402, 0x0001); b43legacy_phy_setupg()
436 static void b43legacy_phy_inita(struct b43legacy_wldev *dev) b43legacy_phy_inita() argument
441 b43legacy_phy_setupg(dev); b43legacy_phy_inita()
442 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_PACTRL) b43legacy_phy_inita()
443 b43legacy_phy_write(dev, 0x046E, 0x03CF); b43legacy_phy_inita()
446 static void b43legacy_phy_initb2(struct b43legacy_wldev *dev) b43legacy_phy_initb2() argument
448 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_initb2()
452 b43legacy_write16(dev, 0x03EC, 0x3F22); b43legacy_phy_initb2()
453 b43legacy_phy_write(dev, 0x0020, 0x301C); b43legacy_phy_initb2()
454 b43legacy_phy_write(dev, 0x0026, 0x0000); b43legacy_phy_initb2()
455 b43legacy_phy_write(dev, 0x0030, 0x00C6); b43legacy_phy_initb2()
456 b43legacy_phy_write(dev, 0x0088, 0x3E00); b43legacy_phy_initb2()
459 b43legacy_phy_write(dev, offset, val); b43legacy_phy_initb2()
462 b43legacy_phy_write(dev, 0x03E4, 0x3000); b43legacy_phy_initb2()
463 b43legacy_radio_selectchannel(dev, phy->channel, 0); b43legacy_phy_initb2()
465 b43legacy_radio_write16(dev, 0x0075, 0x0080); b43legacy_phy_initb2()
466 b43legacy_radio_write16(dev, 0x0079, 0x0081); b43legacy_phy_initb2()
468 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb2()
469 b43legacy_radio_write16(dev, 0x0050, 0x0023); b43legacy_phy_initb2()
471 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb2()
472 b43legacy_radio_write16(dev, 0x005A, 0x0070); b43legacy_phy_initb2()
473 b43legacy_radio_write16(dev, 0x005B, 0x007B); b43legacy_phy_initb2()
474 b43legacy_radio_write16(dev, 0x005C, 0x00B0); b43legacy_phy_initb2()
475 b43legacy_radio_write16(dev, 0x007A, 0x000F); b43legacy_phy_initb2()
476 b43legacy_phy_write(dev, 0x0038, 0x0677); b43legacy_phy_initb2()
477 b43legacy_radio_init2050(dev); b43legacy_phy_initb2()
479 b43legacy_phy_write(dev, 0x0014, 0x0080); b43legacy_phy_initb2()
480 b43legacy_phy_write(dev, 0x0032, 0x00CA); b43legacy_phy_initb2()
481 b43legacy_phy_write(dev, 0x0032, 0x00CC); b43legacy_phy_initb2()
482 b43legacy_phy_write(dev, 0x0035, 0x07C2); b43legacy_phy_initb2()
483 b43legacy_phy_lo_b_measure(dev); b43legacy_phy_initb2()
484 b43legacy_phy_write(dev, 0x0026, 0xCC00); b43legacy_phy_initb2()
486 b43legacy_phy_write(dev, 0x0026, 0xCE00); b43legacy_phy_initb2()
487 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, 0x1000); b43legacy_phy_initb2()
488 b43legacy_phy_write(dev, 0x002A, 0x88A3); b43legacy_phy_initb2()
490 b43legacy_phy_write(dev, 0x002A, 0x88C2); b43legacy_phy_initb2()
491 b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); b43legacy_phy_initb2()
492 b43legacy_phy_init_pctl(dev); b43legacy_phy_initb2()
495 static void b43legacy_phy_initb4(struct b43legacy_wldev *dev) b43legacy_phy_initb4() argument
497 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_initb4()
501 b43legacy_write16(dev, 0x03EC, 0x3F22); b43legacy_phy_initb4()
502 b43legacy_phy_write(dev, 0x0020, 0x301C); b43legacy_phy_initb4()
503 b43legacy_phy_write(dev, 0x0026, 0x0000); b43legacy_phy_initb4()
504 b43legacy_phy_write(dev, 0x0030, 0x00C6); b43legacy_phy_initb4()
505 b43legacy_phy_write(dev, 0x0088, 0x3E00); b43legacy_phy_initb4()
508 b43legacy_phy_write(dev, offset, val); b43legacy_phy_initb4()
511 b43legacy_phy_write(dev, 0x03E4, 0x3000); b43legacy_phy_initb4()
512 b43legacy_radio_selectchannel(dev, phy->channel, 0); b43legacy_phy_initb4()
514 b43legacy_radio_write16(dev, 0x0075, 0x0080); b43legacy_phy_initb4()
515 b43legacy_radio_write16(dev, 0x0079, 0x0081); b43legacy_phy_initb4()
517 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb4()
518 b43legacy_radio_write16(dev, 0x0050, 0x0023); b43legacy_phy_initb4()
520 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb4()
521 b43legacy_radio_write16(dev, 0x005A, 0x0070); b43legacy_phy_initb4()
522 b43legacy_radio_write16(dev, 0x005B, 0x007B); b43legacy_phy_initb4()
523 b43legacy_radio_write16(dev, 0x005C, 0x00B0); b43legacy_phy_initb4()
524 b43legacy_radio_write16(dev, 0x007A, 0x000F); b43legacy_phy_initb4()
525 b43legacy_phy_write(dev, 0x0038, 0x0677); b43legacy_phy_initb4()
526 b43legacy_radio_init2050(dev); b43legacy_phy_initb4()
528 b43legacy_phy_write(dev, 0x0014, 0x0080); b43legacy_phy_initb4()
529 b43legacy_phy_write(dev, 0x0032, 0x00CA); b43legacy_phy_initb4()
531 b43legacy_phy_write(dev, 0x0032, 0x00E0); b43legacy_phy_initb4()
532 b43legacy_phy_write(dev, 0x0035, 0x07C2); b43legacy_phy_initb4()
534 b43legacy_phy_lo_b_measure(dev); b43legacy_phy_initb4()
536 b43legacy_phy_write(dev, 0x0026, 0xCC00); b43legacy_phy_initb4()
538 b43legacy_phy_write(dev, 0x0026, 0xCE00); b43legacy_phy_initb4()
539 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, 0x1100); b43legacy_phy_initb4()
540 b43legacy_phy_write(dev, 0x002A, 0x88A3); b43legacy_phy_initb4()
542 b43legacy_phy_write(dev, 0x002A, 0x88C2); b43legacy_phy_initb4()
543 b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); b43legacy_phy_initb4()
544 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_RSSI) { b43legacy_phy_initb4()
545 b43legacy_calc_nrssi_slope(dev); b43legacy_phy_initb4()
546 b43legacy_calc_nrssi_threshold(dev); b43legacy_phy_initb4()
548 b43legacy_phy_init_pctl(dev); b43legacy_phy_initb4()
551 static void b43legacy_phy_initb5(struct b43legacy_wldev *dev) b43legacy_phy_initb5() argument
553 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_initb5()
559 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_initb5()
560 b43legacy_radio_read16(dev, 0x007A) b43legacy_phy_initb5()
562 if (!is_bcm_board_vendor(dev) && b43legacy_phy_initb5()
563 (dev->dev->bus->boardinfo.type != 0x0416)) { b43legacy_phy_initb5()
566 b43legacy_phy_write(dev, offset, value); b43legacy_phy_initb5()
570 b43legacy_phy_write(dev, 0x0035, b43legacy_phy_initb5()
571 (b43legacy_phy_read(dev, 0x0035) & 0xF0FF) b43legacy_phy_initb5()
574 b43legacy_phy_write(dev, 0x0038, 0x0667); b43legacy_phy_initb5()
578 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_initb5()
579 b43legacy_radio_read16(dev, 0x007A) b43legacy_phy_initb5()
581 b43legacy_radio_write16(dev, 0x0051, b43legacy_phy_initb5()
582 b43legacy_radio_read16(dev, 0x0051) b43legacy_phy_initb5()
585 b43legacy_write16(dev, B43legacy_MMIO_PHY_RADIO, 0x0000); b43legacy_phy_initb5()
587 b43legacy_phy_write(dev, 0x0802, b43legacy_phy_read(dev, 0x0802) b43legacy_phy_initb5()
589 b43legacy_phy_write(dev, 0x042B, b43legacy_phy_read(dev, 0x042B) b43legacy_phy_initb5()
592 b43legacy_phy_write(dev, 0x001C, 0x186A); b43legacy_phy_initb5()
594 b43legacy_phy_write(dev, 0x0013, (b43legacy_phy_read(dev, b43legacy_phy_initb5()
596 b43legacy_phy_write(dev, 0x0035, (b43legacy_phy_read(dev, b43legacy_phy_initb5()
598 b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, b43legacy_phy_initb5()
600 b43legacy_phy_write(dev, 0x5B, 0x0000); b43legacy_phy_initb5()
601 b43legacy_phy_write(dev, 0x5C, 0x0000); b43legacy_phy_initb5()
604 if (dev->bad_frames_preempt) b43legacy_phy_initb5()
605 b43legacy_phy_write(dev, B43legacy_PHY_RADIO_BITFIELD, b43legacy_phy_initb5()
606 b43legacy_phy_read(dev, b43legacy_phy_initb5()
610 b43legacy_phy_write(dev, 0x0026, 0xCE00); b43legacy_phy_initb5()
611 b43legacy_phy_write(dev, 0x0021, 0x3763); b43legacy_phy_initb5()
612 b43legacy_phy_write(dev, 0x0022, 0x1BC3); b43legacy_phy_initb5()
613 b43legacy_phy_write(dev, 0x0023, 0x06F9); b43legacy_phy_initb5()
614 b43legacy_phy_write(dev, 0x0024, 0x037E); b43legacy_phy_initb5()
616 b43legacy_phy_write(dev, 0x0026, 0xCC00); b43legacy_phy_initb5()
617 b43legacy_phy_write(dev, 0x0030, 0x00C6); b43legacy_phy_initb5()
618 b43legacy_write16(dev, 0x03EC, 0x3F22); b43legacy_phy_initb5()
621 b43legacy_phy_write(dev, 0x0020, 0x3E1C); b43legacy_phy_initb5()
623 b43legacy_phy_write(dev, 0x0020, 0x301C); b43legacy_phy_initb5()
626 b43legacy_write16(dev, 0x03E4, 0x3000); b43legacy_phy_initb5()
630 b43legacy_radio_selectchannel(dev, 7, 0); b43legacy_phy_initb5()
633 b43legacy_radio_write16(dev, 0x0075, 0x0080); b43legacy_phy_initb5()
634 b43legacy_radio_write16(dev, 0x0079, 0x0081); b43legacy_phy_initb5()
637 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb5()
638 b43legacy_radio_write16(dev, 0x0050, 0x0023); b43legacy_phy_initb5()
641 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb5()
642 b43legacy_radio_write16(dev, 0x005A, 0x0070); b43legacy_phy_initb5()
645 b43legacy_radio_write16(dev, 0x005B, 0x007B); b43legacy_phy_initb5()
646 b43legacy_radio_write16(dev, 0x005C, 0x00B0); b43legacy_phy_initb5()
648 b43legacy_radio_write16(dev, 0x007A, b43legacy_radio_read16(dev, b43legacy_phy_initb5()
651 b43legacy_radio_selectchannel(dev, old_channel, 0); b43legacy_phy_initb5()
653 b43legacy_phy_write(dev, 0x0014, 0x0080); b43legacy_phy_initb5()
654 b43legacy_phy_write(dev, 0x0032, 0x00CA); b43legacy_phy_initb5()
655 b43legacy_phy_write(dev, 0x002A, 0x88A3); b43legacy_phy_initb5()
657 b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); b43legacy_phy_initb5()
660 b43legacy_radio_write16(dev, 0x005D, 0x000D); b43legacy_phy_initb5()
662 b43legacy_write16(dev, 0x03E4, (b43legacy_read16(dev, 0x03E4) & b43legacy_phy_initb5()
666 static void b43legacy_phy_initb6(struct b43legacy_wldev *dev) b43legacy_phy_initb6() argument
668 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_initb6()
673 b43legacy_phy_write(dev, 0x003E, 0x817A); b43legacy_phy_initb6()
674 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_initb6()
675 (b43legacy_radio_read16(dev, 0x007A) | 0x0058)); b43legacy_phy_initb6()
678 b43legacy_radio_write16(dev, 0x0051, 0x0037); b43legacy_phy_initb6()
679 b43legacy_radio_write16(dev, 0x0052, 0x0070); b43legacy_phy_initb6()
680 b43legacy_radio_write16(dev, 0x0053, 0x00B3); b43legacy_phy_initb6()
681 b43legacy_radio_write16(dev, 0x0054, 0x009B); b43legacy_phy_initb6()
682 b43legacy_radio_write16(dev, 0x005A, 0x0088); b43legacy_phy_initb6()
683 b43legacy_radio_write16(dev, 0x005B, 0x0088); b43legacy_phy_initb6()
684 b43legacy_radio_write16(dev, 0x005D, 0x0088); b43legacy_phy_initb6()
685 b43legacy_radio_write16(dev, 0x005E, 0x0088); b43legacy_phy_initb6()
686 b43legacy_radio_write16(dev, 0x007D, 0x0088); b43legacy_phy_initb6()
687 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_phy_initb6()
689 (b43legacy_shm_read32(dev, b43legacy_phy_initb6()
695 b43legacy_radio_write16(dev, 0x0051, 0x0000); b43legacy_phy_initb6()
696 b43legacy_radio_write16(dev, 0x0052, 0x0040); b43legacy_phy_initb6()
697 b43legacy_radio_write16(dev, 0x0053, 0x00B7); b43legacy_phy_initb6()
698 b43legacy_radio_write16(dev, 0x0054, 0x0098); b43legacy_phy_initb6()
699 b43legacy_radio_write16(dev, 0x005A, 0x0088); b43legacy_phy_initb6()
700 b43legacy_radio_write16(dev, 0x005B, 0x006B); b43legacy_phy_initb6()
701 b43legacy_radio_write16(dev, 0x005C, 0x000F); b43legacy_phy_initb6()
702 if (dev->dev->bus->sprom.boardflags_lo & 0x8000) { b43legacy_phy_initb6()
703 b43legacy_radio_write16(dev, 0x005D, 0x00FA); b43legacy_phy_initb6()
704 b43legacy_radio_write16(dev, 0x005E, 0x00D8); b43legacy_phy_initb6()
706 b43legacy_radio_write16(dev, 0x005D, 0x00F5); b43legacy_phy_initb6()
707 b43legacy_radio_write16(dev, 0x005E, 0x00B8); b43legacy_phy_initb6()
709 b43legacy_radio_write16(dev, 0x0073, 0x0003); b43legacy_phy_initb6()
710 b43legacy_radio_write16(dev, 0x007D, 0x00A8); b43legacy_phy_initb6()
711 b43legacy_radio_write16(dev, 0x007C, 0x0001); b43legacy_phy_initb6()
712 b43legacy_radio_write16(dev, 0x007E, 0x0008); b43legacy_phy_initb6()
716 b43legacy_phy_write(dev, offset, val); b43legacy_phy_initb6()
721 b43legacy_phy_write(dev, offset, val); b43legacy_phy_initb6()
726 b43legacy_phy_write(dev, offset, (val & 0x3F3F)); b43legacy_phy_initb6()
730 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_initb6()
731 b43legacy_radio_read16(dev, 0x007A) | b43legacy_phy_initb6()
733 b43legacy_radio_write16(dev, 0x0051, b43legacy_phy_initb6()
734 b43legacy_radio_read16(dev, 0x0051) | b43legacy_phy_initb6()
736 b43legacy_phy_write(dev, 0x0802, b43legacy_phy_initb6()
737 b43legacy_phy_read(dev, 0x0802) | 0x0100); b43legacy_phy_initb6()
738 b43legacy_phy_write(dev, 0x042B, b43legacy_phy_initb6()
739 b43legacy_phy_read(dev, 0x042B) | 0x2000); b43legacy_phy_initb6()
740 b43legacy_phy_write(dev, 0x5B, 0x0000); b43legacy_phy_initb6()
741 b43legacy_phy_write(dev, 0x5C, 0x0000); b43legacy_phy_initb6()
746 b43legacy_radio_selectchannel(dev, 1, 0); b43legacy_phy_initb6()
748 b43legacy_radio_selectchannel(dev, 13, 0); b43legacy_phy_initb6()
750 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb6()
751 b43legacy_radio_write16(dev, 0x0050, 0x0023); b43legacy_phy_initb6()
754 b43legacy_radio_write16(dev, 0x007C, b43legacy_phy_initb6()
755 (b43legacy_radio_read16(dev, 0x007C) b43legacy_phy_initb6()
757 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb6()
760 b43legacy_radio_write16(dev, 0x0050, 0x0020); b43legacy_phy_initb6()
761 b43legacy_radio_write16(dev, 0x005A, 0x0070); b43legacy_phy_initb6()
762 b43legacy_radio_write16(dev, 0x005B, 0x007B); b43legacy_phy_initb6()
763 b43legacy_radio_write16(dev, 0x005C, 0x00B0); b43legacy_phy_initb6()
765 b43legacy_radio_write16(dev, 0x007A, b43legacy_phy_initb6()
766 (b43legacy_radio_read16(dev, b43legacy_phy_initb6()
769 b43legacy_radio_selectchannel(dev, old_channel, 0); b43legacy_phy_initb6()
771 b43legacy_phy_write(dev, 0x0014, 0x0200); b43legacy_phy_initb6()
773 b43legacy_phy_write(dev, 0x002A, 0x88C2); b43legacy_phy_initb6()
775 b43legacy_phy_write(dev, 0x002A, 0x8AC0); b43legacy_phy_initb6()
776 b43legacy_phy_write(dev, 0x0038, 0x0668); b43legacy_phy_initb6()
777 b43legacy_radio_set_txpower_bg(dev, 0xFFFF, 0xFFFF, 0xFFFF); b43legacy_phy_initb6()
779 b43legacy_phy_write(dev, 0x005D, (b43legacy_phy_read(dev, b43legacy_phy_initb6()
782 b43legacy_radio_write16(dev, 0x005D, 0x000D); b43legacy_phy_initb6()
785 b43legacy_write16(dev, 0x03E4, 0x0009); b43legacy_phy_initb6()
786 b43legacy_phy_write(dev, 0x61, b43legacy_phy_read(dev, 0x61) b43legacy_phy_initb6()
789 b43legacy_phy_write(dev, 0x0002, (b43legacy_phy_read(dev, b43legacy_phy_initb6()
792 b43legacy_write16(dev, 0x03E6, 0x0); b43legacy_phy_initb6()
794 b43legacy_write16(dev, 0x03E6, 0x8140); b43legacy_phy_initb6()
795 b43legacy_phy_write(dev, 0x0016, 0x0410); b43legacy_phy_initb6()
796 b43legacy_phy_write(dev, 0x0017, 0x0820); b43legacy_phy_initb6()
797 b43legacy_phy_write(dev, 0x0062, 0x0007); b43legacy_phy_initb6()
798 b43legacy_radio_init2050(dev); b43legacy_phy_initb6()
799 b43legacy_phy_lo_g_measure(dev); b43legacy_phy_initb6()
800 if (dev->dev->bus->sprom.boardflags_lo & b43legacy_phy_initb6()
802 b43legacy_calc_nrssi_slope(dev); b43legacy_phy_initb6()
803 b43legacy_calc_nrssi_threshold(dev); b43legacy_phy_initb6()
805 b43legacy_phy_init_pctl(dev); b43legacy_phy_initb6()
809 static void b43legacy_calc_loopback_gain(struct b43legacy_wldev *dev) b43legacy_calc_loopback_gain() argument
811 struct b43legacy_phy *phy = &dev->phy; b43legacy_calc_loopback_gain()
821 backup_phy[0] = b43legacy_phy_read(dev, 0x0429); b43legacy_calc_loopback_gain()
822 backup_phy[1] = b43legacy_phy_read(dev, 0x0001); b43legacy_calc_loopback_gain()
823 backup_phy[2] = b43legacy_phy_read(dev, 0x0811); b43legacy_calc_loopback_gain()
824 backup_phy[3] = b43legacy_phy_read(dev, 0x0812); b43legacy_calc_loopback_gain()
826 backup_phy[4] = b43legacy_phy_read(dev, 0x0814); b43legacy_calc_loopback_gain()
827 backup_phy[5] = b43legacy_phy_read(dev, 0x0815); b43legacy_calc_loopback_gain()
829 backup_phy[6] = b43legacy_phy_read(dev, 0x005A); b43legacy_calc_loopback_gain()
830 backup_phy[7] = b43legacy_phy_read(dev, 0x0059); b43legacy_calc_loopback_gain()
831 backup_phy[8] = b43legacy_phy_read(dev, 0x0058); b43legacy_calc_loopback_gain()
832 backup_phy[9] = b43legacy_phy_read(dev, 0x000A); b43legacy_calc_loopback_gain()
833 backup_phy[10] = b43legacy_phy_read(dev, 0x0003); b43legacy_calc_loopback_gain()
834 backup_phy[11] = b43legacy_phy_read(dev, 0x080F); b43legacy_calc_loopback_gain()
835 backup_phy[12] = b43legacy_phy_read(dev, 0x0810); b43legacy_calc_loopback_gain()
836 backup_phy[13] = b43legacy_phy_read(dev, 0x002B); b43legacy_calc_loopback_gain()
837 backup_phy[14] = b43legacy_phy_read(dev, 0x0015); b43legacy_calc_loopback_gain()
838 b43legacy_phy_read(dev, 0x002D); /* dummy read */ b43legacy_calc_loopback_gain()
840 backup_radio[0] = b43legacy_radio_read16(dev, 0x0052); b43legacy_calc_loopback_gain()
841 backup_radio[1] = b43legacy_radio_read16(dev, 0x0043); b43legacy_calc_loopback_gain()
842 backup_radio[2] = b43legacy_radio_read16(dev, 0x007A); b43legacy_calc_loopback_gain()
844 b43legacy_phy_write(dev, 0x0429, b43legacy_calc_loopback_gain()
845 b43legacy_phy_read(dev, 0x0429) & 0x3FFF); b43legacy_calc_loopback_gain()
846 b43legacy_phy_write(dev, 0x0001, b43legacy_calc_loopback_gain()
847 b43legacy_phy_read(dev, 0x0001) & 0x8000); b43legacy_calc_loopback_gain()
848 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_loopback_gain()
849 b43legacy_phy_read(dev, 0x0811) | 0x0002); b43legacy_calc_loopback_gain()
850 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
851 b43legacy_phy_read(dev, 0x0812) & 0xFFFD); b43legacy_calc_loopback_gain()
852 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_loopback_gain()
853 b43legacy_phy_read(dev, 0x0811) | 0x0001); b43legacy_calc_loopback_gain()
854 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
855 b43legacy_phy_read(dev, 0x0812) & 0xFFFE); b43legacy_calc_loopback_gain()
857 b43legacy_phy_write(dev, 0x0814, b43legacy_calc_loopback_gain()
858 b43legacy_phy_read(dev, 0x0814) | 0x0001); b43legacy_calc_loopback_gain()
859 b43legacy_phy_write(dev, 0x0815, b43legacy_calc_loopback_gain()
860 b43legacy_phy_read(dev, 0x0815) & 0xFFFE); b43legacy_calc_loopback_gain()
861 b43legacy_phy_write(dev, 0x0814, b43legacy_calc_loopback_gain()
862 b43legacy_phy_read(dev, 0x0814) | 0x0002); b43legacy_calc_loopback_gain()
863 b43legacy_phy_write(dev, 0x0815, b43legacy_calc_loopback_gain()
864 b43legacy_phy_read(dev, 0x0815) & 0xFFFD); b43legacy_calc_loopback_gain()
866 b43legacy_phy_write(dev, 0x0811, b43legacy_phy_read(dev, 0x0811) | b43legacy_calc_loopback_gain()
868 b43legacy_phy_write(dev, 0x0812, b43legacy_phy_read(dev, 0x0812) | b43legacy_calc_loopback_gain()
871 b43legacy_phy_write(dev, 0x0811, (b43legacy_phy_read(dev, 0x0811) b43legacy_calc_loopback_gain()
873 b43legacy_phy_write(dev, 0x0812, (b43legacy_phy_read(dev, 0x0812) b43legacy_calc_loopback_gain()
876 b43legacy_phy_write(dev, 0x005A, 0x0780); b43legacy_calc_loopback_gain()
877 b43legacy_phy_write(dev, 0x0059, 0xC810); b43legacy_calc_loopback_gain()
878 b43legacy_phy_write(dev, 0x0058, 0x000D); b43legacy_calc_loopback_gain()
880 b43legacy_phy_write(dev, 0x0003, 0x0122); b43legacy_calc_loopback_gain()
882 b43legacy_phy_write(dev, 0x000A, b43legacy_calc_loopback_gain()
883 b43legacy_phy_read(dev, 0x000A) b43legacy_calc_loopback_gain()
886 b43legacy_phy_write(dev, 0x0814, b43legacy_calc_loopback_gain()
887 b43legacy_phy_read(dev, 0x0814) | 0x0004); b43legacy_calc_loopback_gain()
888 b43legacy_phy_write(dev, 0x0815, b43legacy_calc_loopback_gain()
889 b43legacy_phy_read(dev, 0x0815) & 0xFFFB); b43legacy_calc_loopback_gain()
891 b43legacy_phy_write(dev, 0x0003, b43legacy_calc_loopback_gain()
892 (b43legacy_phy_read(dev, 0x0003) b43legacy_calc_loopback_gain()
895 b43legacy_radio_write16(dev, 0x0052, 0x0000); b43legacy_calc_loopback_gain()
896 b43legacy_radio_write16(dev, 0x0043, b43legacy_calc_loopback_gain()
897 (b43legacy_radio_read16(dev, 0x0043) b43legacy_calc_loopback_gain()
901 b43legacy_radio_write16(dev, 0x0043, 0x000F); b43legacy_calc_loopback_gain()
906 b43legacy_phy_set_baseband_attenuation(dev, 11); b43legacy_calc_loopback_gain()
909 b43legacy_phy_write(dev, 0x080F, 0xC020); b43legacy_calc_loopback_gain()
911 b43legacy_phy_write(dev, 0x080F, 0x8020); b43legacy_calc_loopback_gain()
912 b43legacy_phy_write(dev, 0x0810, 0x0000); b43legacy_calc_loopback_gain()
914 b43legacy_phy_write(dev, 0x002B, b43legacy_calc_loopback_gain()
915 (b43legacy_phy_read(dev, 0x002B) b43legacy_calc_loopback_gain()
917 b43legacy_phy_write(dev, 0x002B, b43legacy_calc_loopback_gain()
918 (b43legacy_phy_read(dev, 0x002B) b43legacy_calc_loopback_gain()
920 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_loopback_gain()
921 b43legacy_phy_read(dev, 0x0811) | 0x0100); b43legacy_calc_loopback_gain()
922 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
923 b43legacy_phy_read(dev, 0x0812) & 0xCFFF); b43legacy_calc_loopback_gain()
924 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_EXTLNA) { b43legacy_calc_loopback_gain()
926 b43legacy_phy_write(dev, 0x0811, b43legacy_calc_loopback_gain()
927 b43legacy_phy_read(dev, 0x0811) b43legacy_calc_loopback_gain()
929 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
930 b43legacy_phy_read(dev, 0x0812) b43legacy_calc_loopback_gain()
934 b43legacy_radio_write16(dev, 0x007A, b43legacy_calc_loopback_gain()
935 b43legacy_radio_read16(dev, 0x007A) b43legacy_calc_loopback_gain()
939 b43legacy_radio_write16(dev, 0x0043, loop1_cnt); b43legacy_calc_loopback_gain()
940 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
941 (b43legacy_phy_read(dev, 0x0812) b43legacy_calc_loopback_gain()
943 b43legacy_phy_write(dev, 0x0015, b43legacy_calc_loopback_gain()
944 (b43legacy_phy_read(dev, 0x0015) b43legacy_calc_loopback_gain()
946 b43legacy_phy_write(dev, 0x0015, b43legacy_calc_loopback_gain()
947 (b43legacy_phy_read(dev, 0x0015) b43legacy_calc_loopback_gain()
950 if (b43legacy_phy_read(dev, 0x002D) >= 0x0DFC) b43legacy_calc_loopback_gain()
958 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
959 b43legacy_phy_read(dev, 0x0812) b43legacy_calc_loopback_gain()
962 b43legacy_phy_write(dev, 0x0812, b43legacy_calc_loopback_gain()
963 (b43legacy_phy_read(dev, 0x0812) b43legacy_calc_loopback_gain()
965 b43legacy_phy_write(dev, 0x0015, b43legacy_calc_loopback_gain()
966 (b43legacy_phy_read(dev, 0x0015) b43legacy_calc_loopback_gain()
968 b43legacy_phy_write(dev, 0x0015, b43legacy_calc_loopback_gain()
969 (b43legacy_phy_read(dev, 0x0015) b43legacy_calc_loopback_gain()
972 if (b43legacy_phy_read(dev, 0x002D) >= 0x0DFC) b43legacy_calc_loopback_gain()
978 b43legacy_phy_write(dev, 0x0814, backup_phy[4]); b43legacy_calc_loopback_gain()
979 b43legacy_phy_write(dev, 0x0815, backup_phy[5]); b43legacy_calc_loopback_gain()
981 b43legacy_phy_write(dev, 0x005A, backup_phy[6]); b43legacy_calc_loopback_gain()
982 b43legacy_phy_write(dev, 0x0059, backup_phy[7]); b43legacy_calc_loopback_gain()
983 b43legacy_phy_write(dev, 0x0058, backup_phy[8]); b43legacy_calc_loopback_gain()
984 b43legacy_phy_write(dev, 0x000A, backup_phy[9]); b43legacy_calc_loopback_gain()
985 b43legacy_phy_write(dev, 0x0003, backup_phy[10]); b43legacy_calc_loopback_gain()
986 b43legacy_phy_write(dev, 0x080F, backup_phy[11]); b43legacy_calc_loopback_gain()
987 b43legacy_phy_write(dev, 0x0810, backup_phy[12]); b43legacy_calc_loopback_gain()
988 b43legacy_phy_write(dev, 0x002B, backup_phy[13]); b43legacy_calc_loopback_gain()
989 b43legacy_phy_write(dev, 0x0015, backup_phy[14]); b43legacy_calc_loopback_gain()
991 b43legacy_phy_set_baseband_attenuation(dev, backup_bband); b43legacy_calc_loopback_gain()
993 b43legacy_radio_write16(dev, 0x0052, backup_radio[0]); b43legacy_calc_loopback_gain()
994 b43legacy_radio_write16(dev, 0x0043, backup_radio[1]); b43legacy_calc_loopback_gain()
995 b43legacy_radio_write16(dev, 0x007A, backup_radio[2]); b43legacy_calc_loopback_gain()
997 b43legacy_phy_write(dev, 0x0811, backup_phy[2] | 0x0003); b43legacy_calc_loopback_gain()
999 b43legacy_phy_write(dev, 0x0811, backup_phy[2]); b43legacy_calc_loopback_gain()
1000 b43legacy_phy_write(dev, 0x0812, backup_phy[3]); b43legacy_calc_loopback_gain()
1001 b43legacy_phy_write(dev, 0x0429, backup_phy[0]); b43legacy_calc_loopback_gain()
1002 b43legacy_phy_write(dev, 0x0001, backup_phy[1]); b43legacy_calc_loopback_gain()
1008 static void b43legacy_phy_initg(struct b43legacy_wldev *dev) b43legacy_phy_initg() argument
1010 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_initg()
1014 b43legacy_phy_initb5(dev); b43legacy_phy_initg()
1016 b43legacy_phy_initb6(dev); b43legacy_phy_initg()
1018 b43legacy_phy_inita(dev); b43legacy_phy_initg()
1021 b43legacy_phy_write(dev, 0x0814, 0x0000); b43legacy_phy_initg()
1022 b43legacy_phy_write(dev, 0x0815, 0x0000); b43legacy_phy_initg()
1025 b43legacy_phy_write(dev, 0x0811, 0x0000); b43legacy_phy_initg()
1026 b43legacy_phy_write(dev, 0x0015, 0x00C0); b43legacy_phy_initg()
1029 b43legacy_phy_write(dev, 0x0811, 0x0400); b43legacy_phy_initg()
1030 b43legacy_phy_write(dev, 0x0015, 0x00C0); b43legacy_phy_initg()
1033 tmp = b43legacy_phy_read(dev, 0x0400) & 0xFF; b43legacy_phy_initg()
1035 b43legacy_phy_write(dev, 0x04C2, 0x1816); b43legacy_phy_initg()
1036 b43legacy_phy_write(dev, 0x04C3, 0x8606); b43legacy_phy_initg()
1039 b43legacy_phy_write(dev, 0x04C2, 0x1816); b43legacy_phy_initg()
1040 b43legacy_phy_write(dev, 0x04C3, 0x8006); b43legacy_phy_initg()
1041 b43legacy_phy_write(dev, 0x04CC, b43legacy_phy_initg()
1042 (b43legacy_phy_read(dev, b43legacy_phy_initg()
1047 b43legacy_phy_write(dev, 0x047E, 0x0078); b43legacy_phy_initg()
1050 b43legacy_phy_write(dev, 0x0801, b43legacy_phy_read(dev, 0x0801) b43legacy_phy_initg()
1052 b43legacy_phy_write(dev, 0x043E, b43legacy_phy_read(dev, 0x043E) b43legacy_phy_initg()
1056 b43legacy_calc_loopback_gain(dev); b43legacy_phy_initg()
1059 phy->initval = b43legacy_radio_init2050(dev); b43legacy_phy_initg()
1061 b43legacy_radio_write16(dev, 0x0078, phy->initval); b43legacy_phy_initg()
1064 b43legacy_phy_lo_g_measure(dev); b43legacy_phy_initg()
1067 b43legacy_radio_write16(dev, 0x0052, b43legacy_phy_initg()
1071 b43legacy_radio_write16(dev, 0x0052, b43legacy_phy_initg()
1072 (b43legacy_radio_read16(dev, b43legacy_phy_initg()
1076 b43legacy_phy_write(dev, 0x0036, b43legacy_phy_initg()
1077 (b43legacy_phy_read(dev, 0x0036) b43legacy_phy_initg()
1079 if (dev->dev->bus->sprom.boardflags_lo & b43legacy_phy_initg()
1081 b43legacy_phy_write(dev, 0x002E, 0x8075); b43legacy_phy_initg()
1083 b43legacy_phy_write(dev, 0x002E, 0x807F); b43legacy_phy_initg()
1085 b43legacy_phy_write(dev, 0x002F, 0x0101); b43legacy_phy_initg()
1087 b43legacy_phy_write(dev, 0x002F, 0x0202); b43legacy_phy_initg()
1090 b43legacy_phy_lo_adjust(dev, 0); b43legacy_phy_initg()
1091 b43legacy_phy_write(dev, 0x080F, 0x8078); b43legacy_phy_initg()
1094 if (!(dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_RSSI)) { b43legacy_phy_initg()
1101 b43legacy_nrssi_hw_update(dev, 0xFFFF); b43legacy_phy_initg()
1102 b43legacy_calc_nrssi_threshold(dev); b43legacy_phy_initg()
1106 b43legacy_calc_nrssi_slope(dev); b43legacy_phy_initg()
1109 b43legacy_calc_nrssi_threshold(dev); b43legacy_phy_initg()
1113 b43legacy_phy_write(dev, 0x0805, 0x3230); b43legacy_phy_initg()
1114 b43legacy_phy_init_pctl(dev); b43legacy_phy_initg()
1115 if (dev->dev->bus->chip_id == 0x4306 b43legacy_phy_initg()
1116 && dev->dev->bus->chip_package == 2) { b43legacy_phy_initg()
1117 b43legacy_phy_write(dev, 0x0429, b43legacy_phy_initg()
1118 b43legacy_phy_read(dev, 0x0429) & 0xBFFF); b43legacy_phy_initg()
1119 b43legacy_phy_write(dev, 0x04C3, b43legacy_phy_initg()
1120 b43legacy_phy_read(dev, 0x04C3) & 0x7FFF); b43legacy_phy_initg()
1124 static u16 b43legacy_phy_lo_b_r15_loop(struct b43legacy_wldev *dev) b43legacy_phy_lo_b_r15_loop() argument
1132 b43legacy_phy_write(dev, 0x0015, 0xAFA0); b43legacy_phy_lo_b_r15_loop()
1134 b43legacy_phy_write(dev, 0x0015, 0xEFA0); b43legacy_phy_lo_b_r15_loop()
1136 b43legacy_phy_write(dev, 0x0015, 0xFFA0); b43legacy_phy_lo_b_r15_loop()
1138 ret += b43legacy_phy_read(dev, 0x002C); b43legacy_phy_lo_b_r15_loop()
1146 void b43legacy_phy_lo_b_measure(struct b43legacy_wldev *dev) b43legacy_phy_lo_b_measure() argument
1148 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_lo_b_measure()
1155 regstack[0] = b43legacy_phy_read(dev, 0x0015); b43legacy_phy_lo_b_measure()
1156 regstack[1] = b43legacy_radio_read16(dev, 0x0052) & 0xFFF0; b43legacy_phy_lo_b_measure()
1159 regstack[2] = b43legacy_phy_read(dev, 0x000A); b43legacy_phy_lo_b_measure()
1160 regstack[3] = b43legacy_phy_read(dev, 0x002A); b43legacy_phy_lo_b_measure()
1161 regstack[4] = b43legacy_phy_read(dev, 0x0035); b43legacy_phy_lo_b_measure()
1162 regstack[5] = b43legacy_phy_read(dev, 0x0003); b43legacy_phy_lo_b_measure()
1163 regstack[6] = b43legacy_phy_read(dev, 0x0001); b43legacy_phy_lo_b_measure()
1164 regstack[7] = b43legacy_phy_read(dev, 0x0030); b43legacy_phy_lo_b_measure()
1166 regstack[8] = b43legacy_radio_read16(dev, 0x0043); b43legacy_phy_lo_b_measure()
1167 regstack[9] = b43legacy_radio_read16(dev, 0x007A); b43legacy_phy_lo_b_measure()
1168 regstack[10] = b43legacy_read16(dev, 0x03EC); b43legacy_phy_lo_b_measure()
1169 regstack[11] = b43legacy_radio_read16(dev, 0x0052) & 0x00F0; b43legacy_phy_lo_b_measure()
1171 b43legacy_phy_write(dev, 0x0030, 0x00FF); b43legacy_phy_lo_b_measure()
1172 b43legacy_write16(dev, 0x03EC, 0x3F3F); b43legacy_phy_lo_b_measure()
1173 b43legacy_phy_write(dev, 0x0035, regstack[4] & 0xFF7F); b43legacy_phy_lo_b_measure()
1174 b43legacy_radio_write16(dev, 0x007A, regstack[9] & 0xFFF0); b43legacy_phy_lo_b_measure()
1176 b43legacy_phy_write(dev, 0x0015, 0xB000); b43legacy_phy_lo_b_measure()
1177 b43legacy_phy_write(dev, 0x002B, 0x0004); b43legacy_phy_lo_b_measure()
1180 b43legacy_phy_write(dev, 0x002B, 0x0203); b43legacy_phy_lo_b_measure()
1181 b43legacy_phy_write(dev, 0x002A, 0x08A3); b43legacy_phy_lo_b_measure()
1187 b43legacy_radio_write16(dev, 0x0052, regstack[1] | i); b43legacy_phy_lo_b_measure()
1188 b43legacy_phy_lo_b_r15_loop(dev); b43legacy_phy_lo_b_measure()
1191 b43legacy_radio_write16(dev, 0x0052, regstack[1] | i); b43legacy_phy_lo_b_measure()
1192 mls = b43legacy_phy_lo_b_r15_loop(dev) / 10; b43legacy_phy_lo_b_measure()
1198 b43legacy_radio_write16(dev, 0x0052, regstack[1] b43legacy_phy_lo_b_measure()
1209 b43legacy_phy_write(dev, 0x002F, fval); b43legacy_phy_lo_b_measure()
1210 mls = b43legacy_phy_lo_b_r15_loop(dev) / 10; b43legacy_phy_lo_b_measure()
1219 b43legacy_phy_write(dev, 0x002F, phy->minlowsigpos[1]); b43legacy_phy_lo_b_measure()
1221 b43legacy_phy_write(dev, 0x000A, regstack[2]); b43legacy_phy_lo_b_measure()
1222 b43legacy_phy_write(dev, 0x002A, regstack[3]); b43legacy_phy_lo_b_measure()
1223 b43legacy_phy_write(dev, 0x0035, regstack[4]); b43legacy_phy_lo_b_measure()
1224 b43legacy_phy_write(dev, 0x0003, regstack[5]); b43legacy_phy_lo_b_measure()
1225 b43legacy_phy_write(dev, 0x0001, regstack[6]); b43legacy_phy_lo_b_measure()
1226 b43legacy_phy_write(dev, 0x0030, regstack[7]); b43legacy_phy_lo_b_measure()
1228 b43legacy_radio_write16(dev, 0x0043, regstack[8]); b43legacy_phy_lo_b_measure()
1229 b43legacy_radio_write16(dev, 0x007A, regstack[9]); b43legacy_phy_lo_b_measure()
1231 b43legacy_radio_write16(dev, 0x0052, b43legacy_phy_lo_b_measure()
1232 (b43legacy_radio_read16(dev, 0x0052) b43legacy_phy_lo_b_measure()
1235 b43legacy_write16(dev, 0x03EC, regstack[10]); b43legacy_phy_lo_b_measure()
1237 b43legacy_phy_write(dev, 0x0015, regstack[0]); b43legacy_phy_lo_b_measure()
1241 u16 b43legacy_phy_lo_g_deviation_subval(struct b43legacy_wldev *dev, b43legacy_phy_lo_g_deviation_subval() argument
1244 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_lo_g_deviation_subval()
1250 b43legacy_phy_write(dev, 0x15, 0xE300); b43legacy_phy_lo_g_deviation_subval()
1252 b43legacy_phy_write(dev, 0x0812, control | 0x00B0); b43legacy_phy_lo_g_deviation_subval()
1254 b43legacy_phy_write(dev, 0x0812, control | 0x00B2); b43legacy_phy_lo_g_deviation_subval()
1256 b43legacy_phy_write(dev, 0x0812, control | 0x00B3); b43legacy_phy_lo_g_deviation_subval()
1258 b43legacy_phy_write(dev, 0x0015, 0xF300); b43legacy_phy_lo_g_deviation_subval()
1261 b43legacy_phy_write(dev, 0x0015, control | 0xEFA0); b43legacy_phy_lo_g_deviation_subval()
1263 b43legacy_phy_write(dev, 0x0015, control | 0xEFE0); b43legacy_phy_lo_g_deviation_subval()
1265 b43legacy_phy_write(dev, 0x0015, control | 0xFFE0); b43legacy_phy_lo_g_deviation_subval()
1268 ret = b43legacy_phy_read(dev, 0x002D); b43legacy_phy_lo_g_deviation_subval()
1275 static u32 b43legacy_phy_lo_g_singledeviation(struct b43legacy_wldev *dev, b43legacy_phy_lo_g_singledeviation() argument
1282 ret += b43legacy_phy_lo_g_deviation_subval(dev, control); b43legacy_phy_lo_g_singledeviation()
1289 void b43legacy_lo_write(struct b43legacy_wldev *dev, b43legacy_lo_write() argument
1301 b43legacydbg(dev->wl, b43legacy_lo_write()
1309 b43legacy_phy_write(dev, B43legacy_PHY_G_LO_CONTROL, value); b43legacy_lo_write()
1313 struct b43legacy_lopair *b43legacy_find_lopair(struct b43legacy_wldev *dev, b43legacy_find_lopair() argument
1319 struct b43legacy_phy *phy = &dev->phy; b43legacy_find_lopair()
1331 struct b43legacy_lopair *b43legacy_current_lopair(struct b43legacy_wldev *dev) b43legacy_current_lopair() argument
1333 struct b43legacy_phy *phy = &dev->phy; b43legacy_current_lopair()
1335 return b43legacy_find_lopair(dev, phy->bbatt, b43legacy_current_lopair()
1340 void b43legacy_phy_lo_adjust(struct b43legacy_wldev *dev, int fixed) b43legacy_phy_lo_adjust() argument
1346 pair = b43legacy_find_lopair(dev, 2, 3, 0); b43legacy_phy_lo_adjust()
1348 pair = b43legacy_current_lopair(dev); b43legacy_phy_lo_adjust()
1349 b43legacy_lo_write(dev, pair); b43legacy_phy_lo_adjust()
1352 static void b43legacy_phy_lo_g_measure_txctl2(struct b43legacy_wldev *dev) b43legacy_phy_lo_g_measure_txctl2() argument
1354 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_lo_g_measure_txctl2()
1360 b43legacy_radio_write16(dev, 0x0052, 0x0000); b43legacy_phy_lo_g_measure_txctl2()
1362 smallest = b43legacy_phy_lo_g_singledeviation(dev, 0); b43legacy_phy_lo_g_measure_txctl2()
1364 b43legacy_radio_write16(dev, 0x0052, i); b43legacy_phy_lo_g_measure_txctl2()
1366 tmp = b43legacy_phy_lo_g_singledeviation(dev, 0); b43legacy_phy_lo_g_measure_txctl2()
1376 void b43legacy_phy_lo_g_state(struct b43legacy_wldev *dev, b43legacy_phy_lo_g_state() argument
1409 b43legacy_lo_write(dev, &lowest_transition); b43legacy_phy_lo_g_state()
1410 lowest_deviation = b43legacy_phy_lo_g_singledeviation(dev, r27); b43legacy_phy_lo_g_state()
1439 b43legacy_lo_write(dev, &transition); b43legacy_phy_lo_g_state()
1440 tmp = b43legacy_phy_lo_g_singledeviation(dev, b43legacy_phy_lo_g_state()
1466 void b43legacy_phy_set_baseband_attenuation(struct b43legacy_wldev *dev, b43legacy_phy_set_baseband_attenuation() argument
1469 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_set_baseband_attenuation()
1473 value = (b43legacy_read16(dev, 0x03E6) & 0xFFF0); b43legacy_phy_set_baseband_attenuation()
1475 b43legacy_write16(dev, 0x03E6, value); b43legacy_phy_set_baseband_attenuation()
1480 value = b43legacy_phy_read(dev, 0x0060) & 0xFFC3; b43legacy_phy_set_baseband_attenuation()
1483 value = b43legacy_phy_read(dev, 0x0060) & 0xFF87; b43legacy_phy_set_baseband_attenuation()
1486 b43legacy_phy_write(dev, 0x0060, value); b43legacy_phy_set_baseband_attenuation()
1490 void b43legacy_phy_lo_g_measure(struct b43legacy_wldev *dev) b43legacy_phy_lo_g_measure() argument
1493 const int is_initializing = (b43legacy_status(dev) b43legacy_phy_lo_g_measure()
1495 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_lo_g_measure()
1513 regstack[0] = b43legacy_phy_read(dev, B43legacy_PHY_G_CRS); b43legacy_phy_lo_g_measure()
1514 regstack[1] = b43legacy_phy_read(dev, 0x0802); b43legacy_phy_lo_g_measure()
1515 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, regstack[0] b43legacy_phy_lo_g_measure()
1517 b43legacy_phy_write(dev, 0x0802, regstack[1] & 0xFFFC); b43legacy_phy_lo_g_measure()
1519 regstack[3] = b43legacy_read16(dev, 0x03E2); b43legacy_phy_lo_g_measure()
1520 b43legacy_write16(dev, 0x03E2, regstack[3] | 0x8000); b43legacy_phy_lo_g_measure()
1521 regstack[4] = b43legacy_read16(dev, B43legacy_MMIO_CHANNEL_EXT); b43legacy_phy_lo_g_measure()
1522 regstack[5] = b43legacy_phy_read(dev, 0x15); b43legacy_phy_lo_g_measure()
1523 regstack[6] = b43legacy_phy_read(dev, 0x2A); b43legacy_phy_lo_g_measure()
1524 regstack[7] = b43legacy_phy_read(dev, 0x35); b43legacy_phy_lo_g_measure()
1525 regstack[8] = b43legacy_phy_read(dev, 0x60); b43legacy_phy_lo_g_measure()
1526 regstack[9] = b43legacy_radio_read16(dev, 0x43); b43legacy_phy_lo_g_measure()
1527 regstack[10] = b43legacy_radio_read16(dev, 0x7A); b43legacy_phy_lo_g_measure()
1528 regstack[11] = b43legacy_radio_read16(dev, 0x52); b43legacy_phy_lo_g_measure()
1530 regstack[12] = b43legacy_phy_read(dev, 0x0811); b43legacy_phy_lo_g_measure()
1531 regstack[13] = b43legacy_phy_read(dev, 0x0812); b43legacy_phy_lo_g_measure()
1532 regstack[14] = b43legacy_phy_read(dev, 0x0814); b43legacy_phy_lo_g_measure()
1533 regstack[15] = b43legacy_phy_read(dev, 0x0815); b43legacy_phy_lo_g_measure()
1535 b43legacy_radio_selectchannel(dev, 6, 0); b43legacy_phy_lo_g_measure()
1537 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, regstack[0] b43legacy_phy_lo_g_measure()
1539 b43legacy_phy_write(dev, 0x0802, regstack[1] & 0xFFFC); b43legacy_phy_lo_g_measure()
1540 b43legacy_dummy_transmission(dev); b43legacy_phy_lo_g_measure()
1542 b43legacy_radio_write16(dev, 0x0043, 0x0006); b43legacy_phy_lo_g_measure()
1544 b43legacy_phy_set_baseband_attenuation(dev, 2); b43legacy_phy_lo_g_measure()
1546 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, 0x0000); b43legacy_phy_lo_g_measure()
1547 b43legacy_phy_write(dev, 0x002E, 0x007F); b43legacy_phy_lo_g_measure()
1548 b43legacy_phy_write(dev, 0x080F, 0x0078); b43legacy_phy_lo_g_measure()
1549 b43legacy_phy_write(dev, 0x0035, regstack[7] & ~(1 << 7)); b43legacy_phy_lo_g_measure()
1550 b43legacy_radio_write16(dev, 0x007A, regstack[10] & 0xFFF0); b43legacy_phy_lo_g_measure()
1551 b43legacy_phy_write(dev, 0x002B, 0x0203); b43legacy_phy_lo_g_measure()
1552 b43legacy_phy_write(dev, 0x002A, 0x08A3); b43legacy_phy_lo_g_measure()
1554 b43legacy_phy_write(dev, 0x0814, regstack[14] | 0x0003); b43legacy_phy_lo_g_measure()
1555 b43legacy_phy_write(dev, 0x0815, regstack[15] & 0xFFFC); b43legacy_phy_lo_g_measure()
1556 b43legacy_phy_write(dev, 0x0811, 0x01B3); b43legacy_phy_lo_g_measure()
1557 b43legacy_phy_write(dev, 0x0812, 0x00B2); b43legacy_phy_lo_g_measure()
1560 b43legacy_phy_lo_g_measure_txctl2(dev); b43legacy_phy_lo_g_measure()
1561 b43legacy_phy_write(dev, 0x080F, 0x8078); b43legacy_phy_lo_g_measure()
1605 b43legacy_radio_write16(dev, 0x43, i); b43legacy_phy_lo_g_measure()
1606 b43legacy_radio_write16(dev, 0x52, phy->txctl2); b43legacy_phy_lo_g_measure()
1610 b43legacy_phy_set_baseband_attenuation(dev, j * 2); b43legacy_phy_lo_g_measure()
1615 b43legacy_radio_write16(dev, 0x007A, tmp); b43legacy_phy_lo_g_measure()
1618 b43legacy_phy_lo_g_state(dev, &control, tmp_control, b43legacy_phy_lo_g_measure()
1652 b43legacy_radio_write16(dev, 0x43, i - 9); b43legacy_phy_lo_g_measure()
1655 b43legacy_radio_write16(dev, 0x52, b43legacy_phy_lo_g_measure()
1661 b43legacy_phy_set_baseband_attenuation(dev, j * 2); b43legacy_phy_lo_g_measure()
1666 b43legacy_radio_write16(dev, 0x7A, tmp); b43legacy_phy_lo_g_measure()
1669 b43legacy_phy_lo_g_state(dev, &control, tmp_control, b43legacy_phy_lo_g_measure()
1676 b43legacy_phy_write(dev, 0x0015, 0xE300); b43legacy_phy_lo_g_measure()
1677 b43legacy_phy_write(dev, 0x0812, (r27 << 8) | 0xA0); b43legacy_phy_lo_g_measure()
1679 b43legacy_phy_write(dev, 0x0812, (r27 << 8) | 0xA2); b43legacy_phy_lo_g_measure()
1681 b43legacy_phy_write(dev, 0x0812, (r27 << 8) | 0xA3); b43legacy_phy_lo_g_measure()
1684 b43legacy_phy_write(dev, 0x0015, r27 | 0xEFA0); b43legacy_phy_lo_g_measure()
1685 b43legacy_phy_lo_adjust(dev, is_initializing); b43legacy_phy_lo_g_measure()
1686 b43legacy_phy_write(dev, 0x002E, 0x807F); b43legacy_phy_lo_g_measure()
1688 b43legacy_phy_write(dev, 0x002F, 0x0202); b43legacy_phy_lo_g_measure()
1690 b43legacy_phy_write(dev, 0x002F, 0x0101); b43legacy_phy_lo_g_measure()
1691 b43legacy_write16(dev, B43legacy_MMIO_CHANNEL_EXT, regstack[4]); b43legacy_phy_lo_g_measure()
1692 b43legacy_phy_write(dev, 0x0015, regstack[5]); b43legacy_phy_lo_g_measure()
1693 b43legacy_phy_write(dev, 0x002A, regstack[6]); b43legacy_phy_lo_g_measure()
1694 b43legacy_phy_write(dev, 0x0035, regstack[7]); b43legacy_phy_lo_g_measure()
1695 b43legacy_phy_write(dev, 0x0060, regstack[8]); b43legacy_phy_lo_g_measure()
1696 b43legacy_radio_write16(dev, 0x0043, regstack[9]); b43legacy_phy_lo_g_measure()
1697 b43legacy_radio_write16(dev, 0x007A, regstack[10]); b43legacy_phy_lo_g_measure()
1699 regstack[11] |= (b43legacy_radio_read16(dev, 0x52) & 0x000F); b43legacy_phy_lo_g_measure()
1700 b43legacy_radio_write16(dev, 0x52, regstack[11]); b43legacy_phy_lo_g_measure()
1701 b43legacy_write16(dev, 0x03E2, regstack[3]); b43legacy_phy_lo_g_measure()
1703 b43legacy_phy_write(dev, 0x0811, regstack[12]); b43legacy_phy_lo_g_measure()
1704 b43legacy_phy_write(dev, 0x0812, regstack[13]); b43legacy_phy_lo_g_measure()
1705 b43legacy_phy_write(dev, 0x0814, regstack[14]); b43legacy_phy_lo_g_measure()
1706 b43legacy_phy_write(dev, 0x0815, regstack[15]); b43legacy_phy_lo_g_measure()
1707 b43legacy_phy_write(dev, B43legacy_PHY_G_CRS, regstack[0]); b43legacy_phy_lo_g_measure()
1708 b43legacy_phy_write(dev, 0x0802, regstack[1]); b43legacy_phy_lo_g_measure()
1710 b43legacy_radio_selectchannel(dev, oldchannel, 1); b43legacy_phy_lo_g_measure()
1719 b43legacywarn(dev->wl, b43legacy_phy_lo_g_measure()
1729 void b43legacy_phy_lo_mark_current_used(struct b43legacy_wldev *dev) b43legacy_phy_lo_mark_current_used() argument
1733 pair = b43legacy_current_lopair(dev); b43legacy_phy_lo_mark_current_used()
1737 void b43legacy_phy_lo_mark_all_unused(struct b43legacy_wldev *dev) b43legacy_phy_lo_mark_all_unused() argument
1739 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_lo_mark_all_unused()
1752 static s8 b43legacy_phy_estimate_power_out(struct b43legacy_wldev *dev, s8 tssi) b43legacy_phy_estimate_power_out() argument
1754 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_estimate_power_out()
1776 void b43legacy_phy_xmitpower(struct b43legacy_wldev *dev) b43legacy_phy_xmitpower() argument
1778 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_xmitpower()
1797 if ((dev->dev->bus->boardinfo.type == 0x0416) && b43legacy_phy_xmitpower()
1798 is_bcm_board_vendor(dev)) b43legacy_phy_xmitpower()
1807 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x0058); b43legacy_phy_xmitpower()
1810 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x005A); b43legacy_phy_xmitpower()
1816 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_phy_xmitpower()
1820 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_phy_xmitpower()
1832 b43legacy_radio_clear_tssi(dev); b43legacy_phy_xmitpower()
1836 if (tmp && (b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x005E) b43legacy_phy_xmitpower()
1840 estimated_pwr = b43legacy_phy_estimate_power_out(dev, average); b43legacy_phy_xmitpower()
1842 max_pwr = dev->dev->bus->sprom.maxpwr_bg; b43legacy_phy_xmitpower()
1844 if ((dev->dev->bus->sprom.boardflags_lo b43legacy_phy_xmitpower()
1849 b43legacywarn(dev->wl, "Invalid max-TX-power value in SPROM." b43legacy_phy_xmitpower()
1852 dev->dev->bus->sprom.maxpwr_bg = max_pwr; b43legacy_phy_xmitpower()
1863 - dev->dev->bus->sprom.antenna_gain.a0 b43legacy_phy_xmitpower()
1869 if (b43legacy_debug(dev, B43legacy_DBG_XMITPOWER)) b43legacy_phy_xmitpower()
1870 b43legacydbg(dev->wl, "Current TX power output: " Q52_FMT b43legacy_phy_xmitpower()
1884 b43legacy_phy_lo_mark_current_used(dev); b43legacy_phy_xmitpower()
1923 } else if (dev->dev->bus->sprom.boardflags_lo b43legacy_phy_xmitpower()
1948 b43legacy_phy_lock(dev); b43legacy_phy_xmitpower()
1949 b43legacy_radio_lock(dev); b43legacy_phy_xmitpower()
1950 b43legacy_radio_set_txpower_bg(dev, baseband_attenuation, b43legacy_phy_xmitpower()
1952 b43legacy_phy_lo_mark_current_used(dev); b43legacy_phy_xmitpower()
1953 b43legacy_radio_unlock(dev); b43legacy_phy_xmitpower()
1954 b43legacy_phy_unlock(dev); b43legacy_phy_xmitpower()
1994 int b43legacy_phy_init_tssi2dbm_table(struct b43legacy_wldev *dev) b43legacy_phy_init_tssi2dbm_table() argument
1996 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_init_tssi2dbm_table()
2005 pab0 = (s16)(dev->dev->bus->sprom.pa0b0); b43legacy_phy_init_tssi2dbm_table()
2006 pab1 = (s16)(dev->dev->bus->sprom.pa0b1); b43legacy_phy_init_tssi2dbm_table()
2007 pab2 = (s16)(dev->dev->bus->sprom.pa0b2); b43legacy_phy_init_tssi2dbm_table()
2009 if ((dev->dev->bus->chip_id == 0x4301) && (phy->radio_ver != 0x2050)) { b43legacy_phy_init_tssi2dbm_table()
2018 if ((s8)dev->dev->bus->sprom.itssi_bg != 0 && b43legacy_phy_init_tssi2dbm_table()
2019 (s8)dev->dev->bus->sprom.itssi_bg != -1) b43legacy_phy_init_tssi2dbm_table()
2020 phy->idle_tssi = (s8)(dev->dev->bus->sprom. b43legacy_phy_init_tssi2dbm_table()
2026 b43legacyerr(dev->wl, "Could not allocate memory " b43legacy_phy_init_tssi2dbm_table()
2034 b43legacyerr(dev->wl, "Could not generate " b43legacy_phy_init_tssi2dbm_table()
2058 int b43legacy_phy_init(struct b43legacy_wldev *dev) b43legacy_phy_init() argument
2060 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_init()
2067 b43legacy_phy_initb2(dev); b43legacy_phy_init()
2071 b43legacy_phy_initb4(dev); b43legacy_phy_init()
2075 b43legacy_phy_initb5(dev); b43legacy_phy_init()
2079 b43legacy_phy_initb6(dev); b43legacy_phy_init()
2085 b43legacy_phy_initg(dev); b43legacy_phy_init()
2090 b43legacyerr(dev->wl, "Unknown PHYTYPE found\n"); b43legacy_phy_init()
2095 void b43legacy_phy_set_antenna_diversity(struct b43legacy_wldev *dev) b43legacy_phy_set_antenna_diversity() argument
2097 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_set_antenna_diversity()
2109 ucodeflags = b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, b43legacy_phy_set_antenna_diversity()
2111 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_phy_set_antenna_diversity()
2123 b43legacy_phy_write(dev, offset + 1, b43legacy_phy_set_antenna_diversity()
2124 (b43legacy_phy_read(dev, offset + 1) b43legacy_phy_set_antenna_diversity()
2132 b43legacy_phy_write(dev, offset + 0x2B, b43legacy_phy_set_antenna_diversity()
2133 (b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2140 b43legacy_phy_write(dev, 0x048C, b43legacy_phy_set_antenna_diversity()
2141 b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2144 b43legacy_phy_write(dev, 0x048C, b43legacy_phy_set_antenna_diversity()
2145 b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2148 b43legacy_phy_write(dev, 0x0461, b43legacy_phy_set_antenna_diversity()
2149 b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2151 b43legacy_phy_write(dev, 0x04AD, b43legacy_phy_set_antenna_diversity()
2152 (b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2156 b43legacy_phy_write(dev, 0x0427, b43legacy_phy_set_antenna_diversity()
2159 b43legacy_phy_write(dev, 0x0427, b43legacy_phy_set_antenna_diversity()
2160 (b43legacy_phy_read(dev, 0x0427) b43legacy_phy_set_antenna_diversity()
2163 b43legacy_phy_write(dev, 0x049B, 0x00DC); b43legacy_phy_set_antenna_diversity()
2166 b43legacy_phy_write(dev, 0x002B, b43legacy_phy_set_antenna_diversity()
2167 (b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2171 b43legacy_phy_write(dev, 0x0061, b43legacy_phy_set_antenna_diversity()
2172 b43legacy_phy_read(dev, b43legacy_phy_set_antenna_diversity()
2175 b43legacy_phy_write(dev, 0x0093, b43legacy_phy_set_antenna_diversity()
2177 b43legacy_phy_write(dev, 0x0027, b43legacy_phy_set_antenna_diversity()
2180 b43legacy_phy_write(dev, 0x0093, b43legacy_phy_set_antenna_diversity()
2182 b43legacy_phy_write(dev, 0x0027, b43legacy_phy_set_antenna_diversity()
2183 (b43legacy_phy_read(dev, 0x0027) b43legacy_phy_set_antenna_diversity()
2190 if (dev->dev->id.revision == 2) b43legacy_phy_set_antenna_diversity()
2194 b43legacy_phy_write(dev, 0x03E2, b43legacy_phy_set_antenna_diversity()
2195 (b43legacy_phy_read(dev, 0x03E2) b43legacy_phy_set_antenna_diversity()
2203 ucodeflags = b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, b43legacy_phy_set_antenna_diversity()
2205 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, b43legacy_phy_set_antenna_diversity()
2219 void b43legacy_power_saving_ctl_bits(struct b43legacy_wldev *dev, b43legacy_power_saving_ctl_bits() argument
2240 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_power_saving_ctl_bits()
2249 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status); b43legacy_power_saving_ctl_bits()
2250 if (bit26 && dev->dev->id.revision >= 5) { b43legacy_power_saving_ctl_bits()
2252 if (b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, b43legacy_power_saving_ctl_bits()
H A Dsysfs.h6 int b43legacy_sysfs_register(struct b43legacy_wldev *dev);
7 void b43legacy_sysfs_unregister(struct b43legacy_wldev *dev);
H A Dmain.c163 static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev);
164 static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev);
165 static void b43legacy_wireless_core_stop(struct b43legacy_wldev *dev);
166 static int b43legacy_wireless_core_start(struct b43legacy_wldev *dev);
255 static void b43legacy_ram_write(struct b43legacy_wldev *dev, u16 offset, b43legacy_ram_write() argument
262 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_ram_write()
266 b43legacy_write32(dev, B43legacy_MMIO_RAM_CONTROL, offset); b43legacy_ram_write()
268 b43legacy_write32(dev, B43legacy_MMIO_RAM_DATA, val); b43legacy_ram_write()
272 void b43legacy_shm_control_word(struct b43legacy_wldev *dev, b43legacy_shm_control_word() argument
282 b43legacy_write32(dev, B43legacy_MMIO_SHM_CONTROL, control); b43legacy_shm_control_word()
285 u32 b43legacy_shm_read32(struct b43legacy_wldev *dev, b43legacy_shm_read32() argument
294 b43legacy_shm_control_word(dev, routing, offset >> 2); b43legacy_shm_read32()
295 ret = b43legacy_read16(dev, b43legacy_shm_read32()
298 b43legacy_shm_control_word(dev, routing, b43legacy_shm_read32()
300 ret |= b43legacy_read16(dev, B43legacy_MMIO_SHM_DATA); b43legacy_shm_read32()
306 b43legacy_shm_control_word(dev, routing, offset); b43legacy_shm_read32()
307 ret = b43legacy_read32(dev, B43legacy_MMIO_SHM_DATA); b43legacy_shm_read32()
312 u16 b43legacy_shm_read16(struct b43legacy_wldev *dev, b43legacy_shm_read16() argument
321 b43legacy_shm_control_word(dev, routing, offset >> 2); b43legacy_shm_read16()
322 ret = b43legacy_read16(dev, b43legacy_shm_read16()
329 b43legacy_shm_control_word(dev, routing, offset); b43legacy_shm_read16()
330 ret = b43legacy_read16(dev, B43legacy_MMIO_SHM_DATA); b43legacy_shm_read16()
335 void b43legacy_shm_write32(struct b43legacy_wldev *dev, b43legacy_shm_write32() argument
343 b43legacy_shm_control_word(dev, routing, offset >> 2); b43legacy_shm_write32()
345 b43legacy_write16(dev, b43legacy_shm_write32()
349 b43legacy_shm_control_word(dev, routing, b43legacy_shm_write32()
352 b43legacy_write16(dev, B43legacy_MMIO_SHM_DATA, b43legacy_shm_write32()
358 b43legacy_shm_control_word(dev, routing, offset); b43legacy_shm_write32()
360 b43legacy_write32(dev, B43legacy_MMIO_SHM_DATA, value); b43legacy_shm_write32()
363 void b43legacy_shm_write16(struct b43legacy_wldev *dev, u16 routing, u16 offset, b43legacy_shm_write16() argument
370 b43legacy_shm_control_word(dev, routing, offset >> 2); b43legacy_shm_write16()
372 b43legacy_write16(dev, b43legacy_shm_write16()
379 b43legacy_shm_control_word(dev, routing, offset); b43legacy_shm_write16()
381 b43legacy_write16(dev, B43legacy_MMIO_SHM_DATA, value); b43legacy_shm_write16()
385 u32 b43legacy_hf_read(struct b43legacy_wldev *dev) b43legacy_hf_read() argument
389 ret = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_hf_read()
392 ret |= b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_hf_read()
399 void b43legacy_hf_write(struct b43legacy_wldev *dev, u32 value) b43legacy_hf_write() argument
401 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_hf_write()
404 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_hf_write()
409 void b43legacy_tsf_read(struct b43legacy_wldev *dev, u64 *tsf) b43legacy_tsf_read() argument
417 if (dev->dev->id.revision >= 3) { b43legacy_tsf_read()
423 high = b43legacy_read32(dev, b43legacy_tsf_read()
425 low = b43legacy_read32(dev, b43legacy_tsf_read()
427 high2 = b43legacy_read32(dev, b43legacy_tsf_read()
445 v3 = b43legacy_read16(dev, B43legacy_MMIO_TSF_3); b43legacy_tsf_read()
446 v2 = b43legacy_read16(dev, B43legacy_MMIO_TSF_2); b43legacy_tsf_read()
447 v1 = b43legacy_read16(dev, B43legacy_MMIO_TSF_1); b43legacy_tsf_read()
448 v0 = b43legacy_read16(dev, B43legacy_MMIO_TSF_0); b43legacy_tsf_read()
450 test3 = b43legacy_read16(dev, B43legacy_MMIO_TSF_3); b43legacy_tsf_read()
451 test2 = b43legacy_read16(dev, B43legacy_MMIO_TSF_2); b43legacy_tsf_read()
452 test1 = b43legacy_read16(dev, B43legacy_MMIO_TSF_1); b43legacy_tsf_read()
467 static void b43legacy_time_lock(struct b43legacy_wldev *dev) b43legacy_time_lock() argument
471 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_time_lock()
473 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status); b43legacy_time_lock()
477 static void b43legacy_time_unlock(struct b43legacy_wldev *dev) b43legacy_time_unlock() argument
481 status = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_time_unlock()
483 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, status); b43legacy_time_unlock()
486 static void b43legacy_tsf_write_locked(struct b43legacy_wldev *dev, u64 tsf) b43legacy_tsf_write_locked() argument
492 if (dev->dev->id.revision >= 3) { b43legacy_tsf_write_locked()
496 b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_LOW, 0); b43legacy_tsf_write_locked()
498 b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_HIGH, b43legacy_tsf_write_locked()
501 b43legacy_write32(dev, B43legacy_MMIO_REV3PLUS_TSF_LOW, b43legacy_tsf_write_locked()
509 b43legacy_write16(dev, B43legacy_MMIO_TSF_0, 0); b43legacy_tsf_write_locked()
511 b43legacy_write16(dev, B43legacy_MMIO_TSF_3, v3); b43legacy_tsf_write_locked()
513 b43legacy_write16(dev, B43legacy_MMIO_TSF_2, v2); b43legacy_tsf_write_locked()
515 b43legacy_write16(dev, B43legacy_MMIO_TSF_1, v1); b43legacy_tsf_write_locked()
517 b43legacy_write16(dev, B43legacy_MMIO_TSF_0, v0); b43legacy_tsf_write_locked()
521 void b43legacy_tsf_write(struct b43legacy_wldev *dev, u64 tsf) b43legacy_tsf_write() argument
523 b43legacy_time_lock(dev); b43legacy_tsf_write()
524 b43legacy_tsf_write_locked(dev, tsf); b43legacy_tsf_write()
525 b43legacy_time_unlock(dev); b43legacy_tsf_write()
529 void b43legacy_macfilter_set(struct b43legacy_wldev *dev, b43legacy_macfilter_set() argument
539 b43legacy_write16(dev, B43legacy_MMIO_MACFILTER_CONTROL, offset); b43legacy_macfilter_set()
543 b43legacy_write16(dev, B43legacy_MMIO_MACFILTER_DATA, data); b43legacy_macfilter_set()
546 b43legacy_write16(dev, B43legacy_MMIO_MACFILTER_DATA, data); b43legacy_macfilter_set()
549 b43legacy_write16(dev, B43legacy_MMIO_MACFILTER_DATA, data); b43legacy_macfilter_set()
552 static void b43legacy_write_mac_bssid_templates(struct b43legacy_wldev *dev) b43legacy_write_mac_bssid_templates() argument
555 const u8 *mac = dev->wl->mac_addr; b43legacy_write_mac_bssid_templates()
556 const u8 *bssid = dev->wl->bssid; b43legacy_write_mac_bssid_templates()
566 b43legacy_macfilter_set(dev, B43legacy_MACFILTER_BSSID, bssid); b43legacy_write_mac_bssid_templates()
577 b43legacy_ram_write(dev, 0x20 + i, tmp); b43legacy_write_mac_bssid_templates()
578 b43legacy_ram_write(dev, 0x78 + i, tmp); b43legacy_write_mac_bssid_templates()
579 b43legacy_ram_write(dev, 0x478 + i, tmp); b43legacy_write_mac_bssid_templates()
583 static void b43legacy_upload_card_macaddress(struct b43legacy_wldev *dev) b43legacy_upload_card_macaddress() argument
585 b43legacy_write_mac_bssid_templates(dev); b43legacy_upload_card_macaddress()
586 b43legacy_macfilter_set(dev, B43legacy_MACFILTER_SELF, b43legacy_upload_card_macaddress()
587 dev->wl->mac_addr); b43legacy_upload_card_macaddress()
590 static void b43legacy_set_slot_time(struct b43legacy_wldev *dev, b43legacy_set_slot_time() argument
594 if (dev->phy.type != B43legacy_PHYTYPE_G) b43legacy_set_slot_time()
596 b43legacy_write16(dev, 0x684, 510 + slot_time); b43legacy_set_slot_time()
597 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0010, b43legacy_set_slot_time()
601 static void b43legacy_short_slot_timing_enable(struct b43legacy_wldev *dev) b43legacy_short_slot_timing_enable() argument
603 b43legacy_set_slot_time(dev, 9); b43legacy_short_slot_timing_enable()
606 static void b43legacy_short_slot_timing_disable(struct b43legacy_wldev *dev) b43legacy_short_slot_timing_disable() argument
608 b43legacy_set_slot_time(dev, 20); b43legacy_short_slot_timing_disable()
615 static void b43legacy_synchronize_irq(struct b43legacy_wldev *dev) b43legacy_synchronize_irq() argument
617 synchronize_irq(dev->dev->irq); b43legacy_synchronize_irq()
618 tasklet_kill(&dev->isr_tasklet); b43legacy_synchronize_irq()
624 void b43legacy_dummy_transmission(struct b43legacy_wldev *dev) b43legacy_dummy_transmission() argument
626 struct b43legacy_phy *phy = &dev->phy; b43legacy_dummy_transmission()
650 b43legacy_ram_write(dev, i * 4, buffer[i]); b43legacy_dummy_transmission()
653 b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_dummy_transmission()
655 b43legacy_write16(dev, 0x0568, 0x0000); b43legacy_dummy_transmission()
656 b43legacy_write16(dev, 0x07C0, 0x0000); b43legacy_dummy_transmission()
657 b43legacy_write16(dev, 0x050C, 0x0000); b43legacy_dummy_transmission()
658 b43legacy_write16(dev, 0x0508, 0x0000); b43legacy_dummy_transmission()
659 b43legacy_write16(dev, 0x050A, 0x0000); b43legacy_dummy_transmission()
660 b43legacy_write16(dev, 0x054C, 0x0000); b43legacy_dummy_transmission()
661 b43legacy_write16(dev, 0x056A, 0x0014); b43legacy_dummy_transmission()
662 b43legacy_write16(dev, 0x0568, 0x0826); b43legacy_dummy_transmission()
663 b43legacy_write16(dev, 0x0500, 0x0000); b43legacy_dummy_transmission()
664 b43legacy_write16(dev, 0x0502, 0x0030); b43legacy_dummy_transmission()
667 b43legacy_radio_write16(dev, 0x0051, 0x0017); b43legacy_dummy_transmission()
669 value = b43legacy_read16(dev, 0x050E); b43legacy_dummy_transmission()
675 value = b43legacy_read16(dev, 0x050E); b43legacy_dummy_transmission()
681 value = b43legacy_read16(dev, 0x0690); b43legacy_dummy_transmission()
687 b43legacy_radio_write16(dev, 0x0051, 0x0037); b43legacy_dummy_transmission()
691 static void b43legacy_switch_analog(struct b43legacy_wldev *dev, int on) b43legacy_switch_analog() argument
693 b43legacy_write16(dev, B43legacy_MMIO_PHY0, on ? 0 : 0xF4); b43legacy_switch_analog()
696 void b43legacy_wireless_core_reset(struct b43legacy_wldev *dev, u32 flags) b43legacy_wireless_core_reset() argument
703 ssb_device_enable(dev->dev, flags); b43legacy_wireless_core_reset()
707 tmslow = ssb_read32(dev->dev, SSB_TMSLOW); b43legacy_wireless_core_reset()
710 ssb_write32(dev->dev, SSB_TMSLOW, tmslow); b43legacy_wireless_core_reset()
711 ssb_read32(dev->dev, SSB_TMSLOW); /* flush */ b43legacy_wireless_core_reset()
714 ssb_write32(dev->dev, SSB_TMSLOW, tmslow); b43legacy_wireless_core_reset()
715 ssb_read32(dev->dev, SSB_TMSLOW); /* flush */ b43legacy_wireless_core_reset()
719 b43legacy_switch_analog(dev, 1); b43legacy_wireless_core_reset()
721 macctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_wireless_core_reset()
725 dev->phy.gmode = true; b43legacy_wireless_core_reset()
727 dev->phy.gmode = false; b43legacy_wireless_core_reset()
729 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_wireless_core_reset()
732 static void handle_irq_transmit_status(struct b43legacy_wldev *dev) handle_irq_transmit_status() argument
740 v0 = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_0); handle_irq_transmit_status()
743 v1 = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_1); handle_irq_transmit_status()
757 b43legacy_handle_txstatus(dev, &stat); handle_irq_transmit_status()
761 static void drain_txstatus_queue(struct b43legacy_wldev *dev) drain_txstatus_queue() argument
765 if (dev->dev->id.revision < 5) drain_txstatus_queue()
771 dummy = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_0); drain_txstatus_queue()
774 dummy = b43legacy_read32(dev, B43legacy_MMIO_XMITSTAT_1); drain_txstatus_queue()
778 static u32 b43legacy_jssi_read(struct b43legacy_wldev *dev) b43legacy_jssi_read() argument
782 val = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x40A); b43legacy_jssi_read()
784 val |= b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, 0x408); b43legacy_jssi_read()
789 static void b43legacy_jssi_write(struct b43legacy_wldev *dev, u32 jssi) b43legacy_jssi_write() argument
791 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x408, b43legacy_jssi_write()
793 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x40A, b43legacy_jssi_write()
797 static void b43legacy_generate_noise_sample(struct b43legacy_wldev *dev) b43legacy_generate_noise_sample() argument
799 b43legacy_jssi_write(dev, 0x7F7F7F7F); b43legacy_generate_noise_sample()
800 b43legacy_write32(dev, B43legacy_MMIO_MACCMD, b43legacy_generate_noise_sample()
801 b43legacy_read32(dev, B43legacy_MMIO_MACCMD) b43legacy_generate_noise_sample()
803 B43legacy_WARN_ON(dev->noisecalc.channel_at_start != b43legacy_generate_noise_sample()
804 dev->phy.channel); b43legacy_generate_noise_sample()
807 static void b43legacy_calculate_link_quality(struct b43legacy_wldev *dev) b43legacy_calculate_link_quality() argument
811 if (dev->noisecalc.calculation_running) b43legacy_calculate_link_quality()
813 dev->noisecalc.channel_at_start = dev->phy.channel; b43legacy_calculate_link_quality()
814 dev->noisecalc.calculation_running = true; b43legacy_calculate_link_quality()
815 dev->noisecalc.nr_samples = 0; b43legacy_calculate_link_quality()
817 b43legacy_generate_noise_sample(dev); b43legacy_calculate_link_quality()
820 static void handle_irq_noise(struct b43legacy_wldev *dev) handle_irq_noise() argument
822 struct b43legacy_phy *phy = &dev->phy; handle_irq_noise()
831 B43legacy_WARN_ON(!dev->noisecalc.calculation_running); handle_irq_noise()
832 if (dev->noisecalc.channel_at_start != phy->channel) handle_irq_noise()
834 *((__le32 *)noise) = cpu_to_le32(b43legacy_jssi_read(dev)); handle_irq_noise()
840 B43legacy_WARN_ON(dev->noisecalc.nr_samples >= 8); handle_irq_noise()
841 i = dev->noisecalc.nr_samples; handle_irq_noise()
846 dev->noisecalc.samples[i][0] = phy->nrssi_lt[noise[0]]; handle_irq_noise()
847 dev->noisecalc.samples[i][1] = phy->nrssi_lt[noise[1]]; handle_irq_noise()
848 dev->noisecalc.samples[i][2] = phy->nrssi_lt[noise[2]]; handle_irq_noise()
849 dev->noisecalc.samples[i][3] = phy->nrssi_lt[noise[3]]; handle_irq_noise()
850 dev->noisecalc.nr_samples++; handle_irq_noise()
851 if (dev->noisecalc.nr_samples == 8) { handle_irq_noise()
856 average += dev->noisecalc.samples[i][j]; handle_irq_noise()
862 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, handle_irq_noise()
874 dev->stats.link_noise = average; handle_irq_noise()
876 dev->noisecalc.calculation_running = false; handle_irq_noise()
880 b43legacy_generate_noise_sample(dev); handle_irq_noise()
883 static void handle_irq_tbtt_indication(struct b43legacy_wldev *dev) handle_irq_tbtt_indication() argument
885 if (b43legacy_is_mode(dev->wl, NL80211_IFTYPE_AP)) { handle_irq_tbtt_indication()
889 b43legacy_power_saving_ctl_bits(dev, -1, -1); handle_irq_tbtt_indication()
891 if (b43legacy_is_mode(dev->wl, NL80211_IFTYPE_ADHOC)) handle_irq_tbtt_indication()
892 dev->dfq_valid = true; handle_irq_tbtt_indication()
895 static void handle_irq_atim_end(struct b43legacy_wldev *dev) handle_irq_atim_end() argument
897 if (dev->dfq_valid) { handle_irq_atim_end()
898 b43legacy_write32(dev, B43legacy_MMIO_MACCMD, handle_irq_atim_end()
899 b43legacy_read32(dev, B43legacy_MMIO_MACCMD) handle_irq_atim_end()
901 dev->dfq_valid = false; handle_irq_atim_end()
905 static void handle_irq_pmq(struct b43legacy_wldev *dev) handle_irq_pmq() argument
912 tmp = b43legacy_read32(dev, B43legacy_MMIO_PS_STATUS); handle_irq_pmq()
917 b43legacy_write16(dev, B43legacy_MMIO_PS_STATUS, 0x0002); handle_irq_pmq()
920 static void b43legacy_write_template_common(struct b43legacy_wldev *dev, b43legacy_write_template_common() argument
931 b43legacy_ram_write(dev, ram_offset, le32_to_cpu(plcp.data)); b43legacy_write_template_common()
938 b43legacy_ram_write(dev, ram_offset, tmp); b43legacy_write_template_common()
948 b43legacy_ram_write(dev, ram_offset + i - 2, tmp); b43legacy_write_template_common()
950 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, shm_size_offset, b43legacy_write_template_common()
966 static void b43legacy_write_beacon_template(struct b43legacy_wldev *dev, b43legacy_write_beacon_template() argument
978 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(dev->wl->current_beacon); b43legacy_write_beacon_template()
980 bcn = (const struct ieee80211_mgmt *)(dev->wl->current_beacon->data); b43legacy_write_beacon_template()
981 len = min_t(size_t, dev->wl->current_beacon->len, b43legacy_write_beacon_template()
983 rate = ieee80211_get_tx_rate(dev->wl->hw, info)->hw_value; b43legacy_write_beacon_template()
985 b43legacy_write_template_common(dev, (const u8 *)bcn, len, ram_offset, b43legacy_write_beacon_template()
991 ctl = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_write_beacon_template()
999 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_write_beacon_template()
1031 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_write_beacon_template()
1033 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_write_beacon_template()
1040 b43legacywarn(dev->wl, "Did not find a valid TIM IE in the " b43legacy_write_beacon_template()
1044 b43legacydbg(dev->wl, "Updated beacon template\n"); b43legacy_write_beacon_template()
1047 static void b43legacy_write_probe_resp_plcp(struct b43legacy_wldev *dev, b43legacy_write_probe_resp_plcp() argument
1057 dur = ieee80211_generic_frame_duration(dev->wl->hw, b43legacy_write_probe_resp_plcp()
1058 dev->wl->vif, b43legacy_write_probe_resp_plcp()
1064 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, shm_offset, b43legacy_write_probe_resp_plcp()
1066 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, shm_offset + 2, b43legacy_write_probe_resp_plcp()
1068 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, shm_offset + 6, b43legacy_write_probe_resp_plcp()
1078 static const u8 *b43legacy_generate_probe_resp(struct b43legacy_wldev *dev, b43legacy_generate_probe_resp() argument
1089 src_size = dev->wl->current_beacon->len; b43legacy_generate_probe_resp()
1090 src_data = (const u8 *)dev->wl->current_beacon->data; b43legacy_generate_probe_resp()
1123 dur = ieee80211_generic_frame_duration(dev->wl->hw, b43legacy_generate_probe_resp()
1124 dev->wl->vif, b43legacy_generate_probe_resp()
1133 static void b43legacy_write_probe_resp_template(struct b43legacy_wldev *dev, b43legacy_write_probe_resp_template() argument
1141 size = dev->wl->current_beacon->len; b43legacy_write_probe_resp_template()
1142 probe_resp_data = b43legacy_generate_probe_resp(dev, &size, rate); b43legacy_write_probe_resp_template()
1149 b43legacy_write_probe_resp_plcp(dev, 0x31A, size, b43legacy_write_probe_resp_template()
1151 b43legacy_write_probe_resp_plcp(dev, 0x32C, size, b43legacy_write_probe_resp_template()
1153 b43legacy_write_probe_resp_plcp(dev, 0x33E, size, b43legacy_write_probe_resp_template()
1155 b43legacy_write_probe_resp_plcp(dev, 0x350, size, b43legacy_write_probe_resp_template()
1160 b43legacy_write_template_common(dev, probe_resp_data, b43legacy_write_probe_resp_template()
1166 static void b43legacy_upload_beacon0(struct b43legacy_wldev *dev) b43legacy_upload_beacon0() argument
1168 struct b43legacy_wl *wl = dev->wl; b43legacy_upload_beacon0()
1172 b43legacy_write_beacon_template(dev, 0x68, 0x18); b43legacy_upload_beacon0()
1175 b43legacy_write_probe_resp_template(dev, 0x268, 0x4A, b43legacy_upload_beacon0()
1180 static void b43legacy_upload_beacon1(struct b43legacy_wldev *dev) b43legacy_upload_beacon1() argument
1182 struct b43legacy_wl *wl = dev->wl; b43legacy_upload_beacon1()
1186 b43legacy_write_beacon_template(dev, 0x468, 0x1A); b43legacy_upload_beacon1()
1190 static void handle_irq_beacon(struct b43legacy_wldev *dev) handle_irq_beacon() argument
1192 struct b43legacy_wl *wl = dev->wl; handle_irq_beacon()
1201 dev->irq_mask &= ~B43legacy_IRQ_BEACON; handle_irq_beacon()
1203 cmd = b43legacy_read32(dev, B43legacy_MMIO_MACCMD); handle_irq_beacon()
1209 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_REASON, B43legacy_IRQ_BEACON); handle_irq_beacon()
1210 dev->irq_mask |= B43legacy_IRQ_BEACON; handle_irq_beacon()
1218 b43legacy_upload_beacon0(dev); handle_irq_beacon()
1219 b43legacy_upload_beacon1(dev); handle_irq_beacon()
1220 cmd = b43legacy_read32(dev, B43legacy_MMIO_MACCMD); handle_irq_beacon()
1222 b43legacy_write32(dev, B43legacy_MMIO_MACCMD, cmd); handle_irq_beacon()
1225 b43legacy_upload_beacon0(dev); handle_irq_beacon()
1226 cmd = b43legacy_read32(dev, B43legacy_MMIO_MACCMD); handle_irq_beacon()
1228 b43legacy_write32(dev, B43legacy_MMIO_MACCMD, cmd); handle_irq_beacon()
1230 b43legacy_upload_beacon1(dev); handle_irq_beacon()
1231 cmd = b43legacy_read32(dev, B43legacy_MMIO_MACCMD); handle_irq_beacon()
1233 b43legacy_write32(dev, B43legacy_MMIO_MACCMD, cmd); handle_irq_beacon()
1242 struct b43legacy_wldev *dev; b43legacy_beacon_update_trigger_work() local
1245 dev = wl->current_dev; b43legacy_beacon_update_trigger_work()
1246 if (likely(dev && (b43legacy_status(dev) >= B43legacy_STAT_INITIALIZED))) { b43legacy_beacon_update_trigger_work()
1249 handle_irq_beacon(dev); b43legacy_beacon_update_trigger_work()
1251 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, b43legacy_beacon_update_trigger_work()
1252 dev->irq_mask); b43legacy_beacon_update_trigger_work()
1285 static void b43legacy_set_beacon_int(struct b43legacy_wldev *dev, b43legacy_set_beacon_int() argument
1288 b43legacy_time_lock(dev); b43legacy_set_beacon_int()
1289 if (dev->dev->id.revision >= 3) { b43legacy_set_beacon_int()
1290 b43legacy_write32(dev, B43legacy_MMIO_TSF_CFP_REP, b43legacy_set_beacon_int()
1292 b43legacy_write32(dev, B43legacy_MMIO_TSF_CFP_START, b43legacy_set_beacon_int()
1295 b43legacy_write16(dev, 0x606, (beacon_int >> 6)); b43legacy_set_beacon_int()
1296 b43legacy_write16(dev, 0x610, beacon_int); b43legacy_set_beacon_int()
1298 b43legacy_time_unlock(dev); b43legacy_set_beacon_int()
1299 b43legacydbg(dev->wl, "Set beacon interval to %u\n", beacon_int); b43legacy_set_beacon_int()
1302 static void handle_irq_ucode_debug(struct b43legacy_wldev *dev) handle_irq_ucode_debug() argument
1307 static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev) b43legacy_interrupt_tasklet() argument
1310 u32 dma_reason[ARRAY_SIZE(dev->dma_reason)]; b43legacy_interrupt_tasklet()
1315 spin_lock_irqsave(&dev->wl->irq_lock, flags); b43legacy_interrupt_tasklet()
1317 B43legacy_WARN_ON(b43legacy_status(dev) < b43legacy_interrupt_tasklet()
1320 reason = dev->irq_reason; b43legacy_interrupt_tasklet()
1322 dma_reason[i] = dev->dma_reason[i]; b43legacy_interrupt_tasklet()
1327 b43legacyerr(dev->wl, "MAC transmission error\n"); b43legacy_interrupt_tasklet()
1330 b43legacyerr(dev->wl, "PHY transmission error\n"); b43legacy_interrupt_tasklet()
1332 if (unlikely(atomic_dec_and_test(&dev->phy.txerr_cnt))) { b43legacy_interrupt_tasklet()
1333 b43legacyerr(dev->wl, "Too many PHY TX errors, " b43legacy_interrupt_tasklet()
1335 b43legacy_controller_restart(dev, "PHY TX errors"); b43legacy_interrupt_tasklet()
1342 b43legacyerr(dev->wl, "Fatal DMA error: " b43legacy_interrupt_tasklet()
1348 b43legacy_controller_restart(dev, "DMA error"); b43legacy_interrupt_tasklet()
1350 spin_unlock_irqrestore(&dev->wl->irq_lock, flags); b43legacy_interrupt_tasklet()
1354 b43legacyerr(dev->wl, "DMA error: " b43legacy_interrupt_tasklet()
1363 handle_irq_ucode_debug(dev); b43legacy_interrupt_tasklet()
1365 handle_irq_tbtt_indication(dev); b43legacy_interrupt_tasklet()
1367 handle_irq_atim_end(dev); b43legacy_interrupt_tasklet()
1369 handle_irq_beacon(dev); b43legacy_interrupt_tasklet()
1371 handle_irq_pmq(dev); b43legacy_interrupt_tasklet()
1375 handle_irq_noise(dev); b43legacy_interrupt_tasklet()
1379 if (b43legacy_using_pio(dev)) b43legacy_interrupt_tasklet()
1380 b43legacy_pio_rx(dev->pio.queue0); b43legacy_interrupt_tasklet()
1382 b43legacy_dma_rx(dev->dma.rx_ring0); b43legacy_interrupt_tasklet()
1387 if (b43legacy_using_pio(dev)) b43legacy_interrupt_tasklet()
1388 b43legacy_pio_rx(dev->pio.queue3); b43legacy_interrupt_tasklet()
1390 b43legacy_dma_rx(dev->dma.rx_ring3); b43legacy_interrupt_tasklet()
1396 handle_irq_transmit_status(dev); b43legacy_interrupt_tasklet()
1398 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43legacy_interrupt_tasklet()
1400 spin_unlock_irqrestore(&dev->wl->irq_lock, flags); b43legacy_interrupt_tasklet()
1403 static void pio_irq_workaround(struct b43legacy_wldev *dev, pio_irq_workaround() argument
1408 rxctl = b43legacy_read16(dev, base + B43legacy_PIO_RXCTL); pio_irq_workaround()
1410 dev->dma_reason[queueidx] |= B43legacy_DMAIRQ_RX_DONE; pio_irq_workaround()
1412 dev->dma_reason[queueidx] &= ~B43legacy_DMAIRQ_RX_DONE; pio_irq_workaround()
1415 static void b43legacy_interrupt_ack(struct b43legacy_wldev *dev, u32 reason) b43legacy_interrupt_ack() argument
1417 if (b43legacy_using_pio(dev) && b43legacy_interrupt_ack()
1418 (dev->dev->id.revision < 3) && b43legacy_interrupt_ack()
1421 pio_irq_workaround(dev, B43legacy_MMIO_PIO1_BASE, 0); b43legacy_interrupt_ack()
1422 pio_irq_workaround(dev, B43legacy_MMIO_PIO2_BASE, 1); b43legacy_interrupt_ack()
1423 pio_irq_workaround(dev, B43legacy_MMIO_PIO3_BASE, 2); b43legacy_interrupt_ack()
1424 pio_irq_workaround(dev, B43legacy_MMIO_PIO4_BASE, 3); b43legacy_interrupt_ack()
1427 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_REASON, reason); b43legacy_interrupt_ack()
1429 b43legacy_write32(dev, B43legacy_MMIO_DMA0_REASON, b43legacy_interrupt_ack()
1430 dev->dma_reason[0]); b43legacy_interrupt_ack()
1431 b43legacy_write32(dev, B43legacy_MMIO_DMA1_REASON, b43legacy_interrupt_ack()
1432 dev->dma_reason[1]); b43legacy_interrupt_ack()
1433 b43legacy_write32(dev, B43legacy_MMIO_DMA2_REASON, b43legacy_interrupt_ack()
1434 dev->dma_reason[2]); b43legacy_interrupt_ack()
1435 b43legacy_write32(dev, B43legacy_MMIO_DMA3_REASON, b43legacy_interrupt_ack()
1436 dev->dma_reason[3]); b43legacy_interrupt_ack()
1437 b43legacy_write32(dev, B43legacy_MMIO_DMA4_REASON, b43legacy_interrupt_ack()
1438 dev->dma_reason[4]); b43legacy_interrupt_ack()
1439 b43legacy_write32(dev, B43legacy_MMIO_DMA5_REASON, b43legacy_interrupt_ack()
1440 dev->dma_reason[5]); b43legacy_interrupt_ack()
1447 struct b43legacy_wldev *dev = dev_id; b43legacy_interrupt_handler() local
1450 B43legacy_WARN_ON(!dev); b43legacy_interrupt_handler()
1452 spin_lock(&dev->wl->irq_lock); b43legacy_interrupt_handler()
1454 if (unlikely(b43legacy_status(dev) < B43legacy_STAT_STARTED)) b43legacy_interrupt_handler()
1457 reason = b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_interrupt_handler()
1461 reason &= dev->irq_mask; b43legacy_interrupt_handler()
1465 dev->dma_reason[0] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1468 dev->dma_reason[1] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1471 dev->dma_reason[2] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1474 dev->dma_reason[3] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1477 dev->dma_reason[4] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1480 dev->dma_reason[5] = b43legacy_read32(dev, b43legacy_interrupt_handler()
1484 b43legacy_interrupt_ack(dev, reason); b43legacy_interrupt_handler()
1486 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0); b43legacy_interrupt_handler()
1488 dev->irq_reason = reason; b43legacy_interrupt_handler()
1489 tasklet_schedule(&dev->isr_tasklet); b43legacy_interrupt_handler()
1492 spin_unlock(&dev->wl->irq_lock); b43legacy_interrupt_handler()
1497 static void b43legacy_release_firmware(struct b43legacy_wldev *dev) b43legacy_release_firmware() argument
1499 release_firmware(dev->fw.ucode); b43legacy_release_firmware()
1500 dev->fw.ucode = NULL; b43legacy_release_firmware()
1501 release_firmware(dev->fw.pcm); b43legacy_release_firmware()
1502 dev->fw.pcm = NULL; b43legacy_release_firmware()
1503 release_firmware(dev->fw.initvals); b43legacy_release_firmware()
1504 dev->fw.initvals = NULL; b43legacy_release_firmware()
1505 release_firmware(dev->fw.initvals_band); b43legacy_release_firmware()
1506 dev->fw.initvals_band = NULL; b43legacy_release_firmware()
1518 struct b43legacy_wldev *dev = context; b43legacy_fw_cb() local
1520 dev->fwp = firmware; b43legacy_fw_cb()
1521 complete(&dev->fw_load_complete); b43legacy_fw_cb()
1524 static int do_request_fw(struct b43legacy_wldev *dev, do_request_fw() argument
1539 b43legacyinfo(dev->wl, "Loading firmware %s\n", path); do_request_fw()
1541 init_completion(&dev->fw_load_complete); do_request_fw()
1543 dev->dev->dev, GFP_KERNEL, do_request_fw()
1544 dev, b43legacy_fw_cb); do_request_fw()
1546 b43legacyerr(dev->wl, "Unable to load firmware\n"); do_request_fw()
1550 wait_for_completion(&dev->fw_load_complete); do_request_fw()
1551 if (!dev->fwp) do_request_fw()
1553 *fw = dev->fwp; do_request_fw()
1555 err = request_firmware(fw, path, dev->dev->dev); do_request_fw()
1558 b43legacyerr(dev->wl, "Firmware file \"%s\" not found " do_request_fw()
1583 b43legacyerr(dev->wl, "Firmware file \"%s\" format error.\n", path); do_request_fw()
1587 static int b43legacy_one_core_attach(struct ssb_device *dev,
1589 static void b43legacy_one_core_detach(struct ssb_device *dev);
1595 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_request_firmware() local
1596 struct b43legacy_firmware *fw = &dev->fw; b43legacy_request_firmware()
1597 const u8 rev = dev->dev->id.revision; b43legacy_request_firmware()
1608 err = do_request_fw(dev, filename, &fw->ucode, true); b43legacy_request_firmware()
1617 err = do_request_fw(dev, filename, &fw->pcm, false); b43legacy_request_firmware()
1622 switch (dev->phy.type) { b43legacy_request_firmware()
1635 err = do_request_fw(dev, filename, &fw->initvals, false); b43legacy_request_firmware()
1640 switch (dev->phy.type) { b43legacy_request_firmware()
1655 err = do_request_fw(dev, filename, &fw->initvals_band, false); b43legacy_request_firmware()
1665 b43legacy_one_core_detach(dev->dev); b43legacy_request_firmware()
1669 b43legacy_print_fw_helptext(dev->wl); b43legacy_request_firmware()
1674 b43legacyerr(dev->wl, "No Initial Values firmware file for PHY %u, " b43legacy_request_firmware()
1675 "core rev %u\n", dev->phy.type, rev); b43legacy_request_firmware()
1679 b43legacy_release_firmware(dev); b43legacy_request_firmware()
1683 static int b43legacy_upload_microcode(struct b43legacy_wldev *dev) b43legacy_upload_microcode() argument
1685 struct wiphy *wiphy = dev->wl->hw->wiphy; b43legacy_upload_microcode()
1698 macctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_upload_microcode()
1701 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_upload_microcode()
1704 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, i, 0); b43legacy_upload_microcode()
1706 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, i, 0); b43legacy_upload_microcode()
1709 data = (__be32 *) (dev->fw.ucode->data + hdr_len); b43legacy_upload_microcode()
1710 len = (dev->fw.ucode->size - hdr_len) / sizeof(__be32); b43legacy_upload_microcode()
1711 b43legacy_shm_control_word(dev, b43legacy_upload_microcode()
1716 b43legacy_write32(dev, B43legacy_MMIO_SHM_DATA, b43legacy_upload_microcode()
1721 if (dev->fw.pcm) { b43legacy_upload_microcode()
1723 data = (__be32 *) (dev->fw.pcm->data + hdr_len); b43legacy_upload_microcode()
1724 len = (dev->fw.pcm->size - hdr_len) / sizeof(__be32); b43legacy_upload_microcode()
1725 b43legacy_shm_control_word(dev, B43legacy_SHM_HW, 0x01EA); b43legacy_upload_microcode()
1726 b43legacy_write32(dev, B43legacy_MMIO_SHM_DATA, 0x00004000); b43legacy_upload_microcode()
1728 b43legacy_shm_control_word(dev, B43legacy_SHM_HW, 0x01EB); b43legacy_upload_microcode()
1730 b43legacy_write32(dev, B43legacy_MMIO_SHM_DATA, b43legacy_upload_microcode()
1736 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_REASON, b43legacy_upload_microcode()
1740 macctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_upload_microcode()
1743 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_upload_microcode()
1748 tmp = b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_upload_microcode()
1753 b43legacyerr(dev->wl, "Microcode not responding\n"); b43legacy_upload_microcode()
1754 b43legacy_print_fw_helptext(dev->wl); b43legacy_upload_microcode()
1765 b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_upload_microcode()
1768 fwrev = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_upload_microcode()
1770 fwpatch = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_upload_microcode()
1772 fwdate = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_upload_microcode()
1774 fwtime = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_upload_microcode()
1778 b43legacyerr(dev->wl, "YOU ARE TRYING TO LOAD V4 FIRMWARE." b43legacy_upload_microcode()
1782 b43legacy_print_fw_helptext(dev->wl); b43legacy_upload_microcode()
1786 b43legacyinfo(dev->wl, "Loading firmware version 0x%X, patch level %u " b43legacy_upload_microcode()
1792 dev->fw.rev = fwrev; b43legacy_upload_microcode()
1793 dev->fw.patch = fwpatch; b43legacy_upload_microcode()
1796 dev->fw.rev, dev->fw.patch); b43legacy_upload_microcode()
1797 wiphy->hw_version = dev->dev->id.coreid; b43legacy_upload_microcode()
1802 macctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_upload_microcode()
1805 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_upload_microcode()
1810 static int b43legacy_write_initvals(struct b43legacy_wldev *dev, b43legacy_write_initvals() argument
1839 b43legacy_write32(dev, offset, value); b43legacy_write_initvals()
1852 b43legacy_write16(dev, offset, value); b43legacy_write_initvals()
1865 b43legacyerr(dev->wl, "Initial Values Firmware file-format error.\n"); b43legacy_write_initvals()
1866 b43legacy_print_fw_helptext(dev->wl); b43legacy_write_initvals()
1871 static int b43legacy_upload_initvals(struct b43legacy_wldev *dev) b43legacy_upload_initvals() argument
1875 struct b43legacy_firmware *fw = &dev->fw; b43legacy_upload_initvals()
1883 err = b43legacy_write_initvals(dev, ivals, count, b43legacy_upload_initvals()
1893 err = b43legacy_write_initvals(dev, ivals, count, b43legacy_upload_initvals()
1906 static int b43legacy_gpio_init(struct b43legacy_wldev *dev) b43legacy_gpio_init() argument
1908 struct ssb_bus *bus = dev->dev->bus; b43legacy_gpio_init()
1913 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, b43legacy_gpio_init()
1914 b43legacy_read32(dev, b43legacy_gpio_init()
1918 b43legacy_write16(dev, B43legacy_MMIO_GPIO_MASK, b43legacy_gpio_init()
1919 b43legacy_read16(dev, b43legacy_gpio_init()
1925 if (dev->dev->bus->chip_id == 0x4301) { b43legacy_gpio_init()
1929 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_PACTRL) { b43legacy_gpio_init()
1930 b43legacy_write16(dev, B43legacy_MMIO_GPIO_MASK, b43legacy_gpio_init()
1931 b43legacy_read16(dev, b43legacy_gpio_init()
1937 if (dev->dev->id.revision >= 2) b43legacy_gpio_init()
1941 pcidev = bus->pcicore.dev; b43legacy_gpio_init()
1943 gpiodev = bus->chipco.dev ? : pcidev; b43legacy_gpio_init()
1954 static void b43legacy_gpio_cleanup(struct b43legacy_wldev *dev) b43legacy_gpio_cleanup() argument
1956 struct ssb_bus *bus = dev->dev->bus; b43legacy_gpio_cleanup()
1960 pcidev = bus->pcicore.dev; b43legacy_gpio_cleanup()
1962 gpiodev = bus->chipco.dev ? : pcidev; b43legacy_gpio_cleanup()
1969 void b43legacy_mac_enable(struct b43legacy_wldev *dev) b43legacy_mac_enable() argument
1971 dev->mac_suspended--; b43legacy_mac_enable()
1972 B43legacy_WARN_ON(dev->mac_suspended < 0); b43legacy_mac_enable()
1974 if (dev->mac_suspended == 0) { b43legacy_mac_enable()
1975 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, b43legacy_mac_enable()
1976 b43legacy_read32(dev, b43legacy_mac_enable()
1979 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_REASON, b43legacy_mac_enable()
1982 b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_mac_enable()
1983 b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_mac_enable()
1984 b43legacy_power_saving_ctl_bits(dev, -1, -1); b43legacy_mac_enable()
1987 spin_lock_irq(&dev->wl->irq_lock); b43legacy_mac_enable()
1988 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, b43legacy_mac_enable()
1989 dev->irq_mask); b43legacy_mac_enable()
1990 spin_unlock_irq(&dev->wl->irq_lock); b43legacy_mac_enable()
1995 void b43legacy_mac_suspend(struct b43legacy_wldev *dev) b43legacy_mac_suspend() argument
2002 B43legacy_WARN_ON(dev->mac_suspended < 0); b43legacy_mac_suspend()
2004 if (dev->mac_suspended == 0) { b43legacy_mac_suspend()
2007 spin_lock_irq(&dev->wl->irq_lock); b43legacy_mac_suspend()
2008 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0); b43legacy_mac_suspend()
2009 spin_unlock_irq(&dev->wl->irq_lock); b43legacy_mac_suspend()
2010 b43legacy_synchronize_irq(dev); b43legacy_mac_suspend()
2012 b43legacy_power_saving_ctl_bits(dev, -1, 1); b43legacy_mac_suspend()
2013 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, b43legacy_mac_suspend()
2014 b43legacy_read32(dev, b43legacy_mac_suspend()
2017 b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_mac_suspend()
2019 tmp = b43legacy_read32(dev, b43legacy_mac_suspend()
2025 b43legacyerr(dev->wl, "MAC suspend failed\n"); b43legacy_mac_suspend()
2028 dev->mac_suspended++; b43legacy_mac_suspend()
2031 static void b43legacy_adjust_opmode(struct b43legacy_wldev *dev) b43legacy_adjust_opmode() argument
2033 struct b43legacy_wl *wl = dev->wl; b43legacy_adjust_opmode()
2037 ctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_adjust_opmode()
2064 if (dev->dev->id.revision <= 4) b43legacy_adjust_opmode()
2067 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, ctl); b43legacy_adjust_opmode()
2072 if (dev->dev->bus->chip_id == 0x4306 && b43legacy_adjust_opmode()
2073 dev->dev->bus->chip_rev == 3) b43legacy_adjust_opmode()
2078 b43legacy_write16(dev, 0x612, cfp_pretbtt); b43legacy_adjust_opmode()
2081 static void b43legacy_rate_memory_write(struct b43legacy_wldev *dev, b43legacy_rate_memory_write() argument
2094 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, offset + 0x20, b43legacy_rate_memory_write()
2095 b43legacy_shm_read16(dev, b43legacy_rate_memory_write()
2099 static void b43legacy_rate_memory_init(struct b43legacy_wldev *dev) b43legacy_rate_memory_init() argument
2101 switch (dev->phy.type) { b43legacy_rate_memory_init()
2103 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_6MB, 1); b43legacy_rate_memory_init()
2104 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_12MB, 1); b43legacy_rate_memory_init()
2105 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_18MB, 1); b43legacy_rate_memory_init()
2106 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_24MB, 1); b43legacy_rate_memory_init()
2107 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_36MB, 1); b43legacy_rate_memory_init()
2108 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_48MB, 1); b43legacy_rate_memory_init()
2109 b43legacy_rate_memory_write(dev, B43legacy_OFDM_RATE_54MB, 1); b43legacy_rate_memory_init()
2112 b43legacy_rate_memory_write(dev, B43legacy_CCK_RATE_1MB, 0); b43legacy_rate_memory_init()
2113 b43legacy_rate_memory_write(dev, B43legacy_CCK_RATE_2MB, 0); b43legacy_rate_memory_init()
2114 b43legacy_rate_memory_write(dev, B43legacy_CCK_RATE_5MB, 0); b43legacy_rate_memory_init()
2115 b43legacy_rate_memory_write(dev, B43legacy_CCK_RATE_11MB, 0); b43legacy_rate_memory_init()
2123 static void b43legacy_mgmtframe_txantenna(struct b43legacy_wldev *dev, b43legacy_mgmtframe_txantenna() argument
2147 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2150 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2153 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2156 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2159 tmp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2162 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_mgmtframe_txantenna()
2167 static void b43legacy_chip_exit(struct b43legacy_wldev *dev) b43legacy_chip_exit() argument
2169 b43legacy_radio_turn_off(dev, 1); b43legacy_chip_exit()
2170 b43legacy_gpio_cleanup(dev); b43legacy_chip_exit()
2177 static int b43legacy_chip_init(struct b43legacy_wldev *dev) b43legacy_chip_init() argument
2179 struct b43legacy_phy *phy = &dev->phy; b43legacy_chip_init()
2187 if (dev->phy.gmode) b43legacy_chip_init()
2190 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_chip_init()
2192 err = b43legacy_upload_microcode(dev); b43legacy_chip_init()
2196 err = b43legacy_gpio_init(dev); b43legacy_chip_init()
2200 err = b43legacy_upload_initvals(dev); b43legacy_chip_init()
2203 b43legacy_radio_turn_on(dev); b43legacy_chip_init()
2205 b43legacy_write16(dev, 0x03E6, 0x0000); b43legacy_chip_init()
2206 err = b43legacy_phy_init(dev); b43legacy_chip_init()
2213 b43legacy_radio_set_interference_mitigation(dev, tmp); b43legacy_chip_init()
2215 b43legacy_phy_set_antenna_diversity(dev); b43legacy_chip_init()
2216 b43legacy_mgmtframe_txantenna(dev, B43legacy_ANTENNA_DEFAULT); b43legacy_chip_init()
2219 value16 = b43legacy_read16(dev, 0x005E); b43legacy_chip_init()
2221 b43legacy_write16(dev, 0x005E, value16); b43legacy_chip_init()
2223 b43legacy_write32(dev, 0x0100, 0x01000000); b43legacy_chip_init()
2224 if (dev->dev->id.revision < 5) b43legacy_chip_init()
2225 b43legacy_write32(dev, 0x010C, 0x01000000); b43legacy_chip_init()
2227 value32 = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_chip_init()
2229 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, value32); b43legacy_chip_init()
2230 value32 = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_chip_init()
2232 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, value32); b43legacy_chip_init()
2234 if (b43legacy_using_pio(dev)) { b43legacy_chip_init()
2235 b43legacy_write32(dev, 0x0210, 0x00000100); b43legacy_chip_init()
2236 b43legacy_write32(dev, 0x0230, 0x00000100); b43legacy_chip_init()
2237 b43legacy_write32(dev, 0x0250, 0x00000100); b43legacy_chip_init()
2238 b43legacy_write32(dev, 0x0270, 0x00000100); b43legacy_chip_init()
2239 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0034, b43legacy_chip_init()
2245 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0074, 0x0000); b43legacy_chip_init()
2248 b43legacy_adjust_opmode(dev); b43legacy_chip_init()
2250 if (dev->dev->id.revision < 3) { b43legacy_chip_init()
2251 b43legacy_write16(dev, 0x060E, 0x0000); b43legacy_chip_init()
2252 b43legacy_write16(dev, 0x0610, 0x8000); b43legacy_chip_init()
2253 b43legacy_write16(dev, 0x0604, 0x0000); b43legacy_chip_init()
2254 b43legacy_write16(dev, 0x0606, 0x0200); b43legacy_chip_init()
2256 b43legacy_write32(dev, 0x0188, 0x80000000); b43legacy_chip_init()
2257 b43legacy_write32(dev, 0x018C, 0x02000000); b43legacy_chip_init()
2259 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_REASON, 0x00004000); b43legacy_chip_init()
2260 b43legacy_write32(dev, B43legacy_MMIO_DMA0_IRQ_MASK, 0x0001DC00); b43legacy_chip_init()
2261 b43legacy_write32(dev, B43legacy_MMIO_DMA1_IRQ_MASK, 0x0000DC00); b43legacy_chip_init()
2262 b43legacy_write32(dev, B43legacy_MMIO_DMA2_IRQ_MASK, 0x0000DC00); b43legacy_chip_init()
2263 b43legacy_write32(dev, B43legacy_MMIO_DMA3_IRQ_MASK, 0x0001DC00); b43legacy_chip_init()
2264 b43legacy_write32(dev, B43legacy_MMIO_DMA4_IRQ_MASK, 0x0000DC00); b43legacy_chip_init()
2265 b43legacy_write32(dev, B43legacy_MMIO_DMA5_IRQ_MASK, 0x0000DC00); b43legacy_chip_init()
2267 value32 = ssb_read32(dev->dev, SSB_TMSLOW); b43legacy_chip_init()
2269 ssb_write32(dev->dev, SSB_TMSLOW, value32); b43legacy_chip_init()
2271 b43legacy_write16(dev, B43legacy_MMIO_POWERUP_DELAY, b43legacy_chip_init()
2272 dev->dev->bus->chipco.fast_pwrup_delay); b43legacy_chip_init()
2278 b43legacydbg(dev->wl, "Chip initialized\n"); b43legacy_chip_init()
2283 b43legacy_radio_turn_off(dev, 1); b43legacy_chip_init()
2285 b43legacy_gpio_cleanup(dev); b43legacy_chip_init()
2289 static void b43legacy_periodic_every120sec(struct b43legacy_wldev *dev) b43legacy_periodic_every120sec() argument
2291 struct b43legacy_phy *phy = &dev->phy; b43legacy_periodic_every120sec()
2296 b43legacy_mac_suspend(dev); b43legacy_periodic_every120sec()
2297 b43legacy_phy_lo_g_measure(dev); b43legacy_periodic_every120sec()
2298 b43legacy_mac_enable(dev); b43legacy_periodic_every120sec()
2301 static void b43legacy_periodic_every60sec(struct b43legacy_wldev *dev) b43legacy_periodic_every60sec() argument
2303 b43legacy_phy_lo_mark_all_unused(dev); b43legacy_periodic_every60sec()
2304 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_RSSI) { b43legacy_periodic_every60sec()
2305 b43legacy_mac_suspend(dev); b43legacy_periodic_every60sec()
2306 b43legacy_calc_nrssi_slope(dev); b43legacy_periodic_every60sec()
2307 b43legacy_mac_enable(dev); b43legacy_periodic_every60sec()
2311 static void b43legacy_periodic_every30sec(struct b43legacy_wldev *dev) b43legacy_periodic_every30sec() argument
2314 b43legacy_calculate_link_quality(dev); b43legacy_periodic_every30sec()
2317 static void b43legacy_periodic_every15sec(struct b43legacy_wldev *dev) b43legacy_periodic_every15sec() argument
2319 b43legacy_phy_xmitpower(dev); /* FIXME: unless scanning? */ b43legacy_periodic_every15sec()
2321 atomic_set(&dev->phy.txerr_cnt, B43legacy_PHY_TX_BADNESS_LIMIT); b43legacy_periodic_every15sec()
2325 static void do_periodic_work(struct b43legacy_wldev *dev) do_periodic_work() argument
2329 state = dev->periodic_state; do_periodic_work()
2331 b43legacy_periodic_every120sec(dev); do_periodic_work()
2333 b43legacy_periodic_every60sec(dev); do_periodic_work()
2335 b43legacy_periodic_every30sec(dev); do_periodic_work()
2336 b43legacy_periodic_every15sec(dev); do_periodic_work()
2346 struct b43legacy_wldev *dev = container_of(work, struct b43legacy_wldev, b43legacy_periodic_work_handler() local
2348 struct b43legacy_wl *wl = dev->wl; b43legacy_periodic_work_handler()
2353 if (unlikely(b43legacy_status(dev) != B43legacy_STAT_STARTED)) b43legacy_periodic_work_handler()
2355 if (b43legacy_debug(dev, B43legacy_DBG_PWORK_STOP)) b43legacy_periodic_work_handler()
2358 do_periodic_work(dev); b43legacy_periodic_work_handler()
2360 dev->periodic_state++; b43legacy_periodic_work_handler()
2362 if (b43legacy_debug(dev, B43legacy_DBG_PWORK_FAST)) b43legacy_periodic_work_handler()
2366 ieee80211_queue_delayed_work(wl->hw, &dev->periodic_work, delay); b43legacy_periodic_work_handler()
2371 static void b43legacy_periodic_tasks_setup(struct b43legacy_wldev *dev) b43legacy_periodic_tasks_setup() argument
2373 struct delayed_work *work = &dev->periodic_work; b43legacy_periodic_tasks_setup()
2375 dev->periodic_state = 0; b43legacy_periodic_tasks_setup()
2377 ieee80211_queue_delayed_work(dev->wl->hw, work, 0); b43legacy_periodic_tasks_setup()
2381 static int b43legacy_validate_chipaccess(struct b43legacy_wldev *dev) b43legacy_validate_chipaccess() argument
2386 shm_backup = b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, 0); b43legacy_validate_chipaccess()
2387 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, 0, 0xAA5555AA); b43legacy_validate_chipaccess()
2388 if (b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, 0) != b43legacy_validate_chipaccess()
2391 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, 0, 0x55AAAA55); b43legacy_validate_chipaccess()
2392 if (b43legacy_shm_read32(dev, B43legacy_SHM_SHARED, 0) != b43legacy_validate_chipaccess()
2395 b43legacy_shm_write32(dev, B43legacy_SHM_SHARED, 0, shm_backup); b43legacy_validate_chipaccess()
2397 value = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_validate_chipaccess()
2402 value = b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_REASON); b43legacy_validate_chipaccess()
2408 b43legacyerr(dev->wl, "Failed to validate the chipaccess\n"); b43legacy_validate_chipaccess()
2412 static void b43legacy_security_init(struct b43legacy_wldev *dev) b43legacy_security_init() argument
2414 dev->max_nr_keys = (dev->dev->id.revision >= 5) ? 58 : 20; b43legacy_security_init()
2415 B43legacy_WARN_ON(dev->max_nr_keys > ARRAY_SIZE(dev->key)); b43legacy_security_init()
2416 dev->ktp = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_security_init()
2421 dev->ktp *= 2; b43legacy_security_init()
2422 if (dev->dev->id.revision >= 5) b43legacy_security_init()
2424 b43legacy_write16(dev, B43legacy_MMIO_RCMTA_COUNT, b43legacy_security_init()
2425 dev->max_nr_keys - 8); b43legacy_security_init()
2480 struct b43legacy_wldev *dev; b43legacy_tx_work() local
2486 dev = wl->current_dev; b43legacy_tx_work()
2487 if (unlikely(!dev || b43legacy_status(dev) < B43legacy_STAT_STARTED)) { b43legacy_tx_work()
2495 if (b43legacy_using_pio(dev)) b43legacy_tx_work()
2496 err = b43legacy_pio_tx(dev, skb); b43legacy_tx_work()
2498 err = b43legacy_dma_tx(dev, skb); b43legacy_tx_work()
2572 struct b43legacy_wldev **dev, find_wldev_for_phymode()
2582 *dev = d; find_wldev_for_phymode()
2591 static void b43legacy_put_phy_into_reset(struct b43legacy_wldev *dev) b43legacy_put_phy_into_reset() argument
2593 struct ssb_device *sdev = dev->dev; b43legacy_put_phy_into_reset()
2681 static void b43legacy_set_retry_limits(struct b43legacy_wldev *dev, b43legacy_set_retry_limits() argument
2690 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0006, short_retry); b43legacy_set_retry_limits()
2691 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, 0x0007, long_retry); b43legacy_set_retry_limits()
2698 struct b43legacy_wldev *dev; b43legacy_op_dev_config() local
2709 dev = wl->current_dev; b43legacy_op_dev_config()
2710 phy = &dev->phy; b43legacy_op_dev_config()
2713 b43legacy_set_retry_limits(dev, b43legacy_op_dev_config()
2739 if (b43legacy_status(dev) < B43legacy_STAT_STARTED) { b43legacy_op_dev_config()
2743 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0); b43legacy_op_dev_config()
2745 b43legacy_synchronize_irq(dev); b43legacy_op_dev_config()
2750 b43legacy_radio_selectchannel(dev, conf->chandef.chan->hw_value, b43legacy_op_dev_config()
2753 dev->wl->radiotap_enabled = !!(conf->flags & IEEE80211_CONF_MONITOR); b43legacy_op_dev_config()
2759 b43legacy_phy_xmitpower(dev); b43legacy_op_dev_config()
2764 b43legacy_mgmtframe_txantenna(dev, antenna_tx); b43legacy_op_dev_config()
2768 b43legacy_radio_turn_on(dev); b43legacy_op_dev_config()
2769 b43legacyinfo(dev->wl, "Radio turned on by software\n"); b43legacy_op_dev_config()
2770 if (!dev->radio_hw_enable) b43legacy_op_dev_config()
2771 b43legacyinfo(dev->wl, "The hardware RF-kill" b43legacy_op_dev_config()
2776 b43legacy_radio_turn_off(dev, 0); b43legacy_op_dev_config()
2777 b43legacyinfo(dev->wl, "Radio turned off by" b43legacy_op_dev_config()
2783 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43legacy_op_dev_config()
2792 static void b43legacy_update_basic_rates(struct b43legacy_wldev *dev, u32 brates) b43legacy_update_basic_rates() argument
2795 dev->wl->hw->wiphy->bands[IEEE80211_BAND_2GHZ]; b43legacy_update_basic_rates()
2829 rateptr = b43legacy_shm_read16(dev, B43legacy_SHM_SHARED, b43legacy_update_basic_rates()
2832 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_update_basic_rates()
2843 struct b43legacy_wldev *dev; b43legacy_op_bss_info_changed() local
2849 dev = wl->current_dev; b43legacy_op_bss_info_changed()
2855 if (b43legacy_status(dev) < B43legacy_STAT_STARTED) { b43legacy_op_bss_info_changed()
2859 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0); b43legacy_op_bss_info_changed()
2862 b43legacy_synchronize_irq(dev); b43legacy_op_bss_info_changed()
2870 if (b43legacy_status(dev) >= B43legacy_STAT_INITIALIZED) { b43legacy_op_bss_info_changed()
2877 b43legacy_write_mac_bssid_templates(dev); b43legacy_op_bss_info_changed()
2881 b43legacy_mac_suspend(dev); b43legacy_op_bss_info_changed()
2886 b43legacy_set_beacon_int(dev, conf->beacon_int); b43legacy_op_bss_info_changed()
2889 b43legacy_update_basic_rates(dev, conf->basic_rates); b43legacy_op_bss_info_changed()
2893 b43legacy_short_slot_timing_enable(dev); b43legacy_op_bss_info_changed()
2895 b43legacy_short_slot_timing_disable(dev); b43legacy_op_bss_info_changed()
2898 b43legacy_mac_enable(dev); b43legacy_op_bss_info_changed()
2901 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43legacy_op_bss_info_changed()
2914 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_op_configure_filter() local
2917 if (!dev) { b43legacy_op_configure_filter()
2939 if (changed && b43legacy_status(dev) >= B43legacy_STAT_INITIALIZED) b43legacy_op_configure_filter()
2940 b43legacy_adjust_opmode(dev); b43legacy_op_configure_filter()
2945 static void b43legacy_wireless_core_stop(struct b43legacy_wldev *dev) b43legacy_wireless_core_stop() argument
2947 struct b43legacy_wl *wl = dev->wl; b43legacy_wireless_core_stop()
2951 if (b43legacy_status(dev) < B43legacy_STAT_STARTED) b43legacy_wireless_core_stop()
2958 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, 0); b43legacy_wireless_core_stop()
2959 b43legacy_read32(dev, B43legacy_MMIO_GEN_IRQ_MASK); /* flush */ b43legacy_wireless_core_stop()
2961 b43legacy_synchronize_irq(dev); b43legacy_wireless_core_stop()
2963 b43legacy_set_status(dev, B43legacy_STAT_INITIALIZED); b43legacy_wireless_core_stop()
2968 cancel_delayed_work_sync(&dev->periodic_work); b43legacy_wireless_core_stop()
2978 b43legacy_mac_suspend(dev); b43legacy_wireless_core_stop()
2979 free_irq(dev->dev->irq, dev); b43legacy_wireless_core_stop()
2984 static int b43legacy_wireless_core_start(struct b43legacy_wldev *dev) b43legacy_wireless_core_start() argument
2988 B43legacy_WARN_ON(b43legacy_status(dev) != B43legacy_STAT_INITIALIZED); b43legacy_wireless_core_start()
2990 drain_txstatus_queue(dev); b43legacy_wireless_core_start()
2991 err = request_irq(dev->dev->irq, b43legacy_interrupt_handler, b43legacy_wireless_core_start()
2992 IRQF_SHARED, KBUILD_MODNAME, dev); b43legacy_wireless_core_start()
2994 b43legacyerr(dev->wl, "Cannot request IRQ-%d\n", b43legacy_wireless_core_start()
2995 dev->dev->irq); b43legacy_wireless_core_start()
2999 ieee80211_wake_queues(dev->wl->hw); b43legacy_wireless_core_start()
3000 b43legacy_set_status(dev, B43legacy_STAT_STARTED); b43legacy_wireless_core_start()
3003 b43legacy_mac_enable(dev); b43legacy_wireless_core_start()
3004 b43legacy_write32(dev, B43legacy_MMIO_GEN_IRQ_MASK, dev->irq_mask); b43legacy_wireless_core_start()
3007 b43legacy_periodic_tasks_setup(dev); b43legacy_wireless_core_start()
3009 b43legacydbg(dev->wl, "Wireless interface started\n"); b43legacy_wireless_core_start()
3015 static int b43legacy_phy_versioning(struct b43legacy_wldev *dev) b43legacy_phy_versioning() argument
3017 struct b43legacy_phy *phy = &dev->phy; b43legacy_phy_versioning()
3028 tmp = b43legacy_read16(dev, B43legacy_MMIO_PHY_VER); b43legacy_phy_versioning()
3047 b43legacyerr(dev->wl, "FOUND UNSUPPORTED PHY " b43legacy_phy_versioning()
3052 b43legacydbg(dev->wl, "Found PHY: Analog %u, Type %u, Revision %u\n", b43legacy_phy_versioning()
3057 if (dev->dev->bus->chip_id == 0x4317) { b43legacy_phy_versioning()
3058 if (dev->dev->bus->chip_rev == 0) b43legacy_phy_versioning()
3060 else if (dev->dev->bus->chip_rev == 1) b43legacy_phy_versioning()
3065 b43legacy_write16(dev, B43legacy_MMIO_RADIO_CONTROL, b43legacy_phy_versioning()
3067 tmp = b43legacy_read16(dev, B43legacy_MMIO_RADIO_DATA_HIGH); b43legacy_phy_versioning()
3069 b43legacy_write16(dev, B43legacy_MMIO_RADIO_CONTROL, b43legacy_phy_versioning()
3071 tmp |= b43legacy_read16(dev, B43legacy_MMIO_RADIO_DATA_LOW); b43legacy_phy_versioning()
3089 b43legacyerr(dev->wl, "FOUND UNSUPPORTED RADIO " b43legacy_phy_versioning()
3094 b43legacydbg(dev->wl, "Found Radio: Manuf 0x%X, Version 0x%X," b43legacy_phy_versioning()
3109 static void setup_struct_phy_for_init(struct b43legacy_wldev *dev, setup_struct_phy_for_init() argument
3120 dev->radio_hw_enable = true; setup_struct_phy_for_init()
3135 phy->bbatt = b43legacy_default_baseband_attenuation(dev); setup_struct_phy_for_init()
3136 phy->rfatt = b43legacy_default_radio_attenuation(dev); setup_struct_phy_for_init()
3137 phy->txctl1 = b43legacy_default_txctl1(dev); setup_struct_phy_for_init()
3154 static void setup_struct_wldev_for_init(struct b43legacy_wldev *dev) setup_struct_wldev_for_init() argument
3157 dev->dfq_valid = false; setup_struct_wldev_for_init()
3160 memset(&dev->stats, 0, sizeof(dev->stats)); setup_struct_wldev_for_init()
3162 setup_struct_phy_for_init(dev, &dev->phy); setup_struct_wldev_for_init()
3165 dev->irq_reason = 0; setup_struct_wldev_for_init()
3166 memset(dev->dma_reason, 0, sizeof(dev->dma_reason)); setup_struct_wldev_for_init()
3167 dev->irq_mask = B43legacy_IRQ_MASKTEMPLATE; setup_struct_wldev_for_init()
3169 dev->mac_suspended = 1; setup_struct_wldev_for_init()
3172 memset(&dev->noisecalc, 0, sizeof(dev->noisecalc)); setup_struct_wldev_for_init()
3175 static void b43legacy_set_synth_pu_delay(struct b43legacy_wldev *dev, b43legacy_set_synth_pu_delay() argument
3179 if (b43legacy_is_mode(dev->wl, NL80211_IFTYPE_ADHOC) || idle) b43legacy_set_synth_pu_delay()
3181 if ((dev->phy.radio_ver == 0x2050) && (dev->phy.radio_rev == 8)) b43legacy_set_synth_pu_delay()
3184 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_set_synth_pu_delay()
3189 static void b43legacy_set_pretbtt(struct b43legacy_wldev *dev) b43legacy_set_pretbtt() argument
3194 if (b43legacy_is_mode(dev->wl, NL80211_IFTYPE_ADHOC)) b43legacy_set_pretbtt()
3198 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_set_pretbtt()
3200 b43legacy_write16(dev, B43legacy_MMIO_TSF_CFP_PRETBTT, pretbtt); b43legacy_set_pretbtt()
3205 static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) b43legacy_wireless_core_exit() argument
3207 struct b43legacy_phy *phy = &dev->phy; b43legacy_wireless_core_exit()
3210 B43legacy_WARN_ON(b43legacy_status(dev) > B43legacy_STAT_INITIALIZED); b43legacy_wireless_core_exit()
3211 if (b43legacy_status(dev) != B43legacy_STAT_INITIALIZED) b43legacy_wireless_core_exit()
3213 b43legacy_set_status(dev, B43legacy_STAT_UNINIT); b43legacy_wireless_core_exit()
3216 macctl = b43legacy_read32(dev, B43legacy_MMIO_MACCTL); b43legacy_wireless_core_exit()
3219 b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); b43legacy_wireless_core_exit()
3221 b43legacy_leds_exit(dev); b43legacy_wireless_core_exit()
3222 b43legacy_rng_exit(dev->wl); b43legacy_wireless_core_exit()
3223 b43legacy_pio_free(dev); b43legacy_wireless_core_exit()
3224 b43legacy_dma_free(dev); b43legacy_wireless_core_exit()
3225 b43legacy_chip_exit(dev); b43legacy_wireless_core_exit()
3226 b43legacy_radio_turn_off(dev, 1); b43legacy_wireless_core_exit()
3227 b43legacy_switch_analog(dev, 0); b43legacy_wireless_core_exit()
3232 if (dev->wl->current_beacon) { b43legacy_wireless_core_exit()
3233 dev_kfree_skb_any(dev->wl->current_beacon); b43legacy_wireless_core_exit()
3234 dev->wl->current_beacon = NULL; b43legacy_wireless_core_exit()
3237 ssb_device_disable(dev->dev, 0); b43legacy_wireless_core_exit()
3238 ssb_bus_may_powerdown(dev->dev->bus); b43legacy_wireless_core_exit()
3241 static void prepare_phy_data_for_init(struct b43legacy_wldev *dev) prepare_phy_data_for_init() argument
3243 struct b43legacy_phy *phy = &dev->phy; prepare_phy_data_for_init()
3247 phy->bbatt = b43legacy_default_baseband_attenuation(dev); prepare_phy_data_for_init()
3248 phy->rfatt = b43legacy_default_radio_attenuation(dev); prepare_phy_data_for_init()
3249 phy->txctl1 = b43legacy_default_txctl1(dev); prepare_phy_data_for_init()
3281 static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev) b43legacy_wireless_core_init() argument
3283 struct b43legacy_wl *wl = dev->wl; b43legacy_wireless_core_init()
3284 struct ssb_bus *bus = dev->dev->bus; b43legacy_wireless_core_init()
3285 struct b43legacy_phy *phy = &dev->phy; b43legacy_wireless_core_init()
3286 struct ssb_sprom *sprom = &dev->dev->bus->sprom; b43legacy_wireless_core_init()
3291 B43legacy_WARN_ON(b43legacy_status(dev) != B43legacy_STAT_UNINIT); b43legacy_wireless_core_init()
3296 if (!ssb_device_is_enabled(dev->dev)) { b43legacy_wireless_core_init()
3298 b43legacy_wireless_core_reset(dev, tmp); b43legacy_wireless_core_init()
3309 setup_struct_wldev_for_init(dev); b43legacy_wireless_core_init()
3311 err = b43legacy_phy_init_tssi2dbm_table(dev); b43legacy_wireless_core_init()
3316 ssb_pcicore_dev_irqvecs_enable(&bus->pcicore, dev->dev); b43legacy_wireless_core_init()
3318 prepare_phy_data_for_init(dev); b43legacy_wireless_core_init()
3319 b43legacy_phy_calibrate(dev); b43legacy_wireless_core_init()
3320 err = b43legacy_chip_init(dev); b43legacy_wireless_core_init()
3323 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_wireless_core_init()
3325 dev->dev->id.revision); b43legacy_wireless_core_init()
3326 hf = b43legacy_hf_read(dev); b43legacy_wireless_core_init()
3338 b43legacy_hf_write(dev, hf); b43legacy_wireless_core_init()
3340 b43legacy_set_retry_limits(dev, b43legacy_wireless_core_init()
3344 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_wireless_core_init()
3346 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_wireless_core_init()
3353 b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, b43legacy_wireless_core_init()
3356 b43legacy_rate_memory_init(dev); b43legacy_wireless_core_init()
3360 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, b43legacy_wireless_core_init()
3363 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, b43legacy_wireless_core_init()
3366 b43legacy_shm_write16(dev, B43legacy_SHM_WIRELESS, b43legacy_wireless_core_init()
3370 if (b43legacy_using_pio(dev)) b43legacy_wireless_core_init()
3371 err = b43legacy_pio_init(dev); b43legacy_wireless_core_init()
3373 err = b43legacy_dma_init(dev); b43legacy_wireless_core_init()
3375 b43legacy_qos_init(dev); b43legacy_wireless_core_init()
3381 b43legacy_set_synth_pu_delay(dev, 1); b43legacy_wireless_core_init()
3384 b43legacy_upload_card_macaddress(dev); b43legacy_wireless_core_init()
3385 b43legacy_security_init(dev); b43legacy_wireless_core_init()
3388 ieee80211_wake_queues(dev->wl->hw); b43legacy_wireless_core_init()
3389 b43legacy_set_status(dev, B43legacy_STAT_INITIALIZED); b43legacy_wireless_core_init()
3391 b43legacy_leds_init(dev); b43legacy_wireless_core_init()
3396 b43legacy_chip_exit(dev); b43legacy_wireless_core_init()
3404 B43legacy_WARN_ON(b43legacy_status(dev) != B43legacy_STAT_UNINIT); b43legacy_wireless_core_init()
3412 struct b43legacy_wldev *dev; b43legacy_op_add_interface() local
3430 dev = wl->current_dev; b43legacy_op_add_interface()
3437 b43legacy_adjust_opmode(dev); b43legacy_op_add_interface()
3438 b43legacy_set_pretbtt(dev); b43legacy_op_add_interface()
3439 b43legacy_set_synth_pu_delay(dev, 0); b43legacy_op_add_interface()
3440 b43legacy_upload_card_macaddress(dev); b43legacy_op_add_interface()
3454 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_op_remove_interface() local
3468 b43legacy_adjust_opmode(dev); b43legacy_op_remove_interface()
3470 b43legacy_upload_card_macaddress(dev); b43legacy_op_remove_interface()
3479 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_op_start() local
3496 if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED) { b43legacy_op_start()
3497 err = b43legacy_wireless_core_init(dev); b43legacy_op_start()
3503 if (b43legacy_status(dev) < B43legacy_STAT_STARTED) { b43legacy_op_start()
3504 err = b43legacy_wireless_core_start(dev); b43legacy_op_start()
3507 b43legacy_wireless_core_exit(dev); b43legacy_op_start()
3523 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_op_stop() local
3528 if (b43legacy_status(dev) >= B43legacy_STAT_STARTED) b43legacy_op_stop()
3529 b43legacy_wireless_core_stop(dev); b43legacy_op_stop()
3530 b43legacy_wireless_core_exit(dev); b43legacy_op_stop()
3552 struct b43legacy_wldev *dev = wl->current_dev; b43legacy_op_get_survey() local
3560 survey->noise = dev->stats.link_noise; b43legacy_op_get_survey()
3586 struct b43legacy_wldev *dev = b43legacy_chip_reset() local
3588 struct b43legacy_wl *wl = dev->wl; b43legacy_chip_reset()
3594 prev_status = b43legacy_status(dev); b43legacy_chip_reset()
3597 b43legacy_wireless_core_stop(dev); b43legacy_chip_reset()
3599 b43legacy_wireless_core_exit(dev); b43legacy_chip_reset()
3603 err = b43legacy_wireless_core_init(dev); b43legacy_chip_reset()
3608 err = b43legacy_wireless_core_start(dev); b43legacy_chip_reset()
3610 b43legacy_wireless_core_exit(dev); b43legacy_chip_reset()
3616 wl->current_dev = NULL; /* Failed to init the dev. */ b43legacy_chip_reset()
3624 static int b43legacy_setup_modes(struct b43legacy_wldev *dev, b43legacy_setup_modes() argument
3628 struct ieee80211_hw *hw = dev->wl->hw; b43legacy_setup_modes()
3629 struct b43legacy_phy *phy = &dev->phy; b43legacy_setup_modes()
3647 static void b43legacy_wireless_core_detach(struct b43legacy_wldev *dev) b43legacy_wireless_core_detach() argument
3651 b43legacy_release_firmware(dev); b43legacy_wireless_core_detach()
3654 static int b43legacy_wireless_core_attach(struct b43legacy_wldev *dev) b43legacy_wireless_core_attach() argument
3656 struct b43legacy_wl *wl = dev->wl; b43legacy_wireless_core_attach()
3657 struct ssb_bus *bus = dev->dev->bus; b43legacy_wireless_core_attach()
3677 if (dev->dev->id.revision >= 5) { b43legacy_wireless_core_attach()
3680 tmshigh = ssb_read32(dev->dev, SSB_TMSHIGH); b43legacy_wireless_core_attach()
3684 } else if (dev->dev->id.revision == 4) b43legacy_wireless_core_attach()
3689 dev->phy.gmode = (have_gphy || have_bphy); b43legacy_wireless_core_attach()
3690 dev->phy.radio_on = true; b43legacy_wireless_core_attach()
3691 tmp = dev->phy.gmode ? B43legacy_TMSLOW_GMODE : 0; b43legacy_wireless_core_attach()
3692 b43legacy_wireless_core_reset(dev, tmp); b43legacy_wireless_core_attach()
3694 err = b43legacy_phy_versioning(dev); b43legacy_wireless_core_attach()
3705 switch (dev->phy.type) { b43legacy_wireless_core_attach()
3716 dev->phy.gmode = (have_gphy || have_bphy); b43legacy_wireless_core_attach()
3717 tmp = dev->phy.gmode ? B43legacy_TMSLOW_GMODE : 0; b43legacy_wireless_core_attach()
3718 b43legacy_wireless_core_reset(dev, tmp); b43legacy_wireless_core_attach()
3720 err = b43legacy_validate_chipaccess(dev); b43legacy_wireless_core_attach()
3723 err = b43legacy_setup_modes(dev, have_bphy, have_gphy); b43legacy_wireless_core_attach()
3729 wl->current_dev = dev; b43legacy_wireless_core_attach()
3730 INIT_WORK(&dev->restart_work, b43legacy_chip_reset); b43legacy_wireless_core_attach()
3732 b43legacy_radio_turn_off(dev, 1); b43legacy_wireless_core_attach()
3733 b43legacy_switch_analog(dev, 0); b43legacy_wireless_core_attach()
3734 ssb_device_disable(dev->dev, 0); b43legacy_wireless_core_attach()
3745 static void b43legacy_one_core_detach(struct ssb_device *dev) b43legacy_one_core_detach() argument
3753 wldev = ssb_get_drvdata(dev); b43legacy_one_core_detach()
3759 ssb_set_drvdata(dev, NULL); b43legacy_one_core_detach()
3763 static int b43legacy_one_core_attach(struct ssb_device *dev, b43legacy_one_core_attach() argument
3773 wldev->dev = dev; b43legacy_one_core_attach()
3790 ssb_set_drvdata(dev, wldev); b43legacy_one_core_attach()
3809 static void b43legacy_wireless_exit(struct ssb_device *dev, b43legacy_wireless_exit() argument
3814 ssb_set_devtypedata(dev, NULL); b43legacy_wireless_exit()
3818 static int b43legacy_wireless_init(struct ssb_device *dev) b43legacy_wireless_init() argument
3820 struct ssb_sprom *sprom = &dev->bus->sprom; b43legacy_wireless_init()
3826 b43legacy_sprom_fixup(dev->bus); b43legacy_wireless_init()
3845 SET_IEEE80211_DEV(hw, dev->dev); b43legacy_wireless_init()
3868 ssb_set_devtypedata(dev, wl); b43legacy_wireless_init()
3870 dev->bus->chip_id, dev->id.revision); b43legacy_wireless_init()
3876 static int b43legacy_probe(struct ssb_device *dev, b43legacy_probe() argument
3883 wl = ssb_get_devtypedata(dev); b43legacy_probe()
3887 err = b43legacy_wireless_init(dev); b43legacy_probe()
3890 wl = ssb_get_devtypedata(dev); b43legacy_probe()
3893 err = b43legacy_one_core_attach(dev, wl); b43legacy_probe()
3906 b43legacy_wireless_exit(dev, wl); b43legacy_probe()
3910 static void b43legacy_remove(struct ssb_device *dev) b43legacy_remove() argument
3912 struct b43legacy_wl *wl = ssb_get_devtypedata(dev); b43legacy_remove()
3913 struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); b43legacy_remove()
3927 b43legacy_one_core_detach(dev); b43legacy_remove()
3933 b43legacy_wireless_exit(dev, wl); b43legacy_remove()
3937 void b43legacy_controller_restart(struct b43legacy_wldev *dev, b43legacy_controller_restart() argument
3941 if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED) b43legacy_controller_restart()
3943 b43legacyinfo(dev->wl, "Controller RESET (%s) ...\n", reason); b43legacy_controller_restart()
3944 ieee80211_queue_work(dev->wl->hw, &dev->restart_work); b43legacy_controller_restart()
3949 static int b43legacy_suspend(struct ssb_device *dev, pm_message_t state) b43legacy_suspend() argument
3951 struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); b43legacy_suspend()
3969 static int b43legacy_resume(struct ssb_device *dev) b43legacy_resume() argument
3971 struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); b43legacy_resume()
2570 find_wldev_for_phymode(struct b43legacy_wl *wl, unsigned int phymode, struct b43legacy_wldev **dev, bool *gmode) find_wldev_for_phymode() argument
/linux-4.4.14/include/asm-generic/
H A Dlibata-portmap.h4 #define ATA_PRIMARY_IRQ(dev) 14
5 #define ATA_SECONDARY_IRQ(dev) 15
H A Ddma-coherent.h9 int dma_alloc_from_coherent(struct device *dev, ssize_t size,
11 int dma_release_from_coherent(struct device *dev, int order, void *vaddr);
13 int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
19 int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
22 void dma_release_declared_memory(struct device *dev);
24 void *dma_mark_declared_memory_occupied(struct device *dev,
27 #define dma_alloc_from_coherent(dev, size, handle, ret) (0)
28 #define dma_release_from_coherent(dev, order, vaddr) (0)
29 #define dma_mmap_from_coherent(dev, vma, vaddr, order, ret) (0)
/linux-4.4.14/drivers/media/usb/hdpvr/
H A Dhdpvr-control.c27 int hdpvr_config_call(struct hdpvr_device *dev, uint value, u8 valbuf) hdpvr_config_call() argument
32 mutex_lock(&dev->usbc_mutex); hdpvr_config_call()
33 dev->usbc_buf[0] = valbuf; hdpvr_config_call()
34 ret = usb_control_msg(dev->udev, hdpvr_config_call()
35 usb_sndctrlpipe(dev->udev, 0), hdpvr_config_call()
38 dev->usbc_buf, 1, 10000); hdpvr_config_call()
40 mutex_unlock(&dev->usbc_mutex); hdpvr_config_call()
41 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, hdpvr_config_call()
48 int get_video_info(struct hdpvr_device *dev, struct hdpvr_video_info *vidinf) get_video_info() argument
53 mutex_lock(&dev->usbc_mutex); get_video_info()
54 ret = usb_control_msg(dev->udev, get_video_info()
55 usb_rcvctrlpipe(dev->udev, 0), get_video_info()
58 dev->usbc_buf, 5, get_video_info()
63 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, get_video_info()
65 dev->usbc_buf); get_video_info()
67 mutex_unlock(&dev->usbc_mutex); get_video_info()
72 vidinf->width = dev->usbc_buf[1] << 8 | dev->usbc_buf[0]; get_video_info()
73 vidinf->height = dev->usbc_buf[3] << 8 | dev->usbc_buf[2]; get_video_info()
74 vidinf->fps = dev->usbc_buf[4]; get_video_info()
80 int get_input_lines_info(struct hdpvr_device *dev) get_input_lines_info() argument
84 mutex_lock(&dev->usbc_mutex); get_input_lines_info()
85 ret = usb_control_msg(dev->udev, get_input_lines_info()
86 usb_rcvctrlpipe(dev->udev, 0), get_input_lines_info()
89 dev->usbc_buf, 3, get_input_lines_info()
94 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, get_input_lines_info()
96 dev->usbc_buf); get_input_lines_info()
100 lines = dev->usbc_buf[1] << 8 | dev->usbc_buf[0]; get_input_lines_info()
101 mutex_unlock(&dev->usbc_mutex); get_input_lines_info()
106 int hdpvr_set_bitrate(struct hdpvr_device *dev) hdpvr_set_bitrate() argument
110 mutex_lock(&dev->usbc_mutex); hdpvr_set_bitrate()
111 memset(dev->usbc_buf, 0, 4); hdpvr_set_bitrate()
112 dev->usbc_buf[0] = dev->options.bitrate; hdpvr_set_bitrate()
113 dev->usbc_buf[2] = dev->options.peak_bitrate; hdpvr_set_bitrate()
115 ret = usb_control_msg(dev->udev, hdpvr_set_bitrate()
116 usb_sndctrlpipe(dev->udev, 0), hdpvr_set_bitrate()
118 CTRL_DEFAULT_INDEX, dev->usbc_buf, 4, 1000); hdpvr_set_bitrate()
119 mutex_unlock(&dev->usbc_mutex); hdpvr_set_bitrate()
124 int hdpvr_set_audio(struct hdpvr_device *dev, u8 input, hdpvr_set_audio() argument
129 if (dev->flags & HDPVR_FLAG_AC3_CAP) { hdpvr_set_audio()
130 mutex_lock(&dev->usbc_mutex); hdpvr_set_audio()
131 memset(dev->usbc_buf, 0, 2); hdpvr_set_audio()
132 dev->usbc_buf[0] = input; hdpvr_set_audio()
134 dev->usbc_buf[1] = 0; hdpvr_set_audio()
136 dev->usbc_buf[1] = 1; hdpvr_set_audio()
138 mutex_unlock(&dev->usbc_mutex); hdpvr_set_audio()
139 v4l2_err(&dev->v4l2_dev, "invalid audio codec %d\n", hdpvr_set_audio()
145 ret = usb_control_msg(dev->udev, hdpvr_set_audio()
146 usb_sndctrlpipe(dev->udev, 0), hdpvr_set_audio()
148 CTRL_DEFAULT_INDEX, dev->usbc_buf, 2, hdpvr_set_audio()
150 mutex_unlock(&dev->usbc_mutex); hdpvr_set_audio()
154 ret = hdpvr_config_call(dev, CTRL_AUDIO_INPUT_VALUE, input); hdpvr_set_audio()
159 int hdpvr_set_options(struct hdpvr_device *dev) hdpvr_set_options() argument
161 hdpvr_config_call(dev, CTRL_VIDEO_STD_TYPE, dev->options.video_std); hdpvr_set_options()
163 hdpvr_config_call(dev, CTRL_VIDEO_INPUT_VALUE, hdpvr_set_options()
164 dev->options.video_input+1); hdpvr_set_options()
166 hdpvr_set_audio(dev, dev->options.audio_input+1, hdpvr_set_options()
167 dev->options.audio_codec); hdpvr_set_options()
169 hdpvr_set_bitrate(dev); hdpvr_set_options()
170 hdpvr_config_call(dev, CTRL_BITRATE_MODE_VALUE, hdpvr_set_options()
171 dev->options.bitrate_mode); hdpvr_set_options()
172 hdpvr_config_call(dev, CTRL_GOP_MODE_VALUE, dev->options.gop_mode); hdpvr_set_options()
174 hdpvr_config_call(dev, CTRL_BRIGHTNESS, dev->options.brightness); hdpvr_set_options()
175 hdpvr_config_call(dev, CTRL_CONTRAST, dev->options.contrast); hdpvr_set_options()
176 hdpvr_config_call(dev, CTRL_HUE, dev->options.hue); hdpvr_set_options()
177 hdpvr_config_call(dev, CTRL_SATURATION, dev->options.saturation); hdpvr_set_options()
178 hdpvr_config_call(dev, CTRL_SHARPNESS, dev->options.sharpness); hdpvr_set_options()
H A Dhdpvr-core.c26 #include <media/v4l2-dev.h>
69 void hdpvr_delete(struct hdpvr_device *dev) hdpvr_delete() argument
71 hdpvr_free_buffers(dev); hdpvr_delete()
72 usb_put_dev(dev->udev); hdpvr_delete()
117 static int device_authorization(struct hdpvr_device *dev) device_authorization() argument
124 mutex_lock(&dev->usbc_mutex); device_authorization()
125 ret = usb_control_msg(dev->udev, device_authorization()
126 usb_rcvctrlpipe(dev->udev, 0), device_authorization()
129 dev->usbc_buf, 46, device_authorization()
132 v4l2_err(&dev->v4l2_dev, device_authorization()
138 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, device_authorization()
140 ret, dev->usbc_buf); device_authorization()
144 dev->fw_ver = dev->usbc_buf[1]; device_authorization()
146 v4l2_info(&dev->v4l2_dev, "firmware version 0x%x dated %s\n", device_authorization()
147 dev->fw_ver, &dev->usbc_buf[2]); device_authorization()
149 if (dev->fw_ver > 0x15) { device_authorization()
150 dev->options.brightness = 0x80; device_authorization()
151 dev->options.contrast = 0x40; device_authorization()
152 dev->options.hue = 0xf; device_authorization()
153 dev->options.saturation = 0x40; device_authorization()
154 dev->options.sharpness = 0x80; device_authorization()
157 switch (dev->fw_ver) { device_authorization()
159 dev->flags &= ~HDPVR_FLAG_AC3_CAP; device_authorization()
165 dev->flags |= HDPVR_FLAG_AC3_CAP; device_authorization()
168 v4l2_info(&dev->v4l2_dev, "untested firmware, the driver might" device_authorization()
170 if (dev->fw_ver >= HDPVR_FIRMWARE_VERSION_AC3) device_authorization()
171 dev->flags |= HDPVR_FLAG_AC3_CAP; device_authorization()
173 dev->flags &= ~HDPVR_FLAG_AC3_CAP; device_authorization()
176 response = dev->usbc_buf+38; device_authorization()
178 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, "challenge: %8ph\n", device_authorization()
183 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, " response: %8ph\n", device_authorization()
188 ret = usb_control_msg(dev->udev, device_authorization()
189 usb_sndctrlpipe(dev->udev, 0), device_authorization()
194 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, device_authorization()
199 mutex_unlock(&dev->usbc_mutex); device_authorization()
203 static int hdpvr_device_init(struct hdpvr_device *dev) hdpvr_device_init() argument
208 if (device_authorization(dev)) hdpvr_device_init()
212 hdpvr_set_options(dev); hdpvr_device_init()
215 mutex_lock(&dev->usbc_mutex); hdpvr_device_init()
216 buf = dev->usbc_buf; hdpvr_device_init()
218 ret = usb_control_msg(dev->udev, hdpvr_device_init()
219 usb_sndctrlpipe(dev->udev, 0), hdpvr_device_init()
224 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, hdpvr_device_init()
226 mutex_unlock(&dev->usbc_mutex); hdpvr_device_init()
229 mutex_lock(&dev->usbc_mutex); hdpvr_device_init()
231 ret = usb_control_msg(dev->udev, hdpvr_device_init()
232 usb_sndctrlpipe(dev->udev, 0), hdpvr_device_init()
235 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, hdpvr_device_init()
240 ret = usb_control_msg(dev->udev, hdpvr_device_init()
241 usb_sndctrlpipe(dev->udev, 0), hdpvr_device_init()
244 v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev, hdpvr_device_init()
246 mutex_unlock(&dev->usbc_mutex); hdpvr_device_init()
248 dev->status = STATUS_IDLE; hdpvr_device_init()
273 struct hdpvr_device *dev; hdpvr_probe() local
282 dev = kzalloc(sizeof(*dev), GFP_KERNEL); hdpvr_probe()
283 if (!dev) { hdpvr_probe()
284 dev_err(&interface->dev, "Out of memory\n"); hdpvr_probe()
290 INIT_LIST_HEAD(&dev->free_buff_list); hdpvr_probe()
291 INIT_LIST_HEAD(&dev->rec_buff_list); hdpvr_probe()
294 if (v4l2_device_register(&interface->dev, &dev->v4l2_dev)) { hdpvr_probe()
295 dev_err(&interface->dev, "v4l2_device_register failed\n"); hdpvr_probe()
299 mutex_init(&dev->io_mutex); hdpvr_probe()
300 mutex_init(&dev->i2c_mutex); hdpvr_probe()
301 mutex_init(&dev->usbc_mutex); hdpvr_probe()
302 dev->usbc_buf = kmalloc(64, GFP_KERNEL); hdpvr_probe()
303 if (!dev->usbc_buf) { hdpvr_probe()
304 v4l2_err(&dev->v4l2_dev, "Out of memory\n"); hdpvr_probe()
308 init_waitqueue_head(&dev->wait_buffer); hdpvr_probe()
309 init_waitqueue_head(&dev->wait_data); hdpvr_probe()
311 dev->workqueue = create_singlethread_workqueue("hdpvr_buffer"); hdpvr_probe()
312 if (!dev->workqueue) hdpvr_probe()
315 dev->options = hdpvr_default_options; hdpvr_probe()
318 dev->options.video_input = default_video_input; hdpvr_probe()
321 dev->options.audio_input = default_audio_input; hdpvr_probe()
323 dev->options.audio_codec = hdpvr_probe()
327 dev->udev = usb_get_dev(interface_to_usbdev(interface)); hdpvr_probe()
335 if (!dev->bulk_in_endpointAddr && hdpvr_probe()
340 dev->bulk_in_size = buffer_size; hdpvr_probe()
341 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress; hdpvr_probe()
345 if (!dev->bulk_in_endpointAddr) { hdpvr_probe()
346 v4l2_err(&dev->v4l2_dev, "Could not find bulk-in endpoint\n"); hdpvr_probe()
351 if (hdpvr_device_init(dev)) { hdpvr_probe()
352 v4l2_err(&dev->v4l2_dev, "device init failed\n"); hdpvr_probe()
356 mutex_lock(&dev->io_mutex); hdpvr_probe()
357 if (hdpvr_alloc_buffers(dev, NUM_BUFFERS)) { hdpvr_probe()
358 mutex_unlock(&dev->io_mutex); hdpvr_probe()
359 v4l2_err(&dev->v4l2_dev, hdpvr_probe()
363 mutex_unlock(&dev->io_mutex); hdpvr_probe()
366 retval = hdpvr_register_i2c_adapter(dev); hdpvr_probe()
368 v4l2_err(&dev->v4l2_dev, "i2c adapter register failed\n"); hdpvr_probe()
372 client = hdpvr_register_ir_rx_i2c(dev); hdpvr_probe()
374 v4l2_err(&dev->v4l2_dev, "i2c IR RX device register failed\n"); hdpvr_probe()
379 client = hdpvr_register_ir_tx_i2c(dev); hdpvr_probe()
381 v4l2_err(&dev->v4l2_dev, "i2c IR TX device register failed\n"); hdpvr_probe()
387 retval = hdpvr_register_videodev(dev, &interface->dev, hdpvr_probe()
390 v4l2_err(&dev->v4l2_dev, "registering videodev failed\n"); hdpvr_probe()
395 v4l2_info(&dev->v4l2_dev, "device now attached to %s\n", hdpvr_probe()
396 video_device_node_name(&dev->video_dev)); hdpvr_probe()
401 i2c_del_adapter(&dev->i2c_adapter); hdpvr_probe()
404 if (dev) { hdpvr_probe()
406 if (dev->workqueue) hdpvr_probe()
407 destroy_workqueue(dev->workqueue); hdpvr_probe()
409 hdpvr_delete(dev); hdpvr_probe()
416 struct hdpvr_device *dev = to_hdpvr_dev(usb_get_intfdata(interface)); hdpvr_disconnect() local
418 v4l2_info(&dev->v4l2_dev, "device %s disconnected\n", hdpvr_disconnect()
419 video_device_node_name(&dev->video_dev)); hdpvr_disconnect()
421 mutex_lock(&dev->io_mutex); hdpvr_disconnect()
422 dev->status = STATUS_DISCONNECTED; hdpvr_disconnect()
423 wake_up_interruptible(&dev->wait_data); hdpvr_disconnect()
424 wake_up_interruptible(&dev->wait_buffer); hdpvr_disconnect()
425 mutex_unlock(&dev->io_mutex); hdpvr_disconnect()
426 v4l2_device_disconnect(&dev->v4l2_dev); hdpvr_disconnect()
428 flush_workqueue(dev->workqueue); hdpvr_disconnect()
429 mutex_lock(&dev->io_mutex); hdpvr_disconnect()
430 hdpvr_cancel_queue(dev); hdpvr_disconnect()
431 mutex_unlock(&dev->io_mutex); hdpvr_disconnect()
433 i2c_del_adapter(&dev->i2c_adapter); hdpvr_disconnect()
435 video_unregister_device(&dev->video_dev); hdpvr_disconnect()
H A Dhdpvr-i2c.c35 struct i2c_client *hdpvr_register_ir_tx_i2c(struct hdpvr_device *dev) hdpvr_register_ir_tx_i2c() argument
37 struct IR_i2c_init_data *init_data = &dev->ir_i2c_init_data; hdpvr_register_ir_tx_i2c()
45 return i2c_new_device(&dev->i2c_adapter, &hdpvr_ir_tx_i2c_board_info); hdpvr_register_ir_tx_i2c()
48 struct i2c_client *hdpvr_register_ir_rx_i2c(struct hdpvr_device *dev) hdpvr_register_ir_rx_i2c() argument
50 struct IR_i2c_init_data *init_data = &dev->ir_i2c_init_data; hdpvr_register_ir_rx_i2c()
63 return i2c_new_device(&dev->i2c_adapter, &hdpvr_ir_rx_i2c_board_info); hdpvr_register_ir_rx_i2c()
66 static int hdpvr_i2c_read(struct hdpvr_device *dev, int bus, hdpvr_i2c_read() argument
72 if ((len > sizeof(dev->i2c_buf)) || (wlen > sizeof(dev->i2c_buf))) hdpvr_i2c_read()
76 memcpy(&dev->i2c_buf, wdata, wlen); hdpvr_i2c_read()
77 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), hdpvr_i2c_read()
79 (bus << 8) | addr, 0, &dev->i2c_buf, hdpvr_i2c_read()
85 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), hdpvr_i2c_read()
87 (bus << 8) | addr, 0, &dev->i2c_buf, len, 1000); hdpvr_i2c_read()
90 memcpy(data, &dev->i2c_buf, len); hdpvr_i2c_read()
98 static int hdpvr_i2c_write(struct hdpvr_device *dev, int bus, hdpvr_i2c_write() argument
103 if (len > sizeof(dev->i2c_buf)) hdpvr_i2c_write()
106 memcpy(&dev->i2c_buf, data, len); hdpvr_i2c_write()
107 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), hdpvr_i2c_write()
109 (bus << 8) | addr, 0, &dev->i2c_buf, len, 1000); hdpvr_i2c_write()
114 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), hdpvr_i2c_write()
116 0, 0, &dev->i2c_buf, 2, 1000); hdpvr_i2c_write()
118 if ((ret == 2) && (dev->i2c_buf[1] == (len - 1))) hdpvr_i2c_write()
129 struct hdpvr_device *dev = i2c_get_adapdata(i2c_adapter); hdpvr_transfer() local
135 mutex_lock(&dev->i2c_mutex); hdpvr_transfer()
141 retval = hdpvr_i2c_read(dev, 1, addr, NULL, 0, hdpvr_transfer()
144 retval = hdpvr_i2c_write(dev, 1, addr, msgs[0].buf, hdpvr_transfer()
148 v4l2_warn(&dev->v4l2_dev, "refusing 2-phase i2c xfer " hdpvr_transfer()
155 v4l2_warn(&dev->v4l2_dev, "refusing complex xfer with " hdpvr_transfer()
166 retval = hdpvr_i2c_read(dev, 1, addr, msgs[0].buf, msgs[0].len, hdpvr_transfer()
169 v4l2_warn(&dev->v4l2_dev, "refusing %d-phase i2c xfer\n", num); hdpvr_transfer()
173 mutex_unlock(&dev->i2c_mutex); hdpvr_transfer()
194 static int hdpvr_activate_ir(struct hdpvr_device *dev) hdpvr_activate_ir() argument
198 mutex_lock(&dev->i2c_mutex); hdpvr_activate_ir()
200 hdpvr_i2c_read(dev, 0, 0x54, NULL, 0, buffer, 1); hdpvr_activate_ir()
204 hdpvr_i2c_write(dev, 1, 0x54, buffer, 2); hdpvr_activate_ir()
207 hdpvr_i2c_write(dev, 1, 0x54, buffer, 2); hdpvr_activate_ir()
209 mutex_unlock(&dev->i2c_mutex); hdpvr_activate_ir()
214 int hdpvr_register_i2c_adapter(struct hdpvr_device *dev) hdpvr_register_i2c_adapter() argument
218 hdpvr_activate_ir(dev); hdpvr_register_i2c_adapter()
220 dev->i2c_adapter = hdpvr_i2c_adapter_template; hdpvr_register_i2c_adapter()
221 dev->i2c_adapter.dev.parent = &dev->udev->dev; hdpvr_register_i2c_adapter()
223 i2c_set_adapdata(&dev->i2c_adapter, dev); hdpvr_register_i2c_adapter()
225 retval = i2c_add_adapter(&dev->i2c_adapter); hdpvr_register_i2c_adapter()
/linux-4.4.14/drivers/mtd/nand/
H A Dr852.c34 static inline uint8_t r852_read_reg(struct r852_device *dev, int address) r852_read_reg() argument
36 uint8_t reg = readb(dev->mmio + address); r852_read_reg()
41 static inline void r852_write_reg(struct r852_device *dev, r852_write_reg() argument
44 writeb(value, dev->mmio + address); r852_write_reg()
50 static inline uint32_t r852_read_reg_dword(struct r852_device *dev, int address) r852_read_reg_dword() argument
52 uint32_t reg = le32_to_cpu(readl(dev->mmio + address)); r852_read_reg_dword()
57 static inline void r852_write_reg_dword(struct r852_device *dev, r852_write_reg_dword() argument
60 writel(cpu_to_le32(value), dev->mmio + address); r852_write_reg_dword()
73 static void r852_dma_test(struct r852_device *dev) r852_dma_test() argument
75 dev->dma_usable = (r852_read_reg(dev, R852_DMA_CAP) & r852_dma_test()
78 if (!dev->dma_usable) r852_dma_test()
83 dev->dma_usable = 0; r852_dma_test()
89 * Expects dev->dma_dir and dev->dma_state be set
91 static void r852_dma_enable(struct r852_device *dev) r852_dma_enable() argument
96 dma_reg = r852_read_reg_dword(dev, R852_DMA_SETTINGS); r852_dma_enable()
99 if (dev->dma_dir) r852_dma_enable()
102 if (dev->dma_state == DMA_INTERNAL) { r852_dma_enable()
106 r852_write_reg_dword(dev, R852_DMA_ADDR, r852_dma_enable()
107 cpu_to_le32(dev->phys_bounce_buffer)); r852_dma_enable()
110 r852_write_reg_dword(dev, R852_DMA_ADDR, r852_dma_enable()
111 cpu_to_le32(dev->phys_dma_addr)); r852_dma_enable()
115 r852_read_reg_dword(dev, R852_DMA_ADDR); r852_dma_enable()
117 r852_write_reg_dword(dev, R852_DMA_SETTINGS, dma_reg); r852_dma_enable()
120 dma_irq_reg = r852_read_reg_dword(dev, R852_DMA_IRQ_ENABLE); r852_dma_enable()
121 r852_write_reg_dword(dev, R852_DMA_IRQ_ENABLE, r852_dma_enable()
132 static void r852_dma_done(struct r852_device *dev, int error) r852_dma_done() argument
134 WARN_ON(dev->dma_stage == 0); r852_dma_done()
136 r852_write_reg_dword(dev, R852_DMA_IRQ_STA, r852_dma_done()
137 r852_read_reg_dword(dev, R852_DMA_IRQ_STA)); r852_dma_done()
139 r852_write_reg_dword(dev, R852_DMA_SETTINGS, 0); r852_dma_done()
140 r852_write_reg_dword(dev, R852_DMA_IRQ_ENABLE, 0); r852_dma_done()
143 r852_write_reg_dword(dev, R852_DMA_ADDR, r852_dma_done()
144 cpu_to_le32(dev->phys_bounce_buffer)); r852_dma_done()
145 r852_read_reg_dword(dev, R852_DMA_ADDR); r852_dma_done()
147 dev->dma_error = error; r852_dma_done()
148 dev->dma_stage = 0; r852_dma_done()
150 if (dev->phys_dma_addr && dev->phys_dma_addr != dev->phys_bounce_buffer) r852_dma_done()
151 pci_unmap_single(dev->pci_dev, dev->phys_dma_addr, R852_DMA_LEN, r852_dma_done()
152 dev->dma_dir ? PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE); r852_dma_done()
158 static int r852_dma_wait(struct r852_device *dev) r852_dma_wait() argument
160 long timeout = wait_for_completion_timeout(&dev->dma_done, r852_dma_wait()
173 static void r852_do_dma(struct r852_device *dev, uint8_t *buf, int do_read) r852_do_dma() argument
179 dev->dma_error = 0; r852_do_dma()
182 dev->dma_dir = do_read; r852_do_dma()
183 dev->dma_stage = 1; r852_do_dma()
184 reinit_completion(&dev->dma_done); r852_do_dma()
190 dev->dma_state = do_read ? DMA_INTERNAL : DMA_MEMORY; r852_do_dma()
197 dev->phys_dma_addr = pci_map_single(dev->pci_dev, (void *)buf, r852_do_dma()
201 if (pci_dma_mapping_error(dev->pci_dev, dev->phys_dma_addr)) r852_do_dma()
207 dev->phys_dma_addr = dev->phys_bounce_buffer; r852_do_dma()
209 memcpy(dev->bounce_buffer, buf, R852_DMA_LEN); r852_do_dma()
213 spin_lock_irqsave(&dev->irqlock, flags); r852_do_dma()
214 r852_dma_enable(dev); r852_do_dma()
215 spin_unlock_irqrestore(&dev->irqlock, flags); r852_do_dma()
218 error = r852_dma_wait(dev); r852_do_dma()
221 r852_dma_done(dev, error); r852_do_dma()
226 memcpy((void *)buf, dev->bounce_buffer, R852_DMA_LEN); r852_do_dma()
234 struct r852_device *dev = r852_get_dev(mtd); r852_write_buf() local
238 if (dev->card_unstable) r852_write_buf()
242 if (len == R852_DMA_LEN && dev->dma_usable) { r852_write_buf()
243 r852_do_dma(dev, (uint8_t *)buf, 0); r852_write_buf()
250 r852_write_reg_dword(dev, R852_DATALINE, reg); r852_write_buf()
258 r852_write_reg(dev, R852_DATALINE, *buf++); r852_write_buf()
268 struct r852_device *dev = r852_get_dev(mtd); r852_read_buf() local
271 if (dev->card_unstable) { r852_read_buf()
279 if (len == R852_DMA_LEN && dev->dma_usable) { r852_read_buf()
280 r852_do_dma(dev, buf, 1); r852_read_buf()
287 reg = r852_read_reg_dword(dev, R852_DATALINE); r852_read_buf()
297 *buf++ = r852_read_reg(dev, R852_DATALINE); r852_read_buf()
305 struct r852_device *dev = r852_get_dev(mtd); r852_read_byte() local
308 if (dev->card_unstable) r852_read_byte()
311 return r852_read_reg(dev, R852_DATALINE); r852_read_byte()
319 struct r852_device *dev = r852_get_dev(mtd); r852_cmdctl() local
321 if (dev->card_unstable) r852_cmdctl()
326 dev->ctlreg &= ~(R852_CTL_DATA | R852_CTL_COMMAND | r852_cmdctl()
330 dev->ctlreg |= R852_CTL_DATA; r852_cmdctl()
333 dev->ctlreg |= R852_CTL_COMMAND; r852_cmdctl()
336 dev->ctlreg |= (R852_CTL_CARDENABLE | R852_CTL_ON); r852_cmdctl()
338 dev->ctlreg &= ~R852_CTL_WRITE; r852_cmdctl()
342 dev->ctlreg |= R852_CTL_WRITE; r852_cmdctl()
344 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_cmdctl()
349 if (dat == NAND_CMD_SEQIN && (dev->ctlreg & R852_CTL_COMMAND)) { r852_cmdctl()
350 dev->ctlreg |= R852_CTL_WRITE; r852_cmdctl()
351 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_cmdctl()
355 r852_write_reg(dev, R852_DATALINE, dat); r852_cmdctl()
364 struct r852_device *dev = chip->priv; r852_wait() local
380 if (dev->dma_error) { r852_wait()
382 dev->dma_error = 0; r852_wait()
393 struct r852_device *dev = r852_get_dev(mtd); r852_ready() local
394 return !(r852_read_reg(dev, R852_CARD_STA) & R852_CARD_STA_BUSY); r852_ready()
404 struct r852_device *dev = r852_get_dev(mtd); r852_ecc_hwctl() local
406 if (dev->card_unstable) r852_ecc_hwctl()
413 dev->ctlreg |= R852_CTL_ECC_ENABLE; r852_ecc_hwctl()
416 r852_write_reg(dev, R852_CTL, r852_ecc_hwctl()
417 dev->ctlreg | R852_CTL_ECC_ACCESS); r852_ecc_hwctl()
419 r852_read_reg_dword(dev, R852_DATALINE); r852_ecc_hwctl()
420 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_ecc_hwctl()
425 dev->ctlreg &= ~R852_CTL_ECC_ENABLE; r852_ecc_hwctl()
426 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_ecc_hwctl()
437 struct r852_device *dev = r852_get_dev(mtd); r852_ecc_calculate() local
441 if (dev->card_unstable) r852_ecc_calculate()
444 dev->ctlreg &= ~R852_CTL_ECC_ENABLE; r852_ecc_calculate()
445 r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); r852_ecc_calculate()
447 ecc1 = r852_read_reg_dword(dev, R852_DATALINE); r852_ecc_calculate()
448 ecc2 = r852_read_reg_dword(dev, R852_DATALINE); r852_ecc_calculate()
458 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_ecc_calculate()
473 struct r852_device *dev = r852_get_dev(mtd); r852_ecc_correct() local
475 if (dev->card_unstable) r852_ecc_correct()
478 if (dev->dma_error) { r852_ecc_correct()
479 dev->dma_error = 0; r852_ecc_correct()
483 r852_write_reg(dev, R852_CTL, dev->ctlreg | R852_CTL_ECC_ACCESS); r852_ecc_correct()
484 ecc_reg = r852_read_reg_dword(dev, R852_DATALINE); r852_ecc_correct()
485 r852_write_reg(dev, R852_CTL, dev->ctlreg); r852_ecc_correct()
534 static void r852_engine_enable(struct r852_device *dev) r852_engine_enable() argument
536 if (r852_read_reg_dword(dev, R852_HW) & R852_HW_UNKNOWN) { r852_engine_enable()
537 r852_write_reg(dev, R852_CTL, R852_CTL_RESET | R852_CTL_ON); r852_engine_enable()
538 r852_write_reg_dword(dev, R852_HW, R852_HW_ENABLED); r852_engine_enable()
540 r852_write_reg_dword(dev, R852_HW, R852_HW_ENABLED); r852_engine_enable()
541 r852_write_reg(dev, R852_CTL, R852_CTL_RESET | R852_CTL_ON); r852_engine_enable()
544 r852_write_reg(dev, R852_CTL, 0); r852_engine_enable()
552 static void r852_engine_disable(struct r852_device *dev) r852_engine_disable() argument
554 r852_write_reg_dword(dev, R852_HW, 0); r852_engine_disable()
555 r852_write_reg(dev, R852_CTL, R852_CTL_RESET); r852_engine_disable()
562 static void r852_card_update_present(struct r852_device *dev) r852_card_update_present() argument
567 spin_lock_irqsave(&dev->irqlock, flags); r852_card_update_present()
568 reg = r852_read_reg(dev, R852_CARD_STA); r852_card_update_present()
569 dev->card_detected = !!(reg & R852_CARD_STA_PRESENT); r852_card_update_present()
570 spin_unlock_irqrestore(&dev->irqlock, flags); r852_card_update_present()
577 static void r852_update_card_detect(struct r852_device *dev) r852_update_card_detect() argument
579 int card_detect_reg = r852_read_reg(dev, R852_CARD_IRQ_ENABLE); r852_update_card_detect()
580 dev->card_unstable = 0; r852_update_card_detect()
585 card_detect_reg |= dev->card_detected ? r852_update_card_detect()
588 r852_write_reg(dev, R852_CARD_IRQ_ENABLE, card_detect_reg); r852_update_card_detect()
594 struct mtd_info *mtd = container_of(sys_dev, struct mtd_info, dev); r852_media_type_show()
595 struct r852_device *dev = r852_get_dev(mtd); r852_media_type_show() local
596 char *data = dev->sm ? "smartmedia" : "xd"; r852_media_type_show()
606 static void r852_update_media_status(struct r852_device *dev) r852_update_media_status() argument
612 spin_lock_irqsave(&dev->irqlock, flags); r852_update_media_status()
613 if (!dev->card_detected) { r852_update_media_status()
615 spin_unlock_irqrestore(&dev->irqlock, flags); r852_update_media_status()
619 readonly = r852_read_reg(dev, R852_CARD_STA) & R852_CARD_STA_RO; r852_update_media_status()
620 reg = r852_read_reg(dev, R852_DMA_CAP); r852_update_media_status()
621 dev->sm = (reg & (R852_DMA1 | R852_DMA2)) && (reg & R852_SMBIT); r852_update_media_status()
624 dev->sm ? "SmartMedia" : "xD", r852_update_media_status()
627 dev->readonly = readonly; r852_update_media_status()
628 spin_unlock_irqrestore(&dev->irqlock, flags); r852_update_media_status()
635 static int r852_register_nand_device(struct r852_device *dev) r852_register_nand_device() argument
637 dev->mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL); r852_register_nand_device()
639 if (!dev->mtd) r852_register_nand_device()
642 WARN_ON(dev->card_registred); r852_register_nand_device()
644 dev->mtd->priv = dev->chip; r852_register_nand_device()
645 dev->mtd->dev.parent = &dev->pci_dev->dev; r852_register_nand_device()
647 if (dev->readonly) r852_register_nand_device()
648 dev->chip->options |= NAND_ROM; r852_register_nand_device()
650 r852_engine_enable(dev); r852_register_nand_device()
652 if (sm_register_device(dev->mtd, dev->sm)) r852_register_nand_device()
655 if (device_create_file(&dev->mtd->dev, &dev_attr_media_type)) { r852_register_nand_device()
660 dev->card_registred = 1; r852_register_nand_device()
663 nand_release(dev->mtd); r852_register_nand_device()
665 kfree(dev->mtd); r852_register_nand_device()
668 dev->card_detected = 0; r852_register_nand_device()
676 static void r852_unregister_nand_device(struct r852_device *dev) r852_unregister_nand_device() argument
678 if (!dev->card_registred) r852_unregister_nand_device()
681 device_remove_file(&dev->mtd->dev, &dev_attr_media_type); r852_unregister_nand_device()
682 nand_release(dev->mtd); r852_unregister_nand_device()
683 r852_engine_disable(dev); r852_unregister_nand_device()
684 dev->card_registred = 0; r852_unregister_nand_device()
685 kfree(dev->mtd); r852_unregister_nand_device()
686 dev->mtd = NULL; r852_unregister_nand_device()
692 struct r852_device *dev = r852_card_detect_work() local
695 r852_card_update_present(dev); r852_card_detect_work()
696 r852_update_card_detect(dev); r852_card_detect_work()
697 dev->card_unstable = 0; r852_card_detect_work()
700 if (dev->card_detected == dev->card_registred) r852_card_detect_work()
704 r852_update_media_status(dev); r852_card_detect_work()
707 if (dev->card_detected) r852_card_detect_work()
708 r852_register_nand_device(dev); r852_card_detect_work()
710 r852_unregister_nand_device(dev); r852_card_detect_work()
712 r852_update_card_detect(dev); r852_card_detect_work()
716 static void r852_disable_irqs(struct r852_device *dev) r852_disable_irqs() argument
719 reg = r852_read_reg(dev, R852_CARD_IRQ_ENABLE); r852_disable_irqs()
720 r852_write_reg(dev, R852_CARD_IRQ_ENABLE, reg & ~R852_CARD_IRQ_MASK); r852_disable_irqs()
722 reg = r852_read_reg_dword(dev, R852_DMA_IRQ_ENABLE); r852_disable_irqs()
723 r852_write_reg_dword(dev, R852_DMA_IRQ_ENABLE, r852_disable_irqs()
726 r852_write_reg(dev, R852_CARD_IRQ_STA, R852_CARD_IRQ_MASK); r852_disable_irqs()
727 r852_write_reg_dword(dev, R852_DMA_IRQ_STA, R852_DMA_IRQ_MASK); r852_disable_irqs()
733 struct r852_device *dev = (struct r852_device *)data; r852_irq() local
739 spin_lock_irqsave(&dev->irqlock, flags); r852_irq()
742 card_status = r852_read_reg(dev, R852_CARD_IRQ_STA); r852_irq()
743 r852_write_reg(dev, R852_CARD_IRQ_STA, card_status); r852_irq()
748 dev->card_detected = !!(card_status & R852_CARD_IRQ_INSERT); r852_irq()
752 WARN_ON(dev->card_unstable); r852_irq()
756 r852_disable_irqs(dev); r852_irq()
758 if (dev->card_unstable) r852_irq()
762 dev->card_unstable = 1; r852_irq()
763 queue_delayed_work(dev->card_workqueue, r852_irq()
764 &dev->card_detect_work, msecs_to_jiffies(100)); r852_irq()
770 dma_status = r852_read_reg_dword(dev, R852_DMA_IRQ_STA); r852_irq()
771 r852_write_reg_dword(dev, R852_DMA_IRQ_STA, dma_status); r852_irq()
779 r852_dma_done(dev, -EIO); r852_irq()
780 complete(&dev->dma_done); r852_irq()
785 WARN_ON_ONCE(dev->dma_stage == 0); r852_irq()
787 if (dev->dma_stage == 0) r852_irq()
791 if (dev->dma_state == DMA_INTERNAL && r852_irq()
794 dev->dma_state = DMA_MEMORY; r852_irq()
795 dev->dma_stage++; r852_irq()
799 if (dev->dma_state == DMA_MEMORY && r852_irq()
801 dev->dma_state = DMA_INTERNAL; r852_irq()
802 dev->dma_stage++; r852_irq()
806 if (dev->dma_stage == 2) r852_irq()
807 r852_dma_enable(dev); r852_irq()
810 if (dev->dma_stage == 3) { r852_irq()
811 r852_dma_done(dev, 0); r852_irq()
812 complete(&dev->dma_done); r852_irq()
825 spin_unlock_irqrestore(&dev->irqlock, flags); r852_irq()
833 struct r852_device *dev; r852_probe() local
883 dev = kzalloc(sizeof(struct r852_device), GFP_KERNEL); r852_probe()
885 if (!dev) r852_probe()
888 chip->priv = dev; r852_probe()
889 dev->chip = chip; r852_probe()
890 dev->pci_dev = pci_dev; r852_probe()
891 pci_set_drvdata(pci_dev, dev); r852_probe()
893 dev->bounce_buffer = pci_alloc_consistent(pci_dev, R852_DMA_LEN, r852_probe()
894 &dev->phys_bounce_buffer); r852_probe()
896 if (!dev->bounce_buffer) r852_probe()
901 dev->mmio = pci_ioremap_bar(pci_dev, 0); r852_probe()
903 if (!dev->mmio) r852_probe()
907 dev->tmp_buffer = kzalloc(SM_SECTOR_SIZE, GFP_KERNEL); r852_probe()
909 if (!dev->tmp_buffer) r852_probe()
912 init_completion(&dev->dma_done); r852_probe()
914 dev->card_workqueue = create_freezable_workqueue(DRV_NAME); r852_probe()
916 if (!dev->card_workqueue) r852_probe()
919 INIT_DELAYED_WORK(&dev->card_detect_work, r852_card_detect_work); r852_probe()
922 r852_engine_disable(dev); r852_probe()
923 r852_disable_irqs(dev); r852_probe()
925 r852_dma_test(dev); r852_probe()
927 dev->irq = pci_dev->irq; r852_probe()
928 spin_lock_init(&dev->irqlock); r852_probe()
930 dev->card_detected = 0; r852_probe()
931 r852_card_update_present(dev); r852_probe()
936 DRV_NAME, dev)) r852_probe()
940 queue_delayed_work(dev->card_workqueue, r852_probe()
941 &dev->card_detect_work, 0); r852_probe()
948 destroy_workqueue(dev->card_workqueue); r852_probe()
950 kfree(dev->tmp_buffer); r852_probe()
952 pci_iounmap(pci_dev, dev->mmio); r852_probe()
955 dev->bounce_buffer, dev->phys_bounce_buffer); r852_probe()
957 kfree(dev); r852_probe()
971 struct r852_device *dev = pci_get_drvdata(pci_dev); r852_remove() local
975 cancel_delayed_work_sync(&dev->card_detect_work); r852_remove()
976 destroy_workqueue(dev->card_workqueue); r852_remove()
979 r852_unregister_nand_device(dev); r852_remove()
982 r852_disable_irqs(dev); r852_remove()
983 synchronize_irq(dev->irq); r852_remove()
984 free_irq(dev->irq, dev); r852_remove()
987 kfree(dev->tmp_buffer); r852_remove()
988 pci_iounmap(pci_dev, dev->mmio); r852_remove()
990 dev->bounce_buffer, dev->phys_bounce_buffer); r852_remove()
992 kfree(dev->chip); r852_remove()
993 kfree(dev); r852_remove()
1002 struct r852_device *dev = pci_get_drvdata(pci_dev); r852_shutdown() local
1004 cancel_delayed_work_sync(&dev->card_detect_work); r852_shutdown()
1005 r852_disable_irqs(dev); r852_shutdown()
1006 synchronize_irq(dev->irq); r852_shutdown()
1013 struct r852_device *dev = pci_get_drvdata(to_pci_dev(device)); r852_suspend() local
1015 if (dev->ctlreg & R852_CTL_CARDENABLE) r852_suspend()
1019 cancel_delayed_work_sync(&dev->card_detect_work); r852_suspend()
1022 r852_disable_irqs(dev); r852_suspend()
1023 r852_engine_disable(dev); r852_suspend()
1028 dev->card_unstable = 0; r852_suspend()
1034 struct r852_device *dev = pci_get_drvdata(to_pci_dev(device)); r852_resume() local
1036 r852_disable_irqs(dev); r852_resume()
1037 r852_card_update_present(dev); r852_resume()
1038 r852_engine_disable(dev); r852_resume()
1042 if (dev->card_detected != dev->card_registred) { r852_resume()
1044 dev->card_detected ? "added" : "removed"); r852_resume()
1046 queue_delayed_work(dev->card_workqueue, r852_resume()
1047 &dev->card_detect_work, msecs_to_jiffies(1000)); r852_resume()
1052 if (dev->card_registred) { r852_resume()
1053 r852_engine_enable(dev); r852_resume()
1054 dev->chip->select_chip(dev->mtd, 0); r852_resume()
1055 dev->chip->cmdfunc(dev->mtd, NAND_CMD_RESET, -1, -1); r852_resume()
1056 dev->chip->select_chip(dev->mtd, -1); r852_resume()
1060 r852_update_card_detect(dev); r852_resume()
/linux-4.4.14/drivers/misc/mei/
H A Dinit.c90 * @dev: the device structure
92 void mei_cancel_work(struct mei_device *dev) mei_cancel_work() argument
94 cancel_work_sync(&dev->init_work); mei_cancel_work()
95 cancel_work_sync(&dev->reset_work); mei_cancel_work()
97 cancel_delayed_work(&dev->timer_work); mei_cancel_work()
104 * @dev: the device structure
108 int mei_reset(struct mei_device *dev) mei_reset() argument
110 enum mei_dev_state state = dev->dev_state; mei_reset()
120 mei_fw_status_str(dev, fw_sts_str, MEI_FW_STATUS_STR_SZ); mei_reset()
121 dev_warn(dev->dev, "unexpected reset: dev_state = %s fw status = %s\n", mei_reset()
130 mei_hbm_idle(dev); mei_reset()
134 dev->dev_state = MEI_DEV_RESETTING; mei_reset()
136 dev->reset_count++; mei_reset()
137 if (dev->reset_count > MEI_MAX_CONSEC_RESET) { mei_reset()
138 dev_err(dev->dev, "reset: reached maximal consecutive resets: disabling the device\n"); mei_reset()
139 dev->dev_state = MEI_DEV_DISABLED; mei_reset()
143 ret = mei_hw_reset(dev, interrupts_enabled); mei_reset()
151 mei_cl_all_write_clear(dev); mei_reset()
153 mei_cl_all_disconnect(dev); mei_reset()
156 mei_cl_all_wakeup(dev); mei_reset()
159 dev_dbg(dev->dev, "remove iamthif and wd from the file list.\n"); mei_reset()
160 mei_cl_unlink(&dev->wd_cl); mei_reset()
161 mei_cl_unlink(&dev->iamthif_cl); mei_reset()
162 mei_amthif_reset_params(dev); mei_reset()
165 mei_hbm_reset(dev); mei_reset()
167 dev->rd_msg_hdr = 0; mei_reset()
168 dev->wd_pending = false; mei_reset()
171 dev_err(dev->dev, "hw_reset failed ret = %d\n", ret); mei_reset()
176 dev_dbg(dev->dev, "powering down: end of reset\n"); mei_reset()
177 dev->dev_state = MEI_DEV_DISABLED; mei_reset()
181 ret = mei_hw_start(dev); mei_reset()
183 dev_err(dev->dev, "hw_start failed ret = %d\n", ret); mei_reset()
187 dev_dbg(dev->dev, "link is established start sending messages.\n"); mei_reset()
189 dev->dev_state = MEI_DEV_INIT_CLIENTS; mei_reset()
190 ret = mei_hbm_start_req(dev); mei_reset()
192 dev_err(dev->dev, "hbm_start failed ret = %d\n", ret); mei_reset()
193 dev->dev_state = MEI_DEV_RESETTING; mei_reset()
204 * @dev: the device structure
208 int mei_start(struct mei_device *dev) mei_start() argument
212 mutex_lock(&dev->device_lock); mei_start()
215 mei_clear_interrupts(dev); mei_start()
217 mei_hw_config(dev); mei_start()
219 dev_dbg(dev->dev, "reset in start the mei device.\n"); mei_start()
221 dev->reset_count = 0; mei_start()
223 dev->dev_state = MEI_DEV_INITIALIZING; mei_start()
224 ret = mei_reset(dev); mei_start()
226 if (ret == -ENODEV || dev->dev_state == MEI_DEV_DISABLED) { mei_start()
227 dev_err(dev->dev, "reset failed ret = %d", ret); mei_start()
233 if (dev->dev_state == MEI_DEV_DISABLED) { mei_start()
234 dev_err(dev->dev, "reset failed"); mei_start()
238 if (mei_hbm_start_wait(dev)) { mei_start()
239 dev_err(dev->dev, "HBM haven't started"); mei_start()
243 if (!mei_host_is_ready(dev)) { mei_start()
244 dev_err(dev->dev, "host is not ready.\n"); mei_start()
248 if (!mei_hw_is_ready(dev)) { mei_start()
249 dev_err(dev->dev, "ME is not ready.\n"); mei_start()
253 if (!mei_hbm_version_is_supported(dev)) { mei_start()
254 dev_dbg(dev->dev, "MEI start failed.\n"); mei_start()
258 dev_dbg(dev->dev, "link layer has been established.\n"); mei_start()
260 mutex_unlock(&dev->device_lock); mei_start()
263 dev_err(dev->dev, "link layer initialization failed.\n"); mei_start()
264 dev->dev_state = MEI_DEV_DISABLED; mei_start()
265 mutex_unlock(&dev->device_lock); mei_start()
273 * @dev: the device structure
277 int mei_restart(struct mei_device *dev) mei_restart() argument
281 mutex_lock(&dev->device_lock); mei_restart()
283 mei_clear_interrupts(dev); mei_restart()
285 dev->dev_state = MEI_DEV_POWER_UP; mei_restart()
286 dev->reset_count = 0; mei_restart()
288 err = mei_reset(dev); mei_restart()
290 mutex_unlock(&dev->device_lock); mei_restart()
292 if (err == -ENODEV || dev->dev_state == MEI_DEV_DISABLED) { mei_restart()
293 dev_err(dev->dev, "device disabled = %d\n", err); mei_restart()
299 schedule_work(&dev->reset_work); mei_restart()
308 struct mei_device *dev = mei_reset_work() local
312 mutex_lock(&dev->device_lock); mei_reset_work()
314 ret = mei_reset(dev); mei_reset_work()
316 mutex_unlock(&dev->device_lock); mei_reset_work()
318 if (dev->dev_state == MEI_DEV_DISABLED) { mei_reset_work()
319 dev_err(dev->dev, "device disabled = %d\n", ret); mei_reset_work()
325 schedule_work(&dev->reset_work); mei_reset_work()
328 void mei_stop(struct mei_device *dev) mei_stop() argument
330 dev_dbg(dev->dev, "stopping the device.\n"); mei_stop()
332 mei_cl_bus_remove_devices(dev); mei_stop()
334 mei_cancel_work(dev); mei_stop()
336 mutex_lock(&dev->device_lock); mei_stop()
338 mei_wd_stop(dev); mei_stop()
340 dev->dev_state = MEI_DEV_POWER_DOWN; mei_stop()
341 mei_reset(dev); mei_stop()
343 dev->dev_state = MEI_DEV_DISABLED; mei_stop()
345 mutex_unlock(&dev->device_lock); mei_stop()
347 mei_watchdog_unregister(dev); mei_stop()
354 * @dev: the device structure
358 bool mei_write_is_idle(struct mei_device *dev) mei_write_is_idle() argument
360 bool idle = (dev->dev_state == MEI_DEV_ENABLED && mei_write_is_idle()
361 list_empty(&dev->ctrl_wr_list.list) && mei_write_is_idle()
362 list_empty(&dev->write_list.list) && mei_write_is_idle()
363 list_empty(&dev->write_waiting_list.list)); mei_write_is_idle()
365 dev_dbg(dev->dev, "write pg: is idle[%d] state=%s ctrl=%01d write=%01d wwait=%01d\n", mei_write_is_idle()
367 mei_dev_state_str(dev->dev_state), mei_write_is_idle()
368 list_empty(&dev->ctrl_wr_list.list), mei_write_is_idle()
369 list_empty(&dev->write_list.list), mei_write_is_idle()
370 list_empty(&dev->write_waiting_list.list)); mei_write_is_idle()
379 * @dev: the mei device
383 void mei_device_init(struct mei_device *dev, mei_device_init() argument
388 INIT_LIST_HEAD(&dev->file_list); mei_device_init()
389 INIT_LIST_HEAD(&dev->device_list); mei_device_init()
390 INIT_LIST_HEAD(&dev->me_clients); mei_device_init()
391 mutex_init(&dev->device_lock); mei_device_init()
392 init_rwsem(&dev->me_clients_rwsem); mei_device_init()
393 mutex_init(&dev->cl_bus_lock); mei_device_init()
394 init_waitqueue_head(&dev->wait_hw_ready); mei_device_init()
395 init_waitqueue_head(&dev->wait_pg); mei_device_init()
396 init_waitqueue_head(&dev->wait_hbm_start); mei_device_init()
397 init_waitqueue_head(&dev->wait_stop_wd); mei_device_init()
398 dev->dev_state = MEI_DEV_INITIALIZING; mei_device_init()
399 dev->reset_count = 0; mei_device_init()
401 mei_io_list_init(&dev->write_list); mei_device_init()
402 mei_io_list_init(&dev->write_waiting_list); mei_device_init()
403 mei_io_list_init(&dev->ctrl_wr_list); mei_device_init()
404 mei_io_list_init(&dev->ctrl_rd_list); mei_device_init()
406 INIT_DELAYED_WORK(&dev->timer_work, mei_timer); mei_device_init()
407 INIT_WORK(&dev->init_work, mei_host_client_init); mei_device_init()
408 INIT_WORK(&dev->reset_work, mei_reset_work); mei_device_init()
410 INIT_LIST_HEAD(&dev->wd_cl.link); mei_device_init()
411 INIT_LIST_HEAD(&dev->iamthif_cl.link); mei_device_init()
412 mei_io_list_init(&dev->amthif_cmd_list); mei_device_init()
413 mei_io_list_init(&dev->amthif_rd_complete_list); mei_device_init()
415 bitmap_zero(dev->host_clients_map, MEI_CLIENTS_MAX); mei_device_init()
416 dev->open_handle_count = 0; mei_device_init()
422 bitmap_set(dev->host_clients_map, 0, 1); mei_device_init()
424 dev->pg_event = MEI_PG_EVENT_IDLE; mei_device_init()
425 dev->ops = hw_ops; mei_device_init()
426 dev->dev = device; mei_device_init()
H A Dpci-txe.c47 static inline void mei_txe_set_pm_domain(struct mei_device *dev);
48 static inline void mei_txe_unset_pm_domain(struct mei_device *dev);
50 static inline void mei_txe_set_pm_domain(struct mei_device *dev) {} mei_txe_unset_pm_domain() argument
51 static inline void mei_txe_unset_pm_domain(struct mei_device *dev) {} mei_txe_unset_pm_domain() argument
75 struct mei_device *dev; mei_txe_probe() local
80 /* enable pci dev */ mei_txe_probe()
83 dev_err(&pdev->dev, "failed to enable pci device.\n"); mei_txe_probe()
91 dev_err(&pdev->dev, "failed to get pci regions.\n"); mei_txe_probe()
99 dev_err(&pdev->dev, "No suitable DMA available.\n"); mei_txe_probe()
104 /* allocates and initializes the mei dev structure */ mei_txe_probe()
105 dev = mei_txe_dev_init(pdev); mei_txe_probe()
106 if (!dev) { mei_txe_probe()
110 hw = to_txe_hw(dev); mei_txe_probe()
116 dev_err(&pdev->dev, "mapping I/O device memory failure.\n"); mei_txe_probe()
126 mei_clear_interrupts(dev); mei_txe_probe()
133 IRQF_ONESHOT, KBUILD_MODNAME, dev); mei_txe_probe()
138 IRQF_SHARED, KBUILD_MODNAME, dev); mei_txe_probe()
140 dev_err(&pdev->dev, "mei: request_threaded_irq failure. irq = %d\n", mei_txe_probe()
145 if (mei_start(dev)) { mei_txe_probe()
146 dev_err(&pdev->dev, "init hw failure.\n"); mei_txe_probe()
151 pm_runtime_set_autosuspend_delay(&pdev->dev, MEI_TXI_RPM_TIMEOUT); mei_txe_probe()
152 pm_runtime_use_autosuspend(&pdev->dev); mei_txe_probe()
154 err = mei_register(dev, &pdev->dev); mei_txe_probe()
158 pci_set_drvdata(pdev, dev); mei_txe_probe()
166 mei_txe_set_pm_domain(dev); mei_txe_probe()
168 pm_runtime_put_noidle(&pdev->dev); mei_txe_probe()
174 mei_cancel_work(dev); mei_txe_probe()
177 mei_disable_interrupts(dev); mei_txe_probe()
179 free_irq(pdev->irq, dev); mei_txe_probe()
185 kfree(dev); mei_txe_probe()
191 dev_err(&pdev->dev, "initialization failed.\n"); mei_txe_probe()
205 struct mei_device *dev; mei_txe_remove() local
208 dev = pci_get_drvdata(pdev); mei_txe_remove()
209 if (!dev) { mei_txe_remove()
210 dev_err(&pdev->dev, "mei: dev =NULL\n"); mei_txe_remove()
214 pm_runtime_get_noresume(&pdev->dev); mei_txe_remove()
216 hw = to_txe_hw(dev); mei_txe_remove()
218 mei_stop(dev); mei_txe_remove()
221 mei_txe_unset_pm_domain(dev); mei_txe_remove()
224 mei_disable_interrupts(dev); mei_txe_remove()
225 free_irq(pdev->irq, dev); mei_txe_remove()
232 mei_deregister(dev); mei_txe_remove()
234 kfree(dev); mei_txe_remove()
245 struct mei_device *dev = pci_get_drvdata(pdev); mei_txe_pci_suspend() local
247 if (!dev) mei_txe_pci_suspend()
250 dev_dbg(&pdev->dev, "suspend\n"); mei_txe_pci_suspend()
252 mei_stop(dev); mei_txe_pci_suspend()
254 mei_disable_interrupts(dev); mei_txe_pci_suspend()
256 free_irq(pdev->irq, dev); mei_txe_pci_suspend()
265 struct mei_device *dev; mei_txe_pci_resume() local
268 dev = pci_get_drvdata(pdev); mei_txe_pci_resume()
269 if (!dev) mei_txe_pci_resume()
274 mei_clear_interrupts(dev); mei_txe_pci_resume()
281 IRQF_ONESHOT, KBUILD_MODNAME, dev); mei_txe_pci_resume()
286 IRQF_SHARED, KBUILD_MODNAME, dev); mei_txe_pci_resume()
288 dev_err(&pdev->dev, "request_threaded_irq failed: irq = %d.\n", mei_txe_pci_resume()
293 err = mei_restart(dev); mei_txe_pci_resume()
303 struct mei_device *dev; mei_txe_pm_runtime_idle() local
305 dev_dbg(&pdev->dev, "rpm: txe: runtime_idle\n"); mei_txe_pm_runtime_idle()
307 dev = pci_get_drvdata(pdev); mei_txe_pm_runtime_idle()
308 if (!dev) mei_txe_pm_runtime_idle()
310 if (mei_write_is_idle(dev)) mei_txe_pm_runtime_idle()
318 struct mei_device *dev; mei_txe_pm_runtime_suspend() local
321 dev_dbg(&pdev->dev, "rpm: txe: runtime suspend\n"); mei_txe_pm_runtime_suspend()
323 dev = pci_get_drvdata(pdev); mei_txe_pm_runtime_suspend()
324 if (!dev) mei_txe_pm_runtime_suspend()
327 mutex_lock(&dev->device_lock); mei_txe_pm_runtime_suspend()
329 if (mei_write_is_idle(dev)) mei_txe_pm_runtime_suspend()
330 ret = mei_txe_aliveness_set_sync(dev, 0); mei_txe_pm_runtime_suspend()
342 mei_disable_interrupts(dev); mei_txe_pm_runtime_suspend()
344 dev_dbg(&pdev->dev, "rpm: txe: runtime suspend ret=%d\n", ret); mei_txe_pm_runtime_suspend()
346 mutex_unlock(&dev->device_lock); mei_txe_pm_runtime_suspend()
353 struct mei_device *dev; mei_txe_pm_runtime_resume() local
356 dev_dbg(&pdev->dev, "rpm: txe: runtime resume\n"); mei_txe_pm_runtime_resume()
358 dev = pci_get_drvdata(pdev); mei_txe_pm_runtime_resume()
359 if (!dev) mei_txe_pm_runtime_resume()
362 mutex_lock(&dev->device_lock); mei_txe_pm_runtime_resume()
364 mei_enable_interrupts(dev); mei_txe_pm_runtime_resume()
366 ret = mei_txe_aliveness_set_sync(dev, 1); mei_txe_pm_runtime_resume()
368 mutex_unlock(&dev->device_lock); mei_txe_pm_runtime_resume()
370 dev_dbg(&pdev->dev, "rpm: txe: runtime resume ret = %d\n", ret); mei_txe_pm_runtime_resume()
378 * @dev: mei_device
380 static inline void mei_txe_set_pm_domain(struct mei_device *dev) mei_txe_set_pm_domain() argument
382 struct pci_dev *pdev = to_pci_dev(dev->dev); mei_txe_set_pm_domain()
384 if (pdev->dev.bus && pdev->dev.bus->pm) { mei_txe_set_pm_domain()
385 dev->pg_domain.ops = *pdev->dev.bus->pm; mei_txe_set_pm_domain()
387 dev->pg_domain.ops.runtime_suspend = mei_txe_pm_runtime_suspend; mei_txe_set_pm_domain()
388 dev->pg_domain.ops.runtime_resume = mei_txe_pm_runtime_resume; mei_txe_set_pm_domain()
389 dev->pg_domain.ops.runtime_idle = mei_txe_pm_runtime_idle; mei_txe_set_pm_domain()
391 pdev->dev.pm_domain = &dev->pg_domain; mei_txe_set_pm_domain()
398 * @dev: mei_device
400 static inline void mei_txe_unset_pm_domain(struct mei_device *dev) mei_txe_unset_pm_domain() argument
403 dev->dev->pm_domain = NULL; mei_txe_unset_pm_domain()
H A Dwd.c42 static void mei_wd_set_start_timeout(struct mei_device *dev, u16 timeout) mei_wd_set_start_timeout() argument
44 dev_dbg(dev->dev, "wd: set timeout=%d.\n", timeout); mei_wd_set_start_timeout()
45 memcpy(dev->wd_data, mei_start_wd_params, MEI_WD_HDR_SIZE); mei_wd_set_start_timeout()
46 memcpy(dev->wd_data + MEI_WD_HDR_SIZE, &timeout, sizeof(u16)); mei_wd_set_start_timeout()
52 * @dev: the device structure
59 int mei_wd_host_init(struct mei_device *dev, struct mei_me_client *me_cl) mei_wd_host_init() argument
61 struct mei_cl *cl = &dev->wd_cl; mei_wd_host_init()
64 mei_cl_init(cl, dev); mei_wd_host_init()
66 dev->wd_timeout = MEI_WD_DEFAULT_TIMEOUT; mei_wd_host_init()
67 dev->wd_state = MEI_WD_IDLE; mei_wd_host_init()
71 dev_info(dev->dev, "wd: failed link client\n"); mei_wd_host_init()
77 dev_err(dev->dev, "wd: failed to connect = %d\n", ret); mei_wd_host_init()
82 ret = mei_watchdog_register(dev); mei_wd_host_init()
93 * @dev: the device structure
100 int mei_wd_send(struct mei_device *dev) mei_wd_send() argument
102 struct mei_cl *cl = &dev->wd_cl; mei_wd_send()
112 if (!memcmp(dev->wd_data, mei_start_wd_params, MEI_WD_HDR_SIZE)) mei_wd_send()
114 else if (!memcmp(dev->wd_data, mei_stop_wd_params, MEI_WD_HDR_SIZE)) mei_wd_send()
117 dev_err(dev->dev, "wd: invalid message is to be sent, aborting\n"); mei_wd_send()
121 ret = mei_write_message(dev, &hdr, dev->wd_data); mei_wd_send()
123 dev_err(dev->dev, "wd: write message failed\n"); mei_wd_send()
129 dev_err(dev->dev, "wd: flow_ctrl_reduce failed.\n"); mei_wd_send()
139 * @dev: the device structure
147 int mei_wd_stop(struct mei_device *dev) mei_wd_stop() argument
149 struct mei_cl *cl = &dev->wd_cl; mei_wd_stop()
153 dev->wd_state != MEI_WD_RUNNING) mei_wd_stop()
156 memcpy(dev->wd_data, mei_stop_wd_params, MEI_WD_STOP_MSG_SIZE); mei_wd_stop()
158 dev->wd_state = MEI_WD_STOPPING; mei_wd_stop()
164 if (ret && mei_hbuf_acquire(dev)) { mei_wd_stop()
165 ret = mei_wd_send(dev); mei_wd_stop()
168 dev->wd_pending = false; mei_wd_stop()
170 dev->wd_pending = true; mei_wd_stop()
173 mutex_unlock(&dev->device_lock); mei_wd_stop()
175 ret = wait_event_timeout(dev->wait_stop_wd, mei_wd_stop()
176 dev->wd_state == MEI_WD_IDLE, mei_wd_stop()
178 mutex_lock(&dev->device_lock); mei_wd_stop()
179 if (dev->wd_state != MEI_WD_IDLE) { mei_wd_stop()
182 dev_warn(dev->dev, "wd: stop failed to complete ret=%d\n", ret); mei_wd_stop()
185 dev_dbg(dev->dev, "wd: stop completed after %u msec\n", mei_wd_stop()
201 struct mei_device *dev; mei_wd_ops_start() local
205 dev = watchdog_get_drvdata(wd_dev); mei_wd_ops_start()
206 if (!dev) mei_wd_ops_start()
209 cl = &dev->wd_cl; mei_wd_ops_start()
211 mutex_lock(&dev->device_lock); mei_wd_ops_start()
213 if (dev->dev_state != MEI_DEV_ENABLED) { mei_wd_ops_start()
214 dev_dbg(dev->dev, "wd: dev_state != MEI_DEV_ENABLED dev_state = %s\n", mei_wd_ops_start()
215 mei_dev_state_str(dev->dev_state)); mei_wd_ops_start()
220 cl_dbg(dev, cl, "MEI Driver is not connected to Watchdog Client\n"); mei_wd_ops_start()
224 mei_wd_set_start_timeout(dev, dev->wd_timeout); mei_wd_ops_start()
228 mutex_unlock(&dev->device_lock); mei_wd_ops_start()
241 struct mei_device *dev; mei_wd_ops_stop() local
243 dev = watchdog_get_drvdata(wd_dev); mei_wd_ops_stop()
244 if (!dev) mei_wd_ops_stop()
247 mutex_lock(&dev->device_lock); mei_wd_ops_stop()
248 mei_wd_stop(dev); mei_wd_ops_stop()
249 mutex_unlock(&dev->device_lock); mei_wd_ops_stop()
263 struct mei_device *dev; mei_wd_ops_ping() local
267 dev = watchdog_get_drvdata(wd_dev); mei_wd_ops_ping()
268 if (!dev) mei_wd_ops_ping()
271 cl = &dev->wd_cl; mei_wd_ops_ping()
273 mutex_lock(&dev->device_lock); mei_wd_ops_ping()
276 cl_err(dev, cl, "wd: not connected.\n"); mei_wd_ops_ping()
281 dev->wd_state = MEI_WD_RUNNING; mei_wd_ops_ping()
288 if (ret && mei_hbuf_acquire(dev)) { mei_wd_ops_ping()
289 dev_dbg(dev->dev, "wd: sending ping\n"); mei_wd_ops_ping()
291 ret = mei_wd_send(dev); mei_wd_ops_ping()
294 dev->wd_pending = false; mei_wd_ops_ping()
296 dev->wd_pending = true; mei_wd_ops_ping()
300 mutex_unlock(&dev->device_lock); mei_wd_ops_ping()
315 struct mei_device *dev; mei_wd_ops_set_timeout() local
317 dev = watchdog_get_drvdata(wd_dev); mei_wd_ops_set_timeout()
318 if (!dev) mei_wd_ops_set_timeout()
325 mutex_lock(&dev->device_lock); mei_wd_ops_set_timeout()
327 dev->wd_timeout = timeout; mei_wd_ops_set_timeout()
329 mei_wd_set_start_timeout(dev, dev->wd_timeout); mei_wd_ops_set_timeout()
331 mutex_unlock(&dev->device_lock); mei_wd_ops_set_timeout()
362 int mei_watchdog_register(struct mei_device *dev) mei_watchdog_register() argument
367 amt_wd_dev.parent = dev->dev; mei_watchdog_register()
369 mutex_unlock(&dev->device_lock); mei_watchdog_register()
371 mutex_lock(&dev->device_lock); mei_watchdog_register()
373 dev_err(dev->dev, "wd: unable to register watchdog device = %d.\n", mei_watchdog_register()
378 dev_dbg(dev->dev, "wd: successfully register watchdog interface.\n"); mei_watchdog_register()
379 watchdog_set_drvdata(&amt_wd_dev, dev); mei_watchdog_register()
383 void mei_watchdog_unregister(struct mei_device *dev) mei_watchdog_unregister() argument
H A Dhw-me.c62 * @dev: the device structure
66 static inline u32 mei_me_mecbrw_read(const struct mei_device *dev) mei_me_mecbrw_read() argument
68 return mei_me_reg_read(to_me_hw(dev), ME_CB_RW); mei_me_mecbrw_read()
74 * @dev: the device structure
77 static inline void mei_me_hcbww_write(struct mei_device *dev, u32 data) mei_me_hcbww_write() argument
79 mei_me_reg_write(to_me_hw(dev), H_CB_WW, data); mei_me_hcbww_write()
85 * @dev: the device structure
89 static inline u32 mei_me_mecsr_read(const struct mei_device *dev) mei_me_mecsr_read() argument
93 reg = mei_me_reg_read(to_me_hw(dev), ME_CSR_HA); mei_me_mecsr_read()
94 trace_mei_reg_read(dev->dev, "ME_CSR_HA", ME_CSR_HA, reg); mei_me_mecsr_read()
102 * @dev: the device structure
106 static inline u32 mei_hcsr_read(const struct mei_device *dev) mei_hcsr_read() argument
110 reg = mei_me_reg_read(to_me_hw(dev), H_CSR); mei_hcsr_read()
111 trace_mei_reg_read(dev->dev, "H_CSR", H_CSR, reg); mei_hcsr_read()
119 * @dev: the device structure
122 static inline void mei_hcsr_write(struct mei_device *dev, u32 reg) mei_hcsr_write() argument
124 trace_mei_reg_write(dev->dev, "H_CSR", H_CSR, reg); mei_hcsr_write()
125 mei_me_reg_write(to_me_hw(dev), H_CSR, reg); mei_hcsr_write()
132 * @dev: the device structure
135 static inline void mei_hcsr_set(struct mei_device *dev, u32 reg) mei_hcsr_set() argument
138 mei_hcsr_write(dev, reg); mei_hcsr_set()
144 * @dev: the device structure
148 static inline u32 mei_me_d0i3c_read(const struct mei_device *dev) mei_me_d0i3c_read() argument
152 reg = mei_me_reg_read(to_me_hw(dev), H_D0I3C); mei_me_d0i3c_read()
153 trace_mei_reg_read(dev->dev, "H_D0I3C", H_D0I3C, reg); mei_me_d0i3c_read()
161 * @dev: the device structure
164 static inline void mei_me_d0i3c_write(struct mei_device *dev, u32 reg) mei_me_d0i3c_write() argument
166 trace_mei_reg_write(dev->dev, "H_D0I3C", H_D0I3C, reg); mei_me_d0i3c_write()
167 mei_me_reg_write(to_me_hw(dev), H_D0I3C, reg); mei_me_d0i3c_write()
173 * @dev: mei device
178 static int mei_me_fw_status(struct mei_device *dev, mei_me_fw_status() argument
181 struct pci_dev *pdev = to_pci_dev(dev->dev); mei_me_fw_status()
182 struct mei_me_hw *hw = to_me_hw(dev); mei_me_fw_status()
204 * @dev: mei device
206 static void mei_me_hw_config(struct mei_device *dev) mei_me_hw_config() argument
208 struct pci_dev *pdev = to_pci_dev(dev->dev); mei_me_hw_config()
209 struct mei_me_hw *hw = to_me_hw(dev); mei_me_hw_config()
213 hcsr = mei_hcsr_read(dev); mei_me_hw_config()
214 dev->hbuf_depth = (hcsr & H_CBD) >> 24; mei_me_hw_config()
223 reg = mei_me_d0i3c_read(dev); mei_me_hw_config()
233 * @dev: mei device
237 static inline enum mei_pg_state mei_me_pg_state(struct mei_device *dev) mei_me_pg_state() argument
239 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_state()
247 * @dev: the device structure
249 static void mei_me_intr_clear(struct mei_device *dev) mei_me_intr_clear() argument
251 u32 hcsr = mei_hcsr_read(dev); mei_me_intr_clear()
254 mei_hcsr_write(dev, hcsr); mei_me_intr_clear()
259 * @dev: the device structure
261 static void mei_me_intr_enable(struct mei_device *dev) mei_me_intr_enable() argument
263 u32 hcsr = mei_hcsr_read(dev); mei_me_intr_enable()
266 mei_hcsr_set(dev, hcsr); mei_me_intr_enable()
272 * @dev: the device structure
274 static void mei_me_intr_disable(struct mei_device *dev) mei_me_intr_disable() argument
276 u32 hcsr = mei_hcsr_read(dev); mei_me_intr_disable()
279 mei_hcsr_set(dev, hcsr); mei_me_intr_disable()
285 * @dev: the device structure
287 static void mei_me_hw_reset_release(struct mei_device *dev) mei_me_hw_reset_release() argument
289 u32 hcsr = mei_hcsr_read(dev); mei_me_hw_reset_release()
293 mei_hcsr_set(dev, hcsr); mei_me_hw_reset_release()
302 * @dev: mei device
304 static void mei_me_host_set_ready(struct mei_device *dev) mei_me_host_set_ready() argument
306 u32 hcsr = mei_hcsr_read(dev); mei_me_host_set_ready()
309 mei_hcsr_set(dev, hcsr); mei_me_host_set_ready()
315 * @dev: mei device
318 static bool mei_me_host_is_ready(struct mei_device *dev) mei_me_host_is_ready() argument
320 u32 hcsr = mei_hcsr_read(dev); mei_me_host_is_ready()
328 * @dev: mei device
331 static bool mei_me_hw_is_ready(struct mei_device *dev) mei_me_hw_is_ready() argument
333 u32 mecsr = mei_me_mecsr_read(dev); mei_me_hw_is_ready()
342 * @dev: mei device
345 static int mei_me_hw_ready_wait(struct mei_device *dev) mei_me_hw_ready_wait() argument
347 mutex_unlock(&dev->device_lock); mei_me_hw_ready_wait()
348 wait_event_timeout(dev->wait_hw_ready, mei_me_hw_ready_wait()
349 dev->recvd_hw_ready, mei_me_hw_ready_wait()
351 mutex_lock(&dev->device_lock); mei_me_hw_ready_wait()
352 if (!dev->recvd_hw_ready) { mei_me_hw_ready_wait()
353 dev_err(dev->dev, "wait hw ready failed\n"); mei_me_hw_ready_wait()
357 mei_me_hw_reset_release(dev); mei_me_hw_ready_wait()
358 dev->recvd_hw_ready = false; mei_me_hw_ready_wait()
365 * @dev: mei device
368 static int mei_me_hw_start(struct mei_device *dev) mei_me_hw_start() argument
370 int ret = mei_me_hw_ready_wait(dev); mei_me_hw_start()
374 dev_dbg(dev->dev, "hw is ready\n"); mei_me_hw_start()
376 mei_me_host_set_ready(dev); mei_me_hw_start()
384 * @dev: the device structure
388 static unsigned char mei_hbuf_filled_slots(struct mei_device *dev) mei_hbuf_filled_slots() argument
393 hcsr = mei_hcsr_read(dev); mei_hbuf_filled_slots()
404 * @dev: the device structure
408 static bool mei_me_hbuf_is_empty(struct mei_device *dev) mei_me_hbuf_is_empty() argument
410 return mei_hbuf_filled_slots(dev) == 0; mei_me_hbuf_is_empty()
416 * @dev: the device structure
420 static int mei_me_hbuf_empty_slots(struct mei_device *dev) mei_me_hbuf_empty_slots() argument
424 filled_slots = mei_hbuf_filled_slots(dev); mei_me_hbuf_empty_slots()
425 empty_slots = dev->hbuf_depth - filled_slots; mei_me_hbuf_empty_slots()
428 if (filled_slots > dev->hbuf_depth) mei_me_hbuf_empty_slots()
437 * @dev: the device structure
441 static size_t mei_me_hbuf_max_len(const struct mei_device *dev) mei_me_hbuf_max_len() argument
443 return dev->hbuf_depth * sizeof(u32) - sizeof(struct mei_msg_hdr); mei_me_hbuf_max_len()
450 * @dev: the device structure
456 static int mei_me_write_message(struct mei_device *dev, mei_me_write_message() argument
468 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM(header)); mei_me_write_message()
470 empty_slots = mei_hbuf_empty_slots(dev); mei_me_write_message()
471 dev_dbg(dev->dev, "empty slots = %hu.\n", empty_slots); mei_me_write_message()
477 mei_me_hcbww_write(dev, *((u32 *) header)); mei_me_write_message()
480 mei_me_hcbww_write(dev, reg_buf[i]); mei_me_write_message()
487 mei_me_hcbww_write(dev, reg); mei_me_write_message()
490 hcsr = mei_hcsr_read(dev) | H_IG; mei_me_write_message()
491 mei_hcsr_set(dev, hcsr); mei_me_write_message()
492 if (!mei_me_hw_is_ready(dev)) mei_me_write_message()
501 * @dev: the device structure
505 static int mei_me_count_full_read_slots(struct mei_device *dev) mei_me_count_full_read_slots() argument
511 me_csr = mei_me_mecsr_read(dev); mei_me_count_full_read_slots()
521 dev_dbg(dev->dev, "filled_slots =%08x\n", filled_slots); mei_me_count_full_read_slots()
528 * @dev: the device structure
534 static int mei_me_read_slots(struct mei_device *dev, unsigned char *buffer, mei_me_read_slots() argument
541 *reg_buf++ = mei_me_mecbrw_read(dev); mei_me_read_slots()
544 u32 reg = mei_me_mecbrw_read(dev); mei_me_read_slots()
549 hcsr = mei_hcsr_read(dev) | H_IG; mei_me_read_slots()
550 mei_hcsr_set(dev, hcsr); mei_me_read_slots()
557 * @dev: the device structure
559 static void mei_me_pg_set(struct mei_device *dev) mei_me_pg_set() argument
561 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_set()
565 trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); mei_me_pg_set()
569 trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); mei_me_pg_set()
576 * @dev: the device structure
578 static void mei_me_pg_unset(struct mei_device *dev) mei_me_pg_unset() argument
580 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_unset()
584 trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); mei_me_pg_unset()
590 trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg); mei_me_pg_unset()
597 * @dev: the device structure
601 static int mei_me_pg_legacy_enter_sync(struct mei_device *dev) mei_me_pg_legacy_enter_sync() argument
603 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_legacy_enter_sync()
607 dev->pg_event = MEI_PG_EVENT_WAIT; mei_me_pg_legacy_enter_sync()
609 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD); mei_me_pg_legacy_enter_sync()
613 mutex_unlock(&dev->device_lock); mei_me_pg_legacy_enter_sync()
614 wait_event_timeout(dev->wait_pg, mei_me_pg_legacy_enter_sync()
615 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); mei_me_pg_legacy_enter_sync()
616 mutex_lock(&dev->device_lock); mei_me_pg_legacy_enter_sync()
618 if (dev->pg_event == MEI_PG_EVENT_RECEIVED) { mei_me_pg_legacy_enter_sync()
619 mei_me_pg_set(dev); mei_me_pg_legacy_enter_sync()
625 dev->pg_event = MEI_PG_EVENT_IDLE; mei_me_pg_legacy_enter_sync()
634 * @dev: the device structure
638 static int mei_me_pg_legacy_exit_sync(struct mei_device *dev) mei_me_pg_legacy_exit_sync() argument
640 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_legacy_exit_sync()
644 if (dev->pg_event == MEI_PG_EVENT_RECEIVED) mei_me_pg_legacy_exit_sync()
647 dev->pg_event = MEI_PG_EVENT_WAIT; mei_me_pg_legacy_exit_sync()
649 mei_me_pg_unset(dev); mei_me_pg_legacy_exit_sync()
651 mutex_unlock(&dev->device_lock); mei_me_pg_legacy_exit_sync()
652 wait_event_timeout(dev->wait_pg, mei_me_pg_legacy_exit_sync()
653 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); mei_me_pg_legacy_exit_sync()
654 mutex_lock(&dev->device_lock); mei_me_pg_legacy_exit_sync()
657 if (dev->pg_event != MEI_PG_EVENT_RECEIVED) { mei_me_pg_legacy_exit_sync()
662 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; mei_me_pg_legacy_exit_sync()
663 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_EXIT_RES_CMD); mei_me_pg_legacy_exit_sync()
667 mutex_unlock(&dev->device_lock); mei_me_pg_legacy_exit_sync()
668 wait_event_timeout(dev->wait_pg, mei_me_pg_legacy_exit_sync()
669 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, timeout); mei_me_pg_legacy_exit_sync()
670 mutex_lock(&dev->device_lock); mei_me_pg_legacy_exit_sync()
672 if (dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED) mei_me_pg_legacy_exit_sync()
678 dev->pg_event = MEI_PG_EVENT_IDLE; mei_me_pg_legacy_exit_sync()
687 * @dev: the device structure
691 static bool mei_me_pg_in_transition(struct mei_device *dev) mei_me_pg_in_transition() argument
693 return dev->pg_event >= MEI_PG_EVENT_WAIT && mei_me_pg_in_transition()
694 dev->pg_event <= MEI_PG_EVENT_INTR_WAIT; mei_me_pg_in_transition()
700 * @dev: the device structure
704 static bool mei_me_pg_is_enabled(struct mei_device *dev) mei_me_pg_is_enabled() argument
706 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_is_enabled()
707 u32 reg = mei_me_mecsr_read(dev); mei_me_pg_is_enabled()
715 if (!dev->hbm_f_pg_supported) mei_me_pg_is_enabled()
721 dev_dbg(dev->dev, "pg: not supported: d0i3 = %d HGP = %d hbm version %d.%d ?= %d.%d\n", mei_me_pg_is_enabled()
724 dev->version.major_version, mei_me_pg_is_enabled()
725 dev->version.minor_version, mei_me_pg_is_enabled()
735 * @dev: the device structure
740 static u32 mei_me_d0i3_set(struct mei_device *dev, bool intr) mei_me_d0i3_set() argument
742 u32 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_set()
749 mei_me_d0i3c_write(dev, reg); mei_me_d0i3_set()
751 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_set()
758 * @dev: the device structure
762 static u32 mei_me_d0i3_unset(struct mei_device *dev) mei_me_d0i3_unset() argument
764 u32 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_unset()
768 mei_me_d0i3c_write(dev, reg); mei_me_d0i3_unset()
770 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_unset()
777 * @dev: the device structure
781 static int mei_me_d0i3_enter_sync(struct mei_device *dev) mei_me_d0i3_enter_sync() argument
783 struct mei_me_hw *hw = to_me_hw(dev); mei_me_d0i3_enter_sync()
789 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_enter_sync()
792 dev_dbg(dev->dev, "d0i3 set not needed\n"); mei_me_d0i3_enter_sync()
798 dev->pg_event = MEI_PG_EVENT_WAIT; mei_me_d0i3_enter_sync()
800 ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD); mei_me_d0i3_enter_sync()
805 mutex_unlock(&dev->device_lock); mei_me_d0i3_enter_sync()
806 wait_event_timeout(dev->wait_pg, mei_me_d0i3_enter_sync()
807 dev->pg_event == MEI_PG_EVENT_RECEIVED, pgi_timeout); mei_me_d0i3_enter_sync()
808 mutex_lock(&dev->device_lock); mei_me_d0i3_enter_sync()
810 if (dev->pg_event != MEI_PG_EVENT_RECEIVED) { mei_me_d0i3_enter_sync()
816 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; mei_me_d0i3_enter_sync()
818 reg = mei_me_d0i3_set(dev, true); mei_me_d0i3_enter_sync()
820 dev_dbg(dev->dev, "d0i3 enter wait not needed\n"); mei_me_d0i3_enter_sync()
825 mutex_unlock(&dev->device_lock); mei_me_d0i3_enter_sync()
826 wait_event_timeout(dev->wait_pg, mei_me_d0i3_enter_sync()
827 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, d0i3_timeout); mei_me_d0i3_enter_sync()
828 mutex_lock(&dev->device_lock); mei_me_d0i3_enter_sync()
830 if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) { mei_me_d0i3_enter_sync()
831 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_enter_sync()
842 dev->pg_event = MEI_PG_EVENT_IDLE; mei_me_d0i3_enter_sync()
843 dev_dbg(dev->dev, "d0i3 enter ret = %d\n", ret); mei_me_d0i3_enter_sync()
853 * @dev: the device structure
857 static int mei_me_d0i3_enter(struct mei_device *dev) mei_me_d0i3_enter() argument
859 struct mei_me_hw *hw = to_me_hw(dev); mei_me_d0i3_enter()
862 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_enter()
865 dev_dbg(dev->dev, "already d0i3 : set not needed\n"); mei_me_d0i3_enter()
869 mei_me_d0i3_set(dev, false); mei_me_d0i3_enter()
872 dev->pg_event = MEI_PG_EVENT_IDLE; mei_me_d0i3_enter()
873 dev_dbg(dev->dev, "d0i3 enter\n"); mei_me_d0i3_enter()
880 * @dev: the device structure
884 static int mei_me_d0i3_exit_sync(struct mei_device *dev) mei_me_d0i3_exit_sync() argument
886 struct mei_me_hw *hw = to_me_hw(dev); mei_me_d0i3_exit_sync()
891 dev->pg_event = MEI_PG_EVENT_INTR_WAIT; mei_me_d0i3_exit_sync()
893 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_exit_sync()
896 dev_dbg(dev->dev, "d0i3 exit not needed\n"); mei_me_d0i3_exit_sync()
901 reg = mei_me_d0i3_unset(dev); mei_me_d0i3_exit_sync()
903 dev_dbg(dev->dev, "d0i3 exit wait not needed\n"); mei_me_d0i3_exit_sync()
908 mutex_unlock(&dev->device_lock); mei_me_d0i3_exit_sync()
909 wait_event_timeout(dev->wait_pg, mei_me_d0i3_exit_sync()
910 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED, timeout); mei_me_d0i3_exit_sync()
911 mutex_lock(&dev->device_lock); mei_me_d0i3_exit_sync()
913 if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) { mei_me_d0i3_exit_sync()
914 reg = mei_me_d0i3c_read(dev); mei_me_d0i3_exit_sync()
925 dev->pg_event = MEI_PG_EVENT_IDLE; mei_me_d0i3_exit_sync()
927 dev_dbg(dev->dev, "d0i3 exit ret = %d\n", ret); mei_me_d0i3_exit_sync()
935 * @dev: the device structure
937 static void mei_me_pg_legacy_intr(struct mei_device *dev) mei_me_pg_legacy_intr() argument
939 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_legacy_intr()
941 if (dev->pg_event != MEI_PG_EVENT_INTR_WAIT) mei_me_pg_legacy_intr()
944 dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED; mei_me_pg_legacy_intr()
946 if (waitqueue_active(&dev->wait_pg)) mei_me_pg_legacy_intr()
947 wake_up(&dev->wait_pg); mei_me_pg_legacy_intr()
953 * @dev: the device structure
955 static void mei_me_d0i3_intr(struct mei_device *dev) mei_me_d0i3_intr() argument
957 struct mei_me_hw *hw = to_me_hw(dev); mei_me_d0i3_intr()
959 if (dev->pg_event == MEI_PG_EVENT_INTR_WAIT && mei_me_d0i3_intr()
961 dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED; mei_me_d0i3_intr()
964 if (dev->hbm_state != MEI_HBM_IDLE) { mei_me_d0i3_intr()
969 dev_dbg(dev->dev, "d0i3 set host ready\n"); mei_me_d0i3_intr()
970 mei_me_host_set_ready(dev); mei_me_d0i3_intr()
976 wake_up(&dev->wait_pg); mei_me_d0i3_intr()
985 dev_dbg(dev->dev, "d0i3 want resume\n"); mei_me_d0i3_intr()
986 mei_hbm_pg_resume(dev); mei_me_d0i3_intr()
993 * @dev: the device structure
995 static void mei_me_pg_intr(struct mei_device *dev) mei_me_pg_intr() argument
997 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_intr()
1000 mei_me_d0i3_intr(dev); mei_me_pg_intr()
1002 mei_me_pg_legacy_intr(dev); mei_me_pg_intr()
1008 * @dev: the device structure
1012 int mei_me_pg_enter_sync(struct mei_device *dev) mei_me_pg_enter_sync() argument
1014 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_enter_sync()
1017 return mei_me_d0i3_enter_sync(dev); mei_me_pg_enter_sync()
1019 return mei_me_pg_legacy_enter_sync(dev); mei_me_pg_enter_sync()
1025 * @dev: the device structure
1029 int mei_me_pg_exit_sync(struct mei_device *dev) mei_me_pg_exit_sync() argument
1031 struct mei_me_hw *hw = to_me_hw(dev); mei_me_pg_exit_sync()
1034 return mei_me_d0i3_exit_sync(dev); mei_me_pg_exit_sync()
1036 return mei_me_pg_legacy_exit_sync(dev); mei_me_pg_exit_sync()
1042 * @dev: the device structure
1047 static int mei_me_hw_reset(struct mei_device *dev, bool intr_enable) mei_me_hw_reset() argument
1049 struct mei_me_hw *hw = to_me_hw(dev); mei_me_hw_reset()
1054 mei_me_intr_enable(dev); mei_me_hw_reset()
1056 ret = mei_me_d0i3_exit_sync(dev); mei_me_hw_reset()
1062 hcsr = mei_hcsr_read(dev); mei_me_hw_reset()
1069 dev_warn(dev->dev, "H_RST is set = 0x%08X", hcsr); mei_me_hw_reset()
1071 mei_hcsr_set(dev, hcsr); mei_me_hw_reset()
1072 hcsr = mei_hcsr_read(dev); mei_me_hw_reset()
1080 dev->recvd_hw_ready = false; mei_me_hw_reset()
1081 mei_hcsr_write(dev, hcsr); mei_me_hw_reset()
1087 hcsr = mei_hcsr_read(dev); mei_me_hw_reset()
1090 dev_warn(dev->dev, "H_RST is not set = 0x%08X", hcsr); mei_me_hw_reset()
1093 dev_warn(dev->dev, "H_RDY is not cleared 0x%08X", hcsr); mei_me_hw_reset()
1096 mei_me_hw_reset_release(dev); mei_me_hw_reset()
1098 ret = mei_me_d0i3_enter(dev); mei_me_hw_reset()
1116 struct mei_device *dev = (struct mei_device *)dev_id; mei_me_irq_quick_handler() local
1117 struct mei_me_hw *hw = to_me_hw(dev); mei_me_irq_quick_handler()
1120 hcsr = mei_hcsr_read(dev); mei_me_irq_quick_handler()
1125 dev_dbg(dev->dev, "interrupt source 0x%08X.\n", hw->intr_source); mei_me_irq_quick_handler()
1128 mei_hcsr_write(dev, hcsr); mei_me_irq_quick_handler()
1145 struct mei_device *dev = (struct mei_device *) dev_id; mei_me_irq_thread_handler() local
1150 dev_dbg(dev->dev, "function called after ISR to handle the interrupt processing.\n"); mei_me_irq_thread_handler()
1152 mutex_lock(&dev->device_lock); mei_me_irq_thread_handler()
1156 if (!mei_hw_is_ready(dev) && dev->dev_state != MEI_DEV_RESETTING) { mei_me_irq_thread_handler()
1157 dev_warn(dev->dev, "FW not ready: resetting.\n"); mei_me_irq_thread_handler()
1158 schedule_work(&dev->reset_work); mei_me_irq_thread_handler()
1162 mei_me_pg_intr(dev); mei_me_irq_thread_handler()
1164 /* check if we need to start the dev */ mei_me_irq_thread_handler()
1165 if (!mei_host_is_ready(dev)) { mei_me_irq_thread_handler()
1166 if (mei_hw_is_ready(dev)) { mei_me_irq_thread_handler()
1167 dev_dbg(dev->dev, "we need to start the dev.\n"); mei_me_irq_thread_handler()
1168 dev->recvd_hw_ready = true; mei_me_irq_thread_handler()
1169 wake_up(&dev->wait_hw_ready); mei_me_irq_thread_handler()
1171 dev_dbg(dev->dev, "Spurious Interrupt\n"); mei_me_irq_thread_handler()
1176 slots = mei_count_full_read_slots(dev); mei_me_irq_thread_handler()
1178 dev_dbg(dev->dev, "slots to read = %08x\n", slots); mei_me_irq_thread_handler()
1179 rets = mei_irq_read_handler(dev, &complete_list, &slots); mei_me_irq_thread_handler()
1187 if (rets && dev->dev_state != MEI_DEV_RESETTING) { mei_me_irq_thread_handler()
1188 dev_err(dev->dev, "mei_irq_read_handler ret = %d.\n", mei_me_irq_thread_handler()
1190 schedule_work(&dev->reset_work); mei_me_irq_thread_handler()
1195 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); mei_me_irq_thread_handler()
1202 if (dev->pg_event != MEI_PG_EVENT_WAIT && mei_me_irq_thread_handler()
1203 dev->pg_event != MEI_PG_EVENT_RECEIVED) { mei_me_irq_thread_handler()
1204 rets = mei_irq_write_handler(dev, &complete_list); mei_me_irq_thread_handler()
1205 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); mei_me_irq_thread_handler()
1208 mei_irq_compl_handler(dev, &complete_list); mei_me_irq_thread_handler()
1211 dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets); mei_me_irq_thread_handler()
1212 mutex_unlock(&dev->device_lock); mei_me_irq_thread_handler()
1336 struct mei_device *dev; mei_me_dev_init() local
1339 dev = kzalloc(sizeof(struct mei_device) + mei_me_dev_init()
1341 if (!dev) mei_me_dev_init()
1343 hw = to_me_hw(dev); mei_me_dev_init()
1345 mei_device_init(dev, &pdev->dev, &mei_me_hw_ops); mei_me_dev_init()
1347 return dev; mei_me_dev_init()
H A Damthif.c45 * @dev: the device structure
47 void mei_amthif_reset_params(struct mei_device *dev) mei_amthif_reset_params() argument
50 dev->iamthif_current_cb = NULL; mei_amthif_reset_params()
51 dev->iamthif_canceled = false; mei_amthif_reset_params()
52 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_amthif_reset_params()
53 dev->iamthif_timer = 0; mei_amthif_reset_params()
54 dev->iamthif_stall_timer = 0; mei_amthif_reset_params()
55 dev->iamthif_open_count = 0; mei_amthif_reset_params()
61 * @dev: the device structure
66 int mei_amthif_host_init(struct mei_device *dev, struct mei_me_client *me_cl) mei_amthif_host_init() argument
68 struct mei_cl *cl = &dev->iamthif_cl; mei_amthif_host_init()
71 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_amthif_host_init()
73 mei_cl_init(cl, dev); mei_amthif_host_init()
77 dev_err(dev->dev, "amthif: failed cl_link %d\n", ret); mei_amthif_host_init()
83 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_amthif_host_init()
91 * @dev: the device structure
96 struct mei_cl_cb *mei_amthif_find_read_list_entry(struct mei_device *dev, mei_amthif_find_read_list_entry() argument
101 list_for_each_entry(cb, &dev->amthif_rd_complete_list.list, list) mei_amthif_find_read_list_entry()
111 * @dev: the device structure
117 * Locking: called under "dev->device_lock" lock
124 int mei_amthif_read(struct mei_device *dev, struct file *file, mei_amthif_read() argument
135 dev_err(dev->dev, "bad file ext.\n"); mei_amthif_read()
139 dev_dbg(dev->dev, "checking amthif data\n"); mei_amthif_read()
140 cb = mei_amthif_find_read_list_entry(dev, file); mei_amthif_read()
147 dev_dbg(dev->dev, "waiting for amthif data\n"); mei_amthif_read()
150 mutex_unlock(&dev->device_lock); mei_amthif_read()
152 wait_ret = wait_event_interruptible(dev->iamthif_cl.wait, mei_amthif_read()
153 (cb = mei_amthif_find_read_list_entry(dev, file))); mei_amthif_read()
156 mutex_lock(&dev->device_lock); mei_amthif_read()
161 dev_dbg(dev->dev, "woke up from sleep\n"); mei_amthif_read()
166 dev_dbg(dev->dev, "read operation failed %d\n", rets); mei_amthif_read()
170 dev_dbg(dev->dev, "Got amthif data\n"); mei_amthif_read()
171 dev->iamthif_timer = 0; mei_amthif_read()
175 dev_dbg(dev->dev, "amthif timeout = %lud\n", mei_amthif_read()
179 dev_dbg(dev->dev, "amthif Time out\n"); mei_amthif_read()
198 dev_dbg(dev->dev, "amthif cb->buf size - %d\n", mei_amthif_read()
200 dev_dbg(dev->dev, "amthif cb->buf_idx - %lu\n", cb->buf_idx); mei_amthif_read()
207 dev_dbg(dev->dev, "failed to copy data to userland\n"); mei_amthif_read()
217 dev_dbg(dev->dev, "free amthif cb memory.\n"); mei_amthif_read()
234 struct mei_device *dev = cl->dev; mei_amthif_read_start() local
248 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); mei_amthif_read_start()
250 dev->iamthif_state = MEI_IAMTHIF_READING; mei_amthif_read_start()
251 dev->iamthif_file_object = cb->file_object; mei_amthif_read_start()
252 dev->iamthif_current_cb = cb; mei_amthif_read_start()
270 struct mei_device *dev; mei_amthif_send_cmd() local
273 if (!cl->dev || !cb) mei_amthif_send_cmd()
276 dev = cl->dev; mei_amthif_send_cmd()
278 dev->iamthif_state = MEI_IAMTHIF_WRITING; mei_amthif_send_cmd()
279 dev->iamthif_current_cb = cb; mei_amthif_send_cmd()
280 dev->iamthif_file_object = cb->file_object; mei_amthif_send_cmd()
281 dev->iamthif_canceled = false; mei_amthif_send_cmd()
296 * @dev: the device structure
300 int mei_amthif_run_next_cmd(struct mei_device *dev) mei_amthif_run_next_cmd() argument
302 struct mei_cl *cl = &dev->iamthif_cl; mei_amthif_run_next_cmd()
305 dev->iamthif_canceled = false; mei_amthif_run_next_cmd()
306 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_amthif_run_next_cmd()
307 dev->iamthif_timer = 0; mei_amthif_run_next_cmd()
308 dev->iamthif_file_object = NULL; mei_amthif_run_next_cmd()
310 dev_dbg(dev->dev, "complete amthif cmd_list cb.\n"); mei_amthif_run_next_cmd()
312 cb = list_first_entry_or_null(&dev->amthif_cmd_list.list, mei_amthif_run_next_cmd()
332 struct mei_device *dev; mei_amthif_write() local
334 if (WARN_ON(!cl || !cl->dev)) mei_amthif_write()
340 dev = cl->dev; mei_amthif_write()
342 list_add_tail(&cb->list, &dev->amthif_cmd_list.list); mei_amthif_write()
343 return mei_amthif_run_next_cmd(dev); mei_amthif_write()
349 * @dev: the device structure
355 * Locking: called under "dev->device_lock" lock
358 unsigned int mei_amthif_poll(struct mei_device *dev, mei_amthif_poll() argument
363 poll_wait(file, &dev->iamthif_cl.wait, wait); mei_amthif_poll()
365 if (dev->iamthif_state == MEI_IAMTHIF_READ_COMPLETE && mei_amthif_poll()
366 dev->iamthif_file_object == file) { mei_amthif_poll()
369 mei_amthif_run_next_cmd(dev); mei_amthif_poll()
415 struct mei_device *dev; mei_amthif_irq_read_msg() local
418 dev = cl->dev; mei_amthif_irq_read_msg()
420 if (dev->iamthif_state != MEI_IAMTHIF_READING) { mei_amthif_irq_read_msg()
421 mei_irq_discard_msg(dev, mei_hdr); mei_amthif_irq_read_msg()
432 dev_dbg(dev->dev, "completed amthif read.\n "); mei_amthif_irq_read_msg()
433 dev->iamthif_current_cb = NULL; mei_amthif_irq_read_msg()
434 dev->iamthif_stall_timer = 0; mei_amthif_irq_read_msg()
442 * @dev: the device structure.
445 void mei_amthif_complete(struct mei_device *dev, struct mei_cl_cb *cb) mei_amthif_complete() argument
450 dev->iamthif_stall_timer = MEI_IAMTHIF_STALL_TIMER; mei_amthif_complete()
458 list_add_tail(&cb->list, &dev->amthif_rd_complete_list.list); mei_amthif_complete()
459 wake_up_interruptible(&dev->iamthif_cl.wait); mei_amthif_complete()
463 if (!dev->iamthif_canceled) { mei_amthif_complete()
464 dev->iamthif_state = MEI_IAMTHIF_READ_COMPLETE; mei_amthif_complete()
465 dev->iamthif_stall_timer = 0; mei_amthif_complete()
466 list_add_tail(&cb->list, &dev->amthif_rd_complete_list.list); mei_amthif_complete()
467 dev_dbg(dev->dev, "amthif read completed\n"); mei_amthif_complete()
468 dev->iamthif_timer = jiffies; mei_amthif_complete()
469 dev_dbg(dev->dev, "dev->iamthif_timer = %ld\n", mei_amthif_complete()
470 dev->iamthif_timer); mei_amthif_complete()
472 mei_amthif_run_next_cmd(dev); mei_amthif_complete()
475 dev_dbg(dev->dev, "completing amthif call back.\n"); mei_amthif_complete()
476 wake_up_interruptible(&dev->iamthif_cl.wait); mei_amthif_complete()
483 * @dev: device structure.
492 static bool mei_clear_list(struct mei_device *dev, mei_clear_list() argument
495 struct mei_cl *cl = &dev->iamthif_cl; mei_clear_list()
504 if (dev->iamthif_current_cb == cb) { list_for_each_entry_safe()
505 dev->iamthif_current_cb = NULL; list_for_each_entry_safe()
507 mei_hbm_cl_flow_control_req(dev, cl); list_for_each_entry_safe()
520 * @dev: device structure
528 static bool mei_clear_lists(struct mei_device *dev, struct file *file) mei_clear_lists() argument
533 mei_clear_list(dev, file, &dev->amthif_cmd_list.list); mei_clear_lists()
534 if (mei_clear_list(dev, file, &dev->amthif_rd_complete_list.list)) mei_clear_lists()
537 mei_clear_list(dev, file, &dev->ctrl_rd_list.list); mei_clear_lists()
539 if (mei_clear_list(dev, file, &dev->ctrl_wr_list.list)) mei_clear_lists()
542 if (mei_clear_list(dev, file, &dev->write_waiting_list.list)) mei_clear_lists()
545 if (mei_clear_list(dev, file, &dev->write_list.list)) mei_clear_lists()
549 if (dev->iamthif_current_cb && !removed) { mei_clear_lists()
551 if (dev->iamthif_current_cb->file_object == file) { mei_clear_lists()
553 mei_io_cb_free(dev->iamthif_current_cb); mei_clear_lists()
554 dev->iamthif_current_cb = NULL; mei_clear_lists()
564 * @dev: device structure
569 int mei_amthif_release(struct mei_device *dev, struct file *file) mei_amthif_release() argument
571 if (dev->iamthif_open_count > 0) mei_amthif_release()
572 dev->iamthif_open_count--; mei_amthif_release()
574 if (dev->iamthif_file_object == file && mei_amthif_release()
575 dev->iamthif_state != MEI_IAMTHIF_IDLE) { mei_amthif_release()
577 dev_dbg(dev->dev, "amthif canceled iamthif state %d\n", mei_amthif_release()
578 dev->iamthif_state); mei_amthif_release()
579 dev->iamthif_canceled = true; mei_amthif_release()
580 if (dev->iamthif_state == MEI_IAMTHIF_READ_COMPLETE) { mei_amthif_release()
581 dev_dbg(dev->dev, "run next amthif iamthif cb\n"); mei_amthif_release()
582 mei_amthif_run_next_cmd(dev); mei_amthif_release()
586 if (mei_clear_lists(dev, file)) mei_amthif_release()
587 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_amthif_release()
H A Dhbm.c101 * @dev: the device structure
103 void mei_hbm_idle(struct mei_device *dev) mei_hbm_idle() argument
105 dev->init_clients_timer = 0; mei_hbm_idle()
106 dev->hbm_state = MEI_HBM_IDLE; mei_hbm_idle()
112 * @dev: the device structure
114 void mei_hbm_reset(struct mei_device *dev) mei_hbm_reset() argument
116 dev->me_client_index = 0; mei_hbm_reset()
118 mei_me_cl_rm_all(dev); mei_hbm_reset()
120 mei_hbm_idle(dev); mei_hbm_reset()
162 * @dev: the device structure
170 int mei_hbm_cl_write(struct mei_device *dev, mei_hbm_cl_write() argument
173 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_cl_write()
176 mei_hbm_cl_hdr(cl, hbm_cmd, dev->wr_msg.data, len); mei_hbm_cl_write()
178 return mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_cl_write()
200 * @dev: the device structure
206 struct mei_cl *mei_hbm_cl_find_by_cmd(struct mei_device *dev, void *buf) mei_hbm_cl_find_by_cmd() argument
211 list_for_each_entry(cl, &dev->file_list, link) mei_hbm_cl_find_by_cmd()
221 * @dev: the device structure
225 int mei_hbm_start_wait(struct mei_device *dev) mei_hbm_start_wait() argument
229 if (dev->hbm_state > MEI_HBM_STARTING) mei_hbm_start_wait()
232 mutex_unlock(&dev->device_lock); mei_hbm_start_wait()
233 ret = wait_event_timeout(dev->wait_hbm_start, mei_hbm_start_wait()
234 dev->hbm_state != MEI_HBM_STARTING, mei_hbm_start_wait()
236 mutex_lock(&dev->device_lock); mei_hbm_start_wait()
238 if (ret == 0 && (dev->hbm_state <= MEI_HBM_STARTING)) { mei_hbm_start_wait()
239 dev->hbm_state = MEI_HBM_IDLE; mei_hbm_start_wait()
240 dev_err(dev->dev, "waiting for mei start failed\n"); mei_hbm_start_wait()
249 * @dev: the device structure
253 int mei_hbm_start_req(struct mei_device *dev) mei_hbm_start_req() argument
255 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_start_req()
260 mei_hbm_reset(dev); mei_hbm_start_req()
265 start_req = (struct hbm_host_version_request *)dev->wr_msg.data; mei_hbm_start_req()
271 dev->hbm_state = MEI_HBM_IDLE; mei_hbm_start_req()
272 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_start_req()
274 dev_err(dev->dev, "version message write failed: ret = %d\n", mei_hbm_start_req()
279 dev->hbm_state = MEI_HBM_STARTING; mei_hbm_start_req()
280 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; mei_hbm_start_req()
287 * @dev: the device structure
291 static int mei_hbm_enum_clients_req(struct mei_device *dev) mei_hbm_enum_clients_req() argument
293 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_enum_clients_req()
301 enum_req = (struct hbm_host_enum_request *)dev->wr_msg.data; mei_hbm_enum_clients_req()
304 enum_req->allow_add = dev->hbm_f_dc_supported; mei_hbm_enum_clients_req()
306 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_enum_clients_req()
308 dev_err(dev->dev, "enumeration request write failed: ret = %d.\n", mei_hbm_enum_clients_req()
312 dev->hbm_state = MEI_HBM_ENUM_CLIENTS; mei_hbm_enum_clients_req()
313 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; mei_hbm_enum_clients_req()
320 * @dev: the device structure
326 static int mei_hbm_me_cl_add(struct mei_device *dev, mei_hbm_me_cl_add() argument
332 mei_me_cl_rm_by_uuid(dev, uuid); mei_hbm_me_cl_add()
344 mei_me_cl_add(dev, me_cl); mei_hbm_me_cl_add()
352 * @dev: the device structure
358 static int mei_hbm_add_cl_resp(struct mei_device *dev, u8 addr, u8 status) mei_hbm_add_cl_resp() argument
360 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_add_cl_resp()
365 dev_dbg(dev->dev, "adding client response\n"); mei_hbm_add_cl_resp()
367 resp = (struct hbm_add_client_response *)dev->wr_msg.data; mei_hbm_add_cl_resp()
376 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_add_cl_resp()
378 dev_err(dev->dev, "add client response write failed: ret = %d\n", mei_hbm_add_cl_resp()
386 * @dev: the device structure
391 static int mei_hbm_fw_add_cl_req(struct mei_device *dev, mei_hbm_fw_add_cl_req() argument
400 ret = mei_hbm_me_cl_add(dev, (struct hbm_props_response *)req); mei_hbm_fw_add_cl_req()
404 return mei_hbm_add_cl_resp(dev, req->me_addr, status); mei_hbm_fw_add_cl_req()
410 * @dev: the device structure
416 int mei_hbm_cl_notify_req(struct mei_device *dev, mei_hbm_cl_notify_req() argument
420 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_cl_notify_req()
426 mei_hbm_cl_hdr(cl, MEI_HBM_NOTIFY_REQ_CMD, dev->wr_msg.data, len); mei_hbm_cl_notify_req()
428 req = (struct hbm_notification_request *)dev->wr_msg.data; mei_hbm_cl_notify_req()
431 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_cl_notify_req()
433 dev_err(dev->dev, "notify request failed: ret = %d\n", ret); mei_hbm_cl_notify_req()
458 * @dev: the device structure
462 static void mei_hbm_cl_notify_start_res(struct mei_device *dev, mei_hbm_cl_notify_start_res() argument
469 cl_dbg(dev, cl, "hbm: notify start response status=%d\n", rs->status); mei_hbm_cl_notify_start_res()
484 * @dev: the device structure
488 static void mei_hbm_cl_notify_stop_res(struct mei_device *dev, mei_hbm_cl_notify_stop_res() argument
495 cl_dbg(dev, cl, "hbm: notify stop response status=%d\n", rs->status); mei_hbm_cl_notify_stop_res()
510 * @dev: the device structure
513 static void mei_hbm_cl_notify(struct mei_device *dev, mei_hbm_cl_notify() argument
518 cl = mei_hbm_cl_find_by_cmd(dev, cmd); mei_hbm_cl_notify()
526 * @dev: the device structure
531 static int mei_hbm_prop_req(struct mei_device *dev) mei_hbm_prop_req() argument
534 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_prop_req()
540 next_client_index = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, mei_hbm_prop_req()
541 dev->me_client_index); mei_hbm_prop_req()
545 dev->hbm_state = MEI_HBM_STARTED; mei_hbm_prop_req()
546 schedule_work(&dev->init_work); mei_hbm_prop_req()
552 prop_req = (struct hbm_props_request *)dev->wr_msg.data; mei_hbm_prop_req()
559 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_prop_req()
561 dev_err(dev->dev, "properties request write failed: ret = %d\n", mei_hbm_prop_req()
566 dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT; mei_hbm_prop_req()
567 dev->me_client_index = next_client_index; mei_hbm_prop_req()
575 * @dev: the device structure
581 int mei_hbm_pg(struct mei_device *dev, u8 pg_cmd) mei_hbm_pg() argument
583 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_pg()
588 if (!dev->hbm_f_pg_supported) mei_hbm_pg()
593 req = (struct hbm_power_gate *)dev->wr_msg.data; mei_hbm_pg()
597 ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_pg()
599 dev_err(dev->dev, "power gate command write failed.\n"); mei_hbm_pg()
607 * @dev: mei device
611 static int mei_hbm_stop_req(struct mei_device *dev) mei_hbm_stop_req() argument
613 struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr; mei_hbm_stop_req()
615 (struct hbm_host_stop_request *)dev->wr_msg.data; mei_hbm_stop_req()
624 return mei_write_message(dev, mei_hdr, dev->wr_msg.data); mei_hbm_stop_req()
630 * @dev: the device structure
635 int mei_hbm_cl_flow_control_req(struct mei_device *dev, struct mei_cl *cl) mei_hbm_cl_flow_control_req() argument
639 cl_dbg(dev, cl, "sending flow control\n"); mei_hbm_cl_flow_control_req()
640 return mei_hbm_cl_write(dev, cl, MEI_FLOW_CONTROL_CMD, len); mei_hbm_cl_flow_control_req()
646 * @dev: the device structure
651 static int mei_hbm_add_single_flow_creds(struct mei_device *dev, mei_hbm_add_single_flow_creds() argument
657 me_cl = mei_me_cl_by_id(dev, flow->me_addr); mei_hbm_add_single_flow_creds()
659 dev_err(dev->dev, "no such me client %d\n", mei_hbm_add_single_flow_creds()
670 dev_dbg(dev->dev, "recv flow ctrl msg ME %d (single) creds = %d.\n", mei_hbm_add_single_flow_creds()
682 * @dev: the device structure
685 static void mei_hbm_cl_flow_control_res(struct mei_device *dev, mei_hbm_cl_flow_control_res() argument
692 mei_hbm_add_single_flow_creds(dev, flow_control); mei_hbm_cl_flow_control_res()
696 cl = mei_hbm_cl_find_by_cmd(dev, flow_control); mei_hbm_cl_flow_control_res()
699 cl_dbg(dev, cl, "flow control creds = %d.\n", mei_hbm_cl_flow_control_res()
708 * @dev: the device structure
713 int mei_hbm_cl_disconnect_req(struct mei_device *dev, struct mei_cl *cl) mei_hbm_cl_disconnect_req() argument
717 return mei_hbm_cl_write(dev, cl, CLIENT_DISCONNECT_REQ_CMD, len); mei_hbm_cl_disconnect_req()
723 * @dev: the device structure
728 int mei_hbm_cl_disconnect_rsp(struct mei_device *dev, struct mei_cl *cl) mei_hbm_cl_disconnect_rsp() argument
732 return mei_hbm_cl_write(dev, cl, CLIENT_DISCONNECT_RES_CMD, len); mei_hbm_cl_disconnect_rsp()
739 * @dev: the device structure
743 static void mei_hbm_cl_disconnect_res(struct mei_device *dev, struct mei_cl *cl, mei_hbm_cl_disconnect_res() argument
749 cl_dbg(dev, cl, "hbm: disconnect response status=%d\n", rs->status); mei_hbm_cl_disconnect_res()
759 * @dev: the device structure
764 int mei_hbm_cl_connect_req(struct mei_device *dev, struct mei_cl *cl) mei_hbm_cl_connect_req() argument
768 return mei_hbm_cl_write(dev, cl, CLIENT_CONNECT_REQ_CMD, len); mei_hbm_cl_connect_req()
775 * @dev: the device structure
779 static void mei_hbm_cl_connect_res(struct mei_device *dev, struct mei_cl *cl, mei_hbm_cl_connect_res() argument
785 cl_dbg(dev, cl, "hbm: connect response status=%s\n", mei_hbm_cl_connect_res()
793 mei_me_cl_del(dev, cl->me_cl); mei_hbm_cl_connect_res()
802 * @dev: the device structure
806 static void mei_hbm_cl_res(struct mei_device *dev, mei_hbm_cl_res() argument
814 list_for_each_entry_safe(cb, next, &dev->ctrl_rd_list.list, list) { mei_hbm_cl_res()
832 mei_hbm_cl_connect_res(dev, cl, rs); mei_hbm_cl_res()
835 mei_hbm_cl_disconnect_res(dev, cl, rs); mei_hbm_cl_res()
838 mei_hbm_cl_notify_start_res(dev, cl, rs); mei_hbm_cl_res()
841 mei_hbm_cl_notify_stop_res(dev, cl, rs); mei_hbm_cl_res()
856 * @dev: the device structure.
861 static int mei_hbm_fw_disconnect_req(struct mei_device *dev, mei_hbm_fw_disconnect_req() argument
867 cl = mei_hbm_cl_find_by_cmd(dev, disconnect_req); mei_hbm_fw_disconnect_req()
869 cl_dbg(dev, cl, "fw disconnect request received\n"); mei_hbm_fw_disconnect_req()
876 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); mei_hbm_fw_disconnect_req()
884 * @dev: the device structure.
888 static int mei_hbm_pg_enter_res(struct mei_device *dev) mei_hbm_pg_enter_res() argument
890 if (mei_pg_state(dev) != MEI_PG_OFF || mei_hbm_pg_enter_res()
891 dev->pg_event != MEI_PG_EVENT_WAIT) { mei_hbm_pg_enter_res()
892 dev_err(dev->dev, "hbm: pg entry response: state mismatch [%s, %d]\n", mei_hbm_pg_enter_res()
893 mei_pg_state_str(mei_pg_state(dev)), dev->pg_event); mei_hbm_pg_enter_res()
897 dev->pg_event = MEI_PG_EVENT_RECEIVED; mei_hbm_pg_enter_res()
898 wake_up(&dev->wait_pg); mei_hbm_pg_enter_res()
906 * @dev: the device structure.
908 void mei_hbm_pg_resume(struct mei_device *dev) mei_hbm_pg_resume() argument
910 pm_request_resume(dev->dev); mei_hbm_pg_resume()
917 * @dev: the device structure.
921 static int mei_hbm_pg_exit_res(struct mei_device *dev) mei_hbm_pg_exit_res() argument
923 if (mei_pg_state(dev) != MEI_PG_ON || mei_hbm_pg_exit_res()
924 (dev->pg_event != MEI_PG_EVENT_WAIT && mei_hbm_pg_exit_res()
925 dev->pg_event != MEI_PG_EVENT_IDLE)) { mei_hbm_pg_exit_res()
926 dev_err(dev->dev, "hbm: pg exit response: state mismatch [%s, %d]\n", mei_hbm_pg_exit_res()
927 mei_pg_state_str(mei_pg_state(dev)), dev->pg_event); mei_hbm_pg_exit_res()
931 switch (dev->pg_event) { mei_hbm_pg_exit_res()
933 dev->pg_event = MEI_PG_EVENT_RECEIVED; mei_hbm_pg_exit_res()
934 wake_up(&dev->wait_pg); mei_hbm_pg_exit_res()
942 dev->pg_event = MEI_PG_EVENT_RECEIVED; mei_hbm_pg_exit_res()
943 mei_hbm_pg_resume(dev); mei_hbm_pg_exit_res()
947 dev->pg_event); mei_hbm_pg_exit_res()
958 * @dev: the device structure
960 static void mei_hbm_config_features(struct mei_device *dev) mei_hbm_config_features() argument
963 dev->hbm_f_pg_supported = 0; mei_hbm_config_features()
964 if (dev->version.major_version > HBM_MAJOR_VERSION_PGI) mei_hbm_config_features()
965 dev->hbm_f_pg_supported = 1; mei_hbm_config_features()
967 if (dev->version.major_version == HBM_MAJOR_VERSION_PGI && mei_hbm_config_features()
968 dev->version.minor_version >= HBM_MINOR_VERSION_PGI) mei_hbm_config_features()
969 dev->hbm_f_pg_supported = 1; mei_hbm_config_features()
971 if (dev->version.major_version >= HBM_MAJOR_VERSION_DC) mei_hbm_config_features()
972 dev->hbm_f_dc_supported = 1; mei_hbm_config_features()
975 if (dev->version.major_version >= HBM_MAJOR_VERSION_DOT) mei_hbm_config_features()
976 dev->hbm_f_dot_supported = 1; mei_hbm_config_features()
979 if (dev->version.major_version >= HBM_MAJOR_VERSION_EV) mei_hbm_config_features()
980 dev->hbm_f_ev_supported = 1; mei_hbm_config_features()
987 * @dev: the device structure
990 bool mei_hbm_version_is_supported(struct mei_device *dev) mei_hbm_version_is_supported() argument
992 return (dev->version.major_version < HBM_MAJOR_VERSION) || mei_hbm_version_is_supported()
993 (dev->version.major_version == HBM_MAJOR_VERSION && mei_hbm_version_is_supported()
994 dev->version.minor_version <= HBM_MINOR_VERSION); mei_hbm_version_is_supported()
1001 * @dev: the device structure
1006 int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) mei_hbm_dispatch() argument
1020 BUG_ON(hdr->length >= sizeof(dev->rd_msg_buf)); mei_hbm_dispatch()
1021 mei_read_slots(dev, dev->rd_msg_buf, hdr->length); mei_hbm_dispatch()
1022 mei_msg = (struct mei_bus_message *)dev->rd_msg_buf; mei_hbm_dispatch()
1028 if (dev->hbm_state == MEI_HBM_IDLE) { mei_hbm_dispatch()
1029 dev_dbg(dev->dev, "hbm: state is idle ignore spurious messages\n"); mei_hbm_dispatch()
1035 dev_dbg(dev->dev, "hbm: start: response message received.\n"); mei_hbm_dispatch()
1037 dev->init_clients_timer = 0; mei_hbm_dispatch()
1041 dev_dbg(dev->dev, "HBM VERSION: DRIVER=%02d:%02d DEVICE=%02d:%02d\n", mei_hbm_dispatch()
1047 dev->version.major_version = HBM_MAJOR_VERSION; mei_hbm_dispatch()
1048 dev->version.minor_version = HBM_MINOR_VERSION; mei_hbm_dispatch()
1050 dev->version.major_version = mei_hbm_dispatch()
1052 dev->version.minor_version = mei_hbm_dispatch()
1056 if (!mei_hbm_version_is_supported(dev)) { mei_hbm_dispatch()
1057 dev_warn(dev->dev, "hbm: start: version mismatch - stopping the driver.\n"); mei_hbm_dispatch()
1059 dev->hbm_state = MEI_HBM_STOPPED; mei_hbm_dispatch()
1060 if (mei_hbm_stop_req(dev)) { mei_hbm_dispatch()
1061 dev_err(dev->dev, "hbm: start: failed to send stop request\n"); mei_hbm_dispatch()
1067 mei_hbm_config_features(dev); mei_hbm_dispatch()
1069 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || mei_hbm_dispatch()
1070 dev->hbm_state != MEI_HBM_STARTING) { mei_hbm_dispatch()
1071 dev_err(dev->dev, "hbm: start: state mismatch, [%d, %d]\n", mei_hbm_dispatch()
1072 dev->dev_state, dev->hbm_state); mei_hbm_dispatch()
1076 if (mei_hbm_enum_clients_req(dev)) { mei_hbm_dispatch()
1077 dev_err(dev->dev, "hbm: start: failed to send enumeration request\n"); mei_hbm_dispatch()
1081 wake_up(&dev->wait_hbm_start); mei_hbm_dispatch()
1085 dev_dbg(dev->dev, "hbm: client connect response: message received.\n"); mei_hbm_dispatch()
1086 mei_hbm_cl_res(dev, cl_cmd, MEI_FOP_CONNECT); mei_hbm_dispatch()
1090 dev_dbg(dev->dev, "hbm: client disconnect response: message received.\n"); mei_hbm_dispatch()
1091 mei_hbm_cl_res(dev, cl_cmd, MEI_FOP_DISCONNECT); mei_hbm_dispatch()
1095 dev_dbg(dev->dev, "hbm: client flow control response: message received.\n"); mei_hbm_dispatch()
1098 mei_hbm_cl_flow_control_res(dev, flow_control); mei_hbm_dispatch()
1102 dev_dbg(dev->dev, "hbm: power gate isolation entry response received\n"); mei_hbm_dispatch()
1103 ret = mei_hbm_pg_enter_res(dev); mei_hbm_dispatch()
1109 dev_dbg(dev->dev, "hbm: power gate isolation exit request received\n"); mei_hbm_dispatch()
1110 ret = mei_hbm_pg_exit_res(dev); mei_hbm_dispatch()
1116 dev_dbg(dev->dev, "hbm: properties response: message received.\n"); mei_hbm_dispatch()
1118 dev->init_clients_timer = 0; mei_hbm_dispatch()
1120 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || mei_hbm_dispatch()
1121 dev->hbm_state != MEI_HBM_CLIENT_PROPERTIES) { mei_hbm_dispatch()
1122 dev_err(dev->dev, "hbm: properties response: state mismatch, [%d, %d]\n", mei_hbm_dispatch()
1123 dev->dev_state, dev->hbm_state); mei_hbm_dispatch()
1130 dev_err(dev->dev, "hbm: properties response: wrong status = %d %s\n", mei_hbm_dispatch()
1136 mei_hbm_me_cl_add(dev, props_res); mei_hbm_dispatch()
1138 dev->me_client_index++; mei_hbm_dispatch()
1141 if (mei_hbm_prop_req(dev)) mei_hbm_dispatch()
1147 dev_dbg(dev->dev, "hbm: enumeration response: message received\n"); mei_hbm_dispatch()
1149 dev->init_clients_timer = 0; mei_hbm_dispatch()
1152 BUILD_BUG_ON(sizeof(dev->me_clients_map) mei_hbm_dispatch()
1154 memcpy(dev->me_clients_map, enum_res->valid_addresses, mei_hbm_dispatch()
1157 if (dev->dev_state != MEI_DEV_INIT_CLIENTS || mei_hbm_dispatch()
1158 dev->hbm_state != MEI_HBM_ENUM_CLIENTS) { mei_hbm_dispatch()
1159 dev_err(dev->dev, "hbm: enumeration response: state mismatch, [%d, %d]\n", mei_hbm_dispatch()
1160 dev->dev_state, dev->hbm_state); mei_hbm_dispatch()
1164 dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES; mei_hbm_dispatch()
1167 if (mei_hbm_prop_req(dev)) mei_hbm_dispatch()
1173 dev_dbg(dev->dev, "hbm: stop response: message received\n"); mei_hbm_dispatch()
1175 dev->init_clients_timer = 0; mei_hbm_dispatch()
1177 if (dev->hbm_state != MEI_HBM_STOPPED) { mei_hbm_dispatch()
1178 dev_err(dev->dev, "hbm: stop response: state mismatch, [%d, %d]\n", mei_hbm_dispatch()
1179 dev->dev_state, dev->hbm_state); mei_hbm_dispatch()
1183 dev->dev_state = MEI_DEV_POWER_DOWN; mei_hbm_dispatch()
1184 dev_info(dev->dev, "hbm: stop response: resetting.\n"); mei_hbm_dispatch()
1190 dev_dbg(dev->dev, "hbm: disconnect request: message received\n"); mei_hbm_dispatch()
1193 mei_hbm_fw_disconnect_req(dev, disconnect_req); mei_hbm_dispatch()
1197 dev_dbg(dev->dev, "hbm: stop request: message received\n"); mei_hbm_dispatch()
1198 dev->hbm_state = MEI_HBM_STOPPED; mei_hbm_dispatch()
1199 if (mei_hbm_stop_req(dev)) { mei_hbm_dispatch()
1200 dev_err(dev->dev, "hbm: stop request: failed to send stop request\n"); mei_hbm_dispatch()
1206 dev_dbg(dev->dev, "hbm: add client request received\n"); mei_hbm_dispatch()
1211 if (dev->hbm_state <= MEI_HBM_ENUM_CLIENTS || mei_hbm_dispatch()
1212 dev->hbm_state >= MEI_HBM_STOPPED) { mei_hbm_dispatch()
1213 dev_err(dev->dev, "hbm: add client: state mismatch, [%d, %d]\n", mei_hbm_dispatch()
1214 dev->dev_state, dev->hbm_state); mei_hbm_dispatch()
1218 ret = mei_hbm_fw_add_cl_req(dev, add_cl_req); mei_hbm_dispatch()
1220 dev_err(dev->dev, "hbm: add client: failed to send response %d\n", mei_hbm_dispatch()
1224 dev_dbg(dev->dev, "hbm: add client request processed\n"); mei_hbm_dispatch()
1228 dev_dbg(dev->dev, "hbm: notify response received\n"); mei_hbm_dispatch()
1229 mei_hbm_cl_res(dev, cl_cmd, notify_res_to_fop(cl_cmd)); mei_hbm_dispatch()
1233 dev_dbg(dev->dev, "hbm: notification\n"); mei_hbm_dispatch()
1234 mei_hbm_cl_notify(dev, cl_cmd); mei_hbm_dispatch()
H A Dpci-me.c97 static inline void mei_me_set_pm_domain(struct mei_device *dev);
98 static inline void mei_me_unset_pm_domain(struct mei_device *dev);
100 static inline void mei_me_set_pm_domain(struct mei_device *dev) {} mei_me_unset_pm_domain() argument
101 static inline void mei_me_unset_pm_domain(struct mei_device *dev) {} mei_me_unset_pm_domain() argument
116 dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n"); mei_me_quirk_probe()
134 struct mei_device *dev; mei_me_probe() local
143 /* enable pci dev */ mei_me_probe()
146 dev_err(&pdev->dev, "failed to enable pci device.\n"); mei_me_probe()
154 dev_err(&pdev->dev, "failed to get pci regions.\n"); mei_me_probe()
158 if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) || mei_me_probe()
159 dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) { mei_me_probe()
161 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); mei_me_probe()
163 err = dma_set_coherent_mask(&pdev->dev, mei_me_probe()
167 dev_err(&pdev->dev, "No usable DMA configuration, aborting\n"); mei_me_probe()
172 /* allocates and initializes the mei dev structure */ mei_me_probe()
173 dev = mei_me_dev_init(pdev, cfg); mei_me_probe()
174 if (!dev) { mei_me_probe()
178 hw = to_me_hw(dev); mei_me_probe()
182 dev_err(&pdev->dev, "mapping I/O device memory failure.\n"); mei_me_probe()
194 irqflags, KBUILD_MODNAME, dev); mei_me_probe()
196 dev_err(&pdev->dev, "request_threaded_irq failure. irq = %d\n", mei_me_probe()
201 if (mei_start(dev)) { mei_me_probe()
202 dev_err(&pdev->dev, "init hw failure.\n"); mei_me_probe()
207 pm_runtime_set_autosuspend_delay(&pdev->dev, MEI_ME_RPM_TIMEOUT); mei_me_probe()
208 pm_runtime_use_autosuspend(&pdev->dev); mei_me_probe()
210 err = mei_register(dev, &pdev->dev); mei_me_probe()
214 pci_set_drvdata(pdev, dev); mei_me_probe()
216 schedule_delayed_work(&dev->timer_work, HZ); mei_me_probe()
224 mei_me_set_pm_domain(dev); mei_me_probe()
226 if (mei_pg_is_enabled(dev)) mei_me_probe()
227 pm_runtime_put_noidle(&pdev->dev); mei_me_probe()
229 dev_dbg(&pdev->dev, "initialization successful.\n"); mei_me_probe()
234 mei_cancel_work(dev); mei_me_probe()
235 mei_disable_interrupts(dev); mei_me_probe()
236 free_irq(pdev->irq, dev); mei_me_probe()
241 kfree(dev); mei_me_probe()
247 dev_err(&pdev->dev, "initialization failed.\n"); mei_me_probe()
261 struct mei_device *dev; mei_me_remove() local
264 dev = pci_get_drvdata(pdev); mei_me_remove()
265 if (!dev) mei_me_remove()
268 if (mei_pg_is_enabled(dev)) mei_me_remove()
269 pm_runtime_get_noresume(&pdev->dev); mei_me_remove()
271 hw = to_me_hw(dev); mei_me_remove()
274 dev_dbg(&pdev->dev, "stop\n"); mei_me_remove()
275 mei_stop(dev); mei_me_remove()
278 mei_me_unset_pm_domain(dev); mei_me_remove()
281 mei_disable_interrupts(dev); mei_me_remove()
283 free_irq(pdev->irq, dev); mei_me_remove()
289 mei_deregister(dev); mei_me_remove()
291 kfree(dev); mei_me_remove()
302 struct mei_device *dev = pci_get_drvdata(pdev); mei_me_pci_suspend() local
304 if (!dev) mei_me_pci_suspend()
307 dev_dbg(&pdev->dev, "suspend\n"); mei_me_pci_suspend()
309 mei_stop(dev); mei_me_pci_suspend()
311 mei_disable_interrupts(dev); mei_me_pci_suspend()
313 free_irq(pdev->irq, dev); mei_me_pci_suspend()
322 struct mei_device *dev; mei_me_pci_resume() local
326 dev = pci_get_drvdata(pdev); mei_me_pci_resume()
327 if (!dev) mei_me_pci_resume()
338 irqflags, KBUILD_MODNAME, dev); mei_me_pci_resume()
341 dev_err(&pdev->dev, "request_threaded_irq failed: irq = %d.\n", mei_me_pci_resume()
346 err = mei_restart(dev); mei_me_pci_resume()
351 schedule_delayed_work(&dev->timer_work, HZ); mei_me_pci_resume()
361 struct mei_device *dev; mei_me_pm_runtime_idle() local
363 dev_dbg(&pdev->dev, "rpm: me: runtime_idle\n"); mei_me_pm_runtime_idle()
365 dev = pci_get_drvdata(pdev); mei_me_pm_runtime_idle()
366 if (!dev) mei_me_pm_runtime_idle()
368 if (mei_write_is_idle(dev)) mei_me_pm_runtime_idle()
377 struct mei_device *dev; mei_me_pm_runtime_suspend() local
380 dev_dbg(&pdev->dev, "rpm: me: runtime suspend\n"); mei_me_pm_runtime_suspend()
382 dev = pci_get_drvdata(pdev); mei_me_pm_runtime_suspend()
383 if (!dev) mei_me_pm_runtime_suspend()
386 mutex_lock(&dev->device_lock); mei_me_pm_runtime_suspend()
388 if (mei_write_is_idle(dev)) mei_me_pm_runtime_suspend()
389 ret = mei_me_pg_enter_sync(dev); mei_me_pm_runtime_suspend()
393 mutex_unlock(&dev->device_lock); mei_me_pm_runtime_suspend()
395 dev_dbg(&pdev->dev, "rpm: me: runtime suspend ret=%d\n", ret); mei_me_pm_runtime_suspend()
403 struct mei_device *dev; mei_me_pm_runtime_resume() local
406 dev_dbg(&pdev->dev, "rpm: me: runtime resume\n"); mei_me_pm_runtime_resume()
408 dev = pci_get_drvdata(pdev); mei_me_pm_runtime_resume()
409 if (!dev) mei_me_pm_runtime_resume()
412 mutex_lock(&dev->device_lock); mei_me_pm_runtime_resume()
414 ret = mei_me_pg_exit_sync(dev); mei_me_pm_runtime_resume()
416 mutex_unlock(&dev->device_lock); mei_me_pm_runtime_resume()
418 dev_dbg(&pdev->dev, "rpm: me: runtime resume ret = %d\n", ret); mei_me_pm_runtime_resume()
426 * @dev: mei_device
428 static inline void mei_me_set_pm_domain(struct mei_device *dev) mei_me_set_pm_domain() argument
430 struct pci_dev *pdev = to_pci_dev(dev->dev); mei_me_set_pm_domain()
432 if (pdev->dev.bus && pdev->dev.bus->pm) { mei_me_set_pm_domain()
433 dev->pg_domain.ops = *pdev->dev.bus->pm; mei_me_set_pm_domain()
435 dev->pg_domain.ops.runtime_suspend = mei_me_pm_runtime_suspend; mei_me_set_pm_domain()
436 dev->pg_domain.ops.runtime_resume = mei_me_pm_runtime_resume; mei_me_set_pm_domain()
437 dev->pg_domain.ops.runtime_idle = mei_me_pm_runtime_idle; mei_me_set_pm_domain()
439 pdev->dev.pm_domain = &dev->pg_domain; mei_me_set_pm_domain()
446 * @dev: mei_device
448 static inline void mei_me_unset_pm_domain(struct mei_device *dev) mei_me_unset_pm_domain() argument
451 dev->dev->pm_domain = NULL; mei_me_unset_pm_domain()
H A Dinterrupt.c37 * @dev: mei device
40 void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *compl_list) mei_irq_compl_handler() argument
49 dev_dbg(dev->dev, "completing call back.\n"); mei_irq_compl_handler()
50 if (cl == &dev->iamthif_cl) mei_irq_compl_handler()
51 mei_amthif_complete(dev, cb); mei_irq_compl_handler()
76 * @dev: mei device
79 void mei_irq_discard_msg(struct mei_device *dev, struct mei_msg_hdr *hdr) mei_irq_discard_msg() argument
85 mei_read_slots(dev, dev->rd_msg_buf, hdr->length); mei_irq_discard_msg()
86 dev_dbg(dev->dev, "discarding message " MEI_HDR_FMT "\n", mei_irq_discard_msg()
103 struct mei_device *dev = cl->dev; mei_cl_irq_read_msg() local
109 cl_err(dev, cl, "pending read cb not found\n"); mei_cl_irq_read_msg()
114 cl_dbg(dev, cl, "not connected\n"); mei_cl_irq_read_msg()
120 cl_err(dev, cl, "response buffer is not allocated.\n"); mei_cl_irq_read_msg()
127 cl_dbg(dev, cl, "message overflow. size %d len %d idx %ld\n", mei_cl_irq_read_msg()
142 mei_read_slots(dev, buffer, mei_hdr->length); mei_cl_irq_read_msg()
148 cl_dbg(dev, cl, "completed read length = %lu\n", cb->buf_idx); mei_cl_irq_read_msg()
151 pm_runtime_mark_last_busy(dev->dev); mei_cl_irq_read_msg()
152 pm_request_autosuspend(dev->dev); mei_cl_irq_read_msg()
157 mei_irq_discard_msg(dev, mei_hdr); mei_cl_irq_read_msg()
174 struct mei_device *dev = cl->dev; mei_cl_irq_disconnect_rsp() local
179 slots = mei_hbuf_empty_slots(dev); mei_cl_irq_disconnect_rsp()
185 ret = mei_hbm_cl_disconnect_rsp(dev, cl); mei_cl_irq_disconnect_rsp()
204 struct mei_device *dev = cl->dev; mei_cl_irq_read() local
210 slots = mei_hbuf_empty_slots(dev); mei_cl_irq_read()
215 ret = mei_hbm_cl_flow_control_req(dev, cl); mei_cl_irq_read()
232 * @dev: the device structure
238 int mei_irq_read_handler(struct mei_device *dev, mei_irq_read_handler() argument
245 if (!dev->rd_msg_hdr) { mei_irq_read_handler()
246 dev->rd_msg_hdr = mei_read_hdr(dev); mei_irq_read_handler()
248 dev_dbg(dev->dev, "slots =%08x.\n", *slots); mei_irq_read_handler()
250 mei_hdr = (struct mei_msg_hdr *) &dev->rd_msg_hdr; mei_irq_read_handler()
251 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM(mei_hdr)); mei_irq_read_handler()
253 if (mei_hdr->reserved || !dev->rd_msg_hdr) { mei_irq_read_handler()
254 dev_err(dev->dev, "corrupted message header 0x%08X\n", mei_irq_read_handler()
255 dev->rd_msg_hdr); mei_irq_read_handler()
261 dev_err(dev->dev, "less data available than length=%08x.\n", mei_irq_read_handler()
270 ret = mei_hbm_dispatch(dev, mei_hdr); mei_irq_read_handler()
272 dev_dbg(dev->dev, "mei_hbm_dispatch failed ret = %d\n", mei_irq_read_handler()
280 list_for_each_entry(cl, &dev->file_list, link) { mei_irq_read_handler()
282 cl_dbg(dev, cl, "got a message\n"); mei_irq_read_handler()
288 if (&cl->link == &dev->file_list) { mei_irq_read_handler()
289 dev_err(dev->dev, "no destination client found 0x%08X\n", mei_irq_read_handler()
290 dev->rd_msg_hdr); mei_irq_read_handler()
295 if (cl == &dev->iamthif_cl) { mei_irq_read_handler()
304 *slots = mei_count_full_read_slots(dev); mei_irq_read_handler()
305 dev->rd_msg_hdr = 0; mei_irq_read_handler()
309 dev_err(dev->dev, "resetting due to slots overflow.\n"); mei_irq_read_handler()
324 * @dev: the device structure
329 int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list) mei_irq_write_handler() argument
339 if (!mei_hbuf_acquire(dev)) mei_irq_write_handler()
342 slots = mei_hbuf_empty_slots(dev); mei_irq_write_handler()
347 dev_dbg(dev->dev, "complete all waiting for write cb.\n"); mei_irq_write_handler()
349 list = &dev->write_waiting_list; mei_irq_write_handler()
354 cl_dbg(dev, cl, "MEI WRITE COMPLETE\n"); mei_irq_write_handler()
359 if (dev->wd_state == MEI_WD_STOPPING) { mei_irq_write_handler()
360 dev->wd_state = MEI_WD_IDLE; mei_irq_write_handler()
361 wake_up(&dev->wait_stop_wd); mei_irq_write_handler()
364 if (mei_cl_is_connected(&dev->wd_cl)) { mei_irq_write_handler()
365 if (dev->wd_pending && mei_irq_write_handler()
366 mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) { mei_irq_write_handler()
367 ret = mei_wd_send(dev); mei_irq_write_handler()
370 dev->wd_pending = false; mei_irq_write_handler()
375 dev_dbg(dev->dev, "complete control write list cb.\n"); mei_irq_write_handler()
376 list_for_each_entry_safe(cb, next, &dev->ctrl_wr_list.list, list) { mei_irq_write_handler()
419 dev_dbg(dev->dev, "complete write list cb.\n"); mei_irq_write_handler()
420 list_for_each_entry_safe(cb, next, &dev->write_list.list, list) { mei_irq_write_handler()
422 if (cl == &dev->iamthif_cl) mei_irq_write_handler()
441 struct mei_device *dev = cl->dev; mei_connect_timeout() local
444 if (dev->hbm_f_dot_supported) { mei_connect_timeout()
450 mei_reset(dev); mei_connect_timeout()
464 struct mei_device *dev = container_of(work, mei_timer() local
468 mutex_lock(&dev->device_lock); mei_timer()
471 if (dev->dev_state == MEI_DEV_INIT_CLIENTS && mei_timer()
472 dev->hbm_state != MEI_HBM_IDLE) { mei_timer()
474 if (dev->init_clients_timer) { mei_timer()
475 if (--dev->init_clients_timer == 0) { mei_timer()
476 dev_err(dev->dev, "timer: init clients timeout hbm_state = %d.\n", mei_timer()
477 dev->hbm_state); mei_timer()
478 mei_reset(dev); mei_timer()
484 if (dev->dev_state != MEI_DEV_ENABLED) mei_timer()
488 list_for_each_entry(cl, &dev->file_list, link) { mei_timer()
491 dev_err(dev->dev, "timer: connect/disconnect timeout.\n"); mei_timer()
498 if (!mei_cl_is_connected(&dev->iamthif_cl)) mei_timer()
501 if (dev->iamthif_stall_timer) { mei_timer()
502 if (--dev->iamthif_stall_timer == 0) { mei_timer()
503 dev_err(dev->dev, "timer: amthif hanged.\n"); mei_timer()
504 mei_reset(dev); mei_timer()
505 dev->iamthif_canceled = false; mei_timer()
506 dev->iamthif_state = MEI_IAMTHIF_IDLE; mei_timer()
507 dev->iamthif_timer = 0; mei_timer()
509 mei_io_cb_free(dev->iamthif_current_cb); mei_timer()
510 dev->iamthif_current_cb = NULL; mei_timer()
512 dev->iamthif_file_object = NULL; mei_timer()
513 mei_amthif_run_next_cmd(dev); mei_timer()
517 if (dev->iamthif_timer) { mei_timer()
519 timeout = dev->iamthif_timer + mei_timer()
522 dev_dbg(dev->dev, "dev->iamthif_timer = %ld\n", mei_timer()
523 dev->iamthif_timer); mei_timer()
524 dev_dbg(dev->dev, "timeout = %ld\n", timeout); mei_timer()
525 dev_dbg(dev->dev, "jiffies = %ld\n", jiffies); mei_timer()
532 dev_dbg(dev->dev, "freeing AMTHI for other requests\n"); mei_timer()
534 mei_io_list_flush(&dev->amthif_rd_complete_list, mei_timer()
535 &dev->iamthif_cl); mei_timer()
536 mei_io_cb_free(dev->iamthif_current_cb); mei_timer()
537 dev->iamthif_current_cb = NULL; mei_timer()
539 dev->iamthif_file_object->private_data = NULL; mei_timer()
540 dev->iamthif_file_object = NULL; mei_timer()
541 dev->iamthif_timer = 0; mei_timer()
542 mei_amthif_run_next_cmd(dev); mei_timer()
547 if (dev->dev_state != MEI_DEV_DISABLED) mei_timer()
548 schedule_delayed_work(&dev->timer_work, 2 * HZ); mei_timer()
549 mutex_unlock(&dev->device_lock); mei_timer()
/linux-4.4.14/drivers/isdn/pcbit/
H A Dlayer2.c53 static void pcbit_transmit(struct pcbit_dev *dev);
55 static void pcbit_recv_ack(struct pcbit_dev *dev, unsigned char ack);
57 static void pcbit_l2_error(struct pcbit_dev *dev);
58 static void pcbit_l2_active_conf(struct pcbit_dev *dev, u_char info);
61 static void pcbit_firmware_bug(struct pcbit_dev *dev);
64 pcbit_sched_delivery(struct pcbit_dev *dev) pcbit_sched_delivery() argument
66 schedule_work(&dev->qdelivery); pcbit_sched_delivery()
75 pcbit_l2_write(struct pcbit_dev *dev, ulong msg, ushort refnum, pcbit_l2_write() argument
82 if (dev->l2_state != L2_RUNNING && dev->l2_state != L2_LOADING) { pcbit_l2_write()
105 spin_lock_irqsave(&dev->lock, flags); pcbit_l2_write()
107 if (dev->write_queue == NULL) { pcbit_l2_write()
108 dev->write_queue = frame; pcbit_l2_write()
109 spin_unlock_irqrestore(&dev->lock, flags); pcbit_l2_write()
110 pcbit_transmit(dev); pcbit_l2_write()
112 for (ptr = dev->write_queue; ptr->next; ptr = ptr->next); pcbit_l2_write()
115 spin_unlock_irqrestore(&dev->lock, flags); pcbit_l2_write()
121 pcbit_tx_update(struct pcbit_dev *dev, ushort len) pcbit_tx_update() argument
125 dev->send_seq = (dev->send_seq + 1) % 8; pcbit_tx_update()
127 dev->fsize[dev->send_seq] = len; pcbit_tx_update()
129 info |= dev->rcv_seq << 3; pcbit_tx_update()
130 info |= dev->send_seq; pcbit_tx_update()
132 writeb(info, dev->sh_mem + BANK4); pcbit_tx_update()
141 pcbit_transmit(struct pcbit_dev *dev) pcbit_transmit() argument
152 if (dev->l2_state != L2_RUNNING && dev->l2_state != L2_LOADING) pcbit_transmit()
155 unacked = (dev->send_seq + (8 - dev->unack_seq)) & 0x07; pcbit_transmit()
157 spin_lock_irqsave(&dev->lock, flags); pcbit_transmit()
159 if (dev->free > 16 && dev->write_queue && unacked < 7) { pcbit_transmit()
161 if (!dev->w_busy) pcbit_transmit()
162 dev->w_busy = 1; pcbit_transmit()
164 spin_unlock_irqrestore(&dev->lock, flags); pcbit_transmit()
169 frame = dev->write_queue; pcbit_transmit()
170 free = dev->free; pcbit_transmit()
172 spin_unlock_irqrestore(&dev->lock, flags); pcbit_transmit()
194 pcbit_writew(dev, flen - FRAME_HDR_LEN); pcbit_transmit()
196 pcbit_writeb(dev, GET_MSG_CPU(msg)); pcbit_transmit()
198 pcbit_writeb(dev, GET_MSG_PROC(msg)); pcbit_transmit()
201 pcbit_writew(dev, frame->hdr_len + PREHDR_LEN); pcbit_transmit()
204 pcbit_writew(dev, frame->dt_len); pcbit_transmit()
212 pcbit_writew(dev, frame->hdr_len + PREHDR_LEN); pcbit_transmit()
215 pcbit_writew(dev, 0); pcbit_transmit()
218 pcbit_writeb(dev, GET_MSG_CMD(msg)); pcbit_transmit()
219 pcbit_writeb(dev, GET_MSG_SCMD(msg)); pcbit_transmit()
222 pcbit_writew(dev, frame->refnum); pcbit_transmit()
235 pcbit_writew(dev, tt); pcbit_transmit()
245 memcpy_topcbit(dev, frame->skb->data + frame->copied, pcbit_transmit()
250 dev->free -= flen; pcbit_transmit()
251 pcbit_tx_update(dev, flen); pcbit_transmit()
253 spin_lock_irqsave(&dev->lock, flags); pcbit_transmit()
257 dev->write_queue = frame->next; pcbit_transmit()
265 dev->w_busy = 0; pcbit_transmit()
266 spin_unlock_irqrestore(&dev->lock, flags); pcbit_transmit()
268 spin_unlock_irqrestore(&dev->lock, flags); pcbit_transmit()
271 unacked, dev->free, dev->write_queue ? "not empty" : pcbit_transmit()
287 struct pcbit_dev *dev = pcbit_deliver() local
290 spin_lock_irqsave(&dev->lock, flags); pcbit_deliver()
292 while ((frame = dev->read_queue)) { pcbit_deliver()
293 dev->read_queue = frame->next; pcbit_deliver()
294 spin_unlock_irqrestore(&dev->lock, flags); pcbit_deliver()
307 pcbit_l3_receive(dev, frame->msg, frame->skb, frame->hdr_len, pcbit_deliver()
312 spin_lock_irqsave(&dev->lock, flags); pcbit_deliver()
315 spin_unlock_irqrestore(&dev->lock, flags); pcbit_deliver()
323 pcbit_receive(struct pcbit_dev *dev) pcbit_receive() argument
332 if (dev->l2_state != L2_RUNNING && dev->l2_state != L2_LOADING) pcbit_receive()
335 tt = pcbit_readw(dev); pcbit_receive()
340 pcbit_l2_error(dev); pcbit_receive()
346 if (dev->read_frame) { pcbit_receive()
349 kfree_skb(dev->read_frame->skb); pcbit_receive()
350 kfree(dev->read_frame); pcbit_receive()
351 dev->read_frame = NULL; pcbit_receive()
360 cpu = pcbit_readb(dev); pcbit_receive()
361 proc = pcbit_readb(dev); pcbit_receive()
367 pcbit_l2_error(dev); pcbit_receive()
375 frame->hdr_len = pcbit_readw(dev); pcbit_receive()
376 frame->dt_len = pcbit_readw(dev); pcbit_receive()
390 pcbit_firmware_bug(dev); pcbit_receive()
401 pcbit_l2_error(dev); pcbit_receive()
424 if (!(frame = dev->read_frame)) { pcbit_receive()
427 dev->readptr += tt; pcbit_receive()
428 if (dev->readptr > dev->sh_mem + BANK2 + BANKLEN) pcbit_receive()
429 dev->readptr -= BANKLEN; pcbit_receive()
435 memcpy_frompcbit(dev, skb_put(frame->skb, tt), tt); pcbit_receive()
438 spin_lock_irqsave(&dev->lock, flags); pcbit_receive()
442 dev->read_frame = NULL; pcbit_receive()
444 if (dev->read_queue) { pcbit_receive()
446 for (ptr = dev->read_queue; ptr->next; ptr = ptr->next); pcbit_receive()
449 dev->read_queue = frame; pcbit_receive()
452 dev->read_frame = frame; pcbit_receive()
454 spin_unlock_irqrestore(&dev->lock, flags); pcbit_receive()
464 pcbit_fake_conf(struct pcbit_dev *dev, struct pcbit_chan *chan) pcbit_fake_conf() argument
471 ictl.driver = dev->id; pcbit_fake_conf()
474 dev->dev_if->statcallb(&ictl); pcbit_fake_conf()
479 pcbit_firmware_bug(struct pcbit_dev *dev) pcbit_firmware_bug() argument
483 chan = dev->b1; pcbit_firmware_bug()
486 pcbit_fake_conf(dev, chan); pcbit_firmware_bug()
488 chan = dev->b2; pcbit_firmware_bug()
491 pcbit_fake_conf(dev, chan); pcbit_firmware_bug()
498 struct pcbit_dev *dev; pcbit_irq_handler() local
503 dev = (struct pcbit_dev *) devptr; pcbit_irq_handler()
505 if (!dev) { pcbit_irq_handler()
509 if (dev->interrupt) { pcbit_irq_handler()
513 dev->interrupt = 1; pcbit_irq_handler()
515 info = readb(dev->sh_mem + BANK3); pcbit_irq_handler()
517 if (dev->l2_state == L2_STARTING || dev->l2_state == L2_ERROR) { pcbit_irq_handler()
518 pcbit_l2_active_conf(dev, info); pcbit_irq_handler()
519 dev->interrupt = 0; pcbit_irq_handler()
526 pcbit_l2_error(dev); pcbit_irq_handler()
527 dev->interrupt = 0; pcbit_irq_handler()
530 if (dev->l2_state != L2_RUNNING && dev->l2_state != L2_LOADING) { pcbit_irq_handler()
531 dev->interrupt = 0; pcbit_irq_handler()
537 dev->interrupt = 0; pcbit_irq_handler()
539 if (read_seq != dev->rcv_seq) { pcbit_irq_handler()
540 while (read_seq != dev->rcv_seq) { pcbit_irq_handler()
541 pcbit_receive(dev); pcbit_irq_handler()
542 dev->rcv_seq = (dev->rcv_seq + 1) % 8; pcbit_irq_handler()
544 pcbit_sched_delivery(dev); pcbit_irq_handler()
546 if (ack_seq != dev->unack_seq) { pcbit_irq_handler()
547 pcbit_recv_ack(dev, ack_seq); pcbit_irq_handler()
549 info = dev->rcv_seq << 3; pcbit_irq_handler()
550 info |= dev->send_seq; pcbit_irq_handler()
552 writeb(info, dev->sh_mem + BANK4); pcbit_irq_handler()
558 pcbit_l2_active_conf(struct pcbit_dev *dev, u_char info) pcbit_l2_active_conf() argument
562 state = dev->l2_state; pcbit_l2_active_conf()
570 dev->rcv_seq = info & 0x07U; pcbit_l2_active_conf()
571 dev->l2_state = L2_RUNNING; pcbit_l2_active_conf()
573 dev->l2_state = L2_DOWN; pcbit_l2_active_conf()
576 wake_up_interruptible(&dev->set_running_wq); pcbit_l2_active_conf()
578 if (state == L2_ERROR && dev->l2_state == L2_RUNNING) { pcbit_l2_active_conf()
579 pcbit_transmit(dev); pcbit_l2_active_conf()
587 struct pcbit_dev *dev; pcbit_l2_err_recover() local
590 dev = (struct pcbit_dev *) data; pcbit_l2_err_recover()
592 del_timer(&dev->error_recover_timer); pcbit_l2_err_recover()
593 if (dev->w_busy || dev->r_busy) { pcbit_l2_err_recover()
594 init_timer(&dev->error_recover_timer); pcbit_l2_err_recover()
595 dev->error_recover_timer.expires = jiffies + ERRTIME; pcbit_l2_err_recover()
596 add_timer(&dev->error_recover_timer); pcbit_l2_err_recover()
599 dev->w_busy = dev->r_busy = 1; pcbit_l2_err_recover()
601 if (dev->read_frame) { pcbit_l2_err_recover()
602 kfree_skb(dev->read_frame->skb); pcbit_l2_err_recover()
603 kfree(dev->read_frame); pcbit_l2_err_recover()
604 dev->read_frame = NULL; pcbit_l2_err_recover()
606 if (dev->write_queue) { pcbit_l2_err_recover()
607 frame = dev->write_queue; pcbit_l2_err_recover()
609 dev->write_queue = dev->write_queue->next; pcbit_l2_err_recover()
619 dev->rcv_seq = dev->send_seq = dev->unack_seq = 0; pcbit_l2_err_recover()
620 dev->free = 511; pcbit_l2_err_recover()
621 dev->l2_state = L2_ERROR; pcbit_l2_err_recover()
624 pcbit_firmware_bug(dev); pcbit_l2_err_recover()
626 dev->writeptr = dev->sh_mem; pcbit_l2_err_recover()
627 dev->readptr = dev->sh_mem + BANK2; pcbit_l2_err_recover()
629 writeb((0x80U | ((dev->rcv_seq & 0x07) << 3) | (dev->send_seq & 0x07)), pcbit_l2_err_recover()
630 dev->sh_mem + BANK4); pcbit_l2_err_recover()
631 dev->w_busy = dev->r_busy = 0; pcbit_l2_err_recover()
636 pcbit_l2_error(struct pcbit_dev *dev) pcbit_l2_error() argument
638 if (dev->l2_state == L2_RUNNING) { pcbit_l2_error()
643 log_state(dev); pcbit_l2_error()
646 dev->l2_state = L2_DOWN; pcbit_l2_error()
648 init_timer(&dev->error_recover_timer); pcbit_l2_error()
649 dev->error_recover_timer.function = &pcbit_l2_err_recover; pcbit_l2_error()
650 dev->error_recover_timer.data = (ulong) dev; pcbit_l2_error()
651 dev->error_recover_timer.expires = jiffies + ERRTIME; pcbit_l2_error()
652 add_timer(&dev->error_recover_timer); pcbit_l2_error()
659 * update dev->free
664 pcbit_recv_ack(struct pcbit_dev *dev, unsigned char ack) pcbit_recv_ack() argument
670 unacked = (dev->send_seq + (8 - dev->unack_seq)) & 0x07; pcbit_recv_ack()
672 /* dev->unack_seq < ack <= dev->send_seq; */ pcbit_recv_ack()
676 if (dev->send_seq > dev->unack_seq) { pcbit_recv_ack()
677 if (ack <= dev->unack_seq || ack > dev->send_seq) { pcbit_recv_ack()
679 "layer 2 ack unacceptable - dev %d", pcbit_recv_ack()
680 dev->id); pcbit_recv_ack()
682 pcbit_l2_error(dev); pcbit_recv_ack()
683 } else if (ack > dev->send_seq && ack <= dev->unack_seq) { pcbit_recv_ack()
685 "layer 2 ack unacceptable - dev %d", pcbit_recv_ack()
686 dev->id); pcbit_recv_ack()
687 pcbit_l2_error(dev); pcbit_recv_ack()
693 i = dev->unack_seq; pcbit_recv_ack()
696 dev->unack_seq = i = (i + 1) % 8; pcbit_recv_ack()
697 dev->free += dev->fsize[i]; pcbit_recv_ack()
701 while (count < 7 && dev->write_queue) { pcbit_recv_ack()
702 u8 lsend_seq = dev->send_seq; pcbit_recv_ack()
704 pcbit_transmit(dev); pcbit_recv_ack()
706 if (dev->send_seq == lsend_seq) pcbit_recv_ack()
H A Ddrv.c64 static int set_protocol_running(struct pcbit_dev *dev);
66 static void pcbit_clear_msn(struct pcbit_dev *dev);
67 static void pcbit_set_msn(struct pcbit_dev *dev, char *list);
68 static int pcbit_check_msn(struct pcbit_dev *dev, char *msn);
73 struct pcbit_dev *dev; pcbit_init_dev() local
76 if ((dev = kzalloc(sizeof(struct pcbit_dev), GFP_KERNEL)) == NULL) pcbit_init_dev()
82 dev_pcbit[board] = dev; pcbit_init_dev()
83 init_waitqueue_head(&dev->set_running_wq); pcbit_init_dev()
84 spin_lock_init(&dev->lock); pcbit_init_dev()
87 dev->ph_mem = mem_base; pcbit_init_dev()
88 if (!request_mem_region(dev->ph_mem, 4096, "PCBIT mem")) { pcbit_init_dev()
91 dev->ph_mem, dev->ph_mem + 4096); pcbit_init_dev()
92 kfree(dev); pcbit_init_dev()
96 dev->sh_mem = ioremap(dev->ph_mem, 4096); pcbit_init_dev()
101 kfree(dev); pcbit_init_dev()
106 dev->b1 = kzalloc(sizeof(struct pcbit_chan), GFP_KERNEL); pcbit_init_dev()
107 if (!dev->b1) { pcbit_init_dev()
109 iounmap(dev->sh_mem); pcbit_init_dev()
110 release_mem_region(dev->ph_mem, 4096); pcbit_init_dev()
111 kfree(dev); pcbit_init_dev()
115 dev->b2 = kzalloc(sizeof(struct pcbit_chan), GFP_KERNEL); pcbit_init_dev()
116 if (!dev->b2) { pcbit_init_dev()
118 kfree(dev->b1); pcbit_init_dev()
119 iounmap(dev->sh_mem); pcbit_init_dev()
120 release_mem_region(dev->ph_mem, 4096); pcbit_init_dev()
121 kfree(dev); pcbit_init_dev()
125 dev->b2->id = 1; pcbit_init_dev()
127 INIT_WORK(&dev->qdelivery, pcbit_deliver); pcbit_init_dev()
133 if (request_irq(irq, &pcbit_irq_handler, 0, pcbit_devname[board], dev) != 0) pcbit_init_dev()
135 kfree(dev->b1); pcbit_init_dev()
136 kfree(dev->b2); pcbit_init_dev()
137 iounmap(dev->sh_mem); pcbit_init_dev()
138 release_mem_region(dev->ph_mem, 4096); pcbit_init_dev()
139 kfree(dev); pcbit_init_dev()
144 dev->irq = irq; pcbit_init_dev()
147 dev->rcv_seq = 0; pcbit_init_dev()
148 dev->send_seq = 0; pcbit_init_dev()
149 dev->unack_seq = 0; pcbit_init_dev()
151 dev->hl_hdrlen = 16; pcbit_init_dev()
156 free_irq(irq, dev); pcbit_init_dev()
157 kfree(dev->b1); pcbit_init_dev()
158 kfree(dev->b2); pcbit_init_dev()
159 iounmap(dev->sh_mem); pcbit_init_dev()
160 release_mem_region(dev->ph_mem, 4096); pcbit_init_dev()
161 kfree(dev); pcbit_init_dev()
166 dev->dev_if = dev_if; pcbit_init_dev()
188 free_irq(irq, dev); pcbit_init_dev()
189 kfree(dev->b1); pcbit_init_dev()
190 kfree(dev->b2); pcbit_init_dev()
191 iounmap(dev->sh_mem); pcbit_init_dev()
192 release_mem_region(dev->ph_mem, 4096); pcbit_init_dev()
193 kfree(dev); pcbit_init_dev()
198 dev->id = dev_if->channels; pcbit_init_dev()
201 dev->l2_state = L2_DOWN; pcbit_init_dev()
202 dev->free = 511; pcbit_init_dev()
205 * set_protocol_running(dev); pcbit_init_dev()
214 struct pcbit_dev *dev; pcbit_terminate() local
216 dev = dev_pcbit[board]; pcbit_terminate()
218 if (dev) { pcbit_terminate()
219 /* unregister_isdn(dev->dev_if); */ pcbit_terminate()
220 free_irq(dev->irq, dev); pcbit_terminate()
221 pcbit_clear_msn(dev); pcbit_terminate()
222 kfree(dev->dev_if); pcbit_terminate()
223 if (dev->b1->fsm_timer.function) pcbit_terminate()
224 del_timer(&dev->b1->fsm_timer); pcbit_terminate()
225 if (dev->b2->fsm_timer.function) pcbit_terminate()
226 del_timer(&dev->b2->fsm_timer); pcbit_terminate()
227 kfree(dev->b1); pcbit_terminate()
228 kfree(dev->b2); pcbit_terminate()
229 iounmap(dev->sh_mem); pcbit_terminate()
230 release_mem_region(dev->ph_mem, 4096); pcbit_terminate()
231 kfree(dev); pcbit_terminate()
238 struct pcbit_dev *dev; pcbit_command() local
242 dev = finddev(ctl->driver); pcbit_command()
244 if (!dev) pcbit_command()
250 chan = (ctl->arg & 0x0F) ? dev->b2 : dev->b1; pcbit_command()
260 pcbit_fsm_event(dev, chan, EV_USR_SETUP_REQ, &info); pcbit_command()
263 pcbit_fsm_event(dev, chan, EV_USR_SETUP_RESP, NULL); pcbit_command()
269 pcbit_fsm_event(dev, chan, EV_USR_RELEASE_REQ, NULL); pcbit_command()
275 pcbit_clear_msn(dev); pcbit_command()
278 pcbit_set_msn(dev, ctl->parm.num); pcbit_command()
302 struct pcbit_dev *dev; pcbit_block_timer() local
307 dev = chan2dev(chan); pcbit_block_timer()
309 if (dev == NULL) { pcbit_block_timer()
321 ictl.driver = dev->id; pcbit_block_timer()
324 dev->dev_if->statcallb(&ictl); pcbit_block_timer()
333 struct pcbit_dev *dev; pcbit_xmit() local
335 dev = finddev(driver); pcbit_xmit()
336 if (dev == NULL) pcbit_xmit()
342 chan = chnum ? dev->b2 : dev->b1; pcbit_xmit()
358 * see net/core/dev.c pcbit_xmit()
382 pcbit_l2_write(dev, MSG_TDATA_REQ, refnum, skb, hdrlen); pcbit_xmit()
389 struct pcbit_dev *dev; pcbit_writecmd() local
397 dev = finddev(driver); pcbit_writecmd()
399 if (!dev) pcbit_writecmd()
405 switch (dev->l2_state) { pcbit_writecmd()
418 memcpy_toio(dev->sh_mem, cbuf, len); pcbit_writecmd()
438 if (!(readb(dev->sh_mem + dev->loadptr))) pcbit_writecmd()
447 writeb(loadbuf[i], dev->sh_mem + dev->loadptr + 1); pcbit_writecmd()
448 writeb(0x01, dev->sh_mem + dev->loadptr); pcbit_writecmd()
450 dev->loadptr += 2; pcbit_writecmd()
451 if (dev->loadptr > LOAD_ZONE_END) pcbit_writecmd()
452 dev->loadptr = LOAD_ZONE_START; pcbit_writecmd()
467 void pcbit_l3_receive(struct pcbit_dev *dev, ulong msg, pcbit_l3_receive() argument
481 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
489 dev->dev_if->rcvcallb_skb(dev->id, chan->id, skb); pcbit_l3_receive()
492 pcbit_l2_write(dev, MSG_TDATA_RESP, refnum, pcbit_l3_receive()
497 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
517 ictl.driver = dev->id; pcbit_l3_receive()
520 dev->dev_if->statcallb(&ictl); pcbit_l3_receive()
529 if (!dev->b1->fsm_state) pcbit_l3_receive()
530 chan = dev->b1; pcbit_l3_receive()
531 else if (!dev->b2->fsm_state) pcbit_l3_receive()
532 chan = dev->b2; pcbit_l3_receive()
538 pcbit_l2_write(dev, MSG_DISC_REQ, refnum, skb2, len); pcbit_l3_receive()
548 pcbit_fsm_event(dev, chan, EV_NET_SETUP, NULL); pcbit_l3_receive()
550 if (pcbit_check_msn(dev, cbdata.data.setup.CallingPN)) pcbit_l3_receive()
551 pcbit_fsm_event(dev, chan, EV_USR_PROCED_REQ, &cbdata); pcbit_l3_receive()
553 pcbit_fsm_event(dev, chan, EV_USR_RELEASE_REQ, NULL); pcbit_l3_receive()
567 dev->b1->s_refnum, pcbit_l3_receive()
568 dev->b2->s_refnum); pcbit_l3_receive()
572 if (dev->b1->fsm_state == ST_CALL_INIT) pcbit_l3_receive()
573 chan = dev->b1; pcbit_l3_receive()
575 if (dev->b2->s_refnum == ST_CALL_INIT) pcbit_l3_receive()
576 chan = dev->b2; pcbit_l3_receive()
585 pcbit_fsm_event(dev, chan, EV_ERROR, NULL); pcbit_l3_receive()
589 pcbit_fsm_event(dev, chan, EV_NET_CALL_PROC, NULL); pcbit_l3_receive()
591 pcbit_fsm_event(dev, chan, EV_NET_SETUP_ACK, NULL); pcbit_l3_receive()
595 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
603 /* pcbit_fsm_event(dev, chan, EV_ERROR, NULL); */ pcbit_l3_receive()
607 pcbit_fsm_event(dev, chan, EV_NET_CONN, NULL); pcbit_l3_receive()
611 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
618 pcbit_fsm_event(dev, chan, EV_NET_CONN_ACK, NULL); pcbit_l3_receive()
626 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
633 pcbit_fsm_event(dev, chan, EV_NET_SELP_RESP, NULL); pcbit_l3_receive()
640 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
647 pcbit_fsm_event(dev, chan, EV_NET_ACTV_RESP, NULL); pcbit_l3_receive()
652 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
659 pcbit_fsm_event(dev, chan, EV_NET_DISC, NULL); pcbit_l3_receive()
664 if (!(chan = capi_channel(dev, skb))) { pcbit_l3_receive()
671 pcbit_fsm_event(dev, chan, EV_NET_RELEASE, NULL); pcbit_l3_receive()
754 static void pcbit_logstat(struct pcbit_dev *dev, char *str) pcbit_logstat() argument
768 ictl.driver = dev->id; pcbit_logstat()
770 dev->dev_if->statcallb(&ictl); pcbit_logstat()
773 void pcbit_state_change(struct pcbit_dev *dev, struct pcbit_chan *chan, pcbit_state_change() argument
779 dev->id, chan->id, pcbit_state_change()
787 pcbit_logstat(dev, buf); pcbit_state_change()
792 struct pcbit_dev *dev; set_running_timeout() local
797 dev = (struct pcbit_dev *) ptr; set_running_timeout()
799 dev->l2_state = L2_DOWN; set_running_timeout()
800 wake_up_interruptible(&dev->set_running_wq); set_running_timeout()
803 static int set_protocol_running(struct pcbit_dev *dev) set_protocol_running() argument
807 init_timer(&dev->set_running_timer); set_protocol_running()
809 dev->set_running_timer.function = &set_running_timeout; set_protocol_running()
810 dev->set_running_timer.data = (ulong) dev; set_protocol_running()
811 dev->set_running_timer.expires = jiffies + SET_RUN_TIMEOUT; set_protocol_running()
815 dev->l2_state = L2_STARTING; set_protocol_running()
817 writeb((0x80U | ((dev->rcv_seq & 0x07) << 3) | (dev->send_seq & 0x07)), set_protocol_running()
818 dev->sh_mem + BANK4); set_protocol_running()
820 add_timer(&dev->set_running_timer); set_protocol_running()
822 wait_event(dev->set_running_wq, dev->l2_state == L2_RUNNING || set_protocol_running()
823 dev->l2_state == L2_DOWN); set_protocol_running()
825 del_timer(&dev->set_running_timer); set_protocol_running()
827 if (dev->l2_state == L2_RUNNING) set_protocol_running()
831 dev->unack_seq = dev->send_seq; set_protocol_running()
833 dev->writeptr = dev->sh_mem; set_protocol_running()
834 dev->readptr = dev->sh_mem + BANK2; set_protocol_running()
837 ctl.driver = dev->id; set_protocol_running()
840 dev->dev_if->statcallb(&ctl); set_protocol_running()
849 readb(dev->sh_mem + BANK3)); set_protocol_running()
851 writeb(0x40, dev->sh_mem + BANK4); set_protocol_running()
854 ctl.driver = dev->id; set_protocol_running()
857 dev->dev_if->statcallb(&ctl); set_protocol_running()
867 struct pcbit_dev *dev; pcbit_ioctl() local
870 dev = finddev(ctl->driver); pcbit_ioctl()
872 if (!dev) pcbit_ioctl()
882 cmd->info.l2_status = dev->l2_state; pcbit_ioctl()
886 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
889 dev->unack_seq = dev->send_seq = dev->rcv_seq = 0; pcbit_ioctl()
891 dev->writeptr = dev->sh_mem; pcbit_ioctl()
892 dev->readptr = dev->sh_mem + BANK2; pcbit_ioctl()
894 dev->l2_state = L2_LOADING; pcbit_ioctl()
898 if (dev->l2_state != L2_LOADING) pcbit_ioctl()
901 dev->l2_state = L2_LWMODE; pcbit_ioctl()
905 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
907 dev->loadptr = LOAD_ZONE_START; pcbit_ioctl()
908 dev->l2_state = L2_FWMODE; pcbit_ioctl()
912 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
914 dev->l2_state = L2_DOWN; pcbit_ioctl()
918 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
925 writeb(cmd->info.rdp_byte.value, dev->sh_mem + cmd->info.rdp_byte.addr); pcbit_ioctl()
928 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
939 cmd->info.rdp_byte.value = readb(dev->sh_mem + cmd->info.rdp_byte.addr); pcbit_ioctl()
942 if (dev->l2_state == L2_RUNNING) pcbit_ioctl()
944 return set_protocol_running(dev); pcbit_ioctl()
947 if (dev->l2_state != L2_LOADING) pcbit_ioctl()
949 pcbit_l2_write(dev, MSG_WATCH188, 0x0001, NULL, 0); pcbit_ioctl()
952 if (dev->l2_state != L2_LOADING) pcbit_ioctl()
954 pcbit_l2_write(dev, MSG_PING188_REQ, 0x0001, NULL, 0); pcbit_ioctl()
957 if (dev->l2_state != L2_LOADING) pcbit_ioctl()
959 pcbit_l2_write(dev, MSG_API_ON, 0x0001, NULL, 0); pcbit_ioctl()
962 dev->l2_state = L2_DOWN; pcbit_ioctl()
963 writeb(0x40, dev->sh_mem + BANK4); pcbit_ioctl()
964 dev->rcv_seq = 0; pcbit_ioctl()
965 dev->send_seq = 0; pcbit_ioctl()
966 dev->unack_seq = 0; pcbit_ioctl()
982 static void pcbit_clear_msn(struct pcbit_dev *dev) pcbit_clear_msn() argument
986 for (ptr = dev->msn_list; ptr;) pcbit_clear_msn()
993 dev->msn_list = NULL; pcbit_clear_msn()
996 static void pcbit_set_msn(struct pcbit_dev *dev, char *list) pcbit_set_msn() argument
1012 ptr->next = dev->msn_list; pcbit_set_msn()
1013 dev->msn_list = ptr; pcbit_set_msn()
1018 if (dev->msn_list) pcbit_set_msn()
1019 for (back = dev->msn_list; back->next; back = back->next); pcbit_set_msn()
1051 if (dev->msn_list == NULL) pcbit_set_msn()
1052 dev->msn_list = ptr; pcbit_set_msn()
1063 static int pcbit_check_msn(struct pcbit_dev *dev, char *msn) pcbit_check_msn() argument
1067 for (ptr = dev->msn_list; ptr; ptr = ptr->next) { pcbit_check_msn()
H A Dlayer2.h124 extern int pcbit_l2_write(struct pcbit_dev *dev, ulong msg, ushort refnum,
132 static __inline__ void log_state(struct pcbit_dev *dev) { log_state() argument
134 (ulong) (dev->writeptr - dev->sh_mem)); log_state()
136 (ulong) (dev->readptr - (dev->sh_mem + BANK2))); log_state()
138 dev->rcv_seq, dev->send_seq, dev->unack_seq); log_state()
144 struct pcbit_dev *dev; chan2dev() local
149 if ((dev = dev_pcbit[i])) chan2dev()
150 if (dev->b1 == chan || dev->b2 == chan) chan2dev()
151 return dev; chan2dev()
158 struct pcbit_dev *dev; finddev() local
162 if ((dev = dev_pcbit[i])) finddev()
163 if (dev->id == id) finddev()
164 return dev; finddev()
173 static __inline__ void pcbit_writeb(struct pcbit_dev *dev, unsigned char dt) pcbit_writeb() argument
175 writeb(dt, dev->writeptr++); pcbit_writeb()
176 if (dev->writeptr == dev->sh_mem + BANKLEN) pcbit_writeb()
177 dev->writeptr = dev->sh_mem; pcbit_writeb()
180 static __inline__ void pcbit_writew(struct pcbit_dev *dev, unsigned short dt) pcbit_writew() argument
184 dist = BANKLEN - (dev->writeptr - dev->sh_mem); pcbit_writew()
187 writew(dt, dev->writeptr); pcbit_writew()
188 dev->writeptr = dev->sh_mem; pcbit_writew()
191 writeb((u_char) (dt & 0x00ffU), dev->writeptr); pcbit_writew()
192 dev->writeptr = dev->sh_mem; pcbit_writew()
193 writeb((u_char) (dt >> 8), dev->writeptr++); pcbit_writew()
196 writew(dt, dev->writeptr); pcbit_writew()
197 dev->writeptr += 2; pcbit_writew()
202 static __inline__ void memcpy_topcbit(struct pcbit_dev *dev, u_char *data, memcpy_topcbit() argument
207 diff = len - (BANKLEN - (dev->writeptr - dev->sh_mem)); memcpy_topcbit()
211 memcpy_toio(dev->writeptr, data, len - diff); memcpy_topcbit()
212 memcpy_toio(dev->sh_mem, data + (len - diff), diff); memcpy_topcbit()
213 dev->writeptr = dev->sh_mem + diff; memcpy_topcbit()
217 memcpy_toio(dev->writeptr, data, len); memcpy_topcbit()
219 dev->writeptr += len; memcpy_topcbit()
221 dev->writeptr = dev->sh_mem; memcpy_topcbit()
225 static __inline__ unsigned char pcbit_readb(struct pcbit_dev *dev) pcbit_readb() argument
229 val = readb(dev->readptr++); pcbit_readb()
230 if (dev->readptr == dev->sh_mem + BANK2 + BANKLEN) pcbit_readb()
231 dev->readptr = dev->sh_mem + BANK2; pcbit_readb()
236 static __inline__ unsigned short pcbit_readw(struct pcbit_dev *dev) pcbit_readw() argument
241 dist = BANKLEN - (dev->readptr - (dev->sh_mem + BANK2)); pcbit_readw()
244 val = readw(dev->readptr); pcbit_readw()
245 dev->readptr = dev->sh_mem + BANK2; pcbit_readw()
248 val = readb(dev->readptr); pcbit_readw()
249 dev->readptr = dev->sh_mem + BANK2; pcbit_readw()
250 val = (readb(dev->readptr++) << 8) | val; pcbit_readw()
253 val = readw(dev->readptr); pcbit_readw()
254 dev->readptr += 2; pcbit_readw()
260 static __inline__ void memcpy_frompcbit(struct pcbit_dev *dev, u_char *data, int len) memcpy_frompcbit() argument
264 diff = len - (BANKLEN - (dev->readptr - (dev->sh_mem + BANK2))); memcpy_frompcbit()
267 memcpy_fromio(data, dev->readptr, len - diff); memcpy_frompcbit()
268 memcpy_fromio(data + (len - diff), dev->sh_mem + BANK2 , diff); memcpy_frompcbit()
269 dev->readptr = dev->sh_mem + BANK2 + diff; memcpy_frompcbit()
273 memcpy_fromio(data, dev->readptr, len); memcpy_frompcbit()
274 dev->readptr += len; memcpy_frompcbit()
276 dev->readptr = dev->sh_mem + BANK2; memcpy_frompcbit()
/linux-4.4.14/drivers/base/power/
H A Dgeneric_ops.c17 * @dev: Device to suspend.
19 * If PM operations are defined for the @dev's driver and they include
23 int pm_generic_runtime_suspend(struct device *dev) pm_generic_runtime_suspend() argument
25 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_runtime_suspend()
28 ret = pm && pm->runtime_suspend ? pm->runtime_suspend(dev) : 0; pm_generic_runtime_suspend()
36 * @dev: Device to resume.
38 * If PM operations are defined for the @dev's driver and they include
42 int pm_generic_runtime_resume(struct device *dev) pm_generic_runtime_resume() argument
44 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_runtime_resume()
47 ret = pm && pm->runtime_resume ? pm->runtime_resume(dev) : 0; pm_generic_runtime_resume()
57 * @dev: Device to prepare.
61 int pm_generic_prepare(struct device *dev) pm_generic_prepare() argument
63 struct device_driver *drv = dev->driver; pm_generic_prepare()
67 ret = drv->pm->prepare(dev); pm_generic_prepare()
74 * @dev: Device to suspend.
76 int pm_generic_suspend_noirq(struct device *dev) pm_generic_suspend_noirq() argument
78 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_suspend_noirq()
80 return pm && pm->suspend_noirq ? pm->suspend_noirq(dev) : 0; pm_generic_suspend_noirq()
86 * @dev: Device to suspend.
88 int pm_generic_suspend_late(struct device *dev) pm_generic_suspend_late() argument
90 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_suspend_late()
92 return pm && pm->suspend_late ? pm->suspend_late(dev) : 0; pm_generic_suspend_late()
98 * @dev: Device to suspend.
100 int pm_generic_suspend(struct device *dev) pm_generic_suspend() argument
102 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_suspend()
104 return pm && pm->suspend ? pm->suspend(dev) : 0; pm_generic_suspend()
110 * @dev: Device to freeze.
112 int pm_generic_freeze_noirq(struct device *dev) pm_generic_freeze_noirq() argument
114 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_freeze_noirq()
116 return pm && pm->freeze_noirq ? pm->freeze_noirq(dev) : 0; pm_generic_freeze_noirq()
122 * @dev: Device to freeze.
124 int pm_generic_freeze_late(struct device *dev) pm_generic_freeze_late() argument
126 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_freeze_late()
128 return pm && pm->freeze_late ? pm->freeze_late(dev) : 0; pm_generic_freeze_late()
134 * @dev: Device to freeze.
136 int pm_generic_freeze(struct device *dev) pm_generic_freeze() argument
138 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_freeze()
140 return pm && pm->freeze ? pm->freeze(dev) : 0; pm_generic_freeze()
146 * @dev: Device to handle.
148 int pm_generic_poweroff_noirq(struct device *dev) pm_generic_poweroff_noirq() argument
150 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_poweroff_noirq()
152 return pm && pm->poweroff_noirq ? pm->poweroff_noirq(dev) : 0; pm_generic_poweroff_noirq()
158 * @dev: Device to handle.
160 int pm_generic_poweroff_late(struct device *dev) pm_generic_poweroff_late() argument
162 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_poweroff_late()
164 return pm && pm->poweroff_late ? pm->poweroff_late(dev) : 0; pm_generic_poweroff_late()
170 * @dev: Device to handle.
172 int pm_generic_poweroff(struct device *dev) pm_generic_poweroff() argument
174 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_poweroff()
176 return pm && pm->poweroff ? pm->poweroff(dev) : 0; pm_generic_poweroff()
182 * @dev: Device to thaw.
184 int pm_generic_thaw_noirq(struct device *dev) pm_generic_thaw_noirq() argument
186 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_thaw_noirq()
188 return pm && pm->thaw_noirq ? pm->thaw_noirq(dev) : 0; pm_generic_thaw_noirq()
194 * @dev: Device to thaw.
196 int pm_generic_thaw_early(struct device *dev) pm_generic_thaw_early() argument
198 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_thaw_early()
200 return pm && pm->thaw_early ? pm->thaw_early(dev) : 0; pm_generic_thaw_early()
206 * @dev: Device to thaw.
208 int pm_generic_thaw(struct device *dev) pm_generic_thaw() argument
210 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_thaw()
212 return pm && pm->thaw ? pm->thaw(dev) : 0; pm_generic_thaw()
218 * @dev: Device to resume.
220 int pm_generic_resume_noirq(struct device *dev) pm_generic_resume_noirq() argument
222 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_resume_noirq()
224 return pm && pm->resume_noirq ? pm->resume_noirq(dev) : 0; pm_generic_resume_noirq()
230 * @dev: Device to resume.
232 int pm_generic_resume_early(struct device *dev) pm_generic_resume_early() argument
234 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_resume_early()
236 return pm && pm->resume_early ? pm->resume_early(dev) : 0; pm_generic_resume_early()
242 * @dev: Device to resume.
244 int pm_generic_resume(struct device *dev) pm_generic_resume() argument
246 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_resume()
248 return pm && pm->resume ? pm->resume(dev) : 0; pm_generic_resume()
254 * @dev: Device to restore.
256 int pm_generic_restore_noirq(struct device *dev) pm_generic_restore_noirq() argument
258 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_restore_noirq()
260 return pm && pm->restore_noirq ? pm->restore_noirq(dev) : 0; pm_generic_restore_noirq()
266 * @dev: Device to resume.
268 int pm_generic_restore_early(struct device *dev) pm_generic_restore_early() argument
270 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_restore_early()
272 return pm && pm->restore_early ? pm->restore_early(dev) : 0; pm_generic_restore_early()
278 * @dev: Device to restore.
280 int pm_generic_restore(struct device *dev) pm_generic_restore() argument
282 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; pm_generic_restore()
284 return pm && pm->restore ? pm->restore(dev) : 0; pm_generic_restore()
290 * @dev: Device to handle.
294 void pm_generic_complete(struct device *dev) pm_generic_complete() argument
296 struct device_driver *drv = dev->driver; pm_generic_complete()
299 drv->pm->complete(dev); pm_generic_complete()
304 * @dev: Device to handle.
311 void pm_complete_with_resume_check(struct device *dev) pm_complete_with_resume_check() argument
313 pm_generic_complete(dev); pm_complete_with_resume_check()
319 if (dev->power.direct_complete && pm_resume_via_firmware()) pm_complete_with_resume_check()
320 pm_request_resume(dev); pm_complete_with_resume_check()
H A Dpower.h3 static inline void device_pm_init_common(struct device *dev) device_pm_init_common() argument
5 if (!dev->power.early_init) { device_pm_init_common()
6 spin_lock_init(&dev->power.lock); device_pm_init_common()
7 dev->power.qos = NULL; device_pm_init_common()
8 dev->power.early_init = true; device_pm_init_common()
14 static inline void pm_runtime_early_init(struct device *dev) pm_runtime_early_init() argument
16 dev->power.disable_depth = 1; pm_runtime_early_init()
17 device_pm_init_common(dev); pm_runtime_early_init()
20 extern void pm_runtime_init(struct device *dev);
21 extern void pm_runtime_remove(struct device *dev);
24 struct device *dev; member in struct:wake_irq
34 extern int device_wakeup_attach_irq(struct device *dev,
36 extern void device_wakeup_detach_irq(struct device *dev);
43 device_wakeup_attach_irq(struct device *dev, device_wakeup_attach_irq() argument
49 static inline void device_wakeup_detach_irq(struct device *dev) device_wakeup_detach_irq() argument
67 extern int dpm_sysfs_add(struct device *dev);
68 extern void dpm_sysfs_remove(struct device *dev);
69 extern void rpm_sysfs_remove(struct device *dev);
70 extern int wakeup_sysfs_add(struct device *dev);
71 extern void wakeup_sysfs_remove(struct device *dev);
72 extern int pm_qos_sysfs_add_resume_latency(struct device *dev);
73 extern void pm_qos_sysfs_remove_resume_latency(struct device *dev);
74 extern int pm_qos_sysfs_add_flags(struct device *dev);
75 extern void pm_qos_sysfs_remove_flags(struct device *dev);
76 extern int pm_qos_sysfs_add_latency_tolerance(struct device *dev);
77 extern void pm_qos_sysfs_remove_latency_tolerance(struct device *dev);
81 static inline void pm_runtime_early_init(struct device *dev) pm_runtime_early_init() argument
83 device_pm_init_common(dev); pm_runtime_early_init()
86 static inline void pm_runtime_init(struct device *dev) {} pm_runtime_remove() argument
87 static inline void pm_runtime_remove(struct device *dev) {} pm_runtime_remove() argument
89 static inline int dpm_sysfs_add(struct device *dev) { return 0; } dpm_sysfs_remove() argument
90 static inline void dpm_sysfs_remove(struct device *dev) {} rpm_sysfs_remove() argument
91 static inline void rpm_sysfs_remove(struct device *dev) {} wakeup_sysfs_add() argument
92 static inline int wakeup_sysfs_add(struct device *dev) { return 0; } wakeup_sysfs_remove() argument
93 static inline void wakeup_sysfs_remove(struct device *dev) {} pm_qos_sysfs_add() argument
94 static inline int pm_qos_sysfs_add(struct device *dev) { return 0; } pm_qos_sysfs_remove() argument
95 static inline void pm_qos_sysfs_remove(struct device *dev) {} pm_qos_sysfs_remove() argument
120 extern void device_pm_sleep_init(struct device *dev);
129 static inline void device_pm_sleep_init(struct device *dev) {} device_pm_sleep_init() argument
131 static inline void device_pm_add(struct device *dev) {} device_pm_add() argument
133 static inline void device_pm_remove(struct device *dev) device_pm_remove() argument
135 pm_runtime_remove(dev); device_pm_remove()
142 static inline void device_pm_move_last(struct device *dev) {} device_pm_move_last() argument
146 static inline void device_pm_init(struct device *dev) device_pm_init() argument
148 device_pm_init_common(dev); device_pm_init()
149 device_pm_sleep_init(dev); device_pm_init()
150 pm_runtime_init(dev); device_pm_init()
H A Dmain.c90 * @dev: Device object being initialized.
92 void device_pm_sleep_init(struct device *dev) device_pm_sleep_init() argument
94 dev->power.is_prepared = false; device_pm_sleep_init()
95 dev->power.is_suspended = false; device_pm_sleep_init()
96 dev->power.is_noirq_suspended = false; device_pm_sleep_init()
97 dev->power.is_late_suspended = false; device_pm_sleep_init()
98 init_completion(&dev->power.completion); device_pm_sleep_init()
99 complete_all(&dev->power.completion); device_pm_sleep_init()
100 dev->power.wakeup = NULL; device_pm_sleep_init()
101 INIT_LIST_HEAD(&dev->power.entry); device_pm_sleep_init()
122 * @dev: Device to add to the list.
124 void device_pm_add(struct device *dev) device_pm_add() argument
127 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); device_pm_add()
129 if (dev->parent && dev->parent->power.is_prepared) device_pm_add()
130 dev_warn(dev, "parent %s should not be sleeping\n", device_pm_add()
131 dev_name(dev->parent)); device_pm_add()
132 list_add_tail(&dev->power.entry, &dpm_list); device_pm_add()
138 * @dev: Device to be removed from the list.
140 void device_pm_remove(struct device *dev) device_pm_remove() argument
143 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); device_pm_remove()
144 complete_all(&dev->power.completion); device_pm_remove()
146 list_del_init(&dev->power.entry); device_pm_remove()
148 device_wakeup_disable(dev); device_pm_remove()
149 pm_runtime_remove(dev); device_pm_remove()
182 * @dev: Device to move in dpm_list.
184 void device_pm_move_last(struct device *dev) device_pm_move_last() argument
187 dev->bus ? dev->bus->name : "No Bus", dev_name(dev)); device_pm_move_last()
188 list_move_tail(&dev->power.entry, &dpm_list); device_pm_move_last()
191 static ktime_t initcall_debug_start(struct device *dev) initcall_debug_start() argument
197 dev_name(dev), task_pid_nr(current), initcall_debug_start()
198 dev->parent ? dev_name(dev->parent) : "none"); initcall_debug_start()
205 static void initcall_debug_report(struct device *dev, ktime_t calltime, initcall_debug_report() argument
215 pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev), initcall_debug_report()
222 * @dev: Device to wait for.
225 static void dpm_wait(struct device *dev, bool async) dpm_wait() argument
227 if (!dev) dpm_wait()
230 if (async || (pm_async_enabled && dev->power.async_suspend)) dpm_wait()
231 wait_for_completion(&dev->power.completion); dpm_wait()
234 static int dpm_wait_fn(struct device *dev, void *async_ptr) dpm_wait_fn() argument
236 dpm_wait(dev, *((bool *)async_ptr)); dpm_wait_fn()
240 static void dpm_wait_for_children(struct device *dev, bool async) dpm_wait_for_children() argument
242 device_for_each_child(dev, &async, dpm_wait_fn); dpm_wait_for_children()
282 * Runtime PM is disabled for @dev while this function is being executed.
316 * The driver of @dev will not receive interrupts while this function is being
345 static void pm_dev_dbg(struct device *dev, pm_message_t state, char *info) pm_dev_dbg() argument
347 dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event), pm_dev_dbg()
348 ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ? pm_dev_dbg()
352 static void pm_dev_err(struct device *dev, pm_message_t state, char *info, pm_dev_err() argument
356 dev_name(dev), pm_verb(state.event), info, error); pm_dev_err()
376 static int dpm_run_callback(pm_callback_t cb, struct device *dev, dpm_run_callback() argument
385 calltime = initcall_debug_start(dev); dpm_run_callback()
387 pm_dev_dbg(dev, state, info); dpm_run_callback()
388 trace_device_pm_callback_start(dev, info, state.event); dpm_run_callback()
389 error = cb(dev); dpm_run_callback()
390 trace_device_pm_callback_end(dev, error); dpm_run_callback()
393 initcall_debug_report(dev, calltime, error, state, info); dpm_run_callback()
400 struct device *dev; member in struct:dpm_watchdog
420 dev_emerg(wd->dev, "**** DPM device timeout ****\n"); dpm_watchdog_handler()
423 dev_driver_string(wd->dev), dev_name(wd->dev)); dpm_watchdog_handler()
429 * @dev: Device to handle.
431 static void dpm_watchdog_set(struct dpm_watchdog *wd, struct device *dev) dpm_watchdog_set() argument
435 wd->dev = dev; dpm_watchdog_set()
467 * @dev: Device to handle.
471 * The driver of @dev will not receive interrupts while this function is being
474 static int device_resume_noirq(struct device *dev, pm_message_t state, bool async) device_resume_noirq() argument
480 TRACE_DEVICE(dev); device_resume_noirq()
483 if (dev->power.syscore || dev->power.direct_complete) device_resume_noirq()
486 if (!dev->power.is_noirq_suspended) device_resume_noirq()
489 dpm_wait(dev->parent, async); device_resume_noirq()
491 if (dev->pm_domain) { device_resume_noirq()
493 callback = pm_noirq_op(&dev->pm_domain->ops, state); device_resume_noirq()
494 } else if (dev->type && dev->type->pm) { device_resume_noirq()
496 callback = pm_noirq_op(dev->type->pm, state); device_resume_noirq()
497 } else if (dev->class && dev->class->pm) { device_resume_noirq()
499 callback = pm_noirq_op(dev->class->pm, state); device_resume_noirq()
500 } else if (dev->bus && dev->bus->pm) { device_resume_noirq()
502 callback = pm_noirq_op(dev->bus->pm, state); device_resume_noirq()
505 if (!callback && dev->driver && dev->driver->pm) { device_resume_noirq()
507 callback = pm_noirq_op(dev->driver->pm, state); device_resume_noirq()
510 error = dpm_run_callback(callback, dev, state, info); device_resume_noirq()
511 dev->power.is_noirq_suspended = false; device_resume_noirq()
514 complete_all(&dev->power.completion); device_resume_noirq()
519 static bool is_async(struct device *dev) is_async() argument
521 return dev->power.async_suspend && pm_async_enabled is_async()
527 struct device *dev = (struct device *)data; async_resume_noirq() local
530 error = device_resume_noirq(dev, pm_transition, true); async_resume_noirq()
532 pm_dev_err(dev, pm_transition, " async", error); async_resume_noirq()
534 put_device(dev); async_resume_noirq()
546 struct device *dev; dpm_resume_noirq() local
558 list_for_each_entry(dev, &dpm_noirq_list, power.entry) { dpm_resume_noirq()
559 reinit_completion(&dev->power.completion); dpm_resume_noirq()
560 if (is_async(dev)) { dpm_resume_noirq()
561 get_device(dev); dpm_resume_noirq()
562 async_schedule(async_resume_noirq, dev); dpm_resume_noirq()
567 dev = to_device(dpm_noirq_list.next); dpm_resume_noirq()
568 get_device(dev); dpm_resume_noirq()
569 list_move_tail(&dev->power.entry, &dpm_late_early_list); dpm_resume_noirq()
572 if (!is_async(dev)) { dpm_resume_noirq()
575 error = device_resume_noirq(dev, state, false); dpm_resume_noirq()
579 dpm_save_failed_dev(dev_name(dev)); dpm_resume_noirq()
580 pm_dev_err(dev, state, " noirq", error); dpm_resume_noirq()
585 put_device(dev); dpm_resume_noirq()
598 * @dev: Device to handle.
602 * Runtime PM is disabled for @dev while this function is being executed.
604 static int device_resume_early(struct device *dev, pm_message_t state, bool async) device_resume_early() argument
610 TRACE_DEVICE(dev); device_resume_early()
613 if (dev->power.syscore || dev->power.direct_complete) device_resume_early()
616 if (!dev->power.is_late_suspended) device_resume_early()
619 dpm_wait(dev->parent, async); device_resume_early()
621 if (dev->pm_domain) { device_resume_early()
623 callback = pm_late_early_op(&dev->pm_domain->ops, state); device_resume_early()
624 } else if (dev->type && dev->type->pm) { device_resume_early()
626 callback = pm_late_early_op(dev->type->pm, state); device_resume_early()
627 } else if (dev->class && dev->class->pm) { device_resume_early()
629 callback = pm_late_early_op(dev->class->pm, state); device_resume_early()
630 } else if (dev->bus && dev->bus->pm) { device_resume_early()
632 callback = pm_late_early_op(dev->bus->pm, state); device_resume_early()
635 if (!callback && dev->driver && dev->driver->pm) { device_resume_early()
637 callback = pm_late_early_op(dev->driver->pm, state); device_resume_early()
640 error = dpm_run_callback(callback, dev, state, info); device_resume_early()
641 dev->power.is_late_suspended = false; device_resume_early()
646 pm_runtime_enable(dev); device_resume_early()
647 complete_all(&dev->power.completion); device_resume_early()
653 struct device *dev = (struct device *)data; async_resume_early() local
656 error = device_resume_early(dev, pm_transition, true); async_resume_early()
658 pm_dev_err(dev, pm_transition, " async", error); async_resume_early()
660 put_device(dev); async_resume_early()
669 struct device *dev; dpm_resume_early() local
681 list_for_each_entry(dev, &dpm_late_early_list, power.entry) { dpm_resume_early()
682 reinit_completion(&dev->power.completion); dpm_resume_early()
683 if (is_async(dev)) { dpm_resume_early()
684 get_device(dev); dpm_resume_early()
685 async_schedule(async_resume_early, dev); dpm_resume_early()
690 dev = to_device(dpm_late_early_list.next); dpm_resume_early()
691 get_device(dev); dpm_resume_early()
692 list_move_tail(&dev->power.entry, &dpm_suspended_list); dpm_resume_early()
695 if (!is_async(dev)) { dpm_resume_early()
698 error = device_resume_early(dev, state, false); dpm_resume_early()
702 dpm_save_failed_dev(dev_name(dev)); dpm_resume_early()
703 pm_dev_err(dev, state, " early", error); dpm_resume_early()
707 put_device(dev); dpm_resume_early()
728 * @dev: Device to handle.
732 static int device_resume(struct device *dev, pm_message_t state, bool async) device_resume() argument
739 TRACE_DEVICE(dev); device_resume()
742 if (dev->power.syscore) device_resume()
745 if (dev->power.direct_complete) { device_resume()
747 pm_runtime_enable(dev); device_resume()
751 dpm_wait(dev->parent, async); device_resume()
752 dpm_watchdog_set(&wd, dev); device_resume()
753 device_lock(dev); device_resume()
759 dev->power.is_prepared = false; device_resume()
761 if (!dev->power.is_suspended) device_resume()
764 if (dev->pm_domain) { device_resume()
766 callback = pm_op(&dev->pm_domain->ops, state); device_resume()
770 if (dev->type && dev->type->pm) { device_resume()
772 callback = pm_op(dev->type->pm, state); device_resume()
776 if (dev->class) { device_resume()
777 if (dev->class->pm) { device_resume()
779 callback = pm_op(dev->class->pm, state); device_resume()
781 } else if (dev->class->resume) { device_resume()
783 callback = dev->class->resume; device_resume()
788 if (dev->bus) { device_resume()
789 if (dev->bus->pm) { device_resume()
791 callback = pm_op(dev->bus->pm, state); device_resume()
792 } else if (dev->bus->resume) { device_resume()
794 callback = dev->bus->resume; device_resume()
800 if (!callback && dev->driver && dev->driver->pm) { device_resume()
802 callback = pm_op(dev->driver->pm, state); device_resume()
806 error = dpm_run_callback(callback, dev, state, info); device_resume()
807 dev->power.is_suspended = false; device_resume()
810 device_unlock(dev); device_resume()
814 complete_all(&dev->power.completion); device_resume()
823 struct device *dev = (struct device *)data; async_resume() local
826 error = device_resume(dev, pm_transition, true); async_resume()
828 pm_dev_err(dev, pm_transition, " async", error); async_resume()
829 put_device(dev); async_resume()
841 struct device *dev; dpm_resume() local
851 list_for_each_entry(dev, &dpm_suspended_list, power.entry) { dpm_resume()
852 reinit_completion(&dev->power.completion); dpm_resume()
853 if (is_async(dev)) { dpm_resume()
854 get_device(dev); dpm_resume()
855 async_schedule(async_resume, dev); dpm_resume()
860 dev = to_device(dpm_suspended_list.next); dpm_resume()
861 get_device(dev); dpm_resume()
862 if (!is_async(dev)) { dpm_resume()
867 error = device_resume(dev, state, false); dpm_resume()
871 dpm_save_failed_dev(dev_name(dev)); dpm_resume()
872 pm_dev_err(dev, state, "", error); dpm_resume()
877 if (!list_empty(&dev->power.entry)) dpm_resume()
878 list_move_tail(&dev->power.entry, &dpm_prepared_list); dpm_resume()
879 put_device(dev); dpm_resume()
891 * @dev: Device to handle.
894 static void device_complete(struct device *dev, pm_message_t state) device_complete() argument
899 if (dev->power.syscore) device_complete()
902 device_lock(dev); device_complete()
904 if (dev->pm_domain) { device_complete()
906 callback = dev->pm_domain->ops.complete; device_complete()
907 } else if (dev->type && dev->type->pm) { device_complete()
909 callback = dev->type->pm->complete; device_complete()
910 } else if (dev->class && dev->class->pm) { device_complete()
912 callback = dev->class->pm->complete; device_complete()
913 } else if (dev->bus && dev->bus->pm) { device_complete()
915 callback = dev->bus->pm->complete; device_complete()
918 if (!callback && dev->driver && dev->driver->pm) { device_complete()
920 callback = dev->driver->pm->complete; device_complete()
924 pm_dev_dbg(dev, state, info); device_complete()
925 callback(dev); device_complete()
928 device_unlock(dev); device_complete()
930 pm_runtime_put(dev); device_complete()
950 struct device *dev = to_device(dpm_prepared_list.prev); dpm_complete() local
952 get_device(dev); dpm_complete()
953 dev->power.is_prepared = false; dpm_complete()
954 list_move(&dev->power.entry, &list); dpm_complete()
957 trace_device_pm_callback_start(dev, "", state.event); dpm_complete()
958 device_complete(dev, state); dpm_complete()
959 trace_device_pm_callback_end(dev, 0); dpm_complete()
962 put_device(dev); dpm_complete()
1009 * @dev: Device to handle.
1013 * The driver of @dev will not receive interrupts while this function is being
1016 static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool async) __device_suspend_noirq() argument
1022 TRACE_DEVICE(dev); __device_suspend_noirq()
1033 if (dev->power.syscore || dev->power.direct_complete) __device_suspend_noirq()
1036 dpm_wait_for_children(dev, async); __device_suspend_noirq()
1038 if (dev->pm_domain) { __device_suspend_noirq()
1040 callback = pm_noirq_op(&dev->pm_domain->ops, state); __device_suspend_noirq()
1041 } else if (dev->type && dev->type->pm) { __device_suspend_noirq()
1043 callback = pm_noirq_op(dev->type->pm, state); __device_suspend_noirq()
1044 } else if (dev->class && dev->class->pm) { __device_suspend_noirq()
1046 callback = pm_noirq_op(dev->class->pm, state); __device_suspend_noirq()
1047 } else if (dev->bus && dev->bus->pm) { __device_suspend_noirq()
1049 callback = pm_noirq_op(dev->bus->pm, state); __device_suspend_noirq()
1052 if (!callback && dev->driver && dev->driver->pm) { __device_suspend_noirq()
1054 callback = pm_noirq_op(dev->driver->pm, state); __device_suspend_noirq()
1057 error = dpm_run_callback(callback, dev, state, info); __device_suspend_noirq()
1059 dev->power.is_noirq_suspended = true; __device_suspend_noirq()
1064 complete_all(&dev->power.completion); __device_suspend_noirq()
1071 struct device *dev = (struct device *)data; async_suspend_noirq() local
1074 error = __device_suspend_noirq(dev, pm_transition, true); async_suspend_noirq()
1076 dpm_save_failed_dev(dev_name(dev)); async_suspend_noirq()
1077 pm_dev_err(dev, pm_transition, " async", error); async_suspend_noirq()
1080 put_device(dev); async_suspend_noirq()
1083 static int device_suspend_noirq(struct device *dev) device_suspend_noirq() argument
1085 reinit_completion(&dev->power.completion); device_suspend_noirq()
1087 if (is_async(dev)) { device_suspend_noirq()
1088 get_device(dev); device_suspend_noirq()
1089 async_schedule(async_suspend_noirq, dev); device_suspend_noirq()
1092 return __device_suspend_noirq(dev, pm_transition, false); device_suspend_noirq()
1116 struct device *dev = to_device(dpm_late_early_list.prev); dpm_suspend_noirq() local
1118 get_device(dev); dpm_suspend_noirq()
1121 error = device_suspend_noirq(dev); dpm_suspend_noirq()
1125 pm_dev_err(dev, state, " noirq", error); dpm_suspend_noirq()
1126 dpm_save_failed_dev(dev_name(dev)); dpm_suspend_noirq()
1127 put_device(dev); dpm_suspend_noirq()
1130 if (!list_empty(&dev->power.entry)) dpm_suspend_noirq()
1131 list_move(&dev->power.entry, &dpm_noirq_list); dpm_suspend_noirq()
1132 put_device(dev); dpm_suspend_noirq()
1155 * @dev: Device to handle.
1159 * Runtime PM is disabled for @dev while this function is being executed.
1161 static int __device_suspend_late(struct device *dev, pm_message_t state, bool async) __device_suspend_late() argument
1167 TRACE_DEVICE(dev); __device_suspend_late()
1170 __pm_runtime_disable(dev, false); __device_suspend_late()
1180 if (dev->power.syscore || dev->power.direct_complete) __device_suspend_late()
1183 dpm_wait_for_children(dev, async); __device_suspend_late()
1185 if (dev->pm_domain) { __device_suspend_late()
1187 callback = pm_late_early_op(&dev->pm_domain->ops, state); __device_suspend_late()
1188 } else if (dev->type && dev->type->pm) { __device_suspend_late()
1190 callback = pm_late_early_op(dev->type->pm, state); __device_suspend_late()
1191 } else if (dev->class && dev->class->pm) { __device_suspend_late()
1193 callback = pm_late_early_op(dev->class->pm, state); __device_suspend_late()
1194 } else if (dev->bus && dev->bus->pm) { __device_suspend_late()
1196 callback = pm_late_early_op(dev->bus->pm, state); __device_suspend_late()
1199 if (!callback && dev->driver && dev->driver->pm) { __device_suspend_late()
1201 callback = pm_late_early_op(dev->driver->pm, state); __device_suspend_late()
1204 error = dpm_run_callback(callback, dev, state, info); __device_suspend_late()
1206 dev->power.is_late_suspended = true; __device_suspend_late()
1212 complete_all(&dev->power.completion); __device_suspend_late()
1218 struct device *dev = (struct device *)data; async_suspend_late() local
1221 error = __device_suspend_late(dev, pm_transition, true); async_suspend_late()
1223 dpm_save_failed_dev(dev_name(dev)); async_suspend_late()
1224 pm_dev_err(dev, pm_transition, " async", error); async_suspend_late()
1226 put_device(dev); async_suspend_late()
1229 static int device_suspend_late(struct device *dev) device_suspend_late() argument
1231 reinit_completion(&dev->power.completion); device_suspend_late()
1233 if (is_async(dev)) { device_suspend_late()
1234 get_device(dev); device_suspend_late()
1235 async_schedule(async_suspend_late, dev); device_suspend_late()
1239 return __device_suspend_late(dev, pm_transition, false); device_suspend_late()
1257 struct device *dev = to_device(dpm_suspended_list.prev); dpm_suspend_late() local
1259 get_device(dev); dpm_suspend_late()
1262 error = device_suspend_late(dev); dpm_suspend_late()
1265 if (!list_empty(&dev->power.entry)) dpm_suspend_late()
1266 list_move(&dev->power.entry, &dpm_late_early_list); dpm_suspend_late()
1269 pm_dev_err(dev, state, " late", error); dpm_suspend_late()
1270 dpm_save_failed_dev(dev_name(dev)); dpm_suspend_late()
1271 put_device(dev); dpm_suspend_late()
1274 put_device(dev); dpm_suspend_late()
1316 * @dev: Device to suspend.
1321 static int legacy_suspend(struct device *dev, pm_message_t state, legacy_suspend() argument
1322 int (*cb)(struct device *dev, pm_message_t state), legacy_suspend()
1328 calltime = initcall_debug_start(dev); legacy_suspend()
1330 trace_device_pm_callback_start(dev, info, state.event); legacy_suspend()
1331 error = cb(dev, state); legacy_suspend()
1332 trace_device_pm_callback_end(dev, error); legacy_suspend()
1335 initcall_debug_report(dev, calltime, error, state, info); legacy_suspend()
1342 * @dev: Device to handle.
1346 static int __device_suspend(struct device *dev, pm_message_t state, bool async) __device_suspend() argument
1353 TRACE_DEVICE(dev); __device_suspend()
1356 dpm_wait_for_children(dev, async); __device_suspend()
1367 if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) __device_suspend()
1368 pm_wakeup_event(dev, 0); __device_suspend()
1375 if (dev->power.syscore) __device_suspend()
1378 if (dev->power.direct_complete) { __device_suspend()
1379 if (pm_runtime_status_suspended(dev)) { __device_suspend()
1380 pm_runtime_disable(dev); __device_suspend()
1381 if (pm_runtime_status_suspended(dev)) __device_suspend()
1384 pm_runtime_enable(dev); __device_suspend()
1386 dev->power.direct_complete = false; __device_suspend()
1389 dpm_watchdog_set(&wd, dev); __device_suspend()
1390 device_lock(dev); __device_suspend()
1392 if (dev->pm_domain) { __device_suspend()
1394 callback = pm_op(&dev->pm_domain->ops, state); __device_suspend()
1398 if (dev->type && dev->type->pm) { __device_suspend()
1400 callback = pm_op(dev->type->pm, state); __device_suspend()
1404 if (dev->class) { __device_suspend()
1405 if (dev->class->pm) { __device_suspend()
1407 callback = pm_op(dev->class->pm, state); __device_suspend()
1409 } else if (dev->class->suspend) { __device_suspend()
1410 pm_dev_dbg(dev, state, "legacy class "); __device_suspend()
1411 error = legacy_suspend(dev, state, dev->class->suspend, __device_suspend()
1417 if (dev->bus) { __device_suspend()
1418 if (dev->bus->pm) { __device_suspend()
1420 callback = pm_op(dev->bus->pm, state); __device_suspend()
1421 } else if (dev->bus->suspend) { __device_suspend()
1422 pm_dev_dbg(dev, state, "legacy bus "); __device_suspend()
1423 error = legacy_suspend(dev, state, dev->bus->suspend, __device_suspend()
1430 if (!callback && dev->driver && dev->driver->pm) { __device_suspend()
1432 callback = pm_op(dev->driver->pm, state); __device_suspend()
1435 error = dpm_run_callback(callback, dev, state, info); __device_suspend()
1439 struct device *parent = dev->parent; __device_suspend()
1441 dev->power.is_suspended = true; __device_suspend()
1445 dev->parent->power.direct_complete = false; __device_suspend()
1446 if (dev->power.wakeup_path __device_suspend()
1447 && !dev->parent->power.ignore_children) __device_suspend()
1448 dev->parent->power.wakeup_path = true; __device_suspend()
1454 device_unlock(dev); __device_suspend()
1458 complete_all(&dev->power.completion); __device_suspend()
1468 struct device *dev = (struct device *)data; async_suspend() local
1471 error = __device_suspend(dev, pm_transition, true); async_suspend()
1473 dpm_save_failed_dev(dev_name(dev)); async_suspend()
1474 pm_dev_err(dev, pm_transition, " async", error); async_suspend()
1477 put_device(dev); async_suspend()
1480 static int device_suspend(struct device *dev) device_suspend() argument
1482 reinit_completion(&dev->power.completion); device_suspend()
1484 if (is_async(dev)) { device_suspend()
1485 get_device(dev); device_suspend()
1486 async_schedule(async_suspend, dev); device_suspend()
1490 return __device_suspend(dev, pm_transition, false); device_suspend()
1511 struct device *dev = to_device(dpm_prepared_list.prev); dpm_suspend() local
1513 get_device(dev); dpm_suspend()
1516 error = device_suspend(dev); dpm_suspend()
1520 pm_dev_err(dev, state, "", error); dpm_suspend()
1521 dpm_save_failed_dev(dev_name(dev)); dpm_suspend()
1522 put_device(dev); dpm_suspend()
1525 if (!list_empty(&dev->power.entry)) dpm_suspend()
1526 list_move(&dev->power.entry, &dpm_suspended_list); dpm_suspend()
1527 put_device(dev); dpm_suspend()
1546 * @dev: Device to handle.
1552 static int device_prepare(struct device *dev, pm_message_t state) device_prepare() argument
1558 if (dev->power.syscore) device_prepare()
1567 pm_runtime_get_noresume(dev); device_prepare()
1569 device_lock(dev); device_prepare()
1571 dev->power.wakeup_path = device_may_wakeup(dev); device_prepare()
1573 if (dev->pm_domain) { device_prepare()
1575 callback = dev->pm_domain->ops.prepare; device_prepare()
1576 } else if (dev->type && dev->type->pm) { device_prepare()
1578 callback = dev->type->pm->prepare; device_prepare()
1579 } else if (dev->class && dev->class->pm) { device_prepare()
1581 callback = dev->class->pm->prepare; device_prepare()
1582 } else if (dev->bus && dev->bus->pm) { device_prepare()
1584 callback = dev->bus->pm->prepare; device_prepare()
1587 if (!callback && dev->driver && dev->driver->pm) { device_prepare()
1589 callback = dev->driver->pm->prepare; device_prepare()
1593 ret = callback(dev); device_prepare()
1595 device_unlock(dev); device_prepare()
1599 pm_runtime_put(dev); device_prepare()
1609 spin_lock_irq(&dev->power.lock); device_prepare()
1610 dev->power.direct_complete = ret > 0 && state.event == PM_EVENT_SUSPEND; device_prepare()
1611 spin_unlock_irq(&dev->power.lock); device_prepare()
1630 struct device *dev = to_device(dpm_list.next); dpm_prepare() local
1632 get_device(dev); dpm_prepare()
1635 trace_device_pm_callback_start(dev, "", state.event); dpm_prepare()
1636 error = device_prepare(dev, state); dpm_prepare()
1637 trace_device_pm_callback_end(dev, error); dpm_prepare()
1642 put_device(dev); dpm_prepare()
1648 dev_name(dev), error); dpm_prepare()
1649 put_device(dev); dpm_prepare()
1652 dev->power.is_prepared = true; dpm_prepare()
1653 if (!list_empty(&dev->power.entry)) dpm_prepare()
1654 list_move_tail(&dev->power.entry, &dpm_prepared_list); dpm_prepare()
1655 put_device(dev); dpm_prepare()
1692 * @dev: Device to wait for.
1693 * @subordinate: Device that needs to wait for @dev.
1695 int device_pm_wait_for_dev(struct device *subordinate, struct device *dev) device_pm_wait_for_dev() argument
1697 dpm_wait(dev, subordinate->power.async_suspend); device_pm_wait_for_dev()
1712 struct device *dev; dpm_for_each_dev() local
1718 list_for_each_entry(dev, &dpm_list, power.entry) dpm_for_each_dev()
1719 fn(dev, data); dpm_for_each_dev()
H A Druntime.c19 static pm_callback_t __rpm_get_callback(struct device *dev, size_t cb_offset) __rpm_get_callback() argument
24 if (dev->pm_domain) __rpm_get_callback()
25 ops = &dev->pm_domain->ops; __rpm_get_callback()
26 else if (dev->type && dev->type->pm) __rpm_get_callback()
27 ops = dev->type->pm; __rpm_get_callback()
28 else if (dev->class && dev->class->pm) __rpm_get_callback()
29 ops = dev->class->pm; __rpm_get_callback()
30 else if (dev->bus && dev->bus->pm) __rpm_get_callback()
31 ops = dev->bus->pm; __rpm_get_callback()
40 if (!cb && dev->driver && dev->driver->pm) __rpm_get_callback()
41 cb = *(pm_callback_t *)((void *)dev->driver->pm + cb_offset); __rpm_get_callback()
46 #define RPM_GET_CALLBACK(dev, callback) \
47 __rpm_get_callback(dev, offsetof(struct dev_pm_ops, callback))
49 static int rpm_resume(struct device *dev, int rpmflags);
50 static int rpm_suspend(struct device *dev, int rpmflags);
54 * @dev: Device to update the accounting for
63 void update_pm_runtime_accounting(struct device *dev) update_pm_runtime_accounting() argument
68 delta = now - dev->power.accounting_timestamp; update_pm_runtime_accounting()
70 dev->power.accounting_timestamp = now; update_pm_runtime_accounting()
72 if (dev->power.disable_depth > 0) update_pm_runtime_accounting()
75 if (dev->power.runtime_status == RPM_SUSPENDED) update_pm_runtime_accounting()
76 dev->power.suspended_jiffies += delta; update_pm_runtime_accounting()
78 dev->power.active_jiffies += delta; update_pm_runtime_accounting()
81 static void __update_runtime_status(struct device *dev, enum rpm_status status) __update_runtime_status() argument
83 update_pm_runtime_accounting(dev); __update_runtime_status()
84 dev->power.runtime_status = status; __update_runtime_status()
89 * @dev: Device to handle.
91 static void pm_runtime_deactivate_timer(struct device *dev) pm_runtime_deactivate_timer() argument
93 if (dev->power.timer_expires > 0) { pm_runtime_deactivate_timer()
94 del_timer(&dev->power.suspend_timer); pm_runtime_deactivate_timer()
95 dev->power.timer_expires = 0; pm_runtime_deactivate_timer()
101 * @dev: Device to handle.
103 static void pm_runtime_cancel_pending(struct device *dev) pm_runtime_cancel_pending() argument
105 pm_runtime_deactivate_timer(dev); pm_runtime_cancel_pending()
110 dev->power.request = RPM_REQ_NONE; pm_runtime_cancel_pending()
115 * @dev: Device to handle.
122 * This function may be called either with or without dev->power.lock held.
125 unsigned long pm_runtime_autosuspend_expiration(struct device *dev) pm_runtime_autosuspend_expiration() argument
132 if (!dev->power.use_autosuspend) pm_runtime_autosuspend_expiration()
135 autosuspend_delay = ACCESS_ONCE(dev->power.autosuspend_delay); pm_runtime_autosuspend_expiration()
139 last_busy = ACCESS_ONCE(dev->power.last_busy); pm_runtime_autosuspend_expiration()
160 static int dev_memalloc_noio(struct device *dev, void *data) dev_memalloc_noio() argument
162 return dev->power.memalloc_noio; dev_memalloc_noio()
167 * @dev: Device to handle.
193 void pm_runtime_set_memalloc_noio(struct device *dev, bool enable) pm_runtime_set_memalloc_noio() argument
202 spin_lock_irq(&dev->power.lock); pm_runtime_set_memalloc_noio()
203 enabled = dev->power.memalloc_noio; pm_runtime_set_memalloc_noio()
204 dev->power.memalloc_noio = enable; pm_runtime_set_memalloc_noio()
205 spin_unlock_irq(&dev->power.lock); pm_runtime_set_memalloc_noio()
214 dev = dev->parent; pm_runtime_set_memalloc_noio()
221 if (!dev || (!enable && pm_runtime_set_memalloc_noio()
222 device_for_each_child(dev, NULL, pm_runtime_set_memalloc_noio()
232 * @dev: Device to test.
234 static int rpm_check_suspend_allowed(struct device *dev) rpm_check_suspend_allowed() argument
238 if (dev->power.runtime_error) rpm_check_suspend_allowed()
240 else if (dev->power.disable_depth > 0) rpm_check_suspend_allowed()
242 else if (atomic_read(&dev->power.usage_count) > 0) rpm_check_suspend_allowed()
244 else if (!pm_children_suspended(dev)) rpm_check_suspend_allowed()
248 else if ((dev->power.deferred_resume rpm_check_suspend_allowed()
249 && dev->power.runtime_status == RPM_SUSPENDING) rpm_check_suspend_allowed()
250 || (dev->power.request_pending rpm_check_suspend_allowed()
251 && dev->power.request == RPM_REQ_RESUME)) rpm_check_suspend_allowed()
253 else if (__dev_pm_qos_read_value(dev) < 0) rpm_check_suspend_allowed()
255 else if (dev->power.runtime_status == RPM_SUSPENDED) rpm_check_suspend_allowed()
264 * @dev: Device to run the callback for.
266 static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
267 __releases(&dev->power.lock) __acquires(&dev->power.lock)
271 if (dev->power.irq_safe)
272 spin_unlock(&dev->power.lock);
274 spin_unlock_irq(&dev->power.lock);
276 retval = cb(dev);
278 if (dev->power.irq_safe)
279 spin_lock(&dev->power.lock);
281 spin_lock_irq(&dev->power.lock);
288 * @dev: Device to notify the bus type about.
297 * This function must be called under dev->power.lock with interrupts disabled.
299 static int rpm_idle(struct device *dev, int rpmflags) rpm_idle() argument
304 trace_rpm_idle(dev, rpmflags); rpm_idle()
305 retval = rpm_check_suspend_allowed(dev); rpm_idle()
310 else if (dev->power.runtime_status != RPM_ACTIVE) rpm_idle()
317 else if (dev->power.request_pending && rpm_idle()
318 dev->power.request > RPM_REQ_IDLE) rpm_idle()
322 else if (dev->power.idle_notification) rpm_idle()
328 dev->power.request = RPM_REQ_NONE; rpm_idle()
330 if (dev->power.no_callbacks) rpm_idle()
335 dev->power.request = RPM_REQ_IDLE; rpm_idle()
336 if (!dev->power.request_pending) { rpm_idle()
337 dev->power.request_pending = true; rpm_idle()
338 queue_work(pm_wq, &dev->power.work); rpm_idle()
340 trace_rpm_return_int(dev, _THIS_IP_, 0); rpm_idle()
344 dev->power.idle_notification = true; rpm_idle()
346 callback = RPM_GET_CALLBACK(dev, runtime_idle); rpm_idle()
349 retval = __rpm_callback(callback, dev); rpm_idle()
351 dev->power.idle_notification = false; rpm_idle()
352 wake_up_all(&dev->power.wait_queue); rpm_idle()
355 trace_rpm_return_int(dev, _THIS_IP_, retval); rpm_idle()
356 return retval ? retval : rpm_suspend(dev, rpmflags | RPM_AUTO); rpm_idle()
362 * @dev: Device to run the callback for.
364 static int rpm_callback(int (*cb)(struct device *), struct device *dev) rpm_callback() argument
371 if (dev->power.memalloc_noio) { rpm_callback()
384 retval = __rpm_callback(cb, dev); rpm_callback()
387 retval = __rpm_callback(cb, dev); rpm_callback()
390 dev->power.runtime_error = retval; rpm_callback()
396 * @dev: Device to suspend.
408 * ignore_children of parent->power and irq_safe of dev->power are not set).
413 * This function must be called under dev->power.lock with interrupts disabled.
415 static int rpm_suspend(struct device *dev, int rpmflags)
416 __releases(&dev->power.lock) __acquires(&dev->power.lock)
422 trace_rpm_suspend(dev, rpmflags);
425 retval = rpm_check_suspend_allowed(dev);
431 else if (dev->power.runtime_status == RPM_RESUMING &&
439 && dev->power.runtime_status != RPM_SUSPENDING) {
440 unsigned long expires = pm_runtime_autosuspend_expiration(dev);
444 dev->power.request = RPM_REQ_NONE;
453 if (!(dev->power.timer_expires && time_before_eq(
454 dev->power.timer_expires, expires))) {
455 dev->power.timer_expires = expires;
456 mod_timer(&dev->power.suspend_timer, expires);
458 dev->power.timer_autosuspends = 1;
464 pm_runtime_cancel_pending(dev); variable
466 if (dev->power.runtime_status == RPM_SUSPENDING) {
474 if (dev->power.irq_safe) {
475 spin_unlock(&dev->power.lock);
479 spin_lock(&dev->power.lock);
485 prepare_to_wait(&dev->power.wait_queue, &wait,
487 if (dev->power.runtime_status != RPM_SUSPENDING)
490 spin_unlock_irq(&dev->power.lock);
494 spin_lock_irq(&dev->power.lock);
496 finish_wait(&dev->power.wait_queue, &wait);
500 if (dev->power.no_callbacks)
505 dev->power.request = (rpmflags & RPM_AUTO) ?
507 if (!dev->power.request_pending) {
508 dev->power.request_pending = true;
509 queue_work(pm_wq, &dev->power.work);
514 __update_runtime_status(dev, RPM_SUSPENDING);
516 callback = RPM_GET_CALLBACK(dev, runtime_suspend);
518 dev_pm_enable_wake_irq(dev); variable
519 retval = rpm_callback(callback, dev);
524 __update_runtime_status(dev, RPM_SUSPENDED);
525 pm_runtime_deactivate_timer(dev); variable
527 if (dev->parent) {
528 parent = dev->parent;
531 wake_up_all(&dev->power.wait_queue);
533 if (dev->power.deferred_resume) {
534 dev->power.deferred_resume = false;
535 rpm_resume(dev, 0);
541 if (parent && !parent->power.ignore_children && !dev->power.irq_safe) {
542 spin_unlock(&dev->power.lock);
548 spin_lock(&dev->power.lock);
552 trace_rpm_return_int(dev, _THIS_IP_, retval);
557 dev_pm_disable_wake_irq(dev); variable
558 __update_runtime_status(dev, RPM_ACTIVE);
559 dev->power.deferred_resume = false;
560 wake_up_all(&dev->power.wait_queue);
563 dev->power.runtime_error = 0;
572 pm_runtime_autosuspend_expiration(dev) != 0)
575 pm_runtime_cancel_pending(dev); variable
582 * @dev: Device to resume.
595 * This function must be called under dev->power.lock with interrupts disabled.
597 static int rpm_resume(struct device *dev, int rpmflags)
598 __releases(&dev->power.lock) __acquires(&dev->power.lock)
604 trace_rpm_resume(dev, rpmflags);
607 if (dev->power.runtime_error)
609 else if (dev->power.disable_depth == 1 && dev->power.is_suspended
610 && dev->power.runtime_status == RPM_ACTIVE)
612 else if (dev->power.disable_depth > 0)
623 dev->power.request = RPM_REQ_NONE;
624 if (!dev->power.timer_autosuspends)
625 pm_runtime_deactivate_timer(dev); variable
627 if (dev->power.runtime_status == RPM_ACTIVE) {
632 if (dev->power.runtime_status == RPM_RESUMING
633 || dev->power.runtime_status == RPM_SUSPENDING) {
637 if (dev->power.runtime_status == RPM_SUSPENDING)
638 dev->power.deferred_resume = true;
644 if (dev->power.irq_safe) {
645 spin_unlock(&dev->power.lock);
649 spin_lock(&dev->power.lock);
655 prepare_to_wait(&dev->power.wait_queue, &wait,
657 if (dev->power.runtime_status != RPM_RESUMING
658 && dev->power.runtime_status != RPM_SUSPENDING)
661 spin_unlock_irq(&dev->power.lock);
665 spin_lock_irq(&dev->power.lock);
667 finish_wait(&dev->power.wait_queue, &wait);
676 if (dev->power.no_callbacks && !parent && dev->parent) {
677 spin_lock_nested(&dev->parent->power.lock, SINGLE_DEPTH_NESTING);
678 if (dev->parent->power.disable_depth > 0
679 || dev->parent->power.ignore_children
680 || dev->parent->power.runtime_status == RPM_ACTIVE) {
681 atomic_inc(&dev->parent->power.child_count);
682 spin_unlock(&dev->parent->power.lock);
686 spin_unlock(&dev->parent->power.lock);
691 dev->power.request = RPM_REQ_RESUME;
692 if (!dev->power.request_pending) {
693 dev->power.request_pending = true;
694 queue_work(pm_wq, &dev->power.work);
700 if (!parent && dev->parent) {
703 * necessary. Not needed if dev is irq-safe; then the
706 parent = dev->parent;
707 if (dev->power.irq_safe)
709 spin_unlock(&dev->power.lock);
726 spin_lock(&dev->power.lock);
733 if (dev->power.no_callbacks)
736 __update_runtime_status(dev, RPM_RESUMING);
738 callback = RPM_GET_CALLBACK(dev, runtime_resume);
740 dev_pm_disable_wake_irq(dev); variable
741 retval = rpm_callback(callback, dev);
743 __update_runtime_status(dev, RPM_SUSPENDED);
744 pm_runtime_cancel_pending(dev); variable
745 dev_pm_enable_wake_irq(dev); variable
748 __update_runtime_status(dev, RPM_ACTIVE);
749 pm_runtime_mark_last_busy(dev); variable
753 wake_up_all(&dev->power.wait_queue);
756 rpm_idle(dev, RPM_ASYNC);
759 if (parent && !dev->power.irq_safe) {
760 spin_unlock_irq(&dev->power.lock);
764 spin_lock_irq(&dev->power.lock);
767 trace_rpm_return_int(dev, _THIS_IP_, retval);
781 struct device *dev = container_of(work, struct device, power.work); pm_runtime_work() local
784 spin_lock_irq(&dev->power.lock); pm_runtime_work()
786 if (!dev->power.request_pending) pm_runtime_work()
789 req = dev->power.request; pm_runtime_work()
790 dev->power.request = RPM_REQ_NONE; pm_runtime_work()
791 dev->power.request_pending = false; pm_runtime_work()
797 rpm_idle(dev, RPM_NOWAIT); pm_runtime_work()
800 rpm_suspend(dev, RPM_NOWAIT); pm_runtime_work()
803 rpm_suspend(dev, RPM_NOWAIT | RPM_AUTO); pm_runtime_work()
806 rpm_resume(dev, RPM_NOWAIT); pm_runtime_work()
811 spin_unlock_irq(&dev->power.lock); pm_runtime_work()
822 struct device *dev = (struct device *)data; pm_suspend_timer_fn() local
826 spin_lock_irqsave(&dev->power.lock, flags); pm_suspend_timer_fn()
828 expires = dev->power.timer_expires; pm_suspend_timer_fn()
831 dev->power.timer_expires = 0; pm_suspend_timer_fn()
832 rpm_suspend(dev, dev->power.timer_autosuspends ? pm_suspend_timer_fn()
836 spin_unlock_irqrestore(&dev->power.lock, flags); pm_suspend_timer_fn()
841 * @dev: Device to suspend.
844 int pm_schedule_suspend(struct device *dev, unsigned int delay) pm_schedule_suspend() argument
849 spin_lock_irqsave(&dev->power.lock, flags); pm_schedule_suspend()
852 retval = rpm_suspend(dev, RPM_ASYNC); pm_schedule_suspend()
856 retval = rpm_check_suspend_allowed(dev); pm_schedule_suspend()
861 pm_runtime_cancel_pending(dev); pm_schedule_suspend()
863 dev->power.timer_expires = jiffies + msecs_to_jiffies(delay); pm_schedule_suspend()
864 dev->power.timer_expires += !dev->power.timer_expires; pm_schedule_suspend()
865 dev->power.timer_autosuspends = 0; pm_schedule_suspend()
866 mod_timer(&dev->power.suspend_timer, dev->power.timer_expires); pm_schedule_suspend()
869 spin_unlock_irqrestore(&dev->power.lock, flags); pm_schedule_suspend()
877 * @dev: Device to send idle notification for.
887 int __pm_runtime_idle(struct device *dev, int rpmflags) __pm_runtime_idle() argument
892 might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); __pm_runtime_idle()
895 if (!atomic_dec_and_test(&dev->power.usage_count)) __pm_runtime_idle()
899 spin_lock_irqsave(&dev->power.lock, flags); __pm_runtime_idle()
900 retval = rpm_idle(dev, rpmflags); __pm_runtime_idle()
901 spin_unlock_irqrestore(&dev->power.lock, flags); __pm_runtime_idle()
909 * @dev: Device to suspend.
919 int __pm_runtime_suspend(struct device *dev, int rpmflags) __pm_runtime_suspend() argument
924 might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); __pm_runtime_suspend()
927 if (!atomic_dec_and_test(&dev->power.usage_count)) __pm_runtime_suspend()
931 spin_lock_irqsave(&dev->power.lock, flags); __pm_runtime_suspend()
932 retval = rpm_suspend(dev, rpmflags); __pm_runtime_suspend()
933 spin_unlock_irqrestore(&dev->power.lock, flags); __pm_runtime_suspend()
941 * @dev: Device to resume.
950 int __pm_runtime_resume(struct device *dev, int rpmflags) __pm_runtime_resume() argument
955 might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe); __pm_runtime_resume()
958 atomic_inc(&dev->power.usage_count); __pm_runtime_resume()
960 spin_lock_irqsave(&dev->power.lock, flags); __pm_runtime_resume()
961 retval = rpm_resume(dev, rpmflags); __pm_runtime_resume()
962 spin_unlock_irqrestore(&dev->power.lock, flags); __pm_runtime_resume()
970 * @dev: Device to handle.
985 int __pm_runtime_set_status(struct device *dev, unsigned int status) __pm_runtime_set_status() argument
987 struct device *parent = dev->parent; __pm_runtime_set_status()
995 spin_lock_irqsave(&dev->power.lock, flags); __pm_runtime_set_status()
997 if (!dev->power.runtime_error && !dev->power.disable_depth) { __pm_runtime_set_status()
1002 if (dev->power.runtime_status == status) __pm_runtime_set_status()
1026 else if (dev->power.runtime_status == RPM_SUSPENDED) __pm_runtime_set_status()
1036 __update_runtime_status(dev, status); __pm_runtime_set_status()
1037 dev->power.runtime_error = 0; __pm_runtime_set_status()
1039 spin_unlock_irqrestore(&dev->power.lock, flags); __pm_runtime_set_status()
1050 * @dev: Device to handle.
1055 * Should be called under dev->power.lock with interrupts disabled.
1057 static void __pm_runtime_barrier(struct device *dev) __pm_runtime_barrier() argument
1059 pm_runtime_deactivate_timer(dev); __pm_runtime_barrier()
1061 if (dev->power.request_pending) { __pm_runtime_barrier()
1062 dev->power.request = RPM_REQ_NONE; __pm_runtime_barrier()
1063 spin_unlock_irq(&dev->power.lock); __pm_runtime_barrier()
1065 cancel_work_sync(&dev->power.work); __pm_runtime_barrier()
1067 spin_lock_irq(&dev->power.lock); __pm_runtime_barrier()
1068 dev->power.request_pending = false; __pm_runtime_barrier()
1071 if (dev->power.runtime_status == RPM_SUSPENDING __pm_runtime_barrier()
1072 || dev->power.runtime_status == RPM_RESUMING __pm_runtime_barrier()
1073 || dev->power.idle_notification) { __pm_runtime_barrier()
1078 prepare_to_wait(&dev->power.wait_queue, &wait, __pm_runtime_barrier()
1080 if (dev->power.runtime_status != RPM_SUSPENDING __pm_runtime_barrier()
1081 && dev->power.runtime_status != RPM_RESUMING __pm_runtime_barrier()
1082 && !dev->power.idle_notification) __pm_runtime_barrier()
1084 spin_unlock_irq(&dev->power.lock); __pm_runtime_barrier()
1088 spin_lock_irq(&dev->power.lock); __pm_runtime_barrier()
1090 finish_wait(&dev->power.wait_queue, &wait); __pm_runtime_barrier()
1096 * @dev: Device to handle.
1108 int pm_runtime_barrier(struct device *dev) pm_runtime_barrier() argument
1112 pm_runtime_get_noresume(dev); pm_runtime_barrier()
1113 spin_lock_irq(&dev->power.lock); pm_runtime_barrier()
1115 if (dev->power.request_pending pm_runtime_barrier()
1116 && dev->power.request == RPM_REQ_RESUME) { pm_runtime_barrier()
1117 rpm_resume(dev, 0); pm_runtime_barrier()
1121 __pm_runtime_barrier(dev); pm_runtime_barrier()
1123 spin_unlock_irq(&dev->power.lock); pm_runtime_barrier()
1124 pm_runtime_put_noidle(dev); pm_runtime_barrier()
1132 * @dev: Device to handle.
1144 void __pm_runtime_disable(struct device *dev, bool check_resume) __pm_runtime_disable() argument
1146 spin_lock_irq(&dev->power.lock); __pm_runtime_disable()
1148 if (dev->power.disable_depth > 0) { __pm_runtime_disable()
1149 dev->power.disable_depth++; __pm_runtime_disable()
1158 if (check_resume && dev->power.request_pending __pm_runtime_disable()
1159 && dev->power.request == RPM_REQ_RESUME) { __pm_runtime_disable()
1164 pm_runtime_get_noresume(dev); __pm_runtime_disable()
1166 rpm_resume(dev, 0); __pm_runtime_disable()
1168 pm_runtime_put_noidle(dev); __pm_runtime_disable()
1171 if (!dev->power.disable_depth++) __pm_runtime_disable()
1172 __pm_runtime_barrier(dev); __pm_runtime_disable()
1175 spin_unlock_irq(&dev->power.lock); __pm_runtime_disable()
1181 * @dev: Device to handle.
1183 void pm_runtime_enable(struct device *dev) pm_runtime_enable() argument
1187 spin_lock_irqsave(&dev->power.lock, flags); pm_runtime_enable()
1189 if (dev->power.disable_depth > 0) pm_runtime_enable()
1190 dev->power.disable_depth--; pm_runtime_enable()
1192 dev_warn(dev, "Unbalanced %s!\n", __func__); pm_runtime_enable()
1194 spin_unlock_irqrestore(&dev->power.lock, flags); pm_runtime_enable()
1200 * @dev: Device to handle.
1206 void pm_runtime_forbid(struct device *dev) pm_runtime_forbid() argument
1208 spin_lock_irq(&dev->power.lock); pm_runtime_forbid()
1209 if (!dev->power.runtime_auto) pm_runtime_forbid()
1212 dev->power.runtime_auto = false; pm_runtime_forbid()
1213 atomic_inc(&dev->power.usage_count); pm_runtime_forbid()
1214 rpm_resume(dev, 0); pm_runtime_forbid()
1217 spin_unlock_irq(&dev->power.lock); pm_runtime_forbid()
1223 * @dev: Device to handle.
1227 void pm_runtime_allow(struct device *dev) pm_runtime_allow() argument
1229 spin_lock_irq(&dev->power.lock); pm_runtime_allow()
1230 if (dev->power.runtime_auto) pm_runtime_allow()
1233 dev->power.runtime_auto = true; pm_runtime_allow()
1234 if (atomic_dec_and_test(&dev->power.usage_count)) pm_runtime_allow()
1235 rpm_idle(dev, RPM_AUTO); pm_runtime_allow()
1238 spin_unlock_irq(&dev->power.lock); pm_runtime_allow()
1244 * @dev: Device to handle.
1250 void pm_runtime_no_callbacks(struct device *dev) pm_runtime_no_callbacks() argument
1252 spin_lock_irq(&dev->power.lock); pm_runtime_no_callbacks()
1253 dev->power.no_callbacks = 1; pm_runtime_no_callbacks()
1254 spin_unlock_irq(&dev->power.lock); pm_runtime_no_callbacks()
1255 if (device_is_registered(dev)) pm_runtime_no_callbacks()
1256 rpm_sysfs_remove(dev); pm_runtime_no_callbacks()
1262 * @dev: Device to handle
1271 void pm_runtime_irq_safe(struct device *dev) pm_runtime_irq_safe() argument
1273 if (dev->parent) pm_runtime_irq_safe()
1274 pm_runtime_get_sync(dev->parent); pm_runtime_irq_safe()
1275 spin_lock_irq(&dev->power.lock); pm_runtime_irq_safe()
1276 dev->power.irq_safe = 1; pm_runtime_irq_safe()
1277 spin_unlock_irq(&dev->power.lock); pm_runtime_irq_safe()
1283 * @dev: Device to handle.
1290 * This function must be called under dev->power.lock with interrupts disabled.
1292 static void update_autosuspend(struct device *dev, int old_delay, int old_use) update_autosuspend() argument
1294 int delay = dev->power.autosuspend_delay; update_autosuspend()
1297 if (dev->power.use_autosuspend && delay < 0) { update_autosuspend()
1301 atomic_inc(&dev->power.usage_count); update_autosuspend()
1302 rpm_resume(dev, 0); update_autosuspend()
1311 atomic_dec(&dev->power.usage_count); update_autosuspend()
1314 rpm_idle(dev, RPM_AUTO); update_autosuspend()
1320 * @dev: Device to handle.
1327 void pm_runtime_set_autosuspend_delay(struct device *dev, int delay) pm_runtime_set_autosuspend_delay() argument
1331 spin_lock_irq(&dev->power.lock); pm_runtime_set_autosuspend_delay()
1332 old_delay = dev->power.autosuspend_delay; pm_runtime_set_autosuspend_delay()
1333 old_use = dev->power.use_autosuspend; pm_runtime_set_autosuspend_delay()
1334 dev->power.autosuspend_delay = delay; pm_runtime_set_autosuspend_delay()
1335 update_autosuspend(dev, old_delay, old_use); pm_runtime_set_autosuspend_delay()
1336 spin_unlock_irq(&dev->power.lock); pm_runtime_set_autosuspend_delay()
1342 * @dev: Device to handle.
1348 void __pm_runtime_use_autosuspend(struct device *dev, bool use) __pm_runtime_use_autosuspend() argument
1352 spin_lock_irq(&dev->power.lock); __pm_runtime_use_autosuspend()
1353 old_delay = dev->power.autosuspend_delay; __pm_runtime_use_autosuspend()
1354 old_use = dev->power.use_autosuspend; __pm_runtime_use_autosuspend()
1355 dev->power.use_autosuspend = use; __pm_runtime_use_autosuspend()
1356 update_autosuspend(dev, old_delay, old_use); __pm_runtime_use_autosuspend()
1357 spin_unlock_irq(&dev->power.lock); __pm_runtime_use_autosuspend()
1363 * @dev: Device object to initialize.
1365 void pm_runtime_init(struct device *dev) pm_runtime_init() argument
1367 dev->power.runtime_status = RPM_SUSPENDED; pm_runtime_init()
1368 dev->power.idle_notification = false; pm_runtime_init()
1370 dev->power.disable_depth = 1; pm_runtime_init()
1371 atomic_set(&dev->power.usage_count, 0); pm_runtime_init()
1373 dev->power.runtime_error = 0; pm_runtime_init()
1375 atomic_set(&dev->power.child_count, 0); pm_runtime_init()
1376 pm_suspend_ignore_children(dev, false); pm_runtime_init()
1377 dev->power.runtime_auto = true; pm_runtime_init()
1379 dev->power.request_pending = false; pm_runtime_init()
1380 dev->power.request = RPM_REQ_NONE; pm_runtime_init()
1381 dev->power.deferred_resume = false; pm_runtime_init()
1382 dev->power.accounting_timestamp = jiffies; pm_runtime_init()
1383 INIT_WORK(&dev->power.work, pm_runtime_work); pm_runtime_init()
1385 dev->power.timer_expires = 0; pm_runtime_init()
1386 setup_timer(&dev->power.suspend_timer, pm_suspend_timer_fn, pm_runtime_init()
1387 (unsigned long)dev); pm_runtime_init()
1389 init_waitqueue_head(&dev->power.wait_queue); pm_runtime_init()
1394 * @dev: Device object being removed from device hierarchy.
1396 void pm_runtime_remove(struct device *dev) pm_runtime_remove() argument
1398 __pm_runtime_disable(dev, false); pm_runtime_remove()
1401 if (dev->power.runtime_status == RPM_ACTIVE) pm_runtime_remove()
1402 pm_runtime_set_suspended(dev); pm_runtime_remove()
1403 if (dev->power.irq_safe && dev->parent) pm_runtime_remove()
1404 pm_runtime_put(dev->parent); pm_runtime_remove()
1409 * @dev: Device to suspend.
1419 int pm_runtime_force_suspend(struct device *dev) pm_runtime_force_suspend() argument
1424 pm_runtime_disable(dev); pm_runtime_force_suspend()
1425 if (pm_runtime_status_suspended(dev)) pm_runtime_force_suspend()
1428 callback = RPM_GET_CALLBACK(dev, runtime_suspend); pm_runtime_force_suspend()
1435 ret = callback(dev); pm_runtime_force_suspend()
1439 pm_runtime_set_suspended(dev); pm_runtime_force_suspend()
1442 pm_runtime_enable(dev); pm_runtime_force_suspend()
1449 * @dev: Device to resume.
1459 int pm_runtime_force_resume(struct device *dev) pm_runtime_force_resume() argument
1464 callback = RPM_GET_CALLBACK(dev, runtime_resume); pm_runtime_force_resume()
1471 ret = pm_runtime_set_active(dev); pm_runtime_force_resume()
1475 ret = callback(dev); pm_runtime_force_resume()
1477 pm_runtime_set_suspended(dev); pm_runtime_force_resume()
1481 pm_runtime_mark_last_busy(dev); pm_runtime_force_resume()
1483 pm_runtime_enable(dev); pm_runtime_force_resume()
/linux-4.4.14/drivers/infiniband/hw/ocrdma/
H A Docrdma_main.c68 void ocrdma_get_guid(struct ocrdma_dev *dev, u8 *guid) ocrdma_get_guid() argument
72 memcpy(&mac_addr[0], &dev->nic_info.mac_addr[0], ETH_ALEN); ocrdma_get_guid()
106 static int ocrdma_register_device(struct ocrdma_dev *dev) ocrdma_register_device() argument
108 strlcpy(dev->ibdev.name, "ocrdma%d", IB_DEVICE_NAME_MAX); ocrdma_register_device()
109 ocrdma_get_guid(dev, (u8 *)&dev->ibdev.node_guid); ocrdma_register_device()
110 memcpy(dev->ibdev.node_desc, OCRDMA_NODE_DESC, ocrdma_register_device()
112 dev->ibdev.owner = THIS_MODULE; ocrdma_register_device()
113 dev->ibdev.uverbs_abi_ver = OCRDMA_ABI_VERSION; ocrdma_register_device()
114 dev->ibdev.uverbs_cmd_mask = ocrdma_register_device()
135 dev->ibdev.uverbs_cmd_mask |= ocrdma_register_device()
141 dev->ibdev.node_type = RDMA_NODE_IB_CA; ocrdma_register_device()
142 dev->ibdev.phys_port_cnt = 1; ocrdma_register_device()
143 dev->ibdev.num_comp_vectors = dev->eq_cnt; ocrdma_register_device()
146 dev->ibdev.query_device = ocrdma_query_device; ocrdma_register_device()
147 dev->ibdev.query_port = ocrdma_query_port; ocrdma_register_device()
148 dev->ibdev.modify_port = ocrdma_modify_port; ocrdma_register_device()
149 dev->ibdev.query_gid = ocrdma_query_gid; ocrdma_register_device()
150 dev->ibdev.get_netdev = ocrdma_get_netdev; ocrdma_register_device()
151 dev->ibdev.add_gid = ocrdma_add_gid; ocrdma_register_device()
152 dev->ibdev.del_gid = ocrdma_del_gid; ocrdma_register_device()
153 dev->ibdev.get_link_layer = ocrdma_link_layer; ocrdma_register_device()
154 dev->ibdev.alloc_pd = ocrdma_alloc_pd; ocrdma_register_device()
155 dev->ibdev.dealloc_pd = ocrdma_dealloc_pd; ocrdma_register_device()
157 dev->ibdev.create_cq = ocrdma_create_cq; ocrdma_register_device()
158 dev->ibdev.destroy_cq = ocrdma_destroy_cq; ocrdma_register_device()
159 dev->ibdev.resize_cq = ocrdma_resize_cq; ocrdma_register_device()
161 dev->ibdev.create_qp = ocrdma_create_qp; ocrdma_register_device()
162 dev->ibdev.modify_qp = ocrdma_modify_qp; ocrdma_register_device()
163 dev->ibdev.query_qp = ocrdma_query_qp; ocrdma_register_device()
164 dev->ibdev.destroy_qp = ocrdma_destroy_qp; ocrdma_register_device()
166 dev->ibdev.query_pkey = ocrdma_query_pkey; ocrdma_register_device()
167 dev->ibdev.create_ah = ocrdma_create_ah; ocrdma_register_device()
168 dev->ibdev.destroy_ah = ocrdma_destroy_ah; ocrdma_register_device()
169 dev->ibdev.query_ah = ocrdma_query_ah; ocrdma_register_device()
170 dev->ibdev.modify_ah = ocrdma_modify_ah; ocrdma_register_device()
172 dev->ibdev.poll_cq = ocrdma_poll_cq; ocrdma_register_device()
173 dev->ibdev.post_send = ocrdma_post_send; ocrdma_register_device()
174 dev->ibdev.post_recv = ocrdma_post_recv; ocrdma_register_device()
175 dev->ibdev.req_notify_cq = ocrdma_arm_cq; ocrdma_register_device()
177 dev->ibdev.get_dma_mr = ocrdma_get_dma_mr; ocrdma_register_device()
178 dev->ibdev.reg_phys_mr = ocrdma_reg_kernel_mr; ocrdma_register_device()
179 dev->ibdev.dereg_mr = ocrdma_dereg_mr; ocrdma_register_device()
180 dev->ibdev.reg_user_mr = ocrdma_reg_user_mr; ocrdma_register_device()
182 dev->ibdev.alloc_mr = ocrdma_alloc_mr; ocrdma_register_device()
183 dev->ibdev.map_mr_sg = ocrdma_map_mr_sg; ocrdma_register_device()
186 dev->ibdev.alloc_ucontext = ocrdma_alloc_ucontext; ocrdma_register_device()
187 dev->ibdev.dealloc_ucontext = ocrdma_dealloc_ucontext; ocrdma_register_device()
188 dev->ibdev.mmap = ocrdma_mmap; ocrdma_register_device()
189 dev->ibdev.dma_device = &dev->nic_info.pdev->dev; ocrdma_register_device()
191 dev->ibdev.process_mad = ocrdma_process_mad; ocrdma_register_device()
192 dev->ibdev.get_port_immutable = ocrdma_port_immutable; ocrdma_register_device()
194 if (ocrdma_get_asic_type(dev) == OCRDMA_ASIC_GEN_SKH_R) { ocrdma_register_device()
195 dev->ibdev.uverbs_cmd_mask |= ocrdma_register_device()
202 dev->ibdev.create_srq = ocrdma_create_srq; ocrdma_register_device()
203 dev->ibdev.modify_srq = ocrdma_modify_srq; ocrdma_register_device()
204 dev->ibdev.query_srq = ocrdma_query_srq; ocrdma_register_device()
205 dev->ibdev.destroy_srq = ocrdma_destroy_srq; ocrdma_register_device()
206 dev->ibdev.post_srq_recv = ocrdma_post_srq_recv; ocrdma_register_device()
208 return ib_register_device(&dev->ibdev, NULL); ocrdma_register_device()
211 static int ocrdma_alloc_resources(struct ocrdma_dev *dev) ocrdma_alloc_resources() argument
213 mutex_init(&dev->dev_lock); ocrdma_alloc_resources()
214 dev->cq_tbl = kzalloc(sizeof(struct ocrdma_cq *) * ocrdma_alloc_resources()
216 if (!dev->cq_tbl) ocrdma_alloc_resources()
219 if (dev->attr.max_qp) { ocrdma_alloc_resources()
220 dev->qp_tbl = kzalloc(sizeof(struct ocrdma_qp *) * ocrdma_alloc_resources()
222 if (!dev->qp_tbl) ocrdma_alloc_resources()
226 dev->stag_arr = kzalloc(sizeof(u64) * OCRDMA_MAX_STAG, GFP_KERNEL); ocrdma_alloc_resources()
227 if (dev->stag_arr == NULL) ocrdma_alloc_resources()
230 ocrdma_alloc_pd_pool(dev); ocrdma_alloc_resources()
232 spin_lock_init(&dev->av_tbl.lock); ocrdma_alloc_resources()
233 spin_lock_init(&dev->flush_q_lock); ocrdma_alloc_resources()
236 pr_err("%s(%d) error.\n", __func__, dev->id); ocrdma_alloc_resources()
240 static void ocrdma_free_resources(struct ocrdma_dev *dev) ocrdma_free_resources() argument
242 kfree(dev->stag_arr); ocrdma_free_resources()
243 kfree(dev->qp_tbl); ocrdma_free_resources()
244 kfree(dev->cq_tbl); ocrdma_free_resources()
251 struct ocrdma_dev *dev = dev_get_drvdata(device); show_rev() local
253 return scnprintf(buf, PAGE_SIZE, "0x%x\n", dev->nic_info.pdev->vendor); show_rev()
259 struct ocrdma_dev *dev = dev_get_drvdata(device); show_fw_ver() local
261 return scnprintf(buf, PAGE_SIZE, "%s\n", &dev->attr.fw_ver[0]); show_fw_ver()
267 struct ocrdma_dev *dev = dev_get_drvdata(device); show_hca_type() local
269 return scnprintf(buf, PAGE_SIZE, "%s\n", &dev->model_number[0]); show_hca_type()
282 static void ocrdma_remove_sysfiles(struct ocrdma_dev *dev) ocrdma_remove_sysfiles() argument
287 device_remove_file(&dev->ibdev.dev, ocrdma_attributes[i]); ocrdma_remove_sysfiles()
294 struct ocrdma_dev *dev; ocrdma_add() local
296 dev = (struct ocrdma_dev *)ib_alloc_device(sizeof(struct ocrdma_dev)); ocrdma_add()
297 if (!dev) { ocrdma_add()
301 dev->mbx_cmd = kzalloc(sizeof(struct ocrdma_mqe_emb_cmd), GFP_KERNEL); ocrdma_add()
302 if (!dev->mbx_cmd) ocrdma_add()
305 memcpy(&dev->nic_info, dev_info, sizeof(*dev_info)); ocrdma_add()
306 dev->id = idr_alloc(&ocrdma_dev_id, NULL, 0, 0, GFP_KERNEL); ocrdma_add()
307 if (dev->id < 0) ocrdma_add()
310 status = ocrdma_init_hw(dev); ocrdma_add()
314 status = ocrdma_alloc_resources(dev); ocrdma_add()
318 ocrdma_init_service_level(dev); ocrdma_add()
319 status = ocrdma_register_device(dev); ocrdma_add()
324 status = ocrdma_mbx_get_link_speed(dev, NULL, &lstate); ocrdma_add()
326 ocrdma_update_link_state(dev, lstate); ocrdma_add()
329 if (device_create_file(&dev->ibdev.dev, ocrdma_attributes[i])) ocrdma_add()
332 ocrdma_add_port_stats(dev); ocrdma_add()
334 INIT_DELAYED_WORK(&dev->eqd_work, ocrdma_eqd_set_task); ocrdma_add()
335 schedule_delayed_work(&dev->eqd_work, msecs_to_jiffies(1000)); ocrdma_add()
338 dev_name(&dev->nic_info.pdev->dev), hca_name(dev), ocrdma_add()
339 port_speed_string(dev), dev->model_number, ocrdma_add()
340 dev->hba_port_num); ocrdma_add()
342 dev_name(&dev->nic_info.pdev->dev), dev->id); ocrdma_add()
343 return dev; ocrdma_add()
346 ocrdma_remove_sysfiles(dev); ocrdma_add()
348 ocrdma_free_resources(dev); ocrdma_add()
349 ocrdma_cleanup_hw(dev); ocrdma_add()
351 idr_remove(&ocrdma_dev_id, dev->id); ocrdma_add()
353 kfree(dev->mbx_cmd); ocrdma_add()
354 ib_dealloc_device(&dev->ibdev); ocrdma_add()
359 static void ocrdma_remove_free(struct ocrdma_dev *dev) ocrdma_remove_free() argument
362 idr_remove(&ocrdma_dev_id, dev->id); ocrdma_remove_free()
363 kfree(dev->mbx_cmd); ocrdma_remove_free()
364 ib_dealloc_device(&dev->ibdev); ocrdma_remove_free()
367 static void ocrdma_remove(struct ocrdma_dev *dev) ocrdma_remove() argument
372 cancel_delayed_work_sync(&dev->eqd_work); ocrdma_remove()
373 ocrdma_remove_sysfiles(dev); ocrdma_remove()
374 ib_unregister_device(&dev->ibdev); ocrdma_remove()
376 ocrdma_rem_port_stats(dev); ocrdma_remove()
377 ocrdma_free_resources(dev); ocrdma_remove()
378 ocrdma_cleanup_hw(dev); ocrdma_remove()
379 ocrdma_remove_free(dev); ocrdma_remove()
382 static int ocrdma_dispatch_port_active(struct ocrdma_dev *dev) ocrdma_dispatch_port_active() argument
388 port_event.device = &dev->ibdev; ocrdma_dispatch_port_active()
393 static int ocrdma_dispatch_port_error(struct ocrdma_dev *dev) ocrdma_dispatch_port_error() argument
399 err_event.device = &dev->ibdev; ocrdma_dispatch_port_error()
404 static void ocrdma_shutdown(struct ocrdma_dev *dev) ocrdma_shutdown() argument
406 ocrdma_dispatch_port_error(dev); ocrdma_shutdown()
407 ocrdma_remove(dev); ocrdma_shutdown()
414 static void ocrdma_event_handler(struct ocrdma_dev *dev, u32 event) ocrdma_event_handler() argument
418 ocrdma_shutdown(dev); ocrdma_event_handler()
425 void ocrdma_update_link_state(struct ocrdma_dev *dev, u8 lstate) ocrdma_update_link_state() argument
427 if (!(dev->flags & OCRDMA_FLAGS_LINK_STATUS_INIT)) { ocrdma_update_link_state()
428 dev->flags |= OCRDMA_FLAGS_LINK_STATUS_INIT; ocrdma_update_link_state()
434 ocrdma_dispatch_port_error(dev); ocrdma_update_link_state()
436 ocrdma_dispatch_port_active(dev); ocrdma_update_link_state()
/linux-4.4.14/sound/oss/
H A Dmidibuf.c4 * Device file manager for /dev/midi#
81 static void drain_midi_queue(int dev) drain_midi_queue() argument
88 if (midi_devs[dev]->buffer_status != NULL) drain_midi_queue()
89 wait_event_interruptible_timeout(midi_sleeper[dev], drain_midi_queue()
90 !midi_devs[dev]->buffer_status(dev), HZ/10); drain_midi_queue()
93 static void midi_input_intr(int dev, unsigned char data) midi_input_intr() argument
95 if (midi_in_buf[dev] == NULL) midi_input_intr()
105 if (SPACE_AVAIL(midi_in_buf[dev])) { midi_input_intr()
106 QUEUE_BYTE(midi_in_buf[dev], data); midi_input_intr()
107 wake_up(&input_sleeper[dev]); midi_input_intr()
111 static void midi_output_intr(int dev) midi_output_intr() argument
121 int dev; midi_poll() local
126 for (dev = 0; dev < num_midis; dev++) midi_poll()
127 if (midi_devs[dev] != NULL && midi_out_buf[dev] != NULL) midi_poll()
129 while (DATA_AVAIL(midi_out_buf[dev])) midi_poll()
132 int c = midi_out_buf[dev]->queue[midi_out_buf[dev]->head]; midi_poll()
135 ok = midi_devs[dev]->outputc(dev, c); midi_poll()
139 midi_out_buf[dev]->head = (midi_out_buf[dev]->head + 1) % MAX_QUEUE_SIZE; midi_poll()
140 midi_out_buf[dev]->len--; midi_poll()
143 if (DATA_AVAIL(midi_out_buf[dev]) < 100) midi_poll()
144 wake_up(&midi_sleeper[dev]); midi_poll()
155 int MIDIbuf_open(int dev, struct file *file) MIDIbuf_open() argument
159 dev = dev >> 4; MIDIbuf_open()
167 if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL) MIDIbuf_open()
173 module_put(midi_devs[dev]->owner); MIDIbuf_open()
175 if ((err = midi_devs[dev]->open(dev, mode, MIDIbuf_open()
179 parms[dev].prech_timeout = MAX_SCHEDULE_TIMEOUT; MIDIbuf_open()
180 midi_in_buf[dev] = vmalloc(sizeof(struct midi_buf)); MIDIbuf_open()
182 if (midi_in_buf[dev] == NULL) MIDIbuf_open()
185 midi_devs[dev]->close(dev); MIDIbuf_open()
188 midi_in_buf[dev]->len = midi_in_buf[dev]->head = midi_in_buf[dev]->tail = 0; MIDIbuf_open()
190 midi_out_buf[dev] = vmalloc(sizeof(struct midi_buf)); MIDIbuf_open()
192 if (midi_out_buf[dev] == NULL) MIDIbuf_open()
195 midi_devs[dev]->close(dev); MIDIbuf_open()
196 vfree(midi_in_buf[dev]); MIDIbuf_open()
197 midi_in_buf[dev] = NULL; MIDIbuf_open()
200 midi_out_buf[dev]->len = midi_out_buf[dev]->head = midi_out_buf[dev]->tail = 0; MIDIbuf_open()
203 init_waitqueue_head(&midi_sleeper[dev]); MIDIbuf_open()
204 init_waitqueue_head(&input_sleeper[dev]); MIDIbuf_open()
214 void MIDIbuf_release(int dev, struct file *file) MIDIbuf_release() argument
218 dev = dev >> 4; MIDIbuf_release()
221 if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL) MIDIbuf_release()
230 midi_devs[dev]->outputc(dev, 0xfe); /* MIDIbuf_release()
235 wait_event_interruptible(midi_sleeper[dev], MIDIbuf_release()
236 !DATA_AVAIL(midi_out_buf[dev])); MIDIbuf_release()
241 drain_midi_queue(dev); /* MIDIbuf_release()
246 midi_devs[dev]->close(dev); MIDIbuf_release()
251 vfree(midi_in_buf[dev]); MIDIbuf_release()
252 vfree(midi_out_buf[dev]); MIDIbuf_release()
253 midi_in_buf[dev] = NULL; MIDIbuf_release()
254 midi_out_buf[dev] = NULL; MIDIbuf_release()
256 module_put(midi_devs[dev]->owner); MIDIbuf_release()
259 int MIDIbuf_write(int dev, struct file *file, const char __user *buf, int count) MIDIbuf_write() argument
264 dev = dev >> 4; MIDIbuf_write()
273 n = SPACE_AVAIL(midi_out_buf[dev]); MIDIbuf_write()
284 if (wait_event_interruptible(midi_sleeper[dev], MIDIbuf_write()
285 SPACE_AVAIL(midi_out_buf[dev]))) MIDIbuf_write()
290 n = SPACE_AVAIL(midi_out_buf[dev]); MIDIbuf_write()
304 QUEUE_BYTE(midi_out_buf[dev], tmp_data); MIDIbuf_write()
313 int MIDIbuf_read(int dev, struct file *file, char __user *buf, int count) MIDIbuf_read() argument
318 dev = dev >> 4; MIDIbuf_read()
320 if (!DATA_AVAIL(midi_in_buf[dev])) { /* MIDIbuf_read()
327 wait_event_interruptible_timeout(input_sleeper[dev], MIDIbuf_read()
328 DATA_AVAIL(midi_in_buf[dev]), MIDIbuf_read()
329 parms[dev].prech_timeout); MIDIbuf_read()
334 if (c == 0 && DATA_AVAIL(midi_in_buf[dev])) /* MIDIbuf_read()
338 n = DATA_AVAIL(midi_in_buf[dev]); MIDIbuf_read()
346 REMOVE_BYTE(midi_in_buf[dev], tmp_data); MIDIbuf_read()
362 int MIDIbuf_ioctl(int dev, struct file *file, MIDIbuf_ioctl() argument
367 dev = dev >> 4; MIDIbuf_ioctl()
371 if (midi_devs[dev]->coproc) /* Coprocessor ioctl */ MIDIbuf_ioctl()
372 return midi_devs[dev]->coproc->ioctl(midi_devs[dev]->coproc->devc, cmd, arg, 0); MIDIbuf_ioctl()
373 /* printk("/dev/midi%d: No coprocessor for this device\n", dev);*/ MIDIbuf_ioctl()
386 parms[dev].prech_timeout = val; MIDIbuf_ioctl()
390 if (!midi_devs[dev]->ioctl) MIDIbuf_ioctl()
392 return midi_devs[dev]->ioctl(dev, cmd, arg); MIDIbuf_ioctl()
398 unsigned int MIDIbuf_poll(int dev, struct file *file, poll_table * wait) MIDIbuf_poll() argument
402 dev = dev >> 4; MIDIbuf_poll()
405 poll_wait(file, &input_sleeper[dev], wait); MIDIbuf_poll()
406 if (DATA_AVAIL(midi_in_buf[dev])) MIDIbuf_poll()
410 poll_wait(file, &midi_sleeper[dev], wait); MIDIbuf_poll()
411 if (!SPACE_AVAIL(midi_out_buf[dev])) MIDIbuf_poll()
418 int MIDIbuf_avail(int dev) MIDIbuf_avail() argument
420 if (midi_in_buf[dev]) MIDIbuf_avail()
421 return DATA_AVAIL (midi_in_buf[dev]); MIDIbuf_avail()
H A Daudio.c4 * Device file manager for /dev/audio
41 static int dma_ioctl(int dev, unsigned int cmd, void __user *arg);
43 static int set_format(int dev, int fmt) set_format() argument
47 audio_devs[dev]->local_conversion = 0; set_format()
49 if (!(audio_devs[dev]->format_mask & fmt)) /* Not supported */ set_format()
54 audio_devs[dev]->local_conversion = CNV_MU_LAW; set_format()
59 audio_devs[dev]->audio_format = audio_devs[dev]->d->set_bits(dev, fmt); set_format()
60 audio_devs[dev]->local_format = fmt; set_format()
63 return audio_devs[dev]->local_format; set_format()
65 if (audio_devs[dev]->local_conversion) set_format()
66 return audio_devs[dev]->local_conversion; set_format()
68 return audio_devs[dev]->local_format; set_format()
71 int audio_open(int dev, struct file *file) audio_open() argument
75 int dev_type = dev & 0x0f; audio_open()
80 dev = dev >> 4; audio_open()
87 if (dev < 0 || dev >= num_audiodevs) audio_open()
90 driver = audio_devs[dev]->d; audio_open()
95 if ((ret = DMAbuf_open(dev, mode)) < 0) audio_open()
98 if ( (coprocessor = audio_devs[dev]->coproc) != NULL ) { audio_open()
108 audio_devs[dev]->local_conversion = 0; audio_open()
111 set_format(dev, AFMT_MU_LAW); audio_open()
113 set_format(dev, bits); audio_open()
115 audio_devs[dev]->audio_mode = AM_NONE; audio_open()
127 DMAbuf_release(dev, mode); audio_open()
135 static void sync_output(int dev) sync_output() argument
139 struct dma_buffparms *dmap = audio_devs[dev]->dmap_out; sync_output()
154 DMAbuf_move_wrpointer(dev, len); sync_output()
179 void audio_release(int dev, struct file *file) audio_release() argument
184 dev = dev >> 4; audio_release()
192 audio_devs[dev]->dmap_out->closing = 1; audio_release()
193 audio_devs[dev]->dmap_in->closing = 1; audio_release()
200 sync_output(dev); audio_release()
202 if ( (coprocessor = audio_devs[dev]->coproc) != NULL ) { audio_release()
206 DMAbuf_release(dev, mode); audio_release()
208 module_put(audio_devs[dev]->d->owner); audio_release()
222 int audio_write(int dev, struct file *file, const char __user *buf, int count) audio_write() argument
228 dev = dev >> 4; audio_write()
236 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) audio_write()
239 if (audio_devs[dev]->flags & DMA_DUPLEX) audio_write()
240 audio_devs[dev]->audio_mode |= AM_WRITE; audio_write()
242 audio_devs[dev]->audio_mode = AM_WRITE; audio_write()
246 sync_output(dev); audio_write()
252 if ((err = DMAbuf_getwrbuffer(dev, &dma_buf, &buf_size, !!(file->f_flags & O_NONBLOCK))) < 0) audio_write()
266 if (!audio_devs[dev]->d->copy_user) audio_write()
269 (audio_devs[dev]->dmap_out->raw_buf + audio_devs[dev]->dmap_out->buffsize)) audio_write()
271 printk(KERN_ERR "audio: Buffer error 3 (%lx,%d), (%lx, %d)\n", (long) dma_buf, l, (long) audio_devs[dev]->dmap_out->raw_buf, (int) audio_devs[dev]->dmap_out->buffsize); audio_write()
274 if (dma_buf < audio_devs[dev]->dmap_out->raw_buf) audio_write()
276 printk(KERN_ERR "audio: Buffer error 13 (%lx<%lx)\n", (long) dma_buf, (long) audio_devs[dev]->dmap_out->raw_buf); audio_write()
282 else audio_devs[dev]->d->copy_user (dev, audio_write()
290 if (audio_devs[dev]->local_conversion & CNV_MU_LAW) audio_write()
296 DMAbuf_move_wrpointer(dev, l); audio_write()
303 int audio_read(int dev, struct file *file, char __user *buf, int count) audio_read() argument
309 dev = dev >> 4; audio_read()
313 if (!(audio_devs[dev]->open_mode & OPEN_READ)) audio_read()
316 if ((audio_devs[dev]->audio_mode & AM_WRITE) && !(audio_devs[dev]->flags & DMA_DUPLEX)) audio_read()
317 sync_output(dev); audio_read()
319 if (audio_devs[dev]->flags & DMA_DUPLEX) audio_read()
320 audio_devs[dev]->audio_mode |= AM_READ; audio_read()
322 audio_devs[dev]->audio_mode = AM_READ; audio_read()
326 if ((buf_no = DMAbuf_getrdbuffer(dev, &dmabuf, &l, !!(file->f_flags & O_NONBLOCK))) < 0) audio_read()
347 if (audio_devs[dev]->local_conversion & CNV_MU_LAW) audio_read()
359 DMAbuf_rmchars(dev, buf_no, l); audio_read()
368 int audio_ioctl(int dev, struct file *file, unsigned int cmd, void __user *arg) audio_ioctl() argument
375 dev = dev >> 4; audio_ioctl()
378 if (audio_devs[dev]->coproc) /* Coprocessor ioctl */ audio_ioctl()
379 return audio_devs[dev]->coproc->ioctl(audio_devs[dev]->coproc->devc, cmd, arg, 0); audio_ioctl()
381 printk(KERN_DEBUG"/dev/dsp%d: No coprocessor for this device\n", dev); */ audio_ioctl()
387 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) audio_ioctl()
389 if (audio_devs[dev]->dmap_out->fragment_size == 0) audio_ioctl()
391 sync_output(dev); audio_ioctl()
392 DMAbuf_sync(dev); audio_ioctl()
393 DMAbuf_reset(dev); audio_ioctl()
397 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) audio_ioctl()
399 if (audio_devs[dev]->dmap_out->fragment_size == 0) audio_ioctl()
401 audio_devs[dev]->dmap_out->flags |= DMA_POST | DMA_DIRTY; audio_ioctl()
402 sync_output(dev); audio_ioctl()
403 dma_ioctl(dev, SNDCTL_DSP_POST, NULL); audio_ioctl()
407 audio_devs[dev]->audio_mode = AM_NONE; audio_ioctl()
408 DMAbuf_reset(dev); audio_ioctl()
412 val = audio_devs[dev]->format_mask | AFMT_MU_LAW; audio_ioctl()
418 val = set_format(dev, val); audio_ioctl()
422 if (!(audio_devs[dev]->open_mode & OPEN_READ)) audio_ioctl()
424 if ((audio_devs[dev]->audio_mode & AM_WRITE) && !(audio_devs[dev]->flags & DMA_DUPLEX)) audio_ioctl()
426 return dma_ioctl(dev, cmd, arg); audio_ioctl()
429 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) audio_ioctl()
431 if ((audio_devs[dev]->audio_mode & AM_READ) && !(audio_devs[dev]->flags & DMA_DUPLEX)) audio_ioctl()
433 return dma_ioctl(dev, cmd, arg); audio_ioctl()
443 if (audio_devs[dev]->flags & DMA_DUPLEX && audio_ioctl()
444 audio_devs[dev]->open_mode == OPEN_READWRITE) audio_ioctl()
446 if (audio_devs[dev]->coproc) audio_ioctl()
448 if (audio_devs[dev]->d->local_qlen) /* Device has hidden buffers */ audio_ioctl()
450 if (audio_devs[dev]->d->trigger) /* Supports SETTRIGGER */ audio_ioctl()
457 val = audio_devs[dev]->d->set_speed(dev, val); audio_ioctl()
461 val = audio_devs[dev]->d->set_speed(dev, 0); audio_ioctl()
469 val = audio_devs[dev]->d->set_channels(dev, val + 1) - 1; audio_ioctl()
475 val = audio_devs[dev]->d->set_channels(dev, val); audio_ioctl()
479 val = audio_devs[dev]->d->set_channels(dev, 0); audio_ioctl()
483 val = audio_devs[dev]->d->set_bits(dev, 0); audio_ioctl()
487 if (audio_devs[dev]->open_mode != OPEN_READWRITE) audio_ioctl()
489 return (audio_devs[dev]->flags & DMA_DUPLEX) ? 0 : -EIO; audio_ioctl()
494 if (audio_devs[dev]->open_mode & OPEN_WRITE) audio_ioctl()
495 audio_devs[dev]->dmap_out->applic_profile = val; audio_ioctl()
496 if (audio_devs[dev]->open_mode & OPEN_READ) audio_ioctl()
497 audio_devs[dev]->dmap_in->applic_profile = val; audio_ioctl()
501 dmap = audio_devs[dev]->dmap_out; audio_ioctl()
502 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) audio_ioctl()
512 count = DMAbuf_get_buffer_pointer (dev, dmap, DMODE_OUTPUT); audio_ioctl()
526 return dma_ioctl(dev, cmd, arg); audio_ioctl()
538 void reorganize_buffers(int dev, struct dma_buffparms *dmap, int recording) reorganize_buffers() argument
544 struct audio_operations *dsp_dev = audio_devs[dev]; reorganize_buffers()
549 sr = dsp_dev->d->set_speed(dev, 0); reorganize_buffers()
550 nc = dsp_dev->d->set_channels(dev, 0); reorganize_buffers()
551 sz = dsp_dev->d->set_bits(dev, 0); reorganize_buffers()
560 /* printk(KERN_DEBUG "Warning: Invalid PCM parameters[%d] sr=%d, nc=%d, sz=%d\n", dev, sr, nc, sz);*/ reorganize_buffers()
625 if (audio_devs[dev]->min_fragment) reorganize_buffers()
626 if (bsz < (1 << audio_devs[dev]->min_fragment)) reorganize_buffers()
627 bsz = 1 << audio_devs[dev]->min_fragment; reorganize_buffers()
628 if (audio_devs[dev]->max_fragment) reorganize_buffers()
629 if (bsz > (1 << audio_devs[dev]->max_fragment)) reorganize_buffers()
630 bsz = 1 << audio_devs[dev]->max_fragment; reorganize_buffers()
666 static int dma_subdivide(int dev, struct dma_buffparms *dmap, int fact) dma_subdivide() argument
688 static int dma_set_fragment(int dev, struct dma_buffparms *dmap, int fact) dma_set_fragment() argument
713 if (audio_devs[dev]->min_fragment > 0) dma_set_fragment()
714 if (bytes < audio_devs[dev]->min_fragment) dma_set_fragment()
715 bytes = audio_devs[dev]->min_fragment; dma_set_fragment()
717 if (audio_devs[dev]->max_fragment > 0) dma_set_fragment()
718 if (bytes > audio_devs[dev]->max_fragment) dma_set_fragment()
719 bytes = audio_devs[dev]->max_fragment; dma_set_fragment()
733 audio_devs[dev]->flags & DMA_AUTOMODE) dma_set_fragment()
740 static int dma_ioctl(int dev, unsigned int cmd, void __user *arg) dma_ioctl() argument
742 struct dma_buffparms *dmap_out = audio_devs[dev]->dmap_out; dma_ioctl()
743 struct dma_buffparms *dmap_in = audio_devs[dev]->dmap_in; dma_ioctl()
756 if (audio_devs[dev]->open_mode & OPEN_WRITE) dma_ioctl()
757 ret = dma_subdivide(dev, dmap_out, fact); dma_ioctl()
760 if (audio_devs[dev]->open_mode != OPEN_WRITE || dma_ioctl()
761 (audio_devs[dev]->flags & DMA_DUPLEX && dma_ioctl()
762 audio_devs[dev]->open_mode & OPEN_READ)) dma_ioctl()
763 ret = dma_subdivide(dev, dmap_in, fact); dma_ioctl()
771 if (cmd == SNDCTL_DSP_GETISPACE && !(audio_devs[dev]->open_mode & OPEN_READ)) dma_ioctl()
773 if (cmd == SNDCTL_DSP_GETOSPACE && !(audio_devs[dev]->open_mode & OPEN_WRITE)) dma_ioctl()
775 if (cmd == SNDCTL_DSP_GETISPACE && audio_devs[dev]->flags & DMA_DUPLEX) dma_ioctl()
780 reorganize_buffers(dev, dmap, (cmd == SNDCTL_DSP_GETISPACE)); dma_ioctl()
786 if (!DMAbuf_space_in_queue(dev)) dma_ioctl()
790 info.fragments = DMAbuf_space_in_queue(dev); dma_ioctl()
791 if (audio_devs[dev]->d->local_qlen) dma_ioctl()
793 int tmp = audio_devs[dev]->d->local_qlen(dev); dma_ioctl()
824 bits &= audio_devs[dev]->open_mode; dma_ioctl()
825 if (audio_devs[dev]->d->trigger == NULL) dma_ioctl()
827 if (!(audio_devs[dev]->flags & DMA_DUPLEX) && (bits & PCM_ENABLE_INPUT) && dma_ioctl()
834 changed = (audio_devs[dev]->enable_bits ^ bits) & PCM_ENABLE_INPUT; dma_ioctl()
835 if (changed && audio_devs[dev]->go) dma_ioctl()
837 reorganize_buffers(dev, dmap_in, 1); dma_ioctl()
838 if ((err = audio_devs[dev]->d->prepare_for_input(dev, dma_ioctl()
844 audio_devs[dev]->enable_bits |= PCM_ENABLE_INPUT; dma_ioctl()
845 DMAbuf_activate_recording(dev, dmap_in); dma_ioctl()
847 audio_devs[dev]->enable_bits &= ~PCM_ENABLE_INPUT; dma_ioctl()
853 changed = (audio_devs[dev]->enable_bits ^ bits) & PCM_ENABLE_OUTPUT; dma_ioctl()
856 audio_devs[dev]->go) dma_ioctl()
859 reorganize_buffers(dev, dmap_out, 0); dma_ioctl()
861 audio_devs[dev]->enable_bits |= PCM_ENABLE_OUTPUT; dma_ioctl()
863 DMAbuf_launch_output(dev, dmap_out); dma_ioctl()
865 audio_devs[dev]->enable_bits &= ~PCM_ENABLE_OUTPUT; dma_ioctl()
869 if (changed && audio_devs[dev]->d->trigger) dma_ioctl()
870 audio_devs[dev]->d->trigger(dev, bits * audio_devs[dev]->go); dma_ioctl()
875 ret = audio_devs[dev]->enable_bits; dma_ioctl()
879 if (!audio_devs[dev]->d->trigger) dma_ioctl()
881 audio_devs[dev]->d->trigger(dev, 0); dma_ioctl()
882 audio_devs[dev]->go = 0; dma_ioctl()
886 if (!(audio_devs[dev]->open_mode & OPEN_READ)) dma_ioctl()
890 cinfo.ptr = DMAbuf_get_buffer_pointer(dev, dmap_in, DMODE_INPUT) & ~3; dma_ioctl()
903 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) dma_ioctl()
908 cinfo.ptr = DMAbuf_get_buffer_pointer(dev, dmap_out, DMODE_OUTPUT) & ~3; dma_ioctl()
921 if (!(audio_devs[dev]->open_mode & OPEN_WRITE)) dma_ioctl()
930 count = DMAbuf_get_buffer_pointer (dev, dmap_out, DMODE_OUTPUT); dma_ioctl()
943 if (audio_devs[dev]->dmap_out->qlen > 0) dma_ioctl()
944 if (!(audio_devs[dev]->dmap_out->flags & DMA_ACTIVE)) dma_ioctl()
945 DMAbuf_launch_output(dev, audio_devs[dev]->dmap_out); dma_ioctl()
950 if (audio_devs[dev]->open_mode & OPEN_WRITE) dma_ioctl()
951 reorganize_buffers(dev, dmap_out, (audio_devs[dev]->open_mode == OPEN_READ)); dma_ioctl()
952 if (audio_devs[dev]->open_mode == OPEN_READ || dma_ioctl()
953 (audio_devs[dev]->flags & DMA_DUPLEX && dma_ioctl()
954 audio_devs[dev]->open_mode & OPEN_READ)) dma_ioctl()
955 reorganize_buffers(dev, dmap_in, (audio_devs[dev]->open_mode == OPEN_READ)); dma_ioctl()
956 if (audio_devs[dev]->open_mode == OPEN_READ) dma_ioctl()
965 if (audio_devs[dev]->open_mode & OPEN_WRITE) dma_ioctl()
966 ret = dma_set_fragment(dev, dmap_out, fact); dma_ioctl()
969 if (audio_devs[dev]->open_mode == OPEN_READ || dma_ioctl()
970 (audio_devs[dev]->flags & DMA_DUPLEX && dma_ioctl()
971 audio_devs[dev]->open_mode & OPEN_READ)) dma_ioctl()
972 ret = dma_set_fragment(dev, dmap_in, fact); dma_ioctl()
980 if (!audio_devs[dev]->d->ioctl) dma_ioctl()
982 return audio_devs[dev]->d->ioctl(dev, cmd, arg); dma_ioctl()
H A Dmsnd_pinnacle.c73 dev.play_sample_size / 8 / \
74 dev.play_sample_rate / \
75 dev.play_channels)
78 dev.rec_sample_size / 8 / \
79 dev.rec_sample_rate / \
80 dev.rec_channels)
83 static multisound_dev_t dev; variable
93 static __inline__ int chk_send_dsp_cmd(multisound_dev_t *dev, register BYTE cmd) chk_send_dsp_cmd() argument
95 if (msnd_send_dsp_cmd(dev, cmd) == 0) chk_send_dsp_cmd()
98 return msnd_send_dsp_cmd(dev, cmd); chk_send_dsp_cmd()
106 dev.last_playbank = -1; reset_play_queue()
107 writew(PCTODSP_OFFSET(0 * DAQDS__size), dev.DAPQ + JQS_wHead); reset_play_queue()
108 writew(PCTODSP_OFFSET(0 * DAQDS__size), dev.DAPQ + JQS_wTail); reset_play_queue()
110 for (n = 0, lpDAQ = dev.base + DAPQ_DATA_BUFF; n < 3; ++n, lpDAQ += DAQDS__size) { reset_play_queue()
114 writew(dev.play_sample_size, lpDAQ + DAQDS_wSampleSize); reset_play_queue()
115 writew(dev.play_channels, lpDAQ + DAQDS_wChannels); reset_play_queue()
116 writew(dev.play_sample_rate, lpDAQ + DAQDS_wSampleRate); reset_play_queue()
128 dev.last_recbank = 2; reset_record_queue()
129 writew(PCTODSP_OFFSET(0 * DAQDS__size), dev.DARQ + JQS_wHead); reset_record_queue()
130 writew(PCTODSP_OFFSET(dev.last_recbank * DAQDS__size), dev.DARQ + JQS_wTail); reset_record_queue()
133 spin_lock_irqsave(&dev.lock, flags); reset_record_queue()
134 msnd_outb(HPBLKSEL_1, dev.io + HP_BLKS); reset_record_queue()
135 memset_io(dev.base, 0, DAR_BUFF_SIZE * 3); reset_record_queue()
136 msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); reset_record_queue()
137 spin_unlock_irqrestore(&dev.lock, flags); reset_record_queue()
139 for (n = 0, lpDAQ = dev.base + DARQ_DATA_BUFF; n < 3; ++n, lpDAQ += DAQDS__size) { reset_record_queue()
143 writew(dev.rec_sample_size, lpDAQ + DAQDS_wSampleSize); reset_record_queue()
144 writew(dev.rec_channels, lpDAQ + DAQDS_wChannels); reset_record_queue()
145 writew(dev.rec_sample_rate, lpDAQ + DAQDS_wSampleRate); reset_record_queue()
153 if (dev.mode & FMODE_WRITE) { reset_queues()
154 msnd_fifo_make_empty(&dev.DAPF); reset_queues()
157 if (dev.mode & FMODE_READ) { reset_queues()
158 msnd_fifo_make_empty(&dev.DARF); reset_queues()
168 lpDAQ = dev.base + DAPQ_DATA_BUFF; dsp_set_format()
169 lpDARQ = dev.base + DARQ_DATA_BUFF; dsp_set_format()
188 dev.play_sample_size = data; dsp_set_format()
190 dev.rec_sample_size = data; dsp_set_format()
198 size = dev.fifosize / 4; dsp_get_frag_size()
212 lpDAQ = dev.base + DAPQ_DATA_BUFF; dsp_ioctl()
213 lpDARQ = dev.base + DARQ_DATA_BUFF; dsp_ioctl()
231 spin_lock_irqsave(&dev.lock, flags); dsp_ioctl()
233 abinfo.bytes = dev.DAPF.n - dev.DAPF.len; dsp_ioctl()
234 abinfo.fragstotal = dev.DAPF.n / abinfo.fragsize; dsp_ioctl()
236 spin_unlock_irqrestore(&dev.lock, flags); dsp_ioctl()
242 spin_lock_irqsave(&dev.lock, flags); dsp_ioctl()
244 abinfo.bytes = dev.DARF.n - dev.DARF.len; dsp_ioctl()
245 abinfo.fragstotal = dev.DARF.n / abinfo.fragsize; dsp_ioctl()
247 spin_unlock_irqrestore(&dev.lock, flags); dsp_ioctl()
251 dev.nresets = 0; dsp_ioctl()
277 ? dev.play_sample_size dsp_ioctl()
281 ? dev.rec_sample_size dsp_ioctl()
289 if (!test_bit(F_DISABLE_WRITE_NDELAY, &dev.flags) && dsp_ioctl()
291 dev.play_ndelay = 1; dsp_ioctl()
293 dev.rec_ndelay = 1; dsp_ioctl()
321 dev.play_sample_rate = data; dsp_ioctl()
323 dev.rec_sample_rate = data; dsp_ioctl()
364 dev.play_channels = data; dsp_ioctl()
366 dev.rec_channels = data; dsp_ioctl()
391 return (dev.left_levels[d] >> 8) * 100 / 0xff | mixer_get()
392 (((dev.right_levels[d] >> 8) * 100 / 0xff) << 8); mixer_get()
399 writew((dev.left_levels[a] >> 1) * \
400 readw(dev.SMA + SMA_wCurrMastVolLeft) / 0xffff, \
401 dev.SMA + SMA_##b##Left); \
402 writew((dev.right_levels[a] >> 1) * \
403 readw(dev.SMA + SMA_wCurrMastVolRight) / 0xffff, \
404 dev.SMA + SMA_##b##Right);
407 writeb((dev.left_levels[d] >> 8) * \
408 readw(dev.SMA + SMA_wCurrMastVolLeft) / 0xffff, \
409 dev.SMA + SMA_##s##Left); \
410 writeb((dev.right_levels[d] >> 8) * \
411 readw(dev.SMA + SMA_wCurrMastVolRight) / 0xffff, \
412 dev.SMA + SMA_##s##Right); \
413 if (msnd_send_word(&dev, 0, 0, ar) == 0) \
414 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ);
417 writeb(dev.left_levels[d] >> 8, \
418 dev.SMA + SMA_##s##Left); \
419 writeb(dev.right_levels[d] >> 8, \
420 dev.SMA + SMA_##s##Right); \
421 if (msnd_send_word(&dev, 0, 0, ar) == 0) \
422 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ);
441 dev.left_levels[d] = wLeft; mixer_set()
442 dev.right_levels[d] = wRight; mixer_set()
448 writeb(bLeft, dev.SMA + SMA_bInPotPosLeft); mixer_set()
449 writeb(bRight, dev.SMA + SMA_bInPotPosRight); mixer_set()
450 if (msnd_send_word(&dev, 0, 0, HDEXAR_IN_SET_POTS) == 0) mixer_set()
451 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); mixer_set()
456 writeb(bLeft, dev.SMA + SMA_bMicPotPosLeft); mixer_set()
457 writeb(bRight, dev.SMA + SMA_bMicPotPosRight); mixer_set()
458 if (msnd_send_word(&dev, 0, 0, HDEXAR_MIC_SET_POTS) == 0) mixer_set()
459 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); mixer_set()
463 writew(wLeft, dev.SMA + SMA_wCurrMastVolLeft); mixer_set()
464 writew(wRight, dev.SMA + SMA_wCurrMastVolRight); mixer_set()
510 if (dev.recsrc == recsrc) set_recsrc()
511 return dev.recsrc; set_recsrc()
514 dev.recsrc = 0; set_recsrc()
517 dev.recsrc ^= recsrc; set_recsrc()
520 if (dev.recsrc & SOUND_MASK_IMIX) { set_recsrc()
521 if (msnd_send_word(&dev, 0, 0, HDEXAR_SET_ANA_IN) == 0) set_recsrc()
522 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); set_recsrc()
524 else if (dev.recsrc & SOUND_MASK_SYNTH) { set_recsrc()
525 if (msnd_send_word(&dev, 0, 0, HDEXAR_SET_SYNTH_IN) == 0) set_recsrc()
526 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); set_recsrc()
528 else if ((dev.recsrc & SOUND_MASK_DIGITAL1) && test_bit(F_HAVEDIGITAL, &dev.flags)) { set_recsrc()
529 if (msnd_send_word(&dev, 0, 0, HDEXAR_SET_DAT_IN) == 0) set_recsrc()
530 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); set_recsrc()
535 dev.recsrc = 0; set_recsrc()
537 dev.recsrc = SOUND_MASK_IMIX; set_recsrc()
538 if (msnd_send_word(&dev, 0, 0, HDEXAR_SET_ANA_IN) == 0) set_recsrc()
539 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ); set_recsrc()
544 return dev.recsrc; set_recsrc()
549 dev.recsrc = 0; force_recsrc()
563 info.modify_counter = dev.mixer_mod_count; mixer_ioctl()
574 dev.nresets = 0; mixer_ioctl()
594 ++dev.mixer_mod_count; mixer_ioctl()
599 val = dev.recsrc; mixer_ioctl()
621 if (test_bit(F_HAVEDIGITAL, &dev.flags)) mixer_ioctl()
656 if (minor == dev.dsp_minor) dev_ioctl()
658 else if (minor == dev.mixer_minor) dev_ioctl()
667 int timeout = get_play_delay_jiffies(dev.DAPF.len); dsp_write_flush()
669 if (!(dev.mode & FMODE_WRITE) || !test_bit(F_WRITING, &dev.flags)) dsp_write_flush()
671 set_bit(F_WRITEFLUSH, &dev.flags); dsp_write_flush()
673 dev.writeflush, dsp_write_flush()
674 !test_bit(F_WRITEFLUSH, &dev.flags), dsp_write_flush()
676 clear_bit(F_WRITEFLUSH, &dev.flags); dsp_write_flush()
681 clear_bit(F_WRITING, &dev.flags); dsp_write_flush()
686 if ((file ? file->f_mode : dev.mode) & FMODE_READ) { dsp_halt()
687 clear_bit(F_READING, &dev.flags); dsp_halt()
688 chk_send_dsp_cmd(&dev, HDEX_RECORD_STOP); dsp_halt()
689 msnd_disable_irq(&dev); dsp_halt()
692 dev.mode &= ~FMODE_READ; dsp_halt()
694 clear_bit(F_AUDIO_READ_INUSE, &dev.flags); dsp_halt()
696 if ((file ? file->f_mode : dev.mode) & FMODE_WRITE) { dsp_halt()
697 if (test_bit(F_WRITING, &dev.flags)) { dsp_halt()
699 chk_send_dsp_cmd(&dev, HDEX_PLAY_STOP); dsp_halt()
701 msnd_disable_irq(&dev); dsp_halt()
704 dev.mode &= ~FMODE_WRITE; dsp_halt()
706 clear_bit(F_AUDIO_WRITE_INUSE, &dev.flags); dsp_halt()
718 if ((file ? file->f_mode : dev.mode) & FMODE_WRITE) { dsp_open()
719 set_bit(F_AUDIO_WRITE_INUSE, &dev.flags); dsp_open()
720 clear_bit(F_WRITING, &dev.flags); dsp_open()
721 msnd_fifo_make_empty(&dev.DAPF); dsp_open()
725 dev.mode |= FMODE_WRITE; dsp_open()
727 msnd_enable_irq(&dev); dsp_open()
729 if ((file ? file->f_mode : dev.mode) & FMODE_READ) { dsp_open()
730 set_bit(F_AUDIO_READ_INUSE, &dev.flags); dsp_open()
731 clear_bit(F_READING, &dev.flags); dsp_open()
732 msnd_fifo_make_empty(&dev.DARF); dsp_open()
736 dev.mode |= FMODE_READ; dsp_open()
738 msnd_enable_irq(&dev); dsp_open()
745 dev.play_sample_size = DEFSAMPLESIZE; set_default_play_audio_parameters()
746 dev.play_sample_rate = DEFSAMPLERATE; set_default_play_audio_parameters()
747 dev.play_channels = DEFCHANNELS; set_default_play_audio_parameters()
752 dev.rec_sample_size = DEFSAMPLESIZE; set_default_rec_audio_parameters()
753 dev.rec_sample_rate = DEFSAMPLERATE; set_default_rec_audio_parameters()
754 dev.rec_channels = DEFCHANNELS; set_default_rec_audio_parameters()
769 if (minor == dev.dsp_minor) { dev_open()
771 test_bit(F_AUDIO_WRITE_INUSE, &dev.flags)) || dev_open()
773 test_bit(F_AUDIO_READ_INUSE, &dev.flags))) { dev_open()
779 dev.nresets = 0; dev_open()
782 if (!test_bit(F_DISABLE_WRITE_NDELAY, &dev.flags)) dev_open()
783 dev.play_ndelay = (file->f_flags & O_NDELAY) ? 1 : 0; dev_open()
785 dev.play_ndelay = 0; dev_open()
789 dev.rec_ndelay = (file->f_flags & O_NDELAY) ? 1 : 0; dev_open()
793 else if (minor == dev.mixer_minor) { dev_open()
808 if (minor == dev.dsp_minor) dev_release()
810 else if (minor == dev.mixer_minor) { dev_release()
825 wTmp = readw(dev.DARQ + JQS_wTail) + PCTODSP_OFFSET(DAQDS__size); pack_DARQ_to_DARF()
826 if (wTmp > readw(dev.DARQ + JQS_wSize)) pack_DARQ_to_DARF()
828 while (wTmp == readw(dev.DARQ + JQS_wHead) && timeout--) pack_DARQ_to_DARF()
830 writew(wTmp, dev.DARQ + JQS_wTail); pack_DARQ_to_DARF()
833 DAQD = bank * DAQDS__size + dev.base + DARQ_DATA_BUFF; pack_DARQ_to_DARF()
840 msnd_outb(HPBLKSEL_1, dev.io + HP_BLKS); pack_DARQ_to_DARF()
842 &dev.DARF, pack_DARQ_to_DARF()
843 dev.base + bank * DAR_BUFF_SIZE, pack_DARQ_to_DARF()
845 msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); pack_DARQ_to_DARF()
856 DAPQ_tail = readw(dev.DAPQ + JQS_wTail); pack_DAPF_to_DAPQ()
857 while (DAPQ_tail != readw(dev.DAPQ + JQS_wHead) || start) { pack_DAPF_to_DAPQ()
865 spin_lock_irqsave(&dev.lock, flags); pack_DAPF_to_DAPQ()
867 &dev.DAPF, pack_DAPF_to_DAPQ()
868 dev.base + bank_num * DAP_BUFF_SIZE, pack_DAPF_to_DAPQ()
870 spin_unlock_irqrestore(&dev.lock, flags); pack_DAPF_to_DAPQ()
873 &dev.DAPF, pack_DAPF_to_DAPQ()
874 dev.base + bank_num * DAP_BUFF_SIZE, pack_DAPF_to_DAPQ()
884 DAQD = bank_num * DAQDS__size + dev.base + DAPQ_DATA_BUFF; pack_DAPF_to_DAPQ()
892 writew(DAPQ_tail, dev.DAPQ + JQS_wTail); pack_DAPF_to_DAPQ()
894 msnd_send_dsp_cmd(&dev, HDEX_PLAY_START); pack_DAPF_to_DAPQ()
917 spin_lock_irqsave(&dev.lock, flags); dsp_read()
918 n = msnd_fifo_read(&dev.DARF, page, k); dsp_read()
919 spin_unlock_irqrestore(&dev.lock, flags); dsp_read()
930 if (!test_bit(F_READING, &dev.flags) && dev.mode & FMODE_READ) { dsp_read()
931 dev.last_recbank = -1; dsp_read()
932 if (chk_send_dsp_cmd(&dev, HDEX_RECORD_START) == 0) dsp_read()
933 set_bit(F_READING, &dev.flags); dsp_read()
936 if (dev.rec_ndelay) { dsp_read()
942 set_bit(F_READBLOCK, &dev.flags); dsp_read()
944 dev.readblock, dsp_read()
945 test_bit(F_READBLOCK, &dev.flags), dsp_read()
947 clear_bit(F_READING, &dev.flags); dsp_read()
981 spin_lock_irqsave(&dev.lock, flags); dsp_write()
982 n = msnd_fifo_write(&dev.DAPF, page, k); dsp_write()
983 spin_unlock_irqrestore(&dev.lock, flags); dsp_write()
990 if (!test_bit(F_WRITING, &dev.flags) && (dev.mode & FMODE_WRITE)) { dsp_write()
991 dev.last_playbank = -1; dsp_write()
993 set_bit(F_WRITING, &dev.flags); dsp_write()
996 if (dev.play_ndelay) { dsp_write()
1002 set_bit(F_WRITEBLOCK, &dev.flags); dsp_write()
1004 dev.writeblock, dsp_write()
1005 test_bit(F_WRITEBLOCK, &dev.flags), dsp_write()
1021 if (minor == dev.dsp_minor) dev_read()
1030 if (minor == dev.dsp_minor) dev_write()
1040 if (dev.last_playbank == LOBYTE(wMessage) || !test_bit(F_WRITING, &dev.flags)) eval_dsp_msg()
1042 dev.last_playbank = LOBYTE(wMessage); eval_dsp_msg()
1045 if (!test_bit(F_WRITEBLOCK, &dev.flags)) { eval_dsp_msg()
1046 if (test_and_clear_bit(F_WRITEFLUSH, &dev.flags)) eval_dsp_msg()
1047 wake_up_interruptible(&dev.writeflush); eval_dsp_msg()
1049 clear_bit(F_WRITING, &dev.flags); eval_dsp_msg()
1052 if (test_and_clear_bit(F_WRITEBLOCK, &dev.flags)) eval_dsp_msg()
1053 wake_up_interruptible(&dev.writeblock); eval_dsp_msg()
1057 if (dev.last_recbank == LOBYTE(wMessage)) eval_dsp_msg()
1059 dev.last_recbank = LOBYTE(wMessage); eval_dsp_msg()
1061 pack_DARQ_to_DARF(dev.last_recbank); eval_dsp_msg()
1063 if (test_and_clear_bit(F_READBLOCK, &dev.flags)) eval_dsp_msg()
1064 wake_up_interruptible(&dev.readblock); eval_dsp_msg()
1074 clear_bit(F_WRITING, &dev.flags); eval_dsp_msg()
1079 clear_bit(F_READING, &dev.flags); eval_dsp_msg()
1090 if (dev.midi_in_interrupt) eval_dsp_msg()
1091 (*dev.midi_in_interrupt)(&dev); eval_dsp_msg()
1103 msnd_inb(dev.io + HP_RXL); intr()
1106 while (readw(dev.DSPQ + JQS_wTail) != readw(dev.DSPQ + JQS_wHead)) { intr()
1109 eval_dsp_msg(readw(dev.pwDSPQData + 2*readw(dev.DSPQ + JQS_wHead))); intr()
1111 if ((wTmp = readw(dev.DSPQ + JQS_wHead) + 1) > readw(dev.DSPQ + JQS_wSize)) intr()
1112 writew(0, dev.DSPQ + JQS_wHead); intr()
1114 writew(wTmp, dev.DSPQ + JQS_wHead); intr()
1133 msnd_outb(HPDSPRESET_ON, dev.io + HP_DSPR); reset_dsp()
1136 dev.info = msnd_inb(dev.io + HP_INFO); reset_dsp()
1138 msnd_outb(HPDSPRESET_OFF, dev.io + HP_DSPR); reset_dsp()
1141 if (msnd_inb(dev.io + HP_CVR) == HP_CVR_DEF) reset_dsp()
1158 if (!request_region(dev.io, dev.numio, "probing")) { probe_multisound()
1164 release_region(dev.io, dev.numio); probe_multisound()
1169 dev.name = "Classic/Tahiti/Monterey"; probe_multisound()
1172 switch (dev.info >> 4) { probe_multisound()
1180 switch (dev.info & 0x7) { probe_multisound()
1181 case 0x0: rev = "I"; dev.name = pin; break; probe_multisound()
1182 case 0x1: rev = "F"; dev.name = pin; break; probe_multisound()
1183 case 0x2: rev = "G"; dev.name = pin; break; probe_multisound()
1184 case 0x3: rev = "H"; dev.name = pin; break; probe_multisound()
1185 case 0x4: rev = "E"; dev.name = fiji; break; probe_multisound()
1186 case 0x5: rev = "C"; dev.name = fiji; break; probe_multisound()
1187 case 0x6: rev = "D"; dev.name = fiji; break; probe_multisound()
1190 dev.name = pinfiji; probe_multisound()
1196 dev.name, probe_multisound()
1200 dev.io, dev.io + dev.numio - 1, probe_multisound()
1201 dev.irq, probe_multisound()
1202 dev.base, dev.base + 0x7fff); probe_multisound()
1204 release_region(dev.io, dev.numio); probe_multisound()
1215 msnd_outb(dev.memid, dev.io + HP_MEMM); init_sma()
1217 msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); init_sma()
1219 mastVolLeft = readw(dev.SMA + SMA_wCurrMastVolLeft); init_sma()
1220 mastVolRight = readw(dev.SMA + SMA_wCurrMastVolRight); init_sma()
1223 memset_io(dev.base, 0, 0x8000); init_sma()
1226 spin_lock_irqsave(&dev.lock, flags); init_sma()
1227 msnd_outb(HPBLKSEL_1, dev.io + HP_BLKS); init_sma()
1228 memset_io(dev.base, 0, 0x8000); init_sma()
1229 msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); init_sma()
1230 spin_unlock_irqrestore(&dev.lock, flags); init_sma()
1232 dev.pwDSPQData = (dev.base + DSPQ_DATA_BUFF); init_sma()
1233 dev.pwMODQData = (dev.base + MODQ_DATA_BUFF); init_sma()
1234 dev.pwMIDQData = (dev.base + MIDQ_DATA_BUFF); init_sma()
1237 dev.SMA = dev.base + SMA_STRUCT_START; init_sma()
1240 dev.DAPQ = dev.base + DAPQ_OFFSET; init_sma()
1241 msnd_init_queue(dev.DAPQ, DAPQ_DATA_BUFF, DAPQ_BUFF_SIZE); init_sma()
1244 dev.DARQ = dev.base + DARQ_OFFSET; init_sma()
1245 msnd_init_queue(dev.DARQ, DARQ_DATA_BUFF, DARQ_BUFF_SIZE); init_sma()
1248 dev.MODQ = dev.base + MODQ_OFFSET; init_sma()
1249 msnd_init_queue(dev.MODQ, MODQ_DATA_BUFF, MODQ_BUFF_SIZE); init_sma()
1252 dev.MIDQ = dev.base + MIDQ_OFFSET; init_sma()
1253 msnd_init_queue(dev.MIDQ, MIDQ_DATA_BUFF, MIDQ_BUFF_SIZE); init_sma()
1256 dev.DSPQ = dev.base + DSPQ_OFFSET; init_sma()
1257 msnd_init_queue(dev.DSPQ, DSPQ_DATA_BUFF, DSPQ_BUFF_SIZE); init_sma()
1261 writew(1, dev.SMA + SMA_wCurrPlayFormat); init_sma()
1262 writew(dev.play_sample_size, dev.SMA + SMA_wCurrPlaySampleSize); init_sma()
1263 writew(dev.play_channels, dev.SMA + SMA_wCurrPlayChannels); init_sma()
1264 writew(dev.play_sample_rate, dev.SMA + SMA_wCurrPlaySampleRate); init_sma()
1266 writew(dev.play_sample_rate, dev.SMA + SMA_wCalFreqAtoD); init_sma()
1267 writew(mastVolLeft, dev.SMA + SMA_wCurrMastVolLeft); init_sma()
1268 writew(mastVolRight, dev.SMA + SMA_wCurrMastVolRight); init_sma()
1270 writel(0x00010000, dev.SMA + SMA_dwCurrPlayPitch); init_sma()
1271 writel(0x00000001, dev.SMA + SMA_dwCurrPlayRate); init_sma()
1273 writew(0x303, dev.SMA + SMA_wCurrInputTagBits); init_sma()
1282 writew(srate, dev.SMA + SMA_wCalFreqAtoD); calibrate_adc()
1283 if (dev.calibrate_signal == 0) calibrate_adc()
1284 writew(readw(dev.SMA + SMA_wCurrHostStatusFlags) calibrate_adc()
1285 | 0x0001, dev.SMA + SMA_wCurrHostStatusFlags); calibrate_adc()
1287 writew(readw(dev.SMA + SMA_wCurrHostStatusFlags) calibrate_adc()
1288 & ~0x0001, dev.SMA + SMA_wCurrHostStatusFlags); calibrate_adc()
1289 if (msnd_send_word(&dev, 0, 0, HDEXAR_CAL_A_TO_D) == 0 && calibrate_adc()
1290 chk_send_dsp_cmd(&dev, HDEX_AUX_REQ) == 0) { calibrate_adc()
1303 msnd_outb(HPBLKSEL_0, dev.io + HP_BLKS); upload_dsp_code()
1318 memcpy_toio(dev.base, PERMCODE, PERMCODESIZE); upload_dsp_code()
1319 if (msnd_upload_host(&dev, INITCODE, INITCODESIZE) < 0) { upload_dsp_code()
1342 msnd_outb(HPPRORESET_ON, dev.io + HP_PROR); reset_proteus()
1344 msnd_outb(HPPRORESET_OFF, dev.io + HP_PROR); reset_proteus()
1354 msnd_outb(HPWAITSTATE_0, dev.io + HP_WAIT); initialize()
1355 msnd_outb(HPBITMODE_16, dev.io + HP_BITM); initialize()
1373 while (readw(dev.base)) { initialize()
1390 if (test_bit(F_RESETTING, &dev.flags) || ++dev.nresets > 10) dsp_full_reset()
1393 set_bit(F_RESETTING, &dev.flags); dsp_full_reset()
1398 force_recsrc(dev.recsrc); dsp_full_reset()
1400 clear_bit(F_RESETTING, &dev.flags); dsp_full_reset()
1409 if ((err = request_irq(dev.irq, intr, 0, dev.name, &dev)) < 0) { attach_multisound()
1410 printk(KERN_ERR LOGNAME ": Couldn't grab IRQ %d\n", dev.irq); attach_multisound()
1413 if (request_region(dev.io, dev.numio, dev.name) == NULL) { attach_multisound()
1414 free_irq(dev.irq, &dev); attach_multisound()
1420 release_region(dev.io, dev.numio); attach_multisound()
1421 free_irq(dev.irq, &dev); attach_multisound()
1425 if ((err = msnd_register(&dev)) < 0) { attach_multisound()
1427 release_region(dev.io, dev.numio); attach_multisound()
1428 free_irq(dev.irq, &dev); attach_multisound()
1432 if ((dev.dsp_minor = register_sound_dsp(&dev_fileops, -1)) < 0) { attach_multisound()
1434 msnd_unregister(&dev); attach_multisound()
1435 release_region(dev.io, dev.numio); attach_multisound()
1436 free_irq(dev.irq, &dev); attach_multisound()
1437 return dev.dsp_minor; attach_multisound()
1440 if ((dev.mixer_minor = register_sound_mixer(&dev_fileops, -1)) < 0) { attach_multisound()
1442 unregister_sound_mixer(dev.mixer_minor); attach_multisound()
1443 msnd_unregister(&dev); attach_multisound()
1444 release_region(dev.io, dev.numio); attach_multisound()
1445 free_irq(dev.irq, &dev); attach_multisound()
1446 return dev.mixer_minor; attach_multisound()
1449 dev.ext_midi_dev = dev.hdr_midi_dev = -1; attach_multisound()
1451 disable_irq(dev.irq); attach_multisound()
1452 calibrate_adc(dev.play_sample_rate); attach_multisound()
1462 release_region(dev.io, dev.numio); unload_multisound()
1463 free_irq(dev.irq, &dev); unload_multisound()
1464 unregister_sound_mixer(dev.mixer_minor); unload_multisound()
1465 unregister_sound_dsp(dev.dsp_minor); unload_multisound()
1466 msnd_unregister(&dev); unload_multisound()
1807 case 5: dev.irqid = HPIRQ_5; break; msnd_init()
1808 case 7: dev.irqid = HPIRQ_7; break; msnd_init()
1809 case 9: dev.irqid = HPIRQ_9; break; msnd_init()
1810 case 10: dev.irqid = HPIRQ_10; break; msnd_init()
1811 case 11: dev.irqid = HPIRQ_11; break; msnd_init()
1812 case 12: dev.irqid = HPIRQ_12; break; msnd_init()
1816 case 0xb0000: dev.memid = HPMEM_B000; break; msnd_init()
1817 case 0xc8000: dev.memid = HPMEM_C800; break; msnd_init()
1818 case 0xd0000: dev.memid = HPMEM_D000; break; msnd_init()
1819 case 0xd8000: dev.memid = HPMEM_D800; break; msnd_init()
1820 case 0xe0000: dev.memid = HPMEM_E000; break; msnd_init()
1821 case 0xe8000: dev.memid = HPMEM_E800; break; msnd_init()
1873 dev.type = msndClassic; msnd_init()
1875 dev.type = msndPinnacle; msnd_init()
1877 dev.io = io; msnd_init()
1878 dev.numio = DSP_NUMIO; msnd_init()
1879 dev.irq = irq; msnd_init()
1880 dev.base = ioremap(mem, 0x8000); msnd_init()
1881 dev.fifosize = fifosize * 1024; msnd_init()
1882 dev.calibrate_signal = calibrate_signal ? 1 : 0; msnd_init()
1883 dev.recsrc = 0; msnd_init()
1884 dev.dspq_data_buff = DSPQ_DATA_BUFF; msnd_init()
1885 dev.dspq_buff_size = DSPQ_BUFF_SIZE; msnd_init()
1889 clear_bit(F_DISABLE_WRITE_NDELAY, &dev.flags); msnd_init()
1891 set_bit(F_DISABLE_WRITE_NDELAY, &dev.flags); msnd_init()
1894 set_bit(F_HAVEDIGITAL, &dev.flags); msnd_init()
1896 init_waitqueue_head(&dev.writeblock); msnd_init()
1897 init_waitqueue_head(&dev.readblock); msnd_init()
1898 init_waitqueue_head(&dev.writeflush); msnd_init()
1899 msnd_fifo_init(&dev.DAPF); msnd_init()
1900 msnd_fifo_init(&dev.DARF); msnd_init()
1901 spin_lock_init(&dev.lock); msnd_init()
1902 printk(KERN_INFO LOGNAME ": %u byte audio FIFOs (x2)\n", dev.fifosize); msnd_init()
1903 if ((err = msnd_fifo_alloc(&dev.DAPF, dev.fifosize)) < 0) { msnd_init()
1908 if ((err = msnd_fifo_alloc(&dev.DARF, dev.fifosize)) < 0) { msnd_init()
1910 msnd_fifo_free(&dev.DAPF); msnd_init()
1916 msnd_fifo_free(&dev.DAPF); msnd_init()
1917 msnd_fifo_free(&dev.DARF); msnd_init()
1923 msnd_fifo_free(&dev.DAPF); msnd_init()
1924 msnd_fifo_free(&dev.DARF); msnd_init()
1934 msnd_fifo_free(&dev.DAPF); msdn_cleanup()
1935 msnd_fifo_free(&dev.DARF); msdn_cleanup()
/linux-4.4.14/drivers/pnp/
H A Dcore.c79 dev_set_name(&protocol->dev, "pnp%d", nodenum); pnp_register_protocol()
85 ret = device_register(&protocol->dev); pnp_register_protocol()
99 device_unregister(&protocol->dev); pnp_unregister_protocol()
102 static void pnp_free_ids(struct pnp_dev *dev) pnp_free_ids() argument
107 id = dev->id; pnp_free_ids()
121 void pnp_free_resources(struct pnp_dev *dev) pnp_free_resources() argument
125 list_for_each_entry_safe(pnp_res, tmp, &dev->resources, list) { pnp_free_resources()
132 struct pnp_dev *dev = to_pnp_dev(dmdev); pnp_release_device() local
134 pnp_free_ids(dev); pnp_release_device()
135 pnp_free_resources(dev); pnp_release_device()
136 pnp_free_options(dev); pnp_release_device()
137 kfree(dev); pnp_release_device()
143 struct pnp_dev *dev; pnp_alloc_dev() local
146 dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL); pnp_alloc_dev()
147 if (!dev) pnp_alloc_dev()
150 INIT_LIST_HEAD(&dev->resources); pnp_alloc_dev()
151 INIT_LIST_HEAD(&dev->options); pnp_alloc_dev()
152 dev->protocol = protocol; pnp_alloc_dev()
153 dev->number = id; pnp_alloc_dev()
154 dev->dma_mask = DMA_BIT_MASK(24); pnp_alloc_dev()
156 dev->dev.parent = &dev->protocol->dev; pnp_alloc_dev()
157 dev->dev.bus = &pnp_bus_type; pnp_alloc_dev()
158 dev->dev.dma_mask = &dev->dma_mask; pnp_alloc_dev()
159 dev->dev.coherent_dma_mask = dev->dma_mask; pnp_alloc_dev()
160 dev->dev.release = &pnp_release_device; pnp_alloc_dev()
162 dev_set_name(&dev->dev, "%02x:%02x", dev->protocol->number, dev->number); pnp_alloc_dev()
164 dev_id = pnp_add_id(dev, pnpid); pnp_alloc_dev()
166 kfree(dev); pnp_alloc_dev()
170 return dev; pnp_alloc_dev()
173 static void pnp_delist_device(struct pnp_dev *dev) pnp_delist_device() argument
176 list_del(&dev->global_list); pnp_delist_device()
177 list_del(&dev->protocol_list); pnp_delist_device()
181 int __pnp_add_device(struct pnp_dev *dev) __pnp_add_device() argument
185 pnp_fixup_device(dev); __pnp_add_device()
186 dev->status = PNP_READY; __pnp_add_device()
190 list_add_tail(&dev->global_list, &pnp_global); __pnp_add_device()
191 list_add_tail(&dev->protocol_list, &dev->protocol->devices); __pnp_add_device()
195 ret = device_register(&dev->dev); __pnp_add_device()
197 pnp_delist_device(dev); __pnp_add_device()
198 else if (dev->protocol->can_wakeup) __pnp_add_device()
199 device_set_wakeup_capable(&dev->dev, __pnp_add_device()
200 dev->protocol->can_wakeup(dev)); __pnp_add_device()
207 * @dev: pointer to dev to add
211 int pnp_add_device(struct pnp_dev *dev) pnp_add_device() argument
218 if (dev->card) pnp_add_device()
221 ret = __pnp_add_device(dev); pnp_add_device()
226 for (id = dev->id; id; id = id->next) pnp_add_device()
229 dev_printk(KERN_DEBUG, &dev->dev, "%s device, IDs%s (%s)\n", pnp_add_device()
230 dev->protocol->name, buf, pnp_add_device()
231 dev->active ? "active" : "disabled"); pnp_add_device()
235 void __pnp_remove_device(struct pnp_dev *dev) __pnp_remove_device() argument
237 pnp_delist_device(dev); __pnp_remove_device()
238 device_unregister(&dev->dev); __pnp_remove_device()
H A Dmanager.c21 static struct resource *pnp_find_resource(struct pnp_dev *dev, pnp_find_resource() argument
26 struct resource *res = pnp_get_resource(dev, type, bar); pnp_find_resource()
37 static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx) pnp_assign_port() argument
41 res = pnp_find_resource(dev, rule->flags, IORESOURCE_IO, idx); pnp_assign_port()
43 pnp_dbg(&dev->dev, " io %d already set to %#llx-%#llx " pnp_assign_port()
56 pnp_dbg(&dev->dev, " io %d disabled\n", idx); pnp_assign_port()
63 while (!pnp_check_port(dev, res)) { pnp_assign_port()
67 pnp_dbg(&dev->dev, " couldn't assign io %d " pnp_assign_port()
76 pnp_add_io_resource(dev, res->start, res->end, res->flags); pnp_assign_port()
80 static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx) pnp_assign_mem() argument
84 res = pnp_find_resource(dev, rule->flags, IORESOURCE_MEM, idx); pnp_assign_mem()
86 pnp_dbg(&dev->dev, " mem %d already set to %#llx-%#llx " pnp_assign_mem()
107 pnp_dbg(&dev->dev, " mem %d disabled\n", idx); pnp_assign_mem()
114 while (!pnp_check_mem(dev, res)) { pnp_assign_mem()
118 pnp_dbg(&dev->dev, " couldn't assign mem %d " pnp_assign_mem()
127 pnp_add_mem_resource(dev, res->start, res->end, res->flags); pnp_assign_mem()
131 static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) pnp_assign_irq() argument
141 res = pnp_find_resource(dev, rule->flags, IORESOURCE_IRQ, idx); pnp_assign_irq()
143 pnp_dbg(&dev->dev, " irq %d already set to %d flags %#lx\n", pnp_assign_irq()
155 pnp_dbg(&dev->dev, " irq %d disabled\n", idx); pnp_assign_irq()
168 if (pnp_check_irq(dev, res)) pnp_assign_irq()
177 pnp_dbg(&dev->dev, " irq %d disabled (optional)\n", idx); pnp_assign_irq()
181 pnp_dbg(&dev->dev, " couldn't assign irq %d\n", idx); pnp_assign_irq()
185 pnp_add_irq_resource(dev, res->start, res->flags); pnp_assign_irq()
190 static int pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx) pnp_assign_dma() argument
200 res = pnp_find_resource(dev, rule->flags, IORESOURCE_DMA, idx); pnp_assign_dma()
202 pnp_dbg(&dev->dev, " dma %d already set to %d flags %#lx\n", pnp_assign_dma()
214 pnp_dbg(&dev->dev, " dma %d disabled\n", idx); pnp_assign_dma()
221 if (pnp_check_dma(dev, res)) pnp_assign_dma()
226 pnp_dbg(&dev->dev, " couldn't assign dma %d\n", idx); pnp_assign_dma()
230 pnp_add_dma_resource(dev, res->start, res->flags); pnp_assign_dma()
235 void pnp_init_resources(struct pnp_dev *dev) pnp_init_resources() argument
237 pnp_free_resources(dev); pnp_init_resources()
240 static void pnp_clean_resource_table(struct pnp_dev *dev) pnp_clean_resource_table() argument
244 list_for_each_entry_safe(pnp_res, tmp, &dev->resources, list) { pnp_clean_resource_table()
252 * @dev: pointer to the desired device
255 static int pnp_assign_resources(struct pnp_dev *dev, int set) pnp_assign_resources() argument
262 pnp_dbg(&dev->dev, "pnp_assign_resources, try dependent set %d\n", set); pnp_assign_resources()
264 pnp_clean_resource_table(dev); pnp_assign_resources()
266 list_for_each_entry(option, &dev->options, list) { pnp_assign_resources()
273 ret = pnp_assign_port(dev, &option->u.port, nport++); pnp_assign_resources()
276 ret = pnp_assign_mem(dev, &option->u.mem, nmem++); pnp_assign_resources()
279 ret = pnp_assign_irq(dev, &option->u.irq, nirq++); pnp_assign_resources()
283 ret = pnp_assign_dma(dev, &option->u.dma, ndma++); pnp_assign_resources()
296 pnp_dbg(&dev->dev, "pnp_assign_resources failed (%d)\n", ret); pnp_assign_resources()
297 pnp_clean_resource_table(dev); pnp_assign_resources()
299 dbg_pnp_show_resources(dev, "pnp_assign_resources succeeded"); pnp_assign_resources()
305 * @dev: pointer to the desired device
307 int pnp_auto_config_dev(struct pnp_dev *dev) pnp_auto_config_dev() argument
311 if (!pnp_can_configure(dev)) { pnp_auto_config_dev()
312 pnp_dbg(&dev->dev, "configuration not supported\n"); pnp_auto_config_dev()
316 ret = pnp_assign_resources(dev, 0); pnp_auto_config_dev()
320 for (i = 1; i < dev->num_dependent_sets; i++) { pnp_auto_config_dev()
321 ret = pnp_assign_resources(dev, i); pnp_auto_config_dev()
326 dev_err(&dev->dev, "unable to assign resources\n"); pnp_auto_config_dev()
332 * @dev: pointer to the desired device
336 int pnp_start_dev(struct pnp_dev *dev) pnp_start_dev() argument
338 if (!pnp_can_write(dev)) { pnp_start_dev()
339 pnp_dbg(&dev->dev, "activation not supported\n"); pnp_start_dev()
343 dbg_pnp_show_resources(dev, "pnp_start_dev"); pnp_start_dev()
344 if (dev->protocol->set(dev) < 0) { pnp_start_dev()
345 dev_err(&dev->dev, "activation failed\n"); pnp_start_dev()
349 dev_info(&dev->dev, "activated\n"); pnp_start_dev()
355 * @dev: pointer to the desired device
359 int pnp_stop_dev(struct pnp_dev *dev) pnp_stop_dev() argument
361 if (!pnp_can_disable(dev)) { pnp_stop_dev()
362 pnp_dbg(&dev->dev, "disabling not supported\n"); pnp_stop_dev()
365 if (dev->protocol->disable(dev) < 0) { pnp_stop_dev()
366 dev_err(&dev->dev, "disable failed\n"); pnp_stop_dev()
370 dev_info(&dev->dev, "disabled\n"); pnp_stop_dev()
376 * @dev: pointer to the desired device
380 int pnp_activate_dev(struct pnp_dev *dev) pnp_activate_dev() argument
384 if (dev->active) pnp_activate_dev()
388 if (pnp_auto_config_dev(dev)) pnp_activate_dev()
391 error = pnp_start_dev(dev); pnp_activate_dev()
395 dev->active = 1; pnp_activate_dev()
401 * @dev: pointer to the desired device
405 int pnp_disable_dev(struct pnp_dev *dev) pnp_disable_dev() argument
409 if (!dev->active) pnp_disable_dev()
412 error = pnp_stop_dev(dev); pnp_disable_dev()
416 dev->active = 0; pnp_disable_dev()
420 pnp_clean_resource_table(dev); pnp_disable_dev()
/linux-4.4.14/drivers/net/wireless/mediatek/mt7601u/
H A Dphy.c24 static void mt7601u_agc_reset(struct mt7601u_dev *dev);
27 mt7601u_rf_wr(struct mt7601u_dev *dev, u8 bank, u8 offset, u8 value) mt7601u_rf_wr() argument
31 if (WARN_ON(!test_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state)) || mt7601u_rf_wr()
34 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_rf_wr()
37 mutex_lock(&dev->reg_atomic_mutex); mt7601u_rf_wr()
39 if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100)) { mt7601u_rf_wr()
44 mt7601u_wr(dev, MT_RF_CSR_CFG, MT76_SET(MT_RF_CSR_CFG_DATA, value) | mt7601u_rf_wr()
49 trace_rf_write(dev, bank, offset, value); mt7601u_rf_wr()
51 mutex_unlock(&dev->reg_atomic_mutex); mt7601u_rf_wr()
54 dev_err(dev->dev, "Error: RF write %02hhx:%02hhx failed:%d!!\n", mt7601u_rf_wr()
61 mt7601u_rf_rr(struct mt7601u_dev *dev, u8 bank, u8 offset) mt7601u_rf_rr() argument
66 if (WARN_ON(!test_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state)) || mt7601u_rf_rr()
69 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_rf_rr()
72 mutex_lock(&dev->reg_atomic_mutex); mt7601u_rf_rr()
74 if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100)) mt7601u_rf_rr()
77 mt7601u_wr(dev, MT_RF_CSR_CFG, MT76_SET(MT_RF_CSR_CFG_REG_BANK, bank) | mt7601u_rf_rr()
81 if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100)) mt7601u_rf_rr()
84 val = mt7601u_rr(dev, MT_RF_CSR_CFG); mt7601u_rf_rr()
88 trace_rf_read(dev, bank, offset, ret); mt7601u_rf_rr()
91 mutex_unlock(&dev->reg_atomic_mutex); mt7601u_rf_rr()
94 dev_err(dev->dev, "Error: RF read %02hhx:%02hhx failed:%d!!\n", mt7601u_rf_rr()
101 mt7601u_rf_rmw(struct mt7601u_dev *dev, u8 bank, u8 offset, u8 mask, u8 val) mt7601u_rf_rmw() argument
105 ret = mt7601u_rf_rr(dev, bank, offset); mt7601u_rf_rmw()
109 ret = mt7601u_rf_wr(dev, bank, offset, val); mt7601u_rf_rmw()
117 mt7601u_rf_set(struct mt7601u_dev *dev, u8 bank, u8 offset, u8 val) mt7601u_rf_set() argument
119 return mt7601u_rf_rmw(dev, bank, offset, 0, val); mt7601u_rf_set()
123 mt7601u_rf_clear(struct mt7601u_dev *dev, u8 bank, u8 offset, u8 mask) mt7601u_rf_clear() argument
125 return mt7601u_rf_rmw(dev, bank, offset, mask, 0); mt7601u_rf_clear()
128 static void mt7601u_bbp_wr(struct mt7601u_dev *dev, u8 offset, u8 val) mt7601u_bbp_wr() argument
130 if (WARN_ON(!test_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state)) || mt7601u_bbp_wr()
131 test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_bbp_wr()
134 mutex_lock(&dev->reg_atomic_mutex); mt7601u_bbp_wr()
136 if (!mt76_poll(dev, MT_BBP_CSR_CFG, MT_BBP_CSR_CFG_BUSY, 0, 1000)) { mt7601u_bbp_wr()
137 dev_err(dev->dev, "Error: BBP write %02hhx failed!!\n", offset); mt7601u_bbp_wr()
141 mt7601u_wr(dev, MT_BBP_CSR_CFG, mt7601u_bbp_wr()
145 trace_bbp_write(dev, offset, val); mt7601u_bbp_wr()
147 mutex_unlock(&dev->reg_atomic_mutex); mt7601u_bbp_wr()
150 static int mt7601u_bbp_rr(struct mt7601u_dev *dev, u8 offset) mt7601u_bbp_rr() argument
155 if (WARN_ON(!test_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state))) mt7601u_bbp_rr()
157 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_bbp_rr()
160 mutex_lock(&dev->reg_atomic_mutex); mt7601u_bbp_rr()
162 if (!mt76_poll(dev, MT_BBP_CSR_CFG, MT_BBP_CSR_CFG_BUSY, 0, 1000)) mt7601u_bbp_rr()
165 mt7601u_wr(dev, MT_BBP_CSR_CFG, mt7601u_bbp_rr()
170 if (!mt76_poll(dev, MT_BBP_CSR_CFG, MT_BBP_CSR_CFG_BUSY, 0, 1000)) mt7601u_bbp_rr()
173 val = mt7601u_rr(dev, MT_BBP_CSR_CFG); mt7601u_bbp_rr()
176 trace_bbp_read(dev, offset, ret); mt7601u_bbp_rr()
179 mutex_unlock(&dev->reg_atomic_mutex); mt7601u_bbp_rr()
182 dev_err(dev->dev, "Error: BBP read %02hhx failed:%d!!\n", mt7601u_bbp_rr()
188 static int mt7601u_bbp_rmw(struct mt7601u_dev *dev, u8 offset, u8 mask, u8 val) mt7601u_bbp_rmw() argument
192 ret = mt7601u_bbp_rr(dev, offset); mt7601u_bbp_rmw()
196 mt7601u_bbp_wr(dev, offset, val); mt7601u_bbp_rmw()
201 static u8 mt7601u_bbp_rmc(struct mt7601u_dev *dev, u8 offset, u8 mask, u8 val) mt7601u_bbp_rmc() argument
205 ret = mt7601u_bbp_rr(dev, offset); mt7601u_bbp_rmc()
210 mt7601u_bbp_wr(dev, offset, val); mt7601u_bbp_rmc()
215 int mt7601u_wait_bbp_ready(struct mt7601u_dev *dev) mt7601u_wait_bbp_ready() argument
221 val = mt7601u_bbp_rr(dev, MT_BBP_REG_VERSION); mt7601u_wait_bbp_ready()
227 dev_err(dev->dev, "Error: BBP is not ready\n"); mt7601u_wait_bbp_ready()
234 u32 mt7601u_bbp_set_ctrlch(struct mt7601u_dev *dev, bool below) mt7601u_bbp_set_ctrlch() argument
236 return mt7601u_bbp_rmc(dev, 3, 0x20, below ? 0x20 : 0); mt7601u_bbp_set_ctrlch()
239 int mt7601u_phy_get_rssi(struct mt7601u_dev *dev, mt7601u_phy_get_rssi() argument
263 val -= dev->ee->lna_gain; mt7601u_phy_get_rssi()
264 val -= dev->ee->rssi_offset[0]; mt7601u_phy_get_rssi()
269 static void mt7601u_vco_cal(struct mt7601u_dev *dev) mt7601u_vco_cal() argument
271 mt7601u_rf_wr(dev, 0, 4, 0x0a); mt7601u_vco_cal()
272 mt7601u_rf_wr(dev, 0, 5, 0x20); mt7601u_vco_cal()
273 mt7601u_rf_set(dev, 0, 4, BIT(7)); mt7601u_vco_cal()
277 static int mt7601u_set_bw_filter(struct mt7601u_dev *dev, bool cal) mt7601u_set_bw_filter() argument
284 if (dev->bw != MT_BW_20) mt7601u_set_bw_filter()
288 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_BW, filter | 1); mt7601u_set_bw_filter()
292 return mt7601u_mcu_calibrate(dev, MCU_CAL_BW, filter); mt7601u_set_bw_filter()
295 static int mt7601u_load_bbp_temp_table_bw(struct mt7601u_dev *dev) mt7601u_load_bbp_temp_table_bw() argument
299 if (WARN_ON(dev->temp_mode > MT_TEMP_MODE_LOW)) mt7601u_load_bbp_temp_table_bw()
302 t = &bbp_mode_table[dev->temp_mode][dev->bw]; mt7601u_load_bbp_temp_table_bw()
304 return mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, t->regs, t->n); mt7601u_load_bbp_temp_table_bw()
307 static int mt7601u_bbp_temp(struct mt7601u_dev *dev, int mode, const char *name) mt7601u_bbp_temp() argument
312 if (dev->temp_mode == mode) mt7601u_bbp_temp()
315 dev->temp_mode = mode; mt7601u_bbp_temp()
316 trace_temp_mode(dev, mode); mt7601u_bbp_temp()
318 t = bbp_mode_table[dev->temp_mode]; mt7601u_bbp_temp()
319 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, mt7601u_bbp_temp()
324 return mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, mt7601u_bbp_temp()
325 t[dev->bw].regs, t[dev->bw].n); mt7601u_bbp_temp()
328 static void mt7601u_apply_ch14_fixup(struct mt7601u_dev *dev, int hw_chan) mt7601u_apply_ch14_fixup() argument
330 struct mt7601u_rate_power *t = &dev->ee->power_rate_table; mt7601u_apply_ch14_fixup()
332 if (hw_chan != 14 || dev->bw != MT_BW_20) { mt7601u_apply_ch14_fixup()
333 mt7601u_bbp_rmw(dev, 4, 0x20, 0); mt7601u_apply_ch14_fixup()
334 mt7601u_bbp_wr(dev, 178, 0xff); mt7601u_apply_ch14_fixup()
336 t->cck[0].bw20 = dev->ee->real_cck_bw20[0]; mt7601u_apply_ch14_fixup()
337 t->cck[1].bw20 = dev->ee->real_cck_bw20[1]; mt7601u_apply_ch14_fixup()
339 mt7601u_bbp_wr(dev, 4, 0x60); mt7601u_apply_ch14_fixup()
340 mt7601u_bbp_wr(dev, 178, 0); mt7601u_apply_ch14_fixup()
343 t->cck[0].bw20 = dev->ee->real_cck_bw20[0] - 2; mt7601u_apply_ch14_fixup()
344 t->cck[1].bw20 = dev->ee->real_cck_bw20[1] - 2; mt7601u_apply_ch14_fixup()
348 static int __mt7601u_phy_set_channel(struct mt7601u_dev *dev, __mt7601u_phy_set_channel() argument
372 { 62, 0x37 - dev->ee->lna_gain }, __mt7601u_phy_set_channel()
373 { 63, 0x37 - dev->ee->lna_gain }, __mt7601u_phy_set_channel()
374 { 64, 0x37 - dev->ee->lna_gain }, __mt7601u_phy_set_channel()
380 struct mt7601u_rate_power *t = &dev->ee->power_rate_table; __mt7601u_phy_set_channel()
398 dev_err(dev->dev, "Error: invalid 40MHz channel!!\n"); __mt7601u_phy_set_channel()
401 if (bw != dev->bw || chan_ext_below != dev->chan_ext_below) { __mt7601u_phy_set_channel()
402 dev_dbg(dev->dev, "Info: switching HT mode bw:%d below:%d\n", __mt7601u_phy_set_channel()
405 mt7601u_bbp_set_bw(dev, bw); __mt7601u_phy_set_channel()
407 mt7601u_bbp_set_ctrlch(dev, chan_ext_below); __mt7601u_phy_set_channel()
408 mt7601u_mac_set_ctrlch(dev, chan_ext_below); __mt7601u_phy_set_channel()
409 dev->chan_ext_below = chan_ext_below; __mt7601u_phy_set_channel()
415 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_RF, __mt7601u_phy_set_channel()
420 mt7601u_rmw(dev, MT_TX_ALC_CFG_0, 0x3f3f, __mt7601u_phy_set_channel()
421 dev->ee->chan_pwr[chan_idx] & 0x3f); __mt7601u_phy_set_channel()
423 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, __mt7601u_phy_set_channel()
428 mt7601u_vco_cal(dev); __mt7601u_phy_set_channel()
429 mt7601u_bbp_set_bw(dev, bw); __mt7601u_phy_set_channel()
430 ret = mt7601u_set_bw_filter(dev, false); __mt7601u_phy_set_channel()
434 mt7601u_apply_ch14_fixup(dev, chan->hw_value); __mt7601u_phy_set_channel()
435 mt7601u_wr(dev, MT_TX_PWR_CFG_0, int_to_s6(t->ofdm[1].bw20) << 24 | __mt7601u_phy_set_channel()
440 if (test_bit(MT7601U_STATE_SCANNING, &dev->state)) __mt7601u_phy_set_channel()
441 mt7601u_agc_reset(dev); __mt7601u_phy_set_channel()
443 dev->chandef = *chandef; __mt7601u_phy_set_channel()
448 int mt7601u_phy_set_channel(struct mt7601u_dev *dev, mt7601u_phy_set_channel() argument
453 cancel_delayed_work_sync(&dev->cal_work); mt7601u_phy_set_channel()
454 cancel_delayed_work_sync(&dev->freq_cal.work); mt7601u_phy_set_channel()
456 mutex_lock(&dev->hw_atomic_mutex); mt7601u_phy_set_channel()
457 ret = __mt7601u_phy_set_channel(dev, chandef); mt7601u_phy_set_channel()
458 mutex_unlock(&dev->hw_atomic_mutex); mt7601u_phy_set_channel()
462 if (test_bit(MT7601U_STATE_SCANNING, &dev->state)) mt7601u_phy_set_channel()
465 ieee80211_queue_delayed_work(dev->hw, &dev->cal_work, mt7601u_phy_set_channel()
467 if (dev->freq_cal.enabled) mt7601u_phy_set_channel()
468 ieee80211_queue_delayed_work(dev->hw, &dev->freq_cal.work, mt7601u_phy_set_channel()
480 * @dev: pointer to adapter structure
490 static u8 mt7601u_bbp_r47_get(struct mt7601u_dev *dev, u8 reg, u8 flag) mt7601u_bbp_r47_get() argument
493 mt7601u_bbp_wr(dev, 47, flag); mt7601u_bbp_r47_get()
495 return mt7601u_bbp_rr(dev, 49); mt7601u_bbp_r47_get()
498 static s8 mt7601u_read_bootup_temp(struct mt7601u_dev *dev) mt7601u_read_bootup_temp() argument
504 rf_set = mt7601u_rr(dev, MT_RF_SETTING_0); mt7601u_read_bootup_temp()
505 rf_bp = mt7601u_rr(dev, MT_RF_BYPASS_0); mt7601u_read_bootup_temp()
507 mt7601u_wr(dev, MT_RF_BYPASS_0, 0); mt7601u_read_bootup_temp()
508 mt7601u_wr(dev, MT_RF_SETTING_0, 0x00000010); mt7601u_read_bootup_temp()
509 mt7601u_wr(dev, MT_RF_BYPASS_0, 0x00000010); mt7601u_read_bootup_temp()
511 bbp_val = mt7601u_bbp_rmw(dev, 47, 0, 0x10); mt7601u_read_bootup_temp()
513 mt7601u_bbp_wr(dev, 22, 0x40); mt7601u_read_bootup_temp()
516 bbp_val = mt7601u_bbp_rr(dev, 47); mt7601u_read_bootup_temp()
518 temp = mt7601u_bbp_r47_get(dev, bbp_val, BBP_R47_F_TEMP); mt7601u_read_bootup_temp()
520 mt7601u_bbp_wr(dev, 22, 0); mt7601u_read_bootup_temp()
522 bbp_val = mt7601u_bbp_rr(dev, 21); mt7601u_read_bootup_temp()
524 mt7601u_bbp_wr(dev, 21, bbp_val); mt7601u_read_bootup_temp()
526 mt7601u_bbp_wr(dev, 21, bbp_val); mt7601u_read_bootup_temp()
528 mt7601u_wr(dev, MT_RF_BYPASS_0, 0); mt7601u_read_bootup_temp()
529 mt7601u_wr(dev, MT_RF_SETTING_0, rf_set); mt7601u_read_bootup_temp()
530 mt7601u_wr(dev, MT_RF_BYPASS_0, rf_bp); mt7601u_read_bootup_temp()
532 trace_read_temp(dev, temp); mt7601u_read_bootup_temp()
536 static s8 mt7601u_read_temp(struct mt7601u_dev *dev) mt7601u_read_temp() argument
542 val = mt7601u_bbp_rmw(dev, 47, 0x7f, 0x10); mt7601u_read_temp()
546 val = mt7601u_bbp_rr(dev, 47); mt7601u_read_temp()
548 temp = mt7601u_bbp_r47_get(dev, val, BBP_R47_F_TEMP); mt7601u_read_temp()
550 trace_read_temp(dev, temp); mt7601u_read_temp()
554 static void mt7601u_rxdc_cal(struct mt7601u_dev *dev) mt7601u_rxdc_cal() argument
565 mac_ctrl = mt7601u_rr(dev, MT_MAC_SYS_CTRL); mt7601u_rxdc_cal()
566 mt7601u_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_RX); mt7601u_rxdc_cal()
568 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, mt7601u_rxdc_cal()
571 dev_err(dev->dev, "%s intro failed:%d\n", __func__, ret); mt7601u_rxdc_cal()
576 mt7601u_bbp_wr(dev, 158, 0x8c); mt7601u_rxdc_cal()
577 if (mt7601u_bbp_rr(dev, 159) == 0x0c) mt7601u_rxdc_cal()
581 dev_err(dev->dev, "%s timed out\n", __func__); mt7601u_rxdc_cal()
583 mt7601u_wr(dev, MT_MAC_SYS_CTRL, 0); mt7601u_rxdc_cal()
585 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, mt7601u_rxdc_cal()
588 dev_err(dev->dev, "%s outro failed:%d\n", __func__, ret); mt7601u_rxdc_cal()
590 mt7601u_wr(dev, MT_MAC_SYS_CTRL, mac_ctrl); mt7601u_rxdc_cal()
593 void mt7601u_phy_recalibrate_after_assoc(struct mt7601u_dev *dev) mt7601u_phy_recalibrate_after_assoc() argument
595 mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->curr_temp); mt7601u_phy_recalibrate_after_assoc()
597 mt7601u_rxdc_cal(dev); mt7601u_phy_recalibrate_after_assoc()
633 mt7601u_set_initial_tssi(struct mt7601u_dev *dev, s16 tssi_db, s16 tssi_hvga_db) mt7601u_set_initial_tssi() argument
635 struct tssi_data *d = &dev->ee->tssi_data; mt7601u_set_initial_tssi()
640 mt76_rmw(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP, mt7601u_set_initial_tssi()
644 static void mt7601u_tssi_dc_gain_cal(struct mt7601u_dev *dev) mt7601u_tssi_dc_gain_cal() argument
651 mt7601u_wr(dev, MT_RF_SETTING_0, 0x00000030); mt7601u_tssi_dc_gain_cal()
652 mt7601u_wr(dev, MT_RF_BYPASS_0, 0x000c0030); mt7601u_tssi_dc_gain_cal()
653 mt7601u_wr(dev, MT_MAC_SYS_CTRL, 0); mt7601u_tssi_dc_gain_cal()
655 mt7601u_bbp_wr(dev, 58, 0); mt7601u_tssi_dc_gain_cal()
656 mt7601u_bbp_wr(dev, 241, 0x2); mt7601u_tssi_dc_gain_cal()
657 mt7601u_bbp_wr(dev, 23, 0x8); mt7601u_tssi_dc_gain_cal()
658 bbp_r47 = mt7601u_bbp_rr(dev, 47); mt7601u_tssi_dc_gain_cal()
661 rf_vga = mt7601u_rf_rr(dev, 5, 3); mt7601u_tssi_dc_gain_cal()
662 mt7601u_rf_wr(dev, 5, 3, 8); mt7601u_tssi_dc_gain_cal()
665 rf_mixer = mt7601u_rf_rr(dev, 4, 39); mt7601u_tssi_dc_gain_cal()
666 mt7601u_rf_wr(dev, 4, 39, 0); mt7601u_tssi_dc_gain_cal()
669 mt7601u_rf_wr(dev, 4, 39, (i & 1) ? rf_mixer : 0); mt7601u_tssi_dc_gain_cal()
671 mt7601u_bbp_wr(dev, 23, (i < 2) ? 0x08 : 0x02); mt7601u_tssi_dc_gain_cal()
672 mt7601u_rf_wr(dev, 5, 3, (i < 2) ? 0x08 : 0x11); mt7601u_tssi_dc_gain_cal()
675 mt7601u_bbp_wr(dev, 22, 0); mt7601u_tssi_dc_gain_cal()
676 mt7601u_bbp_wr(dev, 244, 0); mt7601u_tssi_dc_gain_cal()
678 mt7601u_bbp_wr(dev, 21, 1); mt7601u_tssi_dc_gain_cal()
680 mt7601u_bbp_wr(dev, 21, 0); mt7601u_tssi_dc_gain_cal()
683 mt7601u_bbp_wr(dev, 47, 0x50); mt7601u_tssi_dc_gain_cal()
684 mt7601u_bbp_wr(dev, (i & 1) ? 244 : 22, (i & 1) ? 0x31 : 0x40); mt7601u_tssi_dc_gain_cal()
687 if (!(mt7601u_bbp_rr(dev, 47) & 0x10)) mt7601u_tssi_dc_gain_cal()
690 dev_err(dev->dev, "%s timed out\n", __func__); mt7601u_tssi_dc_gain_cal()
693 mt7601u_bbp_wr(dev, 47, 0x40); mt7601u_tssi_dc_gain_cal()
694 res[i] = mt7601u_bbp_rr(dev, 49); mt7601u_tssi_dc_gain_cal()
699 dev->tssi_init = res[0]; mt7601u_tssi_dc_gain_cal()
700 dev->tssi_init_hvga = res[2]; mt7601u_tssi_dc_gain_cal()
701 dev->tssi_init_hvga_offset_db = tssi_init_hvga_db - tssi_init_db; mt7601u_tssi_dc_gain_cal()
703 dev_dbg(dev->dev, mt7601u_tssi_dc_gain_cal()
705 dev->tssi_init, tssi_init_db, dev->tssi_init_hvga, mt7601u_tssi_dc_gain_cal()
706 tssi_init_hvga_db, dev->tssi_init_hvga_offset_db); mt7601u_tssi_dc_gain_cal()
708 mt7601u_bbp_wr(dev, 22, 0); mt7601u_tssi_dc_gain_cal()
709 mt7601u_bbp_wr(dev, 244, 0); mt7601u_tssi_dc_gain_cal()
711 mt7601u_bbp_wr(dev, 21, 1); mt7601u_tssi_dc_gain_cal()
713 mt7601u_bbp_wr(dev, 21, 0); mt7601u_tssi_dc_gain_cal()
715 mt7601u_wr(dev, MT_RF_BYPASS_0, 0); mt7601u_tssi_dc_gain_cal()
716 mt7601u_wr(dev, MT_RF_SETTING_0, 0); mt7601u_tssi_dc_gain_cal()
718 mt7601u_rf_wr(dev, 5, 3, rf_vga); mt7601u_tssi_dc_gain_cal()
719 mt7601u_rf_wr(dev, 4, 39, rf_mixer); mt7601u_tssi_dc_gain_cal()
720 mt7601u_bbp_wr(dev, 47, bbp_r47); mt7601u_tssi_dc_gain_cal()
722 mt7601u_set_initial_tssi(dev, tssi_init_db, tssi_init_hvga_db); mt7601u_tssi_dc_gain_cal()
725 static int mt7601u_temp_comp(struct mt7601u_dev *dev, bool on) mt7601u_temp_comp() argument
729 temp = (dev->raw_temp - dev->ee->ref_temp) * MT_EE_TEMPERATURE_SLOPE; mt7601u_temp_comp()
730 dev->curr_temp = temp; mt7601u_temp_comp()
733 if (temp - dev->dpd_temp > 450 || temp - dev->dpd_temp < -450) { mt7601u_temp_comp()
734 dev->dpd_temp = temp; mt7601u_temp_comp()
736 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->dpd_temp); mt7601u_temp_comp()
740 mt7601u_vco_cal(dev); mt7601u_temp_comp()
742 dev_dbg(dev->dev, "Recalibrate DPD\n"); mt7601u_temp_comp()
746 if (temp < -50 && !dev->pll_lock_protect) { /* < 20C */ mt7601u_temp_comp()
747 dev->pll_lock_protect = true; mt7601u_temp_comp()
749 mt7601u_rf_wr(dev, 4, 4, 6); mt7601u_temp_comp()
750 mt7601u_rf_clear(dev, 4, 10, 0x30); mt7601u_temp_comp()
752 dev_dbg(dev->dev, "PLL lock protect on - too cold\n"); mt7601u_temp_comp()
753 } else if (temp > 50 && dev->pll_lock_protect) { /* > 30C */ mt7601u_temp_comp()
754 dev->pll_lock_protect = false; mt7601u_temp_comp()
756 mt7601u_rf_wr(dev, 4, 4, 0); mt7601u_temp_comp()
757 mt7601u_rf_rmw(dev, 4, 10, 0x30, 0x10); mt7601u_temp_comp()
759 dev_dbg(dev->dev, "PLL lock protect off\n"); mt7601u_temp_comp()
769 return mt7601u_bbp_temp(dev, MT_TEMP_MODE_HIGH, "high"); mt7601u_temp_comp()
771 return mt7601u_bbp_temp(dev, MT_TEMP_MODE_NORMAL, "normal"); mt7601u_temp_comp()
773 return mt7601u_bbp_temp(dev, MT_TEMP_MODE_LOW, "low"); mt7601u_temp_comp()
777 static int mt7601u_current_tx_power(struct mt7601u_dev *dev) mt7601u_current_tx_power() argument
779 return dev->ee->chan_pwr[dev->chandef.chan->hw_value - 1]; mt7601u_current_tx_power()
782 static bool mt7601u_use_hvga(struct mt7601u_dev *dev) mt7601u_use_hvga() argument
784 return !(mt7601u_current_tx_power(dev) > 20); mt7601u_use_hvga()
788 mt7601u_phy_rf_pa_mode_val(struct mt7601u_dev *dev, int phy_mode, int tx_rate) mt7601u_phy_rf_pa_mode_val() argument
797 reg = dev->rf_pa_mode[0]; mt7601u_phy_rf_pa_mode_val()
800 reg = dev->rf_pa_mode[1]; mt7601u_phy_rf_pa_mode_val()
808 mt7601u_tssi_params_get(struct mt7601u_dev *dev) mt7601u_tssi_params_get() argument
816 bbp_r47 = mt7601u_bbp_rr(dev, 47); mt7601u_tssi_params_get()
818 p.tssi0 = mt7601u_bbp_r47_get(dev, bbp_r47, BBP_R47_F_TSSI); mt7601u_tssi_params_get()
819 dev->raw_temp = mt7601u_bbp_r47_get(dev, bbp_r47, BBP_R47_F_TEMP); mt7601u_tssi_params_get()
820 pkt_type = mt7601u_bbp_r47_get(dev, bbp_r47, BBP_R47_F_PKT_T); mt7601u_tssi_params_get()
822 p.trgt_power = mt7601u_current_tx_power(dev); mt7601u_tssi_params_get()
827 rate_table = dev->ee->power_rate_table.cck; mt7601u_tssi_params_get()
832 rate_table = dev->ee->power_rate_table.ofdm; mt7601u_tssi_params_get()
836 tx_rate = mt7601u_bbp_r47_get(dev, bbp_r47, BBP_R47_F_TX_RATE); mt7601u_tssi_params_get()
838 rate_table = dev->ee->power_rate_table.ht; mt7601u_tssi_params_get()
842 if (dev->bw == MT_BW_20) mt7601u_tssi_params_get()
849 dev_dbg(dev->dev, "tx_rate:%02hhx pwr:%08x\n", tx_rate, p.trgt_power); mt7601u_tssi_params_get()
851 p.trgt_power += mt7601u_phy_rf_pa_mode_val(dev, pkt_type & 0x03, mt7601u_tssi_params_get()
856 if (mt7601u_bbp_rr(dev, 4) & 0x20) mt7601u_tssi_params_get()
857 p.trgt_power += mt7601u_bbp_rr(dev, 178) ? 18022 : 9830; mt7601u_tssi_params_get()
859 p.trgt_power += mt7601u_bbp_rr(dev, 178) ? 819 : 24576; mt7601u_tssi_params_get()
862 p.trgt_power += static_power[mt7601u_bbp_rr(dev, 1) & 0x03]; mt7601u_tssi_params_get()
864 p.trgt_power += dev->ee->tssi_data.tx0_delta_offset; mt7601u_tssi_params_get()
866 dev_dbg(dev->dev, mt7601u_tssi_params_get()
868 p.tssi0, p.trgt_power, dev->raw_temp, pkt_type); mt7601u_tssi_params_get()
873 static bool mt7601u_tssi_read_ready(struct mt7601u_dev *dev) mt7601u_tssi_read_ready() argument
875 return !(mt7601u_bbp_rr(dev, 47) & 0x10); mt7601u_tssi_read_ready()
878 static int mt7601u_tssi_cal(struct mt7601u_dev *dev) mt7601u_tssi_cal() argument
888 if (!dev->ee->tssi_enabled) mt7601u_tssi_cal()
891 hvga = mt7601u_use_hvga(dev); mt7601u_tssi_cal()
892 if (!dev->tssi_read_trig) mt7601u_tssi_cal()
893 return mt7601u_mcu_tssi_read_kick(dev, hvga); mt7601u_tssi_cal()
895 if (!mt7601u_tssi_read_ready(dev)) mt7601u_tssi_cal()
898 params = mt7601u_tssi_params_get(dev); mt7601u_tssi_cal()
900 tssi_init = (hvga ? dev->tssi_init_hvga : dev->tssi_init); mt7601u_tssi_cal()
903 dev_dbg(dev->dev, "tssi dc:%04hx db:%04hx hvga:%d\n", mt7601u_tssi_cal()
906 if (dev->chandef.chan->hw_value < 5) mt7601u_tssi_cal()
907 tssi_offset = dev->ee->tssi_data.offset[0]; mt7601u_tssi_cal()
908 else if (dev->chandef.chan->hw_value < 9) mt7601u_tssi_cal()
909 tssi_offset = dev->ee->tssi_data.offset[1]; mt7601u_tssi_cal()
911 tssi_offset = dev->ee->tssi_data.offset[2]; mt7601u_tssi_cal()
914 tssi_db -= dev->tssi_init_hvga_offset_db; mt7601u_tssi_cal()
916 curr_pwr = tssi_db * dev->ee->tssi_data.slope + (tssi_offset << 9); mt7601u_tssi_cal()
918 dev_dbg(dev->dev, "Power curr:%08x diff:%08x\n", curr_pwr, diff_pwr); mt7601u_tssi_cal()
921 dev_err(dev->dev, "Error: TSSI upper saturation\n"); mt7601u_tssi_cal()
925 dev_err(dev->dev, "Error: TSSI lower saturation\n"); mt7601u_tssi_cal()
929 if ((dev->prev_pwr_diff ^ diff_pwr) < 0 && abs(diff_pwr) < 4096 && mt7601u_tssi_cal()
930 (abs(diff_pwr) > abs(dev->prev_pwr_diff) || mt7601u_tssi_cal()
931 (diff_pwr > 0 && diff_pwr == -dev->prev_pwr_diff))) mt7601u_tssi_cal()
934 dev->prev_pwr_diff = diff_pwr; mt7601u_tssi_cal()
939 dev_dbg(dev->dev, "final diff: %08x\n", diff_pwr); mt7601u_tssi_cal()
941 val = mt7601u_rr(dev, MT_TX_ALC_CFG_1); mt7601u_tssi_cal()
945 mt7601u_wr(dev, MT_TX_ALC_CFG_1, val); mt7601u_tssi_cal()
947 return mt7601u_mcu_tssi_read_kick(dev, hvga); mt7601u_tssi_cal()
950 static u8 mt7601u_agc_default(struct mt7601u_dev *dev) mt7601u_agc_default() argument
952 return (dev->ee->lna_gain - 8) * 2 + 0x34; mt7601u_agc_default()
955 static void mt7601u_agc_reset(struct mt7601u_dev *dev) mt7601u_agc_reset() argument
957 u8 agc = mt7601u_agc_default(dev); mt7601u_agc_reset()
959 mt7601u_bbp_wr(dev, 66, agc); mt7601u_agc_reset()
962 void mt7601u_agc_save(struct mt7601u_dev *dev) mt7601u_agc_save() argument
964 dev->agc_save = mt7601u_bbp_rr(dev, 66); mt7601u_agc_save()
967 void mt7601u_agc_restore(struct mt7601u_dev *dev) mt7601u_agc_restore() argument
969 mt7601u_bbp_wr(dev, 66, dev->agc_save); mt7601u_agc_restore()
972 static void mt7601u_agc_tune(struct mt7601u_dev *dev) mt7601u_agc_tune() argument
974 u8 val = mt7601u_agc_default(dev); mt7601u_agc_tune()
976 if (test_bit(MT7601U_STATE_SCANNING, &dev->state)) mt7601u_agc_tune()
983 spin_lock_bh(&dev->con_mon_lock); mt7601u_agc_tune()
984 if (dev->avg_rssi <= -70) mt7601u_agc_tune()
986 else if (dev->avg_rssi <= -60) mt7601u_agc_tune()
988 spin_unlock_bh(&dev->con_mon_lock); mt7601u_agc_tune()
990 if (val != mt7601u_bbp_rr(dev, 66)) mt7601u_agc_tune()
991 mt7601u_bbp_wr(dev, 66, val); mt7601u_agc_tune()
1000 struct mt7601u_dev *dev = container_of(work, struct mt7601u_dev, mt7601u_phy_calibrate() local
1003 mt7601u_agc_tune(dev); mt7601u_phy_calibrate()
1004 mt7601u_tssi_cal(dev); mt7601u_phy_calibrate()
1006 if (!dev->ee->tssi_enabled) mt7601u_phy_calibrate()
1007 dev->raw_temp = mt7601u_read_temp(dev); mt7601u_phy_calibrate()
1008 mt7601u_temp_comp(dev, true); /* TODO: find right value for @on */ mt7601u_phy_calibrate()
1010 ieee80211_queue_delayed_work(dev->hw, &dev->cal_work, mt7601u_phy_calibrate()
1015 __mt7601u_phy_freq_cal(struct mt7601u_dev *dev, s8 last_offset, u8 phy_mode) __mt7601u_phy_freq_cal() argument
1019 trace_freq_cal_offset(dev, phy_mode, last_offset); __mt7601u_phy_freq_cal()
1045 dev->freq_cal.adjusting = true; __mt7601u_phy_freq_cal()
1047 dev->freq_cal.adjusting = false; __mt7601u_phy_freq_cal()
1049 if (!dev->freq_cal.adjusting) __mt7601u_phy_freq_cal()
1053 if (dev->freq_cal.freq > 0) __mt7601u_phy_freq_cal()
1054 dev->freq_cal.freq--; __mt7601u_phy_freq_cal()
1056 dev->freq_cal.adjusting = false; __mt7601u_phy_freq_cal()
1058 if (dev->freq_cal.freq < 0xbf) __mt7601u_phy_freq_cal()
1059 dev->freq_cal.freq++; __mt7601u_phy_freq_cal()
1061 dev->freq_cal.adjusting = false; __mt7601u_phy_freq_cal()
1064 trace_freq_cal_adjust(dev, dev->freq_cal.freq); __mt7601u_phy_freq_cal()
1065 mt7601u_rf_wr(dev, 0, 12, dev->freq_cal.freq); __mt7601u_phy_freq_cal()
1066 mt7601u_vco_cal(dev); __mt7601u_phy_freq_cal()
1068 return dev->freq_cal.adjusting ? MT_FREQ_CAL_ADJ_INTERVAL : __mt7601u_phy_freq_cal()
1074 struct mt7601u_dev *dev = container_of(work, struct mt7601u_dev, mt7601u_phy_freq_cal() local
1080 spin_lock_bh(&dev->con_mon_lock); mt7601u_phy_freq_cal()
1081 last_offset = dev->bcn_freq_off; mt7601u_phy_freq_cal()
1082 phy_mode = dev->bcn_phy_mode; mt7601u_phy_freq_cal()
1083 spin_unlock_bh(&dev->con_mon_lock); mt7601u_phy_freq_cal()
1085 delay = __mt7601u_phy_freq_cal(dev, last_offset, phy_mode); mt7601u_phy_freq_cal()
1086 ieee80211_queue_delayed_work(dev->hw, &dev->freq_cal.work, delay); mt7601u_phy_freq_cal()
1088 spin_lock_bh(&dev->con_mon_lock); mt7601u_phy_freq_cal()
1089 dev->bcn_freq_off = MT_FREQ_OFFSET_INVALID; mt7601u_phy_freq_cal()
1090 spin_unlock_bh(&dev->con_mon_lock); mt7601u_phy_freq_cal()
1093 void mt7601u_phy_con_cal_onoff(struct mt7601u_dev *dev, mt7601u_phy_con_cal_onoff() argument
1097 cancel_delayed_work_sync(&dev->freq_cal.work); mt7601u_phy_con_cal_onoff()
1100 spin_lock_bh(&dev->con_mon_lock); mt7601u_phy_con_cal_onoff()
1101 ether_addr_copy(dev->ap_bssid, info->bssid); mt7601u_phy_con_cal_onoff()
1102 dev->avg_rssi = 0; mt7601u_phy_con_cal_onoff()
1103 dev->bcn_freq_off = MT_FREQ_OFFSET_INVALID; mt7601u_phy_con_cal_onoff()
1104 spin_unlock_bh(&dev->con_mon_lock); mt7601u_phy_con_cal_onoff()
1106 dev->freq_cal.freq = dev->ee->rf_freq_off; mt7601u_phy_con_cal_onoff()
1107 dev->freq_cal.enabled = info->assoc; mt7601u_phy_con_cal_onoff()
1108 dev->freq_cal.adjusting = false; mt7601u_phy_con_cal_onoff()
1111 ieee80211_queue_delayed_work(dev->hw, &dev->freq_cal.work, mt7601u_phy_con_cal_onoff()
1115 static int mt7601u_init_cal(struct mt7601u_dev *dev) mt7601u_init_cal() argument
1120 dev->raw_temp = mt7601u_read_bootup_temp(dev); mt7601u_init_cal()
1121 dev->curr_temp = (dev->raw_temp - dev->ee->ref_temp) * mt7601u_init_cal()
1123 dev->dpd_temp = dev->curr_temp; mt7601u_init_cal()
1125 mac_ctrl = mt7601u_rr(dev, MT_MAC_SYS_CTRL); mt7601u_init_cal()
1127 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_R, 0); mt7601u_init_cal()
1131 ret = mt7601u_rf_rr(dev, 0, 4); mt7601u_init_cal()
1135 ret = mt7601u_rf_wr(dev, 0, 4, ret); mt7601u_init_cal()
1140 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_TXDCOC, 0); mt7601u_init_cal()
1144 mt7601u_rxdc_cal(dev); mt7601u_init_cal()
1146 ret = mt7601u_set_bw_filter(dev, true); mt7601u_init_cal()
1149 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_LOFT, 0); mt7601u_init_cal()
1152 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_TXIQ, 0); mt7601u_init_cal()
1155 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_RXIQ, 0); mt7601u_init_cal()
1158 ret = mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->dpd_temp); mt7601u_init_cal()
1162 mt7601u_rxdc_cal(dev); mt7601u_init_cal()
1164 mt7601u_tssi_dc_gain_cal(dev); mt7601u_init_cal()
1166 mt7601u_wr(dev, MT_MAC_SYS_CTRL, mac_ctrl); mt7601u_init_cal()
1168 mt7601u_temp_comp(dev, true); mt7601u_init_cal()
1173 int mt7601u_bbp_set_bw(struct mt7601u_dev *dev, int bw) mt7601u_bbp_set_bw() argument
1177 if (bw == dev->bw) { mt7601u_bbp_set_bw()
1179 mt7601u_bbp_rmc(dev, 4, 0x18, bw == MT_BW_20 ? 0 : 0x10); mt7601u_bbp_set_bw()
1183 dev->bw = bw; mt7601u_bbp_set_bw()
1186 old = mt7601u_rr(dev, MT_MAC_SYS_CTRL); mt7601u_bbp_set_bw()
1188 mt7601u_wr(dev, MT_MAC_SYS_CTRL, val); mt7601u_bbp_set_bw()
1189 mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_TX | MT_MAC_STATUS_RX, mt7601u_bbp_set_bw()
1192 mt7601u_bbp_rmc(dev, 4, 0x18, bw == MT_BW_20 ? 0 : 0x10); mt7601u_bbp_set_bw()
1194 mt7601u_wr(dev, MT_MAC_SYS_CTRL, old); mt7601u_bbp_set_bw()
1196 return mt7601u_load_bbp_temp_table_bw(dev); mt7601u_bbp_set_bw()
1201 * @dev: pointer to adapter structure
1204 void mt7601u_set_rx_path(struct mt7601u_dev *dev, u8 path) mt7601u_set_rx_path() argument
1206 mt7601u_bbp_rmw(dev, 3, 0x18, path << 3); mt7601u_set_rx_path()
1211 * @dev: pointer to adapter structure
1214 void mt7601u_set_tx_dac(struct mt7601u_dev *dev, u8 dac) mt7601u_set_tx_dac() argument
1216 mt7601u_bbp_rmc(dev, 1, 0x18, dac << 3); mt7601u_set_tx_dac()
1219 int mt7601u_phy_init(struct mt7601u_dev *dev) mt7601u_phy_init() argument
1223 dev->rf_pa_mode[0] = mt7601u_rr(dev, MT_RF_PA_MODE_CFG0); mt7601u_phy_init()
1224 dev->rf_pa_mode[1] = mt7601u_rr(dev, MT_RF_PA_MODE_CFG1); mt7601u_phy_init()
1226 ret = mt7601u_rf_wr(dev, 0, 12, dev->ee->rf_freq_off); mt7601u_phy_init()
1229 ret = mt7601u_write_reg_pairs(dev, 0, rf_central, mt7601u_phy_init()
1233 ret = mt7601u_write_reg_pairs(dev, 0, rf_channel, mt7601u_phy_init()
1237 ret = mt7601u_write_reg_pairs(dev, 0, rf_vga, ARRAY_SIZE(rf_vga)); mt7601u_phy_init()
1241 ret = mt7601u_init_cal(dev); mt7601u_phy_init()
1245 dev->prev_pwr_diff = 100; mt7601u_phy_init()
1247 INIT_DELAYED_WORK(&dev->cal_work, mt7601u_phy_calibrate); mt7601u_phy_init()
1248 INIT_DELAYED_WORK(&dev->freq_cal.work, mt7601u_phy_freq_cal); mt7601u_phy_init()
H A Dinit.c24 mt7601u_set_wlan_state(struct mt7601u_dev *dev, u32 val, bool enable) mt7601u_set_wlan_state() argument
40 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); mt7601u_set_wlan_state()
44 set_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state); mt7601u_set_wlan_state()
46 clear_bit(MT7601U_STATE_WLAN_RUNNING, &dev->state); mt7601u_set_wlan_state()
51 val = mt7601u_rr(dev, MT_CMB_CTRL); mt7601u_set_wlan_state()
64 dev_err(dev->dev, "Error: PLL and XTAL check failed!\n"); mt7601u_set_wlan_state()
67 static void mt7601u_chip_onoff(struct mt7601u_dev *dev, bool enable, bool reset) mt7601u_chip_onoff() argument
71 mutex_lock(&dev->hw_atomic_mutex); mt7601u_chip_onoff()
73 val = mt7601u_rr(dev, MT_WLAN_FUN_CTRL); mt7601u_chip_onoff()
82 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); mt7601u_chip_onoff()
90 mt7601u_wr(dev, MT_WLAN_FUN_CTRL, val); mt7601u_chip_onoff()
93 mt7601u_set_wlan_state(dev, val, enable); mt7601u_chip_onoff()
95 mutex_unlock(&dev->hw_atomic_mutex); mt7601u_chip_onoff()
98 static void mt7601u_reset_csr_bbp(struct mt7601u_dev *dev) mt7601u_reset_csr_bbp() argument
100 mt7601u_wr(dev, MT_MAC_SYS_CTRL, (MT_MAC_SYS_CTRL_RESET_CSR | mt7601u_reset_csr_bbp()
102 mt7601u_wr(dev, MT_USB_DMA_CFG, 0); mt7601u_reset_csr_bbp()
104 mt7601u_wr(dev, MT_MAC_SYS_CTRL, 0); mt7601u_reset_csr_bbp()
107 static void mt7601u_init_usb_dma(struct mt7601u_dev *dev) mt7601u_init_usb_dma() argument
115 if (dev->in_max_packet == 512) mt7601u_init_usb_dma()
117 mt7601u_wr(dev, MT_USB_DMA_CFG, val); mt7601u_init_usb_dma()
120 mt7601u_wr(dev, MT_USB_DMA_CFG, val); mt7601u_init_usb_dma()
122 mt7601u_wr(dev, MT_USB_DMA_CFG, val); mt7601u_init_usb_dma()
125 static int mt7601u_init_bbp(struct mt7601u_dev *dev) mt7601u_init_bbp() argument
129 ret = mt7601u_wait_bbp_ready(dev); mt7601u_init_bbp()
133 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_common_vals, mt7601u_init_bbp()
138 return mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_BBP, bbp_chip_vals, mt7601u_init_bbp()
143 mt76_init_beacon_offsets(struct mt7601u_dev *dev) mt76_init_beacon_offsets() argument
150 u16 addr = dev->beacon_offsets[i]; mt76_init_beacon_offsets()
156 mt7601u_wr(dev, MT_BCN_OFFSET(i), regs[i]); mt76_init_beacon_offsets()
159 static int mt7601u_write_mac_initvals(struct mt7601u_dev *dev) mt7601u_write_mac_initvals() argument
163 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN, mac_common_vals, mt7601u_write_mac_initvals()
167 ret = mt7601u_write_reg_pairs(dev, MT_MCU_MEMMAP_WLAN, mt7601u_write_mac_initvals()
172 mt76_init_beacon_offsets(dev); mt7601u_write_mac_initvals()
174 mt7601u_wr(dev, MT_AUX_CLK_CFG, 0); mt7601u_write_mac_initvals()
179 static int mt7601u_init_wcid_mem(struct mt7601u_dev *dev) mt7601u_init_wcid_mem() argument
193 ret = mt7601u_burst_write_regs(dev, MT_WCID_ADDR_BASE, mt7601u_init_wcid_mem()
200 static int mt7601u_init_key_mem(struct mt7601u_dev *dev) mt7601u_init_key_mem() argument
204 return mt7601u_burst_write_regs(dev, MT_SKEY_MODE_BASE_0, mt7601u_init_key_mem()
208 static int mt7601u_init_wcid_attr_mem(struct mt7601u_dev *dev) mt7601u_init_wcid_attr_mem() argument
220 ret = mt7601u_burst_write_regs(dev, MT_WCID_ATTR_BASE, mt7601u_init_wcid_attr_mem()
227 static void mt7601u_reset_counters(struct mt7601u_dev *dev) mt7601u_reset_counters() argument
229 mt7601u_rr(dev, MT_RX_STA_CNT0); mt7601u_reset_counters()
230 mt7601u_rr(dev, MT_RX_STA_CNT1); mt7601u_reset_counters()
231 mt7601u_rr(dev, MT_RX_STA_CNT2); mt7601u_reset_counters()
232 mt7601u_rr(dev, MT_TX_STA_CNT0); mt7601u_reset_counters()
233 mt7601u_rr(dev, MT_TX_STA_CNT1); mt7601u_reset_counters()
234 mt7601u_rr(dev, MT_TX_STA_CNT2); mt7601u_reset_counters()
237 int mt7601u_mac_start(struct mt7601u_dev *dev) mt7601u_mac_start() argument
239 mt7601u_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX); mt7601u_mac_start()
241 if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY | mt7601u_mac_start()
245 dev->rxfilter = MT_RX_FILTR_CFG_CRC_ERR | mt7601u_mac_start()
252 mt7601u_wr(dev, MT_RX_FILTR_CFG, dev->rxfilter); mt7601u_mac_start()
254 mt7601u_wr(dev, MT_MAC_SYS_CTRL, mt7601u_mac_start()
257 if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY | mt7601u_mac_start()
264 static void mt7601u_mac_stop_hw(struct mt7601u_dev *dev) mt7601u_mac_stop_hw() argument
268 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_mac_stop_hw()
271 mt76_clear(dev, MT_BEACON_TIME_CFG, MT_BEACON_TIME_CFG_TIMER_EN | mt7601u_mac_stop_hw()
275 if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_BUSY, 0, 1000)) mt7601u_mac_stop_hw()
276 dev_warn(dev->dev, "Warning: TX DMA did not stop!\n"); mt7601u_mac_stop_hw()
280 while (i-- && ((mt76_rr(dev, 0x0438) & 0xffffffff) || mt7601u_mac_stop_hw()
281 (mt76_rr(dev, 0x0a30) & 0x000000ff) || mt7601u_mac_stop_hw()
282 (mt76_rr(dev, 0x0a34) & 0x00ff00ff))) mt7601u_mac_stop_hw()
285 if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_TX, 0, 1000)) mt7601u_mac_stop_hw()
286 dev_warn(dev->dev, "Warning: MAC TX did not stop!\n"); mt7601u_mac_stop_hw()
288 mt76_clear(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_RX | mt7601u_mac_stop_hw()
295 if ((mt76_rr(dev, 0x0430) & 0x00ff0000) || mt7601u_mac_stop_hw()
296 (mt76_rr(dev, 0x0a30) & 0xffffffff) || mt7601u_mac_stop_hw()
297 (mt76_rr(dev, 0x0a34) & 0xffffffff)) mt7601u_mac_stop_hw()
305 if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_RX, 0, 1000)) mt7601u_mac_stop_hw()
306 dev_warn(dev->dev, "Warning: MAC RX did not stop!\n"); mt7601u_mac_stop_hw()
308 if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_RX_BUSY, 0, 1000)) mt7601u_mac_stop_hw()
309 dev_warn(dev->dev, "Warning: RX DMA did not stop!\n"); mt7601u_mac_stop_hw()
312 void mt7601u_mac_stop(struct mt7601u_dev *dev) mt7601u_mac_stop() argument
314 mt7601u_mac_stop_hw(dev); mt7601u_mac_stop()
315 flush_delayed_work(&dev->stat_work); mt7601u_mac_stop()
316 cancel_delayed_work_sync(&dev->stat_work); mt7601u_mac_stop()
319 static void mt7601u_stop_hardware(struct mt7601u_dev *dev) mt7601u_stop_hardware() argument
321 mt7601u_chip_onoff(dev, false, false); mt7601u_stop_hardware()
324 int mt7601u_init_hardware(struct mt7601u_dev *dev) mt7601u_init_hardware() argument
335 dev->beacon_offsets = beacon_offsets; mt7601u_init_hardware()
337 mt7601u_chip_onoff(dev, true, false); mt7601u_init_hardware()
339 ret = mt7601u_wait_asic_ready(dev); mt7601u_init_hardware()
342 ret = mt7601u_mcu_init(dev); mt7601u_init_hardware()
346 if (!mt76_poll_msec(dev, MT_WPDMA_GLO_CFG, mt7601u_init_hardware()
354 ret = mt7601u_wait_asic_ready(dev); mt7601u_init_hardware()
358 mt7601u_reset_csr_bbp(dev); mt7601u_init_hardware()
359 mt7601u_init_usb_dma(dev); mt7601u_init_hardware()
361 ret = mt7601u_mcu_cmd_init(dev); mt7601u_init_hardware()
364 ret = mt7601u_dma_init(dev); mt7601u_init_hardware()
367 ret = mt7601u_write_mac_initvals(dev); mt7601u_init_hardware()
371 if (!mt76_poll_msec(dev, MT_MAC_STATUS, mt7601u_init_hardware()
377 ret = mt7601u_init_bbp(dev); mt7601u_init_hardware()
380 ret = mt7601u_init_wcid_mem(dev); mt7601u_init_hardware()
383 ret = mt7601u_init_key_mem(dev); mt7601u_init_hardware()
386 ret = mt7601u_init_wcid_attr_mem(dev); mt7601u_init_hardware()
390 mt76_clear(dev, MT_BEACON_TIME_CFG, (MT_BEACON_TIME_CFG_TIMER_EN | mt7601u_init_hardware()
395 mt7601u_reset_counters(dev); mt7601u_init_hardware()
397 mt7601u_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e); mt7601u_init_hardware()
399 mt7601u_wr(dev, MT_TXOP_CTRL_CFG, MT76_SET(MT_TXOP_TRUN_EN, 0x3f) | mt7601u_init_hardware()
402 ret = mt7601u_eeprom_init(dev); mt7601u_init_hardware()
406 ret = mt7601u_phy_init(dev); mt7601u_init_hardware()
410 mt7601u_set_rx_path(dev, 0); mt7601u_init_hardware()
411 mt7601u_set_tx_dac(dev, 0); mt7601u_init_hardware()
413 mt7601u_mac_set_ctrlch(dev, false); mt7601u_init_hardware()
414 mt7601u_bbp_set_ctrlch(dev, false); mt7601u_init_hardware()
415 mt7601u_bbp_set_bw(dev, MT_BW_20); mt7601u_init_hardware()
420 mt7601u_dma_cleanup(dev); mt7601u_init_hardware()
422 mt7601u_mcu_cmd_deinit(dev); mt7601u_init_hardware()
424 mt7601u_chip_onoff(dev, false, false); mt7601u_init_hardware()
428 void mt7601u_cleanup(struct mt7601u_dev *dev) mt7601u_cleanup() argument
430 if (!test_and_clear_bit(MT7601U_STATE_INITIALIZED, &dev->state)) mt7601u_cleanup()
433 mt7601u_stop_hardware(dev); mt7601u_cleanup()
434 mt7601u_dma_cleanup(dev); mt7601u_cleanup()
435 mt7601u_mcu_cmd_deinit(dev); mt7601u_cleanup()
441 struct mt7601u_dev *dev; mt7601u_alloc_device() local
443 hw = ieee80211_alloc_hw(sizeof(*dev), &mt7601u_ops); mt7601u_alloc_device()
447 dev = hw->priv; mt7601u_alloc_device()
448 dev->dev = pdev; mt7601u_alloc_device()
449 dev->hw = hw; mt7601u_alloc_device()
450 mutex_init(&dev->vendor_req_mutex); mt7601u_alloc_device()
451 mutex_init(&dev->reg_atomic_mutex); mt7601u_alloc_device()
452 mutex_init(&dev->hw_atomic_mutex); mt7601u_alloc_device()
453 mutex_init(&dev->mutex); mt7601u_alloc_device()
454 spin_lock_init(&dev->tx_lock); mt7601u_alloc_device()
455 spin_lock_init(&dev->rx_lock); mt7601u_alloc_device()
456 spin_lock_init(&dev->lock); mt7601u_alloc_device()
457 spin_lock_init(&dev->mac_lock); mt7601u_alloc_device()
458 spin_lock_init(&dev->con_mon_lock); mt7601u_alloc_device()
459 atomic_set(&dev->avg_ampdu_len, 1); mt7601u_alloc_device()
460 skb_queue_head_init(&dev->tx_skb_done); mt7601u_alloc_device()
462 dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0); mt7601u_alloc_device()
463 if (!dev->stat_wq) { mt7601u_alloc_device()
468 return dev; mt7601u_alloc_device()
524 mt76_init_sband(struct mt7601u_dev *dev, struct ieee80211_supported_band *sband, mt76_init_sband() argument
533 chanlist = devm_kmemdup(dev->dev, chan, size, GFP_KERNEL); mt76_init_sband()
556 dev->chandef.chan = &sband->channels[0]; mt76_init_sband()
562 mt76_init_sband_2g(struct mt7601u_dev *dev) mt76_init_sband_2g() argument
564 dev->sband_2g = devm_kzalloc(dev->dev, sizeof(*dev->sband_2g), mt76_init_sband_2g()
566 dev->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = dev->sband_2g; mt76_init_sband_2g()
568 WARN_ON(dev->ee->reg.start - 1 + dev->ee->reg.num > mt76_init_sband_2g()
571 return mt76_init_sband(dev, dev->sband_2g, mt76_init_sband_2g()
572 &mt76_channels_2ghz[dev->ee->reg.start - 1], mt76_init_sband_2g()
573 dev->ee->reg.num, mt76_init_sband_2g()
577 int mt7601u_register_device(struct mt7601u_dev *dev) mt7601u_register_device() argument
579 struct ieee80211_hw *hw = dev->hw; mt7601u_register_device()
586 dev->wcid_mask[0] |= 1; mt7601u_register_device()
589 dev->mon_wcid = devm_kmalloc(dev->dev, sizeof(*dev->mon_wcid), mt7601u_register_device()
591 if (!dev->mon_wcid) mt7601u_register_device()
593 dev->mon_wcid->idx = 0xff; mt7601u_register_device()
594 dev->mon_wcid->hw_key_idx = -1; mt7601u_register_device()
596 SET_IEEE80211_DEV(hw, dev->dev); mt7601u_register_device()
611 SET_IEEE80211_PERM_ADDR(hw, dev->macaddr); mt7601u_register_device()
616 ret = mt76_init_sband_2g(dev); mt7601u_register_device()
620 INIT_DELAYED_WORK(&dev->mac_work, mt7601u_mac_work); mt7601u_register_device()
621 INIT_DELAYED_WORK(&dev->stat_work, mt7601u_tx_stat); mt7601u_register_device()
627 mt7601u_init_debugfs(dev); mt7601u_register_device()
H A Ddma.c19 static int mt7601u_submit_rx_buf(struct mt7601u_dev *dev,
36 mt7601u_rx_skb_from_seg(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, mt7601u_rx_skb_from_seg() argument
46 true_len = mt76_mac_process_rx(dev, skb, data, rxwi); mt7601u_rx_skb_from_seg()
78 dev_err_ratelimited(dev->dev, "Error: incorrect frame len:%u hdr:%u\n", mt7601u_rx_skb_from_seg()
84 static void mt7601u_rx_process_seg(struct mt7601u_dev *dev, u8 *data, mt7601u_rx_process_seg() argument
105 dev_err_once(dev->dev, "Error: RXWI zero fields are set\n"); mt7601u_rx_process_seg()
107 dev_err_once(dev->dev, "Error: RX path seen a non-pkt urb\n"); mt7601u_rx_process_seg()
109 trace_mt_rx(dev, rxwi, fce_info); mt7601u_rx_process_seg()
111 skb = mt7601u_rx_skb_from_seg(dev, rxwi, data, seg_len, truesize, p); mt7601u_rx_process_seg()
115 spin_lock(&dev->mac_lock); mt7601u_rx_process_seg()
116 ieee80211_rx(dev->hw, skb); mt7601u_rx_process_seg()
117 spin_unlock(&dev->mac_lock); mt7601u_rx_process_seg()
136 mt7601u_rx_process_entry(struct mt7601u_dev *dev, struct mt7601u_dma_buf_rx *e) mt7601u_rx_process_entry() argument
143 if (!test_bit(MT7601U_STATE_INITIALIZED, &dev->state)) mt7601u_rx_process_entry()
151 mt7601u_rx_process_seg(dev, data, seg_len, new_p ? e->p : NULL); mt7601u_rx_process_entry()
159 trace_mt_rx_dma_aggr(dev, cnt, !!new_p); mt7601u_rx_process_entry()
170 mt7601u_rx_get_pending_entry(struct mt7601u_dev *dev) mt7601u_rx_get_pending_entry() argument
172 struct mt7601u_rx_queue *q = &dev->rx_q; mt7601u_rx_get_pending_entry()
176 spin_lock_irqsave(&dev->rx_lock, flags); mt7601u_rx_get_pending_entry()
185 spin_unlock_irqrestore(&dev->rx_lock, flags); mt7601u_rx_get_pending_entry()
192 struct mt7601u_dev *dev = urb->context; mt7601u_complete_rx() local
193 struct mt7601u_rx_queue *q = &dev->rx_q; mt7601u_complete_rx()
196 spin_lock_irqsave(&dev->rx_lock, flags); mt7601u_complete_rx()
199 dev_err(dev->dev, "Error: RX urb failed:%d\n", urb->status); mt7601u_complete_rx()
205 tasklet_schedule(&dev->rx_tasklet); mt7601u_complete_rx()
207 spin_unlock_irqrestore(&dev->rx_lock, flags); mt7601u_complete_rx()
212 struct mt7601u_dev *dev = (struct mt7601u_dev *) data; mt7601u_rx_tasklet() local
215 while ((e = mt7601u_rx_get_pending_entry(dev))) { mt7601u_rx_tasklet()
219 mt7601u_rx_process_entry(dev, e); mt7601u_rx_tasklet()
220 mt7601u_submit_rx_buf(dev, e, GFP_ATOMIC); mt7601u_rx_tasklet()
227 struct mt7601u_dev *dev = q->dev; mt7601u_complete_tx() local
231 spin_lock_irqsave(&dev->tx_lock, flags); mt7601u_complete_tx()
234 dev_err(dev->dev, "Error: TX urb failed:%d\n", urb->status); mt7601u_complete_tx()
239 trace_mt_tx_dma_done(dev, skb); mt7601u_complete_tx()
241 __skb_queue_tail(&dev->tx_skb_done, skb); mt7601u_complete_tx()
242 tasklet_schedule(&dev->tx_tasklet); mt7601u_complete_tx()
245 ieee80211_wake_queue(dev->hw, skb_get_queue_mapping(skb)); mt7601u_complete_tx()
250 spin_unlock_irqrestore(&dev->tx_lock, flags); mt7601u_complete_tx()
255 struct mt7601u_dev *dev = (struct mt7601u_dev *) data; mt7601u_tx_tasklet() local
261 spin_lock_irqsave(&dev->tx_lock, flags); mt7601u_tx_tasklet()
263 set_bit(MT7601U_STATE_MORE_STATS, &dev->state); mt7601u_tx_tasklet()
264 if (!test_and_set_bit(MT7601U_STATE_READING_STATS, &dev->state)) mt7601u_tx_tasklet()
265 queue_delayed_work(dev->stat_wq, &dev->stat_work, mt7601u_tx_tasklet()
268 skb_queue_splice_init(&dev->tx_skb_done, &skbs); mt7601u_tx_tasklet()
270 spin_unlock_irqrestore(&dev->tx_lock, flags); mt7601u_tx_tasklet()
275 mt7601u_tx_status(dev, skb); mt7601u_tx_tasklet()
279 static int mt7601u_dma_submit_tx(struct mt7601u_dev *dev, mt7601u_dma_submit_tx() argument
282 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_dma_submit_tx()
283 unsigned snd_pipe = usb_sndbulkpipe(usb_dev, dev->out_eps[ep]); mt7601u_dma_submit_tx()
285 struct mt7601u_tx_queue *q = &dev->tx_q[ep]; mt7601u_dma_submit_tx()
289 spin_lock_irqsave(&dev->tx_lock, flags); mt7601u_dma_submit_tx()
306 set_bit(MT7601U_STATE_REMOVED, &dev->state); mt7601u_dma_submit_tx()
308 dev_err(dev->dev, "Error: TX urb submit failed:%d\n", mt7601u_dma_submit_tx()
317 ieee80211_stop_queue(dev->hw, skb_get_queue_mapping(skb)); mt7601u_dma_submit_tx()
319 spin_unlock_irqrestore(&dev->tx_lock, flags); mt7601u_dma_submit_tx()
339 int mt7601u_dma_enqueue_tx(struct mt7601u_dev *dev, struct sk_buff *skb, mt7601u_dma_enqueue_tx() argument
354 ret = mt7601u_dma_submit_tx(dev, skb, ep); mt7601u_dma_enqueue_tx()
356 ieee80211_free_txskb(dev->hw, skb); mt7601u_dma_enqueue_tx()
363 static void mt7601u_kill_rx(struct mt7601u_dev *dev) mt7601u_kill_rx() argument
368 spin_lock_irqsave(&dev->rx_lock, flags); mt7601u_kill_rx()
370 for (i = 0; i < dev->rx_q.entries; i++) { mt7601u_kill_rx()
371 int next = dev->rx_q.end; mt7601u_kill_rx()
373 spin_unlock_irqrestore(&dev->rx_lock, flags); mt7601u_kill_rx()
374 usb_poison_urb(dev->rx_q.e[next].urb); mt7601u_kill_rx()
375 spin_lock_irqsave(&dev->rx_lock, flags); mt7601u_kill_rx()
378 spin_unlock_irqrestore(&dev->rx_lock, flags); mt7601u_kill_rx()
381 static int mt7601u_submit_rx_buf(struct mt7601u_dev *dev, mt7601u_submit_rx_buf() argument
384 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_submit_rx_buf()
389 pipe = usb_rcvbulkpipe(usb_dev, dev->in_eps[MT_EP_IN_PKT_RX]); mt7601u_submit_rx_buf()
392 mt7601u_complete_rx, dev); mt7601u_submit_rx_buf()
394 trace_mt_submit_urb(dev, e->urb); mt7601u_submit_rx_buf()
397 dev_err(dev->dev, "Error: submit RX URB failed:%d\n", ret); mt7601u_submit_rx_buf()
402 static int mt7601u_submit_rx(struct mt7601u_dev *dev) mt7601u_submit_rx() argument
406 for (i = 0; i < dev->rx_q.entries; i++) { mt7601u_submit_rx()
407 ret = mt7601u_submit_rx_buf(dev, &dev->rx_q.e[i], GFP_KERNEL); mt7601u_submit_rx()
415 static void mt7601u_free_rx(struct mt7601u_dev *dev) mt7601u_free_rx() argument
419 for (i = 0; i < dev->rx_q.entries; i++) { mt7601u_free_rx()
420 __free_pages(dev->rx_q.e[i].p, MT_RX_ORDER); mt7601u_free_rx()
421 usb_free_urb(dev->rx_q.e[i].urb); mt7601u_free_rx()
425 static int mt7601u_alloc_rx(struct mt7601u_dev *dev) mt7601u_alloc_rx() argument
429 memset(&dev->rx_q, 0, sizeof(dev->rx_q)); mt7601u_alloc_rx()
430 dev->rx_q.dev = dev; mt7601u_alloc_rx()
431 dev->rx_q.entries = N_RX_ENTRIES; mt7601u_alloc_rx()
434 dev->rx_q.e[i].urb = usb_alloc_urb(0, GFP_KERNEL); mt7601u_alloc_rx()
435 dev->rx_q.e[i].p = dev_alloc_pages(MT_RX_ORDER); mt7601u_alloc_rx()
437 if (!dev->rx_q.e[i].urb || !dev->rx_q.e[i].p) mt7601u_alloc_rx()
456 static void mt7601u_free_tx(struct mt7601u_dev *dev) mt7601u_free_tx() argument
461 mt7601u_free_tx_queue(&dev->tx_q[i]); mt7601u_free_tx()
464 static int mt7601u_alloc_tx_queue(struct mt7601u_dev *dev, mt7601u_alloc_tx_queue() argument
469 q->dev = dev; mt7601u_alloc_tx_queue()
481 static int mt7601u_alloc_tx(struct mt7601u_dev *dev) mt7601u_alloc_tx() argument
485 dev->tx_q = devm_kcalloc(dev->dev, __MT_EP_OUT_MAX, mt7601u_alloc_tx()
486 sizeof(*dev->tx_q), GFP_KERNEL); mt7601u_alloc_tx()
489 if (mt7601u_alloc_tx_queue(dev, &dev->tx_q[i])) mt7601u_alloc_tx()
495 int mt7601u_dma_init(struct mt7601u_dev *dev) mt7601u_dma_init() argument
499 tasklet_init(&dev->tx_tasklet, mt7601u_tx_tasklet, (unsigned long) dev); mt7601u_dma_init()
500 tasklet_init(&dev->rx_tasklet, mt7601u_rx_tasklet, (unsigned long) dev); mt7601u_dma_init()
502 ret = mt7601u_alloc_tx(dev); mt7601u_dma_init()
505 ret = mt7601u_alloc_rx(dev); mt7601u_dma_init()
509 ret = mt7601u_submit_rx(dev); mt7601u_dma_init()
515 mt7601u_dma_cleanup(dev); mt7601u_dma_init()
519 void mt7601u_dma_cleanup(struct mt7601u_dev *dev) mt7601u_dma_cleanup() argument
521 mt7601u_kill_rx(dev); mt7601u_dma_cleanup()
523 tasklet_kill(&dev->rx_tasklet); mt7601u_dma_cleanup()
525 mt7601u_free_rx(dev); mt7601u_dma_cleanup()
526 mt7601u_free_tx(dev); mt7601u_dma_cleanup()
528 tasklet_kill(&dev->tx_tasklet); mt7601u_dma_cleanup()
H A Dusb.c42 bool mt7601u_usb_alloc_buf(struct mt7601u_dev *dev, size_t len, mt7601u_usb_alloc_buf() argument
45 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_usb_alloc_buf()
54 void mt7601u_usb_free_buf(struct mt7601u_dev *dev, struct mt7601u_dma_buf *buf) mt7601u_usb_free_buf() argument
56 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_usb_free_buf()
62 int mt7601u_usb_submit_buf(struct mt7601u_dev *dev, int dir, int ep_idx, mt7601u_usb_submit_buf() argument
66 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_usb_submit_buf()
71 pipe = usb_rcvbulkpipe(usb_dev, dev->in_eps[ep_idx]); mt7601u_usb_submit_buf()
73 pipe = usb_sndbulkpipe(usb_dev, dev->out_eps[ep_idx]); mt7601u_usb_submit_buf()
80 trace_mt_submit_urb(dev, buf->urb); mt7601u_usb_submit_buf()
83 dev_err(dev->dev, "Error: submit URB dir:%d ep:%d failed:%d\n", mt7601u_usb_submit_buf()
95 int mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, mt7601u_vendor_request() argument
100 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_vendor_request()
109 trace_mt_vend_req(dev, pipe, req, req_type, val, offset, mt7601u_vendor_request()
113 set_bit(MT7601U_STATE_REMOVED, &dev->state); mt7601u_vendor_request()
120 dev_err(dev->dev, "Vendor request req:%02x off:%04x failed:%d\n", mt7601u_vendor_request()
126 void mt7601u_vendor_reset(struct mt7601u_dev *dev) mt7601u_vendor_reset() argument
128 mt7601u_vendor_request(dev, MT_VEND_DEV_MODE, USB_DIR_OUT, mt7601u_vendor_reset()
132 u32 mt7601u_rr(struct mt7601u_dev *dev, u32 offset) mt7601u_rr() argument
139 mutex_lock(&dev->vendor_req_mutex); mt7601u_rr()
141 ret = mt7601u_vendor_request(dev, MT_VEND_MULTI_READ, USB_DIR_IN, mt7601u_rr()
142 0, offset, dev->vend_buf, MT_VEND_BUF); mt7601u_rr()
144 val = get_unaligned_le32(dev->vend_buf); mt7601u_rr()
146 dev_err(dev->dev, "Error: wrong size read:%d off:%08x\n", mt7601u_rr()
149 mutex_unlock(&dev->vendor_req_mutex); mt7601u_rr()
151 trace_reg_read(dev, offset, val); mt7601u_rr()
155 int mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req, mt7601u_vendor_single_wr() argument
160 mutex_lock(&dev->vendor_req_mutex); mt7601u_vendor_single_wr()
162 ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT, mt7601u_vendor_single_wr()
165 ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT, mt7601u_vendor_single_wr()
168 mutex_unlock(&dev->vendor_req_mutex); mt7601u_vendor_single_wr()
173 void mt7601u_wr(struct mt7601u_dev *dev, u32 offset, u32 val) mt7601u_wr() argument
177 mt7601u_vendor_single_wr(dev, MT_VEND_WRITE, offset, val); mt7601u_wr()
178 trace_reg_write(dev, offset, val); mt7601u_wr()
181 u32 mt7601u_rmw(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val) mt7601u_rmw() argument
183 val |= mt7601u_rr(dev, offset) & ~mask; mt7601u_rmw()
184 mt7601u_wr(dev, offset, val); mt7601u_rmw()
188 u32 mt7601u_rmc(struct mt7601u_dev *dev, u32 offset, u32 mask, u32 val) mt7601u_rmc() argument
190 u32 reg = mt7601u_rr(dev, offset); mt7601u_rmc()
194 mt7601u_wr(dev, offset, val); mt7601u_rmc()
198 void mt7601u_wr_copy(struct mt7601u_dev *dev, u32 offset, mt7601u_wr_copy() argument
204 mt7601u_burst_write_regs(dev, offset, data, len / 4); mt7601u_wr_copy()
207 void mt7601u_addr_wr(struct mt7601u_dev *dev, const u32 offset, const u8 *addr) mt7601u_addr_wr() argument
209 mt7601u_wr(dev, offset, get_unaligned_le32(addr)); mt7601u_addr_wr()
210 mt7601u_wr(dev, offset + 4, addr[4] | addr[5] << 8); mt7601u_addr_wr()
214 struct mt7601u_dev *dev) mt7601u_assign_pipes()
220 BUILD_BUG_ON(sizeof(dev->in_eps) < __MT_EP_IN_MAX); mt7601u_assign_pipes()
221 BUILD_BUG_ON(sizeof(dev->out_eps) < __MT_EP_OUT_MAX); mt7601u_assign_pipes()
228 dev->in_eps[ep_i - 1] = usb_endpoint_num(ep_desc); mt7601u_assign_pipes()
229 dev->in_max_packet = usb_endpoint_maxp(ep_desc); mt7601u_assign_pipes()
233 dev->in_eps[ep_i - 1] |= USB_DIR_IN; mt7601u_assign_pipes()
236 dev->out_eps[ep_o - 1] = usb_endpoint_num(ep_desc); mt7601u_assign_pipes()
237 dev->out_max_packet = usb_endpoint_maxp(ep_desc); mt7601u_assign_pipes()
242 dev_err(dev->dev, "Error: wrong pipe number in:%d out:%d\n", mt7601u_assign_pipes()
254 struct mt7601u_dev *dev; mt7601u_probe() local
258 dev = mt7601u_alloc_device(&usb_intf->dev); mt7601u_probe()
259 if (!dev) mt7601u_probe()
265 usb_set_intfdata(usb_intf, dev); mt7601u_probe()
267 dev->vend_buf = devm_kmalloc(dev->dev, MT_VEND_BUF, GFP_KERNEL); mt7601u_probe()
268 if (!dev->vend_buf) { mt7601u_probe()
273 ret = mt7601u_assign_pipes(usb_intf, dev); mt7601u_probe()
276 ret = mt7601u_wait_asic_ready(dev); mt7601u_probe()
280 asic_rev = mt7601u_rr(dev, MT_ASIC_VERSION); mt7601u_probe()
281 mac_rev = mt7601u_rr(dev, MT_MAC_CSR0); mt7601u_probe()
282 dev_info(dev->dev, "ASIC revision: %08x MAC revision: %08x\n", mt7601u_probe()
286 if (!(mt7601u_rr(dev, MT_EFUSE_CTRL) & MT_EFUSE_CTRL_SEL)) mt7601u_probe()
287 dev_warn(dev->dev, "Warning: eFUSE not present\n"); mt7601u_probe()
289 ret = mt7601u_init_hardware(dev); mt7601u_probe()
292 ret = mt7601u_register_device(dev); mt7601u_probe()
296 set_bit(MT7601U_STATE_INITIALIZED, &dev->state); mt7601u_probe()
300 mt7601u_cleanup(dev); mt7601u_probe()
305 destroy_workqueue(dev->stat_wq); mt7601u_probe()
306 ieee80211_free_hw(dev->hw); mt7601u_probe()
312 struct mt7601u_dev *dev = usb_get_intfdata(usb_intf); mt7601u_disconnect() local
314 ieee80211_unregister_hw(dev->hw); mt7601u_disconnect()
315 mt7601u_cleanup(dev); mt7601u_disconnect()
320 destroy_workqueue(dev->stat_wq); mt7601u_disconnect()
321 ieee80211_free_hw(dev->hw); mt7601u_disconnect()
326 struct mt7601u_dev *dev = usb_get_intfdata(usb_intf); mt7601u_suspend() local
328 mt7601u_cleanup(dev); mt7601u_suspend()
335 struct mt7601u_dev *dev = usb_get_intfdata(usb_intf); mt7601u_resume() local
338 ret = mt7601u_init_hardware(dev); mt7601u_resume()
342 set_bit(MT7601U_STATE_INITIALIZED, &dev->state); mt7601u_resume()
213 mt7601u_assign_pipes(struct usb_interface *usb_intf, struct mt7601u_dev *dev) mt7601u_assign_pipes() argument
H A Dmcu.c32 static inline int firmware_running(struct mt7601u_dev *dev) firmware_running() argument
34 return mt7601u_rr(dev, MT_MCU_COM_REG0) == 1; firmware_running()
50 static inline void trace_mt_mcu_msg_send_cs(struct mt7601u_dev *dev, trace_mt_mcu_msg_send_cs() argument
58 trace_mt_mcu_msg_send(dev, skb, csum, need_resp); trace_mt_mcu_msg_send_cs()
62 mt7601u_mcu_msg_alloc(struct mt7601u_dev *dev, const void *data, int len) mt7601u_mcu_msg_alloc() argument
75 static int mt7601u_mcu_wait_resp(struct mt7601u_dev *dev, u8 seq) mt7601u_mcu_wait_resp() argument
77 struct urb *urb = dev->mcu.resp.urb; mt7601u_mcu_wait_resp()
82 if (!wait_for_completion_timeout(&dev->mcu.resp_cmpl, mt7601u_mcu_wait_resp()
84 dev_warn(dev->dev, "Warning: %s retrying\n", __func__); mt7601u_mcu_wait_resp()
89 rxfce = get_unaligned_le32(dev->mcu.resp.buf); mt7601u_mcu_wait_resp()
92 ret = mt7601u_usb_submit_buf(dev, USB_DIR_IN, MT_EP_IN_CMD_RESP, mt7601u_mcu_wait_resp()
93 &dev->mcu.resp, GFP_KERNEL, mt7601u_mcu_wait_resp()
95 &dev->mcu.resp_cmpl); mt7601u_mcu_wait_resp()
100 dev_err(dev->dev, "Error: MCU resp urb failed:%d\n", mt7601u_mcu_wait_resp()
107 dev_err(dev->dev, "Error: MCU resp evt:%hhx seq:%hhx-%hhx!\n", mt7601u_mcu_wait_resp()
112 dev_err(dev->dev, "Error: %s timed out\n", __func__); mt7601u_mcu_wait_resp()
117 mt7601u_mcu_msg_send(struct mt7601u_dev *dev, struct sk_buff *skb, mt7601u_mcu_msg_send() argument
120 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); mt7601u_mcu_msg_send()
122 dev->out_eps[MT_EP_OUT_INBAND_CMD]); mt7601u_mcu_msg_send()
126 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) mt7601u_mcu_msg_send()
129 mutex_lock(&dev->mcu.mutex); mt7601u_mcu_msg_send()
133 seq = ++dev->mcu.msg_seq & 0xf; mt7601u_mcu_msg_send()
137 if (dev->mcu.resp_cmpl.done) mt7601u_mcu_msg_send()
138 dev_err(dev->dev, "Error: MCU response pre-completed!\n"); mt7601u_mcu_msg_send()
140 trace_mt_mcu_msg_send_cs(dev, skb, wait_resp); mt7601u_mcu_msg_send()
141 trace_mt_submit_urb_sync(dev, cmd_pipe, skb->len); mt7601u_mcu_msg_send()
144 dev_err(dev->dev, "Error: send MCU cmd failed:%d\n", ret); mt7601u_mcu_msg_send()
148 dev_err(dev->dev, "Error: %s sent != skb->len\n", __func__); mt7601u_mcu_msg_send()
151 ret = mt7601u_mcu_wait_resp(dev, seq); mt7601u_mcu_msg_send()
153 mutex_unlock(&dev->mcu.mutex); mt7601u_mcu_msg_send()
160 static int mt7601u_mcu_function_select(struct mt7601u_dev *dev, mt7601u_mcu_function_select() argument
172 skb = mt7601u_mcu_msg_alloc(dev, &msg, sizeof(msg)); mt7601u_mcu_function_select()
173 return mt7601u_mcu_msg_send(dev, skb, CMD_FUN_SET_OP, func == 5); mt7601u_mcu_function_select()
176 int mt7601u_mcu_tssi_read_kick(struct mt7601u_dev *dev, int use_hvga) mt7601u_mcu_tssi_read_kick() argument
180 if (!test_bit(MT7601U_STATE_MCU_RUNNING, &dev->state)) mt7601u_mcu_tssi_read_kick()
183 ret = mt7601u_mcu_function_select(dev, ATOMIC_TSSI_SETTING, mt7601u_mcu_tssi_read_kick()
186 dev_warn(dev->dev, "Warning: MCU TSSI read kick failed\n"); mt7601u_mcu_tssi_read_kick()
190 dev->tssi_read_trig = true; mt7601u_mcu_tssi_read_kick()
196 mt7601u_mcu_calibrate(struct mt7601u_dev *dev, enum mcu_calibrate cal, u32 val) mt7601u_mcu_calibrate() argument
207 skb = mt7601u_mcu_msg_alloc(dev, &msg, sizeof(msg)); mt7601u_mcu_calibrate()
208 return mt7601u_mcu_msg_send(dev, skb, CMD_CALIBRATION_OP, true); mt7601u_mcu_calibrate()
211 int mt7601u_write_reg_pairs(struct mt7601u_dev *dev, u32 base, mt7601u_write_reg_pairs() argument
233 ret = mt7601u_mcu_msg_send(dev, skb, CMD_RANDOM_WRITE, cnt == n); mt7601u_write_reg_pairs()
237 return mt7601u_write_reg_pairs(dev, base, data + cnt, n - cnt); mt7601u_write_reg_pairs()
240 int mt7601u_burst_write_regs(struct mt7601u_dev *dev, u32 offset, mt7601u_burst_write_regs() argument
261 ret = mt7601u_mcu_msg_send(dev, skb, CMD_BURST_WRITE, cnt == n); mt7601u_burst_write_regs()
265 return mt7601u_burst_write_regs(dev, offset + cnt * 4, mt7601u_burst_write_regs()
284 static int __mt7601u_dma_fw(struct mt7601u_dev *dev, __mt7601u_dma_fw() argument
301 ret = mt7601u_vendor_single_wr(dev, MT_VEND_WRITE_FCE, __mt7601u_dma_fw()
306 ret = mt7601u_vendor_single_wr(dev, MT_VEND_WRITE_FCE, __mt7601u_dma_fw()
312 ret = mt7601u_usb_submit_buf(dev, USB_DIR_OUT, MT_EP_OUT_INBAND_CMD, __mt7601u_dma_fw()
319 dev_err(dev->dev, "Error: firmware upload timed out\n"); __mt7601u_dma_fw()
324 dev_err(dev->dev, "Error: firmware upload urb failed:%d\n", __mt7601u_dma_fw()
329 val = mt7601u_rr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX); __mt7601u_dma_fw()
331 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX, val); __mt7601u_dma_fw()
337 mt7601u_dma_fw(struct mt7601u_dev *dev, struct mt7601u_dma_buf *dma_buf, mt7601u_dma_fw() argument
346 ret = __mt7601u_dma_fw(dev, dma_buf, data, n, dst_addr); mt7601u_dma_fw()
350 if (!mt76_poll_msec(dev, MT_MCU_COM_REG1, BIT(31), BIT(31), 500)) mt7601u_dma_fw()
353 return mt7601u_dma_fw(dev, dma_buf, data + n, len - n, dst_addr + n); mt7601u_dma_fw()
357 mt7601u_upload_firmware(struct mt7601u_dev *dev, const struct mt76_fw *fw) mt7601u_upload_firmware() argument
365 if (!ivb || mt7601u_usb_alloc_buf(dev, MCU_FW_URB_SIZE, &dma_buf)) { mt7601u_upload_firmware()
371 dev_dbg(dev->dev, "loading FW - ILM %u + IVB %zu\n", mt7601u_upload_firmware()
373 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm, ilm_len, sizeof(fw->ivb)); mt7601u_upload_firmware()
378 dev_dbg(dev->dev, "loading FW - DLM %u\n", dlm_len); mt7601u_upload_firmware()
379 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm + ilm_len, mt7601u_upload_firmware()
384 ret = mt7601u_vendor_request(dev, MT_VEND_DEV_MODE, USB_DIR_OUT, mt7601u_upload_firmware()
390 for (i = 100; i && !firmware_running(dev); i--) mt7601u_upload_firmware()
397 dev_dbg(dev->dev, "Firmware running!\n"); mt7601u_upload_firmware()
400 mt7601u_usb_free_buf(dev, &dma_buf); mt7601u_upload_firmware()
405 static int mt7601u_load_firmware(struct mt7601u_dev *dev) mt7601u_load_firmware() argument
412 mt7601u_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN | mt7601u_load_firmware()
415 if (firmware_running(dev)) mt7601u_load_firmware()
418 ret = request_firmware(&fw, MT7601U_FIRMWARE, dev->dev); mt7601u_load_firmware()
438 dev_info(dev->dev, mt7601u_load_firmware()
445 mt7601u_wr(dev, 0x94c, 0); mt7601u_load_firmware()
446 mt7601u_wr(dev, MT_FCE_PSE_CTRL, 0); mt7601u_load_firmware()
448 mt7601u_vendor_reset(dev); mt7601u_load_firmware()
451 mt7601u_wr(dev, 0xa44, 0); mt7601u_load_firmware()
452 mt7601u_wr(dev, 0x230, 0x84210); mt7601u_load_firmware()
453 mt7601u_wr(dev, 0x400, 0x80c00); mt7601u_load_firmware()
454 mt7601u_wr(dev, 0x800, 1); mt7601u_load_firmware()
456 mt7601u_rmw(dev, MT_PBF_CFG, 0, (MT_PBF_CFG_TX0Q_EN | mt7601u_load_firmware()
461 mt7601u_wr(dev, MT_FCE_PSE_CTRL, 1); mt7601u_load_firmware()
463 mt7601u_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN | mt7601u_load_firmware()
465 val = mt76_set(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_CLR); mt7601u_load_firmware()
467 mt7601u_wr(dev, MT_USB_DMA_CFG, val); mt7601u_load_firmware()
470 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_BASE_PTR, 0x400230); mt7601u_load_firmware()
472 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_MAX_COUNT, 1); mt7601u_load_firmware()
474 mt7601u_wr(dev, MT_FCE_PDMA_GLOBAL_CONF, 0x44); mt7601u_load_firmware()
476 mt7601u_wr(dev, MT_FCE_SKIP_FS, 3); mt7601u_load_firmware()
478 ret = mt7601u_upload_firmware(dev, (const struct mt76_fw *)fw->data); mt7601u_load_firmware()
485 dev_err(dev->dev, "Invalid firmware image\n"); mt7601u_load_firmware()
490 int mt7601u_mcu_init(struct mt7601u_dev *dev) mt7601u_mcu_init() argument
494 mutex_init(&dev->mcu.mutex); mt7601u_mcu_init()
496 ret = mt7601u_load_firmware(dev); mt7601u_mcu_init()
500 set_bit(MT7601U_STATE_MCU_RUNNING, &dev->state); mt7601u_mcu_init()
505 int mt7601u_mcu_cmd_init(struct mt7601u_dev *dev) mt7601u_mcu_cmd_init() argument
509 ret = mt7601u_mcu_function_select(dev, Q_SELECT, 1); mt7601u_mcu_cmd_init()
513 init_completion(&dev->mcu.resp_cmpl); mt7601u_mcu_cmd_init()
514 if (mt7601u_usb_alloc_buf(dev, MCU_RESP_URB_SIZE, &dev->mcu.resp)) { mt7601u_mcu_cmd_init()
515 mt7601u_usb_free_buf(dev, &dev->mcu.resp); mt7601u_mcu_cmd_init()
519 ret = mt7601u_usb_submit_buf(dev, USB_DIR_IN, MT_EP_IN_CMD_RESP, mt7601u_mcu_cmd_init()
520 &dev->mcu.resp, GFP_KERNEL, mt7601u_mcu_cmd_init()
521 mt7601u_complete_urb, &dev->mcu.resp_cmpl); mt7601u_mcu_cmd_init()
523 mt7601u_usb_free_buf(dev, &dev->mcu.resp); mt7601u_mcu_cmd_init()
530 void mt7601u_mcu_cmd_deinit(struct mt7601u_dev *dev) mt7601u_mcu_cmd_deinit() argument
532 usb_kill_urb(dev->mcu.resp.urb); mt7601u_mcu_cmd_deinit()
533 mt7601u_usb_free_buf(dev, &dev->mcu.resp); mt7601u_mcu_cmd_deinit()
/linux-4.4.14/drivers/base/
H A Dpinctrl.c20 * @dev: the device that is just about to probe
22 int pinctrl_bind_pins(struct device *dev) pinctrl_bind_pins() argument
26 dev->pins = devm_kzalloc(dev, sizeof(*(dev->pins)), GFP_KERNEL); pinctrl_bind_pins()
27 if (!dev->pins) pinctrl_bind_pins()
30 dev->pins->p = devm_pinctrl_get(dev); pinctrl_bind_pins()
31 if (IS_ERR(dev->pins->p)) { pinctrl_bind_pins()
32 dev_dbg(dev, "no pinctrl handle\n"); pinctrl_bind_pins()
33 ret = PTR_ERR(dev->pins->p); pinctrl_bind_pins()
37 dev->pins->default_state = pinctrl_lookup_state(dev->pins->p, pinctrl_bind_pins()
39 if (IS_ERR(dev->pins->default_state)) { pinctrl_bind_pins()
40 dev_dbg(dev, "no default pinctrl state\n"); pinctrl_bind_pins()
45 dev->pins->init_state = pinctrl_lookup_state(dev->pins->p, pinctrl_bind_pins()
47 if (IS_ERR(dev->pins->init_state)) { pinctrl_bind_pins()
49 dev_dbg(dev, "no init pinctrl state\n"); pinctrl_bind_pins()
51 ret = pinctrl_select_state(dev->pins->p, pinctrl_bind_pins()
52 dev->pins->default_state); pinctrl_bind_pins()
54 ret = pinctrl_select_state(dev->pins->p, dev->pins->init_state); pinctrl_bind_pins()
58 dev_dbg(dev, "failed to activate initial pinctrl state\n"); pinctrl_bind_pins()
68 dev->pins->sleep_state = pinctrl_lookup_state(dev->pins->p, pinctrl_bind_pins()
70 if (IS_ERR(dev->pins->sleep_state)) pinctrl_bind_pins()
72 dev_dbg(dev, "no sleep pinctrl state\n"); pinctrl_bind_pins()
74 dev->pins->idle_state = pinctrl_lookup_state(dev->pins->p, pinctrl_bind_pins()
76 if (IS_ERR(dev->pins->idle_state)) pinctrl_bind_pins()
78 dev_dbg(dev, "no idle pinctrl state\n"); pinctrl_bind_pins()
89 devm_pinctrl_put(dev->pins->p); pinctrl_bind_pins()
91 devm_kfree(dev, dev->pins); pinctrl_bind_pins()
92 dev->pins = NULL; pinctrl_bind_pins()
H A Disa.c18 struct device dev; member in struct:isa_dev
23 #define to_isa_dev(x) container_of((x), struct isa_dev, dev)
25 static int isa_bus_match(struct device *dev, struct device_driver *driver) isa_bus_match() argument
29 if (dev->platform_data == isa_driver) { isa_bus_match()
31 isa_driver->match(dev, to_isa_dev(dev)->id)) isa_bus_match()
33 dev->platform_data = NULL; isa_bus_match()
38 static int isa_bus_probe(struct device *dev) isa_bus_probe() argument
40 struct isa_driver *isa_driver = dev->platform_data; isa_bus_probe()
43 return isa_driver->probe(dev, to_isa_dev(dev)->id); isa_bus_probe()
48 static int isa_bus_remove(struct device *dev) isa_bus_remove() argument
50 struct isa_driver *isa_driver = dev->platform_data; isa_bus_remove()
53 return isa_driver->remove(dev, to_isa_dev(dev)->id); isa_bus_remove()
58 static void isa_bus_shutdown(struct device *dev) isa_bus_shutdown() argument
60 struct isa_driver *isa_driver = dev->platform_data; isa_bus_shutdown()
63 isa_driver->shutdown(dev, to_isa_dev(dev)->id); isa_bus_shutdown()
66 static int isa_bus_suspend(struct device *dev, pm_message_t state) isa_bus_suspend() argument
68 struct isa_driver *isa_driver = dev->platform_data; isa_bus_suspend()
71 return isa_driver->suspend(dev, to_isa_dev(dev)->id, state); isa_bus_suspend()
76 static int isa_bus_resume(struct device *dev) isa_bus_resume() argument
78 struct isa_driver *isa_driver = dev->platform_data; isa_bus_resume()
81 return isa_driver->resume(dev, to_isa_dev(dev)->id); isa_bus_resume()
96 static void isa_dev_release(struct device *dev) isa_dev_release() argument
98 kfree(to_isa_dev(dev)); isa_dev_release()
103 struct device *dev = isa_driver->devices; isa_unregister_driver() local
105 while (dev) { isa_unregister_driver()
106 struct device *tmp = to_isa_dev(dev)->next; isa_unregister_driver()
107 device_unregister(dev); isa_unregister_driver()
108 dev = tmp; isa_unregister_driver()
135 isa_dev->dev.parent = &isa_bus; isa_register_driver()
136 isa_dev->dev.bus = &isa_bus_type; isa_register_driver()
138 dev_set_name(&isa_dev->dev, "%s.%u", isa_register_driver()
140 isa_dev->dev.platform_data = isa_driver; isa_register_driver()
141 isa_dev->dev.release = isa_dev_release; isa_register_driver()
144 isa_dev->dev.coherent_dma_mask = DMA_BIT_MASK(24); isa_register_driver()
145 isa_dev->dev.dma_mask = &isa_dev->dev.coherent_dma_mask; isa_register_driver()
147 error = device_register(&isa_dev->dev); isa_register_driver()
149 put_device(&isa_dev->dev); isa_register_driver()
153 if (isa_dev->dev.platform_data) { isa_register_driver()
155 isa_driver->devices = &isa_dev->dev; isa_register_driver()
157 device_unregister(&isa_dev->dev); isa_register_driver()
H A Dcore.c47 int (*platform_notify)(struct device *dev) = NULL;
48 int (*platform_notify_remove)(struct device *dev) = NULL;
76 static inline int device_is_not_partition(struct device *dev) device_is_not_partition() argument
78 return !(dev->type == &part_type); device_is_not_partition()
81 static inline int device_is_not_partition(struct device *dev) device_is_not_partition() argument
89 * @dev: struct device to get the name of
96 const char *dev_driver_string(const struct device *dev) dev_driver_string() argument
100 /* dev->driver can change to NULL underneath us because of unbinding, dev_driver_string()
101 * so be careful about accessing it. dev->bus and dev->class should dev_driver_string()
104 drv = ACCESS_ONCE(dev->driver); dev_driver_string()
106 (dev->bus ? dev->bus->name : dev_driver_string()
107 (dev->class ? dev->class->name : "")); dev_driver_string()
117 struct device *dev = kobj_to_dev(kobj); dev_attr_show() local
121 ret = dev_attr->show(dev, dev_attr, buf); dev_attr_show()
133 struct device *dev = kobj_to_dev(kobj); dev_attr_store() local
137 ret = dev_attr->store(dev, dev_attr, buf, count); dev_attr_store()
148 ssize_t device_store_ulong(struct device *dev, device_store_ulong() argument
163 ssize_t device_show_ulong(struct device *dev, device_show_ulong() argument
172 ssize_t device_store_int(struct device *dev, device_store_int() argument
187 ssize_t device_show_int(struct device *dev, device_show_int() argument
197 ssize_t device_store_bool(struct device *dev, struct device_attribute *attr, device_store_bool() argument
209 ssize_t device_show_bool(struct device *dev, struct device_attribute *attr, device_show_bool() argument
228 struct device *dev = kobj_to_dev(kobj); device_release() local
229 struct device_private *p = dev->p; device_release()
240 devres_release_all(dev); device_release()
242 if (dev->release) device_release()
243 dev->release(dev); device_release()
244 else if (dev->type && dev->type->release) device_release()
245 dev->type->release(dev); device_release()
246 else if (dev->class && dev->class->dev_release) device_release()
247 dev->class->dev_release(dev); device_release()
251 dev_name(dev)); device_release()
257 struct device *dev = kobj_to_dev(kobj); device_namespace() local
260 if (dev->class && dev->class->ns_type) device_namespace()
261 ns = dev->class->namespace(dev); device_namespace()
278 struct device *dev = kobj_to_dev(kobj); dev_uevent_filter() local
279 if (dev->bus) dev_uevent_filter()
281 if (dev->class) dev_uevent_filter()
289 struct device *dev = kobj_to_dev(kobj); dev_uevent_name() local
291 if (dev->bus) dev_uevent_name()
292 return dev->bus->name; dev_uevent_name()
293 if (dev->class) dev_uevent_name()
294 return dev->class->name; dev_uevent_name()
301 struct device *dev = kobj_to_dev(kobj); dev_uevent() local
305 if (MAJOR(dev->devt)) { dev_uevent()
312 add_uevent_var(env, "MAJOR=%u", MAJOR(dev->devt)); dev_uevent()
313 add_uevent_var(env, "MINOR=%u", MINOR(dev->devt)); dev_uevent()
314 name = device_get_devnode(dev, &mode, &uid, &gid, &tmp); dev_uevent()
327 if (dev->type && dev->type->name) dev_uevent()
328 add_uevent_var(env, "DEVTYPE=%s", dev->type->name); dev_uevent()
330 if (dev->driver) dev_uevent()
331 add_uevent_var(env, "DRIVER=%s", dev->driver->name); dev_uevent()
334 of_device_uevent(dev, env); dev_uevent()
337 if (dev->bus && dev->bus->uevent) { dev_uevent()
338 retval = dev->bus->uevent(dev, env); dev_uevent()
341 dev_name(dev), __func__, retval); dev_uevent()
345 if (dev->class && dev->class->dev_uevent) { dev_uevent()
346 retval = dev->class->dev_uevent(dev, env); dev_uevent()
349 "returned %d\n", dev_name(dev), dev_uevent()
354 if (dev->type && dev->type->uevent) { dev_uevent()
355 retval = dev->type->uevent(dev, env); dev_uevent()
358 "returned %d\n", dev_name(dev), dev_uevent()
371 static ssize_t uevent_show(struct device *dev, struct device_attribute *attr, uevent_show() argument
382 top_kobj = &dev->kobj; uevent_show()
394 if (!kset->uevent_ops->filter(kset, &dev->kobj)) uevent_show()
402 retval = kset->uevent_ops->uevent(kset, &dev->kobj, env); uevent_show()
414 static ssize_t uevent_store(struct device *dev, struct device_attribute *attr, uevent_store() argument
420 kobject_uevent(&dev->kobj, action); uevent_store()
422 dev_err(dev, "uevent: unknown action-string\n"); uevent_store()
427 static ssize_t online_show(struct device *dev, struct device_attribute *attr, online_show() argument
432 device_lock(dev); online_show()
433 val = !dev->offline; online_show()
434 device_unlock(dev); online_show()
438 static ssize_t online_store(struct device *dev, struct device_attribute *attr, online_store() argument
452 ret = val ? device_online(dev) : device_offline(dev); online_store()
458 int device_add_groups(struct device *dev, const struct attribute_group **groups) device_add_groups() argument
460 return sysfs_create_groups(&dev->kobj, groups); device_add_groups()
463 void device_remove_groups(struct device *dev, device_remove_groups() argument
466 sysfs_remove_groups(&dev->kobj, groups); device_remove_groups()
469 static int device_add_attrs(struct device *dev) device_add_attrs() argument
471 struct class *class = dev->class; device_add_attrs()
472 const struct device_type *type = dev->type; device_add_attrs()
476 error = device_add_groups(dev, class->dev_groups); device_add_attrs()
482 error = device_add_groups(dev, type->groups); device_add_attrs()
487 error = device_add_groups(dev, dev->groups); device_add_attrs()
491 if (device_supports_offline(dev) && !dev->offline_disabled) { device_add_attrs()
492 error = device_create_file(dev, &dev_attr_online); device_add_attrs()
500 device_remove_groups(dev, dev->groups); device_add_attrs()
503 device_remove_groups(dev, type->groups); device_add_attrs()
506 device_remove_groups(dev, class->dev_groups); device_add_attrs()
511 static void device_remove_attrs(struct device *dev) device_remove_attrs() argument
513 struct class *class = dev->class; device_remove_attrs()
514 const struct device_type *type = dev->type; device_remove_attrs()
516 device_remove_file(dev, &dev_attr_online); device_remove_attrs()
517 device_remove_groups(dev, dev->groups); device_remove_attrs()
520 device_remove_groups(dev, type->groups); device_remove_attrs()
523 device_remove_groups(dev, class->dev_groups); device_remove_attrs()
526 static ssize_t dev_show(struct device *dev, struct device_attribute *attr, dev_show() argument
529 return print_dev_t(buf, dev->devt); dev_show()
531 static DEVICE_ATTR_RO(dev);
570 * @dev: device to move
572 void devices_kset_move_last(struct device *dev) devices_kset_move_last() argument
576 pr_debug("devices_kset: Moving %s to end of list\n", dev_name(dev)); devices_kset_move_last()
578 list_move_tail(&dev->kobj.entry, &devices_kset->list); devices_kset_move_last()
584 * @dev: device.
587 int device_create_file(struct device *dev, device_create_file() argument
592 if (dev) { device_create_file()
599 error = sysfs_create_file(&dev->kobj, &attr->attr); device_create_file()
608 * @dev: device.
611 void device_remove_file(struct device *dev, device_remove_file() argument
614 if (dev) device_remove_file()
615 sysfs_remove_file(&dev->kobj, &attr->attr); device_remove_file()
621 * @dev: device.
626 bool device_remove_file_self(struct device *dev, device_remove_file_self() argument
629 if (dev) device_remove_file_self()
630 return sysfs_remove_file_self(&dev->kobj, &attr->attr); device_remove_file_self()
638 * @dev: device.
641 int device_create_bin_file(struct device *dev, device_create_bin_file() argument
645 if (dev) device_create_bin_file()
646 error = sysfs_create_bin_file(&dev->kobj, attr); device_create_bin_file()
653 * @dev: device.
656 void device_remove_bin_file(struct device *dev, device_remove_bin_file() argument
659 if (dev) device_remove_bin_file()
660 sysfs_remove_bin_file(&dev->kobj, attr); device_remove_bin_file()
667 struct device *dev = p->device; klist_children_get() local
669 get_device(dev); klist_children_get()
675 struct device *dev = p->device; klist_children_put() local
677 put_device(dev); klist_children_put()
682 * @dev: device.
688 * may use @dev's fields. In particular, get_device()/put_device()
689 * may be used for reference counting of @dev after calling this
692 * All fields in @dev must be initialized by the caller to 0, except
695 * @dev.
698 * @dev directly once you have called this function.
700 void device_initialize(struct device *dev) device_initialize() argument
702 dev->kobj.kset = devices_kset; device_initialize()
703 kobject_init(&dev->kobj, &device_ktype); device_initialize()
704 INIT_LIST_HEAD(&dev->dma_pools); device_initialize()
705 mutex_init(&dev->mutex); device_initialize()
706 lockdep_set_novalidate_class(&dev->mutex); device_initialize()
707 spin_lock_init(&dev->devres_lock); device_initialize()
708 INIT_LIST_HEAD(&dev->devres_head); device_initialize()
709 device_pm_init(dev); device_initialize()
710 set_dev_node(dev, -1); device_initialize()
712 INIT_LIST_HEAD(&dev->msi_list); device_initialize()
717 struct kobject *virtual_device_parent(struct device *dev) virtual_device_parent() argument
779 static struct kobject *get_device_parent(struct device *dev, get_device_parent() argument
782 if (dev->class) { get_device_parent()
789 if (sysfs_deprecated && dev->class == &block_class) { get_device_parent()
802 parent_kobj = virtual_device_parent(dev); get_device_parent()
803 else if (parent->class && !dev->class->ns_type) get_device_parent()
811 spin_lock(&dev->class->p->glue_dirs.list_lock); get_device_parent()
812 list_for_each_entry(k, &dev->class->p->glue_dirs.list, entry) get_device_parent()
817 spin_unlock(&dev->class->p->glue_dirs.list_lock); get_device_parent()
824 k = class_dir_create_and_add(dev->class, parent_kobj); get_device_parent()
831 if (!parent && dev->bus && dev->bus->dev_root) get_device_parent()
832 return &dev->bus->dev_root->kobj; get_device_parent()
839 static void cleanup_glue_dir(struct device *dev, struct kobject *glue_dir) cleanup_glue_dir() argument
842 if (!glue_dir || !dev->class || cleanup_glue_dir()
843 glue_dir->kset != &dev->class->p->glue_dirs) cleanup_glue_dir()
851 static void cleanup_device_parent(struct device *dev) cleanup_device_parent() argument
853 cleanup_glue_dir(dev, dev->kobj.parent); cleanup_device_parent()
856 static int device_add_class_symlinks(struct device *dev) device_add_class_symlinks() argument
858 struct device_node *of_node = dev_of_node(dev); device_add_class_symlinks()
862 error = sysfs_create_link(&dev->kobj, &of_node->kobj,"of_node"); device_add_class_symlinks()
864 dev_warn(dev, "Error %d creating of_node link\n",error); device_add_class_symlinks()
868 if (!dev->class) device_add_class_symlinks()
871 error = sysfs_create_link(&dev->kobj, device_add_class_symlinks()
872 &dev->class->p->subsys.kobj, device_add_class_symlinks()
877 if (dev->parent && device_is_not_partition(dev)) { device_add_class_symlinks()
878 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj, device_add_class_symlinks()
886 if (sysfs_deprecated && dev->class == &block_class) device_add_class_symlinks()
891 error = sysfs_create_link(&dev->class->p->subsys.kobj, device_add_class_symlinks()
892 &dev->kobj, dev_name(dev)); device_add_class_symlinks()
899 sysfs_remove_link(&dev->kobj, "device"); device_add_class_symlinks()
902 sysfs_remove_link(&dev->kobj, "subsystem"); device_add_class_symlinks()
904 sysfs_remove_link(&dev->kobj, "of_node"); device_add_class_symlinks()
908 static void device_remove_class_symlinks(struct device *dev) device_remove_class_symlinks() argument
910 if (dev_of_node(dev)) device_remove_class_symlinks()
911 sysfs_remove_link(&dev->kobj, "of_node"); device_remove_class_symlinks()
913 if (!dev->class) device_remove_class_symlinks()
916 if (dev->parent && device_is_not_partition(dev)) device_remove_class_symlinks()
917 sysfs_remove_link(&dev->kobj, "device"); device_remove_class_symlinks()
918 sysfs_remove_link(&dev->kobj, "subsystem"); device_remove_class_symlinks()
920 if (sysfs_deprecated && dev->class == &block_class) device_remove_class_symlinks()
923 sysfs_delete_link(&dev->class->p->subsys.kobj, &dev->kobj, dev_name(dev)); device_remove_class_symlinks()
928 * @dev: device
931 int dev_set_name(struct device *dev, const char *fmt, ...) dev_set_name() argument
937 err = kobject_set_name_vargs(&dev->kobj, fmt, vargs); dev_set_name()
944 * device_to_dev_kobj - select a /sys/dev/ directory for the device
945 * @dev: device
954 static struct kobject *device_to_dev_kobj(struct device *dev) device_to_dev_kobj() argument
958 if (dev->class) device_to_dev_kobj()
959 kobj = dev->class->dev_kobj; device_to_dev_kobj()
966 static int device_create_sys_dev_entry(struct device *dev) device_create_sys_dev_entry() argument
968 struct kobject *kobj = device_to_dev_kobj(dev); device_create_sys_dev_entry()
973 format_dev_t(devt_str, dev->devt); device_create_sys_dev_entry()
974 error = sysfs_create_link(kobj, &dev->kobj, devt_str); device_create_sys_dev_entry()
980 static void device_remove_sys_dev_entry(struct device *dev) device_remove_sys_dev_entry() argument
982 struct kobject *kobj = device_to_dev_kobj(dev); device_remove_sys_dev_entry()
986 format_dev_t(devt_str, dev->devt); device_remove_sys_dev_entry()
991 int device_private_init(struct device *dev) device_private_init() argument
993 dev->p = kzalloc(sizeof(*dev->p), GFP_KERNEL); device_private_init()
994 if (!dev->p) device_private_init()
996 dev->p->device = dev; device_private_init()
997 klist_init(&dev->p->klist_children, klist_children_get, device_private_init()
999 INIT_LIST_HEAD(&dev->p->deferred_probe); device_private_init()
1005 * @dev: device.
1010 * This adds @dev to the kobject hierarchy via kobject_add(), adds it
1018 * to the previous incarnation of @dev have been dropped.) Allocate
1021 * NOTE: _Never_ directly free @dev after calling this function, even
1025 int device_add(struct device *dev) device_add() argument
1032 dev = get_device(dev); device_add()
1033 if (!dev) device_add()
1036 if (!dev->p) { device_add()
1037 error = device_private_init(dev); device_add()
1047 if (dev->init_name) { device_add()
1048 dev_set_name(dev, "%s", dev->init_name); device_add()
1049 dev->init_name = NULL; device_add()
1053 if (!dev_name(dev) && dev->bus && dev->bus->dev_name) device_add()
1054 dev_set_name(dev, "%s%u", dev->bus->dev_name, dev->id); device_add()
1056 if (!dev_name(dev)) { device_add()
1061 pr_debug("device: '%s': %s\n", dev_name(dev), __func__); device_add()
1063 parent = get_device(dev->parent); device_add()
1064 kobj = get_device_parent(dev, parent); device_add()
1066 dev->kobj.parent = kobj; device_add()
1069 if (parent && (dev_to_node(dev) == NUMA_NO_NODE)) device_add()
1070 set_dev_node(dev, dev_to_node(parent)); device_add()
1074 error = kobject_add(&dev->kobj, dev->kobj.parent, NULL); device_add()
1080 platform_notify(dev); device_add()
1082 error = device_create_file(dev, &dev_attr_uevent); device_add()
1086 error = device_add_class_symlinks(dev); device_add()
1089 error = device_add_attrs(dev); device_add()
1092 error = bus_add_device(dev); device_add()
1095 error = dpm_sysfs_add(dev); device_add()
1098 device_pm_add(dev); device_add()
1100 if (MAJOR(dev->devt)) { device_add()
1101 error = device_create_file(dev, &dev_attr_dev); device_add()
1105 error = device_create_sys_dev_entry(dev); device_add()
1109 devtmpfs_create_node(dev); device_add()
1115 if (dev->bus) device_add()
1116 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, device_add()
1117 BUS_NOTIFY_ADD_DEVICE, dev); device_add()
1119 kobject_uevent(&dev->kobj, KOBJ_ADD); device_add()
1120 bus_probe_device(dev); device_add()
1122 klist_add_tail(&dev->p->knode_parent, device_add()
1125 if (dev->class) { device_add()
1126 mutex_lock(&dev->class->p->mutex); device_add()
1128 klist_add_tail(&dev->knode_class, device_add()
1129 &dev->class->p->klist_devices); device_add()
1133 &dev->class->p->interfaces, node) device_add()
1135 class_intf->add_dev(dev, class_intf); device_add()
1136 mutex_unlock(&dev->class->p->mutex); device_add()
1139 put_device(dev); device_add()
1142 if (MAJOR(dev->devt)) device_add()
1143 device_remove_file(dev, &dev_attr_dev); device_add()
1145 device_pm_remove(dev); device_add()
1146 dpm_sysfs_remove(dev); device_add()
1148 bus_remove_device(dev); device_add()
1150 device_remove_attrs(dev); device_add()
1152 device_remove_class_symlinks(dev); device_add()
1154 device_remove_file(dev, &dev_attr_uevent); device_add()
1156 kobject_uevent(&dev->kobj, KOBJ_REMOVE); device_add()
1157 kobject_del(&dev->kobj); device_add()
1159 cleanup_device_parent(dev); device_add()
1162 kfree(dev->p); device_add()
1163 dev->p = NULL; device_add()
1170 * @dev: pointer to the device structure
1182 * NOTE: _Never_ directly free @dev after calling this function, even
1186 int device_register(struct device *dev) device_register() argument
1188 device_initialize(dev); device_register()
1189 return device_add(dev); device_register()
1195 * @dev: device.
1201 struct device *get_device(struct device *dev) get_device() argument
1203 return dev ? kobj_to_dev(kobject_get(&dev->kobj)) : NULL; get_device()
1209 * @dev: device in question.
1211 void put_device(struct device *dev) put_device() argument
1214 if (dev) put_device()
1215 kobject_put(&dev->kobj); put_device()
1221 * @dev: device.
1232 void device_del(struct device *dev) device_del() argument
1234 struct device *parent = dev->parent; device_del()
1240 if (dev->bus) device_del()
1241 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, device_del()
1242 BUS_NOTIFY_DEL_DEVICE, dev); device_del()
1243 dpm_sysfs_remove(dev); device_del()
1245 klist_del(&dev->p->knode_parent); device_del()
1246 if (MAJOR(dev->devt)) { device_del()
1247 devtmpfs_delete_node(dev); device_del()
1248 device_remove_sys_dev_entry(dev); device_del()
1249 device_remove_file(dev, &dev_attr_dev); device_del()
1251 if (dev->class) { device_del()
1252 device_remove_class_symlinks(dev); device_del()
1254 mutex_lock(&dev->class->p->mutex); device_del()
1257 &dev->class->p->interfaces, node) device_del()
1259 class_intf->remove_dev(dev, class_intf); device_del()
1261 klist_del(&dev->knode_class); device_del()
1262 mutex_unlock(&dev->class->p->mutex); device_del()
1264 device_remove_file(dev, &dev_attr_uevent); device_del()
1265 device_remove_attrs(dev); device_del()
1266 bus_remove_device(dev); device_del()
1267 device_pm_remove(dev); device_del()
1268 driver_deferred_probe_del(dev); device_del()
1274 platform_notify_remove(dev); device_del()
1275 if (dev->bus) device_del()
1276 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, device_del()
1277 BUS_NOTIFY_REMOVED_DEVICE, dev); device_del()
1278 kobject_uevent(&dev->kobj, KOBJ_REMOVE); device_del()
1279 cleanup_device_parent(dev); device_del()
1280 kobject_del(&dev->kobj); device_del()
1287 * @dev: device going away.
1296 void device_unregister(struct device *dev) device_unregister() argument
1298 pr_debug("device: '%s': %s\n", dev_name(dev), __func__); device_unregister()
1299 device_del(dev); device_unregister()
1300 put_device(dev); device_unregister()
1307 struct device *dev = NULL; prev_device() local
1312 dev = p->device; prev_device()
1314 return dev; prev_device()
1320 struct device *dev = NULL; next_device() local
1325 dev = p->device; next_device()
1327 return dev; next_device()
1332 * @dev: device
1343 const char *device_get_devnode(struct device *dev, device_get_devnode() argument
1352 if (dev->type && dev->type->devnode) device_get_devnode()
1353 *tmp = dev->type->devnode(dev, mode, uid, gid); device_get_devnode()
1358 if (dev->class && dev->class->devnode) device_get_devnode()
1359 *tmp = dev->class->devnode(dev, mode); device_get_devnode()
1364 if (strchr(dev_name(dev), '!') == NULL) device_get_devnode()
1365 return dev_name(dev); device_get_devnode()
1368 s = kstrdup(dev_name(dev), GFP_KERNEL); device_get_devnode()
1388 int (*fn)(struct device *dev, void *data)) device_for_each_child()
1418 int (*fn)(struct device *dev, void *data)) device_for_each_child_reverse()
1453 int (*match)(struct device *dev, void *data)) device_find_child()
1475 dev_kobj = kobject_create_and_add("dev", NULL); devices_init()
1496 static int device_check_offline(struct device *dev, void *not_used) device_check_offline() argument
1500 ret = device_for_each_child(dev, NULL, device_check_offline); device_check_offline()
1504 return device_supports_offline(dev) && !dev->offline ? -EBUSY : 0; device_check_offline()
1509 * @dev: Device to be put offline.
1518 int device_offline(struct device *dev) device_offline() argument
1522 if (dev->offline_disabled) device_offline()
1525 ret = device_for_each_child(dev, NULL, device_check_offline); device_offline()
1529 device_lock(dev); device_offline()
1530 if (device_supports_offline(dev)) { device_offline()
1531 if (dev->offline) { device_offline()
1534 ret = dev->bus->offline(dev); device_offline()
1536 kobject_uevent(&dev->kobj, KOBJ_OFFLINE); device_offline()
1537 dev->offline = true; device_offline()
1541 device_unlock(dev); device_offline()
1548 * @dev: Device to be put back online.
1550 * If device_offline() has been successfully executed for @dev, but the device
1556 int device_online(struct device *dev) device_online() argument
1560 device_lock(dev); device_online()
1561 if (device_supports_offline(dev)) { device_online()
1562 if (dev->offline) { device_online()
1563 ret = dev->bus->online(dev); device_online()
1565 kobject_uevent(&dev->kobj, KOBJ_ONLINE); device_online()
1566 dev->offline = false; device_online()
1572 device_unlock(dev); device_online()
1578 struct device dev; member in struct:root_device
1584 return container_of(d, struct root_device, dev); to_root_device()
1587 static void root_device_release(struct device *dev) root_device_release() argument
1589 kfree(to_root_device(dev)); root_device_release()
1623 err = dev_set_name(&root->dev, "%s", name); __root_device_register()
1629 root->dev.release = root_device_release; __root_device_register()
1631 err = device_register(&root->dev); __root_device_register()
1633 put_device(&root->dev); __root_device_register()
1641 err = sysfs_create_link(&root->dev.kobj, &mk->kobj, "module"); __root_device_register()
1643 device_unregister(&root->dev); __root_device_register()
1650 return &root->dev; __root_device_register()
1656 * @dev: device going away
1661 void root_device_unregister(struct device *dev) root_device_unregister() argument
1663 struct root_device *root = to_root_device(dev); root_device_unregister()
1666 sysfs_remove_link(&root->dev.kobj, "module"); root_device_unregister()
1668 device_unregister(dev); root_device_unregister()
1673 static void device_create_release(struct device *dev) device_create_release() argument
1675 pr_debug("device: '%s': %s\n", dev_name(dev), __func__); device_create_release()
1676 kfree(dev); device_create_release()
1685 struct device *dev = NULL; device_create_groups_vargs() local
1691 dev = kzalloc(sizeof(*dev), GFP_KERNEL); device_create_groups_vargs()
1692 if (!dev) { device_create_groups_vargs()
1697 device_initialize(dev); device_create_groups_vargs()
1698 dev->devt = devt; device_create_groups_vargs()
1699 dev->class = class; device_create_groups_vargs()
1700 dev->parent = parent; device_create_groups_vargs()
1701 dev->groups = groups; device_create_groups_vargs()
1702 dev->release = device_create_release; device_create_groups_vargs()
1703 dev_set_drvdata(dev, drvdata); device_create_groups_vargs()
1705 retval = kobject_set_name_vargs(&dev->kobj, fmt, args); device_create_groups_vargs()
1709 retval = device_add(dev); device_create_groups_vargs()
1713 return dev; device_create_groups_vargs()
1716 put_device(dev); device_create_groups_vargs()
1732 * A "dev" file will be created, showing the dev_t for the device, if
1765 * A "dev" file will be created, showing the dev_t for the device, if
1782 struct device *dev; device_create() local
1785 dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs); device_create()
1787 return dev; device_create()
1805 * A "dev" file will be created, showing the dev_t for the device, if
1825 struct device *dev; device_create_with_groups() local
1828 dev = device_create_groups_vargs(class, parent, devt, drvdata, groups, device_create_with_groups()
1831 return dev; device_create_with_groups()
1835 static int __match_devt(struct device *dev, const void *data) __match_devt() argument
1839 return dev->devt == *devt; __match_devt()
1852 struct device *dev; device_destroy() local
1854 dev = class_find_device(class, NULL, &devt, __match_devt); device_destroy()
1855 if (dev) { device_destroy()
1856 put_device(dev); device_destroy()
1857 device_unregister(dev); device_destroy()
1864 * @dev: the pointer to the struct device to be renamed
1901 int device_rename(struct device *dev, const char *new_name) device_rename() argument
1903 struct kobject *kobj = &dev->kobj; device_rename()
1907 dev = get_device(dev); device_rename()
1908 if (!dev) device_rename()
1911 dev_dbg(dev, "renaming to %s\n", new_name); device_rename()
1913 old_device_name = kstrdup(dev_name(dev), GFP_KERNEL); device_rename()
1919 if (dev->class) { device_rename()
1920 error = sysfs_rename_link_ns(&dev->class->p->subsys.kobj, device_rename()
1932 put_device(dev); device_rename()
1940 static int device_move_class_links(struct device *dev, device_move_class_links() argument
1947 sysfs_remove_link(&dev->kobj, "device"); device_move_class_links()
1949 error = sysfs_create_link(&dev->kobj, &new_parent->kobj, device_move_class_links()
1956 * @dev: the pointer to the struct device to be moved
1960 int device_move(struct device *dev, struct device *new_parent, device_move() argument
1967 dev = get_device(dev); device_move()
1968 if (!dev) device_move()
1973 new_parent_kobj = get_device_parent(dev, new_parent); device_move()
1975 pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev), device_move()
1977 error = kobject_move(&dev->kobj, new_parent_kobj); device_move()
1979 cleanup_glue_dir(dev, new_parent_kobj); device_move()
1983 old_parent = dev->parent; device_move()
1984 dev->parent = new_parent; device_move()
1986 klist_remove(&dev->p->knode_parent); device_move()
1988 klist_add_tail(&dev->p->knode_parent, device_move()
1990 set_dev_node(dev, dev_to_node(new_parent)); device_move()
1993 if (dev->class) { device_move()
1994 error = device_move_class_links(dev, old_parent, new_parent); device_move()
1997 device_move_class_links(dev, new_parent, old_parent); device_move()
1998 if (!kobject_move(&dev->kobj, &old_parent->kobj)) { device_move()
2000 klist_remove(&dev->p->knode_parent); device_move()
2001 dev->parent = old_parent; device_move()
2003 klist_add_tail(&dev->p->knode_parent, device_move()
2005 set_dev_node(dev, dev_to_node(old_parent)); device_move()
2008 cleanup_glue_dir(dev, new_parent_kobj); device_move()
2017 device_pm_move_after(dev, new_parent); device_move()
2018 devices_kset_move_after(dev, new_parent); device_move()
2021 device_pm_move_before(new_parent, dev); device_move()
2022 devices_kset_move_before(new_parent, dev); device_move()
2025 device_pm_move_last(dev); device_move()
2026 devices_kset_move_last(dev); device_move()
2033 put_device(dev); device_move()
2043 struct device *dev, *parent; device_shutdown() local
2052 dev = list_entry(devices_kset->list.prev, struct device, device_shutdown()
2060 parent = get_device(dev->parent); device_shutdown()
2061 get_device(dev); device_shutdown()
2064 * event that dev->*->shutdown() doesn't remove it. device_shutdown()
2066 list_del_init(&dev->kobj.entry); device_shutdown()
2072 device_lock(dev); device_shutdown()
2075 pm_runtime_get_noresume(dev); device_shutdown()
2076 pm_runtime_barrier(dev); device_shutdown()
2078 if (dev->bus && dev->bus->shutdown) { device_shutdown()
2080 dev_info(dev, "shutdown\n"); device_shutdown()
2081 dev->bus->shutdown(dev); device_shutdown()
2082 } else if (dev->driver && dev->driver->shutdown) { device_shutdown()
2084 dev_info(dev, "shutdown\n"); device_shutdown()
2085 dev->driver->shutdown(dev); device_shutdown()
2088 device_unlock(dev); device_shutdown()
2092 put_device(dev); device_shutdown()
2106 create_syslog_header(const struct device *dev, char *hdr, size_t hdrlen) create_syslog_header() argument
2111 if (dev->class) create_syslog_header()
2112 subsys = dev->class->name; create_syslog_header()
2113 else if (dev->bus) create_syslog_header()
2114 subsys = dev->bus->name; create_syslog_header()
2129 if (MAJOR(dev->devt)) { create_syslog_header()
2139 c, MAJOR(dev->devt), MINOR(dev->devt)); create_syslog_header()
2141 struct net_device *net = to_net_dev(dev); create_syslog_header()
2149 "DEVICE=+%s:%s", subsys, dev_name(dev)); create_syslog_header()
2158 dev_WARN(dev, "device/subsystem name too long"); create_syslog_header()
2162 int dev_vprintk_emit(int level, const struct device *dev, dev_vprintk_emit() argument
2168 hdrlen = create_syslog_header(dev, hdr, sizeof(hdr)); dev_vprintk_emit()
2174 int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...) dev_printk_emit() argument
2181 r = dev_vprintk_emit(level, dev, fmt, args); dev_printk_emit()
2189 static void __dev_printk(const char *level, const struct device *dev, __dev_printk() argument
2192 if (dev) __dev_printk()
2193 dev_printk_emit(level[1] - '0', dev, "%s %s: %pV", __dev_printk()
2194 dev_driver_string(dev), dev_name(dev), vaf); __dev_printk()
2199 void dev_printk(const char *level, const struct device *dev, dev_printk() argument
2210 __dev_printk(level, dev, &vaf); dev_printk()
2217 void func(const struct device *dev, const char *fmt, ...) \
2227 __dev_printk(kern_level, dev, &vaf); \
2250 * @dev: Device to handle.
2256 void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) set_primary_fwnode() argument
2259 struct fwnode_handle *fn = dev->fwnode; set_primary_fwnode()
2265 dev->fwnode = fwnode; set_primary_fwnode()
2267 dev->fwnode = fwnode_is_primary(dev->fwnode) ? set_primary_fwnode()
2268 dev->fwnode->secondary : NULL; set_primary_fwnode()
2275 * @dev: Device to handle.
2282 void set_secondary_fwnode(struct device *dev, struct fwnode_handle *fwnode) set_secondary_fwnode() argument
2287 if (fwnode_is_primary(dev->fwnode)) set_secondary_fwnode()
2288 dev->fwnode->secondary = fwnode; set_secondary_fwnode()
2290 dev->fwnode = fwnode; set_secondary_fwnode()
1387 device_for_each_child(struct device *parent, void *data, int (*fn)(struct device *dev, void *data)) device_for_each_child() argument
1417 device_for_each_child_reverse(struct device *parent, void *data, int (*fn)(struct device *dev, void *data)) device_for_each_child_reverse() argument
1452 device_find_child(struct device *parent, void *data, int (*match)(struct device *dev, void *data)) device_find_child() argument
H A Ddd.c62 struct device *dev; deferred_probe_work_func() local
79 typeof(*dev->p), deferred_probe); deferred_probe_work_func()
80 dev = private->device; deferred_probe_work_func()
83 get_device(dev); deferred_probe_work_func()
98 device_pm_move_last(dev); deferred_probe_work_func()
101 dev_dbg(dev, "Retrying from deferred list\n"); deferred_probe_work_func()
102 bus_probe_device(dev); deferred_probe_work_func()
106 put_device(dev); deferred_probe_work_func()
112 static void driver_deferred_probe_add(struct device *dev) driver_deferred_probe_add() argument
115 if (list_empty(&dev->p->deferred_probe)) { driver_deferred_probe_add()
116 dev_dbg(dev, "Added to deferred list\n"); driver_deferred_probe_add()
117 list_add_tail(&dev->p->deferred_probe, &deferred_probe_pending_list); driver_deferred_probe_add()
122 void driver_deferred_probe_del(struct device *dev) driver_deferred_probe_del() argument
125 if (!list_empty(&dev->p->deferred_probe)) { driver_deferred_probe_del()
126 dev_dbg(dev, "Removed from deferred list\n"); driver_deferred_probe_del()
127 list_del_init(&dev->p->deferred_probe); driver_deferred_probe_del()
195 static void driver_bound(struct device *dev) driver_bound() argument
197 if (klist_node_attached(&dev->p->knode_driver)) { driver_bound()
199 __func__, kobject_name(&dev->kobj)); driver_bound()
203 pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->driver->name, driver_bound()
204 __func__, dev_name(dev)); driver_bound()
206 klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices); driver_bound()
212 driver_deferred_probe_del(dev); driver_bound()
215 if (dev->bus) driver_bound()
216 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, driver_bound()
217 BUS_NOTIFY_BOUND_DRIVER, dev); driver_bound()
220 static int driver_sysfs_add(struct device *dev) driver_sysfs_add() argument
224 if (dev->bus) driver_sysfs_add()
225 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, driver_sysfs_add()
226 BUS_NOTIFY_BIND_DRIVER, dev); driver_sysfs_add()
228 ret = sysfs_create_link(&dev->driver->p->kobj, &dev->kobj, driver_sysfs_add()
229 kobject_name(&dev->kobj)); driver_sysfs_add()
231 ret = sysfs_create_link(&dev->kobj, &dev->driver->p->kobj, driver_sysfs_add()
234 sysfs_remove_link(&dev->driver->p->kobj, driver_sysfs_add()
235 kobject_name(&dev->kobj)); driver_sysfs_add()
240 static void driver_sysfs_remove(struct device *dev) driver_sysfs_remove() argument
242 struct device_driver *drv = dev->driver; driver_sysfs_remove()
245 sysfs_remove_link(&drv->p->kobj, kobject_name(&dev->kobj)); driver_sysfs_remove()
246 sysfs_remove_link(&dev->kobj, "driver"); driver_sysfs_remove()
252 * @dev: device.
255 * Caller must have already set @dev->driver.
264 int device_bind_driver(struct device *dev) device_bind_driver() argument
268 ret = driver_sysfs_add(dev); device_bind_driver()
270 driver_bound(dev); device_bind_driver()
278 static int really_probe(struct device *dev, struct device_driver *drv) really_probe() argument
285 drv->bus->name, __func__, drv->name, dev_name(dev)); really_probe()
286 WARN_ON(!list_empty(&dev->devres_head)); really_probe()
288 dev->driver = drv; really_probe()
291 ret = pinctrl_bind_pins(dev); really_probe()
295 if (driver_sysfs_add(dev)) { really_probe()
297 __func__, dev_name(dev)); really_probe()
301 if (dev->pm_domain && dev->pm_domain->activate) { really_probe()
302 ret = dev->pm_domain->activate(dev); really_probe()
313 devices_kset_move_last(dev); really_probe()
315 if (dev->bus->probe) { really_probe()
316 ret = dev->bus->probe(dev); really_probe()
320 ret = drv->probe(dev); really_probe()
325 pinctrl_init_done(dev); really_probe()
327 if (dev->pm_domain && dev->pm_domain->sync) really_probe()
328 dev->pm_domain->sync(dev); really_probe()
330 driver_bound(dev); really_probe()
333 drv->bus->name, __func__, dev_name(dev), drv->name); really_probe()
337 devres_release_all(dev); really_probe()
338 driver_sysfs_remove(dev); really_probe()
339 dev->driver = NULL; really_probe()
340 dev_set_drvdata(dev, NULL); really_probe()
341 if (dev->pm_domain && dev->pm_domain->dismiss) really_probe()
342 dev->pm_domain->dismiss(dev); really_probe()
347 dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name); really_probe()
348 driver_deferred_probe_add(dev); really_probe()
356 drv->name, dev_name(dev), ret); really_probe()
362 drv->name, dev_name(dev), ret); really_probe()
405 * @dev: device to try to bind to the driver
410 * This function must be called with @dev lock held. When called for a
411 * USB interface, @dev->parent lock must be held as well.
415 int driver_probe_device(struct device_driver *drv, struct device *dev) driver_probe_device() argument
419 if (!device_is_registered(dev)) driver_probe_device()
423 drv->bus->name, __func__, dev_name(dev), drv->name); driver_probe_device()
425 if (dev->parent) driver_probe_device()
426 pm_runtime_get_sync(dev->parent); driver_probe_device()
428 pm_runtime_barrier(dev); driver_probe_device()
429 ret = really_probe(dev, drv); driver_probe_device()
430 pm_request_idle(dev); driver_probe_device()
432 if (dev->parent) driver_probe_device()
433 pm_runtime_put(dev->parent); driver_probe_device()
456 struct device *dev; member in struct:device_attach_data
491 struct device *dev = data->dev; __device_attach_driver() local
500 if (dev->driver) __device_attach_driver()
503 if (!driver_match_device(drv, dev)) __device_attach_driver()
514 return driver_probe_device(drv, dev); __device_attach_driver()
519 struct device *dev = _dev; __device_attach_async_helper() local
521 .dev = dev, __device_attach_async_helper()
526 device_lock(dev); __device_attach_async_helper()
528 if (dev->parent) __device_attach_async_helper()
529 pm_runtime_get_sync(dev->parent); __device_attach_async_helper()
531 bus_for_each_drv(dev->bus, NULL, &data, __device_attach_driver); __device_attach_async_helper()
532 dev_dbg(dev, "async probe completed\n"); __device_attach_async_helper()
534 pm_request_idle(dev); __device_attach_async_helper()
536 if (dev->parent) __device_attach_async_helper()
537 pm_runtime_put(dev->parent); __device_attach_async_helper()
539 device_unlock(dev); __device_attach_async_helper()
541 put_device(dev); __device_attach_async_helper()
544 static int __device_attach(struct device *dev, bool allow_async) __device_attach() argument
548 device_lock(dev); __device_attach()
549 if (dev->driver) { __device_attach()
550 if (klist_node_attached(&dev->p->knode_driver)) { __device_attach()
554 ret = device_bind_driver(dev); __device_attach()
558 dev->driver = NULL; __device_attach()
563 .dev = dev, __device_attach()
568 if (dev->parent) __device_attach()
569 pm_runtime_get_sync(dev->parent); __device_attach()
571 ret = bus_for_each_drv(dev->bus, NULL, &data, __device_attach()
581 dev_dbg(dev, "scheduling asynchronous probe\n"); __device_attach()
582 get_device(dev); __device_attach()
583 async_schedule(__device_attach_async_helper, dev); __device_attach()
585 pm_request_idle(dev); __device_attach()
588 if (dev->parent) __device_attach()
589 pm_runtime_put(dev->parent); __device_attach()
592 device_unlock(dev); __device_attach()
598 * @dev: device.
608 * When called for a USB interface, @dev->parent lock must be held.
610 int device_attach(struct device *dev) device_attach() argument
612 return __device_attach(dev, false); device_attach()
616 void device_initial_probe(struct device *dev) device_initial_probe() argument
618 __device_attach(dev, true); device_initial_probe()
621 static int __driver_attach(struct device *dev, void *data) __driver_attach() argument
635 if (!driver_match_device(drv, dev)) __driver_attach()
638 if (dev->parent) /* Needed for USB */ __driver_attach()
639 device_lock(dev->parent); __driver_attach()
640 device_lock(dev); __driver_attach()
641 if (!dev->driver) __driver_attach()
642 driver_probe_device(drv, dev); __driver_attach()
643 device_unlock(dev); __driver_attach()
644 if (dev->parent) __driver_attach()
645 device_unlock(dev->parent); __driver_attach()
656 * returns 0 and the @dev->driver is set, we've found a
666 * __device_release_driver() must be called with @dev lock held.
667 * When called for a USB interface, @dev->parent lock must be held as well.
669 static void __device_release_driver(struct device *dev) __device_release_driver() argument
673 drv = dev->driver; __device_release_driver()
678 pm_runtime_get_sync(dev); __device_release_driver()
680 driver_sysfs_remove(dev); __device_release_driver()
682 if (dev->bus) __device_release_driver()
683 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, __device_release_driver()
685 dev); __device_release_driver()
687 pm_runtime_put_sync(dev); __device_release_driver()
689 if (dev->bus && dev->bus->remove) __device_release_driver()
690 dev->bus->remove(dev); __device_release_driver()
692 drv->remove(dev); __device_release_driver()
693 devres_release_all(dev); __device_release_driver()
694 dev->driver = NULL; __device_release_driver()
695 dev_set_drvdata(dev, NULL); __device_release_driver()
696 if (dev->pm_domain && dev->pm_domain->dismiss) __device_release_driver()
697 dev->pm_domain->dismiss(dev); __device_release_driver()
699 klist_remove(&dev->p->knode_driver); __device_release_driver()
700 if (dev->bus) __device_release_driver()
701 blocking_notifier_call_chain(&dev->bus->p->bus_notifier, __device_release_driver()
703 dev); __device_release_driver()
710 * @dev: device.
713 * When called for a USB interface, @dev->parent lock must be held.
715 void device_release_driver(struct device *dev) device_release_driver() argument
722 device_lock(dev); device_release_driver()
723 __device_release_driver(dev); device_release_driver()
724 device_unlock(dev); device_release_driver()
735 struct device *dev; driver_detach() local
746 dev = dev_prv->device; driver_detach()
747 get_device(dev); driver_detach()
750 if (dev->parent) /* Needed for USB */ driver_detach()
751 device_lock(dev->parent); driver_detach()
752 device_lock(dev); driver_detach()
753 if (dev->driver == drv) driver_detach()
754 __device_release_driver(dev); driver_detach()
755 device_unlock(dev); driver_detach()
756 if (dev->parent) driver_detach()
757 device_unlock(dev->parent); driver_detach()
758 put_device(dev); driver_detach()
/linux-4.4.14/drivers/usb/misc/
H A Dadutux.c109 static inline void adu_debug_data(struct device *dev, const char *function, adu_debug_data() argument
112 dev_dbg(dev, "%s - length = %d, data = %*ph\n", adu_debug_data()
120 static void adu_abort_transfers(struct adu_device *dev) adu_abort_transfers() argument
124 if (dev->udev == NULL) adu_abort_transfers()
130 spin_lock_irqsave(&dev->buflock, flags); adu_abort_transfers()
131 if (!dev->read_urb_finished) { adu_abort_transfers()
132 spin_unlock_irqrestore(&dev->buflock, flags); adu_abort_transfers()
133 usb_kill_urb(dev->interrupt_in_urb); adu_abort_transfers()
135 spin_unlock_irqrestore(&dev->buflock, flags); adu_abort_transfers()
137 spin_lock_irqsave(&dev->buflock, flags); adu_abort_transfers()
138 if (!dev->out_urb_finished) { adu_abort_transfers()
139 spin_unlock_irqrestore(&dev->buflock, flags); adu_abort_transfers()
140 usb_kill_urb(dev->interrupt_out_urb); adu_abort_transfers()
142 spin_unlock_irqrestore(&dev->buflock, flags); adu_abort_transfers()
145 static void adu_delete(struct adu_device *dev) adu_delete() argument
148 usb_free_urb(dev->interrupt_in_urb); adu_delete()
149 usb_free_urb(dev->interrupt_out_urb); adu_delete()
150 kfree(dev->read_buffer_primary); adu_delete()
151 kfree(dev->read_buffer_secondary); adu_delete()
152 kfree(dev->interrupt_in_buffer); adu_delete()
153 kfree(dev->interrupt_out_buffer); adu_delete()
154 kfree(dev); adu_delete()
159 struct adu_device *dev = urb->context; adu_interrupt_in_callback() local
162 adu_debug_data(&dev->udev->dev, __func__, adu_interrupt_in_callback()
165 spin_lock(&dev->buflock); adu_interrupt_in_callback()
170 dev_dbg(&dev->udev->dev, adu_interrupt_in_callback()
177 if (urb->actual_length > 0 && dev->interrupt_in_buffer[0] != 0x00) { adu_interrupt_in_callback()
178 if (dev->read_buffer_length < adu_interrupt_in_callback()
179 (4 * usb_endpoint_maxp(dev->interrupt_in_endpoint)) - adu_interrupt_in_callback()
181 memcpy (dev->read_buffer_primary + adu_interrupt_in_callback()
182 dev->read_buffer_length, adu_interrupt_in_callback()
183 dev->interrupt_in_buffer, urb->actual_length); adu_interrupt_in_callback()
185 dev->read_buffer_length += urb->actual_length; adu_interrupt_in_callback()
186 dev_dbg(&dev->udev->dev,"%s reading %d\n", __func__, adu_interrupt_in_callback()
189 dev_dbg(&dev->udev->dev,"%s : read_buffer overflow\n", adu_interrupt_in_callback()
195 dev->read_urb_finished = 1; adu_interrupt_in_callback()
196 spin_unlock(&dev->buflock); adu_interrupt_in_callback()
198 wake_up_interruptible(&dev->read_wait); adu_interrupt_in_callback()
203 struct adu_device *dev = urb->context; adu_interrupt_out_callback() local
206 adu_debug_data(&dev->udev->dev, __func__, adu_interrupt_out_callback()
212 dev_dbg(&dev->udev->dev, adu_interrupt_out_callback()
219 spin_lock(&dev->buflock); adu_interrupt_out_callback()
220 dev->out_urb_finished = 1; adu_interrupt_out_callback()
221 wake_up(&dev->write_wait); adu_interrupt_out_callback()
222 spin_unlock(&dev->buflock); adu_interrupt_out_callback()
227 struct adu_device *dev = NULL; adu_open() local
246 dev = usb_get_intfdata(interface); adu_open()
247 if (!dev || !dev->udev) { adu_open()
253 if (dev->open_count) { adu_open()
258 ++dev->open_count; adu_open()
259 dev_dbg(&dev->udev->dev, "%s: open count %d\n", __func__, adu_open()
260 dev->open_count); adu_open()
263 file->private_data = dev; adu_open()
266 dev->read_buffer_length = 0; adu_open()
269 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, adu_open()
270 usb_rcvintpipe(dev->udev, adu_open()
271 dev->interrupt_in_endpoint->bEndpointAddress), adu_open()
272 dev->interrupt_in_buffer, adu_open()
273 usb_endpoint_maxp(dev->interrupt_in_endpoint), adu_open()
274 adu_interrupt_in_callback, dev, adu_open()
275 dev->interrupt_in_endpoint->bInterval); adu_open()
276 dev->read_urb_finished = 0; adu_open()
277 if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL)) adu_open()
278 dev->read_urb_finished = 1; adu_open()
283 dev->out_urb_finished = 1; adu_open()
293 static void adu_release_internal(struct adu_device *dev) adu_release_internal() argument
296 --dev->open_count; adu_release_internal()
297 dev_dbg(&dev->udev->dev, "%s : open count %d\n", __func__, adu_release_internal()
298 dev->open_count); adu_release_internal()
299 if (dev->open_count <= 0) { adu_release_internal()
300 adu_abort_transfers(dev); adu_release_internal()
301 dev->open_count = 0; adu_release_internal()
307 struct adu_device *dev; adu_release() local
315 dev = file->private_data; adu_release()
316 if (dev == NULL) { adu_release()
323 if (dev->open_count <= 0) { adu_release()
324 dev_dbg(&dev->udev->dev, "%s : device not opened\n", __func__); adu_release()
329 adu_release_internal(dev); adu_release()
330 if (dev->udev == NULL) { adu_release()
332 if (!dev->open_count) /* ... and we're the last user */ adu_release()
333 adu_delete(dev); adu_release()
344 struct adu_device *dev; adu_read() local
354 dev = file->private_data; adu_read()
355 if (mutex_lock_interruptible(&dev->mtx)) adu_read()
359 if (dev->udev == NULL) { adu_read()
367 dev_dbg(&dev->udev->dev, "%s : read request of 0 bytes\n", adu_read()
373 dev_dbg(&dev->udev->dev, "%s : about to start looping\n", __func__); adu_read()
375 int data_in_secondary = dev->secondary_tail - dev->secondary_head; adu_read()
376 dev_dbg(&dev->udev->dev, adu_read()
379 dev->interrupt_in_urb->status); adu_read()
384 i = copy_to_user(buffer, dev->read_buffer_secondary+dev->secondary_head, amount); adu_read()
389 dev->secondary_head += (amount - i); adu_read()
398 spin_lock_irqsave (&dev->buflock, flags); adu_read()
399 if (dev->read_buffer_length) { adu_read()
402 dev_dbg(&dev->udev->dev, adu_read()
404 __func__, dev->read_buffer_length); adu_read()
405 tmp = dev->read_buffer_secondary; adu_read()
406 dev->read_buffer_secondary = dev->read_buffer_primary; adu_read()
407 dev->read_buffer_primary = tmp; adu_read()
408 dev->secondary_head = 0; adu_read()
409 dev->secondary_tail = dev->read_buffer_length; adu_read()
410 dev->read_buffer_length = 0; adu_read()
411 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
416 if (!dev->read_urb_finished) { adu_read()
418 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
419 dev_dbg(&dev->udev->dev, adu_read()
424 dev_dbg(&dev->udev->dev, adu_read()
427 dev->read_urb_finished = 0; adu_read()
428 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
430 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, adu_read()
431 usb_rcvintpipe(dev->udev, adu_read()
432 dev->interrupt_in_endpoint->bEndpointAddress), adu_read()
433 dev->interrupt_in_buffer, adu_read()
434 usb_endpoint_maxp(dev->interrupt_in_endpoint), adu_read()
436 dev, adu_read()
437 dev->interrupt_in_endpoint->bInterval); adu_read()
438 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); adu_read()
440 dev->read_urb_finished = 1; adu_read()
444 dev_dbg(&dev->udev->dev, adu_read()
453 add_wait_queue(&dev->read_wait, &wait); adu_read()
454 spin_lock_irqsave(&dev->buflock, flags); adu_read()
455 if (!dev->read_urb_finished) { adu_read()
456 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
459 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
462 remove_wait_queue(&dev->read_wait, &wait); adu_read()
465 dev_dbg(&dev->udev->dev, adu_read()
472 dev_dbg(&dev->udev->dev, adu_read()
484 spin_lock_irqsave(&dev->buflock, flags); adu_read()
485 if (should_submit && dev->read_urb_finished) { adu_read()
486 dev->read_urb_finished = 0; adu_read()
487 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
488 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, adu_read()
489 usb_rcvintpipe(dev->udev, adu_read()
490 dev->interrupt_in_endpoint->bEndpointAddress), adu_read()
491 dev->interrupt_in_buffer, adu_read()
492 usb_endpoint_maxp(dev->interrupt_in_endpoint), adu_read()
494 dev, adu_read()
495 dev->interrupt_in_endpoint->bInterval); adu_read()
496 if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL) != 0) adu_read()
497 dev->read_urb_finished = 1; adu_read()
500 spin_unlock_irqrestore(&dev->buflock, flags); adu_read()
505 mutex_unlock(&dev->mtx); adu_read()
514 struct adu_device *dev; adu_write() local
521 dev = file->private_data; adu_write()
523 retval = mutex_lock_interruptible(&dev->mtx); adu_write()
528 if (dev->udev == NULL) { adu_write()
536 dev_dbg(&dev->udev->dev, "%s : write request of 0 bytes\n", adu_write()
542 add_wait_queue(&dev->write_wait, &waita); adu_write()
544 spin_lock_irqsave(&dev->buflock, flags); adu_write()
545 if (!dev->out_urb_finished) { adu_write()
546 spin_unlock_irqrestore(&dev->buflock, flags); adu_write()
548 mutex_unlock(&dev->mtx); adu_write()
550 dev_dbg(&dev->udev->dev, "%s : interrupted\n", adu_write()
557 dev_dbg(&dev->udev->dev, adu_write()
562 remove_wait_queue(&dev->write_wait, &waita); adu_write()
563 retval = mutex_lock_interruptible(&dev->mtx); adu_write()
569 dev_dbg(&dev->udev->dev, adu_write()
573 spin_unlock_irqrestore(&dev->buflock, flags); adu_write()
575 remove_wait_queue(&dev->write_wait, &waita); adu_write()
576 dev_dbg(&dev->udev->dev, "%s : sending, count = %Zd\n", adu_write()
580 buffer_size = usb_endpoint_maxp(dev->interrupt_out_endpoint); adu_write()
582 dev_dbg(&dev->udev->dev, adu_write()
586 if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write) != 0) { adu_write()
593 dev->interrupt_out_urb, adu_write()
594 dev->udev, adu_write()
595 usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress), adu_write()
596 dev->interrupt_out_buffer, adu_write()
599 dev, adu_write()
600 dev->interrupt_out_endpoint->bInterval); adu_write()
601 dev->interrupt_out_urb->actual_length = bytes_to_write; adu_write()
602 dev->out_urb_finished = 0; adu_write()
603 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); adu_write()
605 dev->out_urb_finished = 1; adu_write()
606 dev_err(&dev->udev->dev, "Couldn't submit " adu_write()
617 mutex_unlock(&dev->mtx); adu_write()
621 mutex_unlock(&dev->mtx); adu_write()
626 remove_wait_queue(&dev->write_wait, &waita); adu_write()
660 struct adu_device *dev = NULL; adu_probe() local
669 dev_err(&interface->dev, "udev is NULL.\n"); adu_probe()
674 dev = kzalloc(sizeof(struct adu_device), GFP_KERNEL); adu_probe()
675 if (dev == NULL) { adu_probe()
676 dev_err(&interface->dev, "Out of memory\n"); adu_probe()
681 mutex_init(&dev->mtx); adu_probe()
682 spin_lock_init(&dev->buflock); adu_probe()
683 dev->udev = udev; adu_probe()
684 init_waitqueue_head(&dev->read_wait); adu_probe()
685 init_waitqueue_head(&dev->write_wait); adu_probe()
694 dev->interrupt_in_endpoint = endpoint; adu_probe()
697 dev->interrupt_out_endpoint = endpoint; adu_probe()
699 if (dev->interrupt_in_endpoint == NULL) { adu_probe()
700 dev_err(&interface->dev, "interrupt in endpoint not found\n"); adu_probe()
703 if (dev->interrupt_out_endpoint == NULL) { adu_probe()
704 dev_err(&interface->dev, "interrupt out endpoint not found\n"); adu_probe()
708 in_end_size = usb_endpoint_maxp(dev->interrupt_in_endpoint); adu_probe()
709 out_end_size = usb_endpoint_maxp(dev->interrupt_out_endpoint); adu_probe()
711 dev->read_buffer_primary = kmalloc((4 * in_end_size), GFP_KERNEL); adu_probe()
712 if (!dev->read_buffer_primary) { adu_probe()
713 dev_err(&interface->dev, "Couldn't allocate read_buffer_primary\n"); adu_probe()
719 memset(dev->read_buffer_primary, 'a', in_end_size); adu_probe()
720 memset(dev->read_buffer_primary + in_end_size, 'b', in_end_size); adu_probe()
721 memset(dev->read_buffer_primary + (2 * in_end_size), 'c', in_end_size); adu_probe()
722 memset(dev->read_buffer_primary + (3 * in_end_size), 'd', in_end_size); adu_probe()
724 dev->read_buffer_secondary = kmalloc((4 * in_end_size), GFP_KERNEL); adu_probe()
725 if (!dev->read_buffer_secondary) { adu_probe()
726 dev_err(&interface->dev, "Couldn't allocate read_buffer_secondary\n"); adu_probe()
732 memset(dev->read_buffer_secondary, 'e', in_end_size); adu_probe()
733 memset(dev->read_buffer_secondary + in_end_size, 'f', in_end_size); adu_probe()
734 memset(dev->read_buffer_secondary + (2 * in_end_size), 'g', in_end_size); adu_probe()
735 memset(dev->read_buffer_secondary + (3 * in_end_size), 'h', in_end_size); adu_probe()
737 dev->interrupt_in_buffer = kmalloc(in_end_size, GFP_KERNEL); adu_probe()
738 if (!dev->interrupt_in_buffer) { adu_probe()
739 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n"); adu_probe()
744 memset(dev->interrupt_in_buffer, 'i', in_end_size); adu_probe()
746 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); adu_probe()
747 if (!dev->interrupt_in_urb) { adu_probe()
748 dev_err(&interface->dev, "Couldn't allocate interrupt_in_urb\n"); adu_probe()
751 dev->interrupt_out_buffer = kmalloc(out_end_size, GFP_KERNEL); adu_probe()
752 if (!dev->interrupt_out_buffer) { adu_probe()
753 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n"); adu_probe()
756 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); adu_probe()
757 if (!dev->interrupt_out_urb) { adu_probe()
758 dev_err(&interface->dev, "Couldn't allocate interrupt_out_urb\n"); adu_probe()
762 if (!usb_string(udev, udev->descriptor.iSerialNumber, dev->serial_number, adu_probe()
763 sizeof(dev->serial_number))) { adu_probe()
764 dev_err(&interface->dev, "Could not retrieve serial number\n"); adu_probe()
767 dev_dbg(&interface->dev,"serial_number=%s", dev->serial_number); adu_probe()
770 usb_set_intfdata(interface, dev); adu_probe()
776 dev_err(&interface->dev, "Not able to get a minor for this device.\n"); adu_probe()
781 dev->minor = interface->minor; adu_probe()
784 dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", adu_probe()
785 le16_to_cpu(udev->descriptor.idProduct), dev->serial_number, adu_probe()
786 (dev->minor - ADU_MINOR_BASE)); adu_probe()
791 adu_delete(dev); adu_probe()
802 struct adu_device *dev; adu_disconnect() local
805 dev = usb_get_intfdata(interface); adu_disconnect()
807 mutex_lock(&dev->mtx); /* not interruptible */ adu_disconnect()
808 dev->udev = NULL; /* poison */ adu_disconnect()
809 minor = dev->minor; adu_disconnect()
811 mutex_unlock(&dev->mtx); adu_disconnect()
817 if (!dev->open_count) adu_disconnect()
818 adu_delete(dev); adu_disconnect()
H A Dyurex.c81 struct usb_yurex *dev = urb->context; yurex_control_callback() local
85 dev_err(&urb->dev->dev, "%s - control failed: %d\n", yurex_control_callback()
87 wake_up_interruptible(&dev->waitq); yurex_control_callback()
95 struct usb_yurex *dev = to_yurex_dev(kref); yurex_delete() local
97 dev_dbg(&dev->interface->dev, "%s\n", __func__); yurex_delete()
99 usb_put_dev(dev->udev); yurex_delete()
100 if (dev->cntl_urb) { yurex_delete()
101 usb_kill_urb(dev->cntl_urb); yurex_delete()
102 kfree(dev->cntl_req); yurex_delete()
103 if (dev->cntl_buffer) yurex_delete()
104 usb_free_coherent(dev->udev, YUREX_BUF_SIZE, yurex_delete()
105 dev->cntl_buffer, dev->cntl_urb->transfer_dma); yurex_delete()
106 usb_free_urb(dev->cntl_urb); yurex_delete()
108 if (dev->urb) { yurex_delete()
109 usb_kill_urb(dev->urb); yurex_delete()
110 if (dev->int_buffer) yurex_delete()
111 usb_free_coherent(dev->udev, YUREX_BUF_SIZE, yurex_delete()
112 dev->int_buffer, dev->urb->transfer_dma); yurex_delete()
113 usb_free_urb(dev->urb); yurex_delete()
115 kfree(dev); yurex_delete()
130 struct usb_yurex *dev = urb->context; yurex_interrupt() local
131 unsigned char *buf = dev->int_buffer; yurex_interrupt()
140 dev_err(&dev->interface->dev, yurex_interrupt()
142 __func__, YUREX_BUF_SIZE, dev->urb->actual_length); yurex_interrupt()
150 dev_err(&dev->interface->dev, yurex_interrupt()
160 spin_lock_irqsave(&dev->lock, flags); yurex_interrupt()
161 dev->bbu = 0; yurex_interrupt()
163 dev->bbu += buf[i]; yurex_interrupt()
165 dev->bbu <<= 8; yurex_interrupt()
167 dev_dbg(&dev->interface->dev, "%s count: %lld\n", yurex_interrupt()
168 __func__, dev->bbu); yurex_interrupt()
169 spin_unlock_irqrestore(&dev->lock, flags); yurex_interrupt()
171 kill_fasync(&dev->async_queue, SIGIO, POLL_IN); yurex_interrupt()
174 dev_dbg(&dev->interface->dev, yurex_interrupt()
178 dev_dbg(&dev->interface->dev, "%s ack: %c\n", yurex_interrupt()
180 wake_up_interruptible(&dev->waitq); yurex_interrupt()
185 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); yurex_interrupt()
187 dev_err(&dev->interface->dev, "%s - usb_submit_urb failed: %d\n", yurex_interrupt()
194 struct usb_yurex *dev; yurex_probe() local
202 dev = kzalloc(sizeof(*dev), GFP_KERNEL); yurex_probe()
203 if (!dev) { yurex_probe()
204 dev_err(&interface->dev, "Out of memory\n"); yurex_probe()
207 kref_init(&dev->kref); yurex_probe()
208 mutex_init(&dev->io_mutex); yurex_probe()
209 spin_lock_init(&dev->lock); yurex_probe()
210 init_waitqueue_head(&dev->waitq); yurex_probe()
212 dev->udev = usb_get_dev(interface_to_usbdev(interface)); yurex_probe()
213 dev->interface = interface; yurex_probe()
221 dev->int_in_endpointAddr = endpoint->bEndpointAddress; yurex_probe()
225 if (!dev->int_in_endpointAddr) { yurex_probe()
227 dev_err(&interface->dev, "Could not find endpoints\n"); yurex_probe()
233 dev->cntl_urb = usb_alloc_urb(0, GFP_KERNEL); yurex_probe()
234 if (!dev->cntl_urb) { yurex_probe()
235 dev_err(&interface->dev, "Could not allocate control URB\n"); yurex_probe()
240 dev->cntl_req = kmalloc(YUREX_BUF_SIZE, GFP_KERNEL); yurex_probe()
241 if (!dev->cntl_req) { yurex_probe()
242 dev_err(&interface->dev, "Could not allocate cntl_req\n"); yurex_probe()
247 dev->cntl_buffer = usb_alloc_coherent(dev->udev, YUREX_BUF_SIZE, yurex_probe()
249 &dev->cntl_urb->transfer_dma); yurex_probe()
250 if (!dev->cntl_buffer) { yurex_probe()
251 dev_err(&interface->dev, "Could not allocate cntl_buffer\n"); yurex_probe()
256 dev->cntl_req->bRequestType = USB_DIR_OUT | USB_TYPE_CLASS | yurex_probe()
258 dev->cntl_req->bRequest = HID_REQ_SET_REPORT; yurex_probe()
259 dev->cntl_req->wValue = cpu_to_le16((HID_OUTPUT_REPORT + 1) << 8); yurex_probe()
260 dev->cntl_req->wIndex = cpu_to_le16(iface_desc->desc.bInterfaceNumber); yurex_probe()
261 dev->cntl_req->wLength = cpu_to_le16(YUREX_BUF_SIZE); yurex_probe()
263 usb_fill_control_urb(dev->cntl_urb, dev->udev, yurex_probe()
264 usb_sndctrlpipe(dev->udev, 0), yurex_probe()
265 (void *)dev->cntl_req, dev->cntl_buffer, yurex_probe()
266 YUREX_BUF_SIZE, yurex_control_callback, dev); yurex_probe()
267 dev->cntl_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; yurex_probe()
271 dev->urb = usb_alloc_urb(0, GFP_KERNEL); yurex_probe()
272 if (!dev->urb) { yurex_probe()
273 dev_err(&interface->dev, "Could not allocate URB\n"); yurex_probe()
278 dev->int_buffer = usb_alloc_coherent(dev->udev, YUREX_BUF_SIZE, yurex_probe()
279 GFP_KERNEL, &dev->urb->transfer_dma); yurex_probe()
280 if (!dev->int_buffer) { yurex_probe()
281 dev_err(&interface->dev, "Could not allocate int_buffer\n"); yurex_probe()
286 usb_fill_int_urb(dev->urb, dev->udev, yurex_probe()
287 usb_rcvintpipe(dev->udev, dev->int_in_endpointAddr), yurex_probe()
288 dev->int_buffer, YUREX_BUF_SIZE, yurex_interrupt, yurex_probe()
289 dev, 1); yurex_probe()
290 dev->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; yurex_probe()
291 if (usb_submit_urb(dev->urb, GFP_KERNEL)) { yurex_probe()
293 dev_err(&interface->dev, "Could not submitting URB\n"); yurex_probe()
298 usb_set_intfdata(interface, dev); yurex_probe()
299 dev->bbu = -1; yurex_probe()
304 dev_err(&interface->dev, yurex_probe()
310 dev_info(&interface->dev, yurex_probe()
317 if (dev) yurex_probe()
319 kref_put(&dev->kref, yurex_delete); yurex_probe()
325 struct usb_yurex *dev; yurex_disconnect() local
328 dev = usb_get_intfdata(interface); yurex_disconnect()
335 mutex_lock(&dev->io_mutex); yurex_disconnect()
336 dev->interface = NULL; yurex_disconnect()
337 mutex_unlock(&dev->io_mutex); yurex_disconnect()
340 kill_fasync(&dev->async_queue, SIGIO, POLL_IN); yurex_disconnect()
341 wake_up_interruptible(&dev->waitq); yurex_disconnect()
344 kref_put(&dev->kref, yurex_delete); yurex_disconnect()
346 dev_info(&interface->dev, "USB YUREX #%d now disconnected\n", minor); yurex_disconnect()
359 struct usb_yurex *dev; yurex_fasync() local
361 dev = file->private_data; yurex_fasync()
362 return fasync_helper(fd, file, on, &dev->async_queue); yurex_fasync()
367 struct usb_yurex *dev; yurex_open() local
382 dev = usb_get_intfdata(interface); yurex_open()
383 if (!dev) { yurex_open()
389 kref_get(&dev->kref); yurex_open()
392 mutex_lock(&dev->io_mutex); yurex_open()
393 file->private_data = dev; yurex_open()
394 mutex_unlock(&dev->io_mutex); yurex_open()
402 struct usb_yurex *dev; yurex_release() local
404 dev = file->private_data; yurex_release()
405 if (dev == NULL) yurex_release()
409 kref_put(&dev->kref, yurex_delete); yurex_release()
416 struct usb_yurex *dev; yurex_read() local
422 dev = file->private_data; yurex_read()
424 mutex_lock(&dev->io_mutex); yurex_read()
425 if (!dev->interface) { /* already disconnected */ yurex_read()
430 spin_lock_irqsave(&dev->lock, flags); yurex_read()
431 bytes_read = snprintf(in_buffer, 20, "%lld\n", dev->bbu); yurex_read()
432 spin_unlock_irqrestore(&dev->lock, flags); yurex_read()
444 mutex_unlock(&dev->io_mutex); yurex_read()
451 struct usb_yurex *dev; yurex_write() local
460 dev = file->private_data; yurex_write()
466 mutex_lock(&dev->io_mutex); yurex_write()
467 if (!dev->interface) { /* already disconnected */ yurex_write()
468 mutex_unlock(&dev->io_mutex); yurex_write()
474 mutex_unlock(&dev->io_mutex); yurex_write()
478 memset(dev->cntl_buffer, CMD_PADDING, YUREX_BUF_SIZE); yurex_write()
483 dev->cntl_buffer[0] = buffer[0]; yurex_write()
484 dev->cntl_buffer[1] = buffer[1]; yurex_write()
485 dev->cntl_buffer[2] = CMD_EOF; yurex_write()
489 dev->cntl_buffer[0] = buffer[0]; yurex_write()
490 dev->cntl_buffer[1] = 0x00; yurex_write()
491 dev->cntl_buffer[2] = CMD_EOF; yurex_write()
499 dev->cntl_buffer[0] = CMD_SET; yurex_write()
501 dev->cntl_buffer[i] = (c>>32) & 0xff; yurex_write()
507 mutex_unlock(&dev->io_mutex); yurex_write()
512 prepare_to_wait(&dev->waitq, &wait, TASK_INTERRUPTIBLE); yurex_write()
513 dev_dbg(&dev->interface->dev, "%s - submit %c\n", __func__, yurex_write()
514 dev->cntl_buffer[0]); yurex_write()
515 retval = usb_submit_urb(dev->cntl_urb, GFP_KERNEL); yurex_write()
518 finish_wait(&dev->waitq, &wait); yurex_write()
520 mutex_unlock(&dev->io_mutex); yurex_write()
523 dev_err(&dev->interface->dev, yurex_write()
529 dev->bbu = c2; yurex_write()
H A Dldusb.c189 static void ld_usb_abort_transfers(struct ld_usb *dev) ld_usb_abort_transfers() argument
192 if (dev->interrupt_in_running) { ld_usb_abort_transfers()
193 dev->interrupt_in_running = 0; ld_usb_abort_transfers()
194 if (dev->intf) ld_usb_abort_transfers()
195 usb_kill_urb(dev->interrupt_in_urb); ld_usb_abort_transfers()
197 if (dev->interrupt_out_busy) ld_usb_abort_transfers()
198 if (dev->intf) ld_usb_abort_transfers()
199 usb_kill_urb(dev->interrupt_out_urb); ld_usb_abort_transfers()
205 static void ld_usb_delete(struct ld_usb *dev) ld_usb_delete() argument
207 ld_usb_abort_transfers(dev); ld_usb_delete()
210 usb_free_urb(dev->interrupt_in_urb); ld_usb_delete()
211 usb_free_urb(dev->interrupt_out_urb); ld_usb_delete()
212 kfree(dev->ring_buffer); ld_usb_delete()
213 kfree(dev->interrupt_in_buffer); ld_usb_delete()
214 kfree(dev->interrupt_out_buffer); ld_usb_delete()
215 kfree(dev); ld_usb_delete()
223 struct ld_usb *dev = urb->context; ld_usb_interrupt_in_callback() local
235 dev_dbg(&dev->intf->dev, ld_usb_interrupt_in_callback()
238 spin_lock(&dev->rbsl); ld_usb_interrupt_in_callback()
243 spin_lock(&dev->rbsl); ld_usb_interrupt_in_callback()
245 next_ring_head = (dev->ring_head+1) % ring_buffer_size; ld_usb_interrupt_in_callback()
246 if (next_ring_head != dev->ring_tail) { ld_usb_interrupt_in_callback()
247 actual_buffer = (size_t*)(dev->ring_buffer + dev->ring_head*(sizeof(size_t)+dev->interrupt_in_endpoint_size)); ld_usb_interrupt_in_callback()
250 memcpy(actual_buffer+1, dev->interrupt_in_buffer, urb->actual_length); ld_usb_interrupt_in_callback()
251 dev->ring_head = next_ring_head; ld_usb_interrupt_in_callback()
252 dev_dbg(&dev->intf->dev, "%s: received %d bytes\n", ld_usb_interrupt_in_callback()
255 dev_warn(&dev->intf->dev, ld_usb_interrupt_in_callback()
258 dev->buffer_overflow = 1; ld_usb_interrupt_in_callback()
264 if (dev->interrupt_in_running && !dev->buffer_overflow && dev->intf) { ld_usb_interrupt_in_callback()
265 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC); ld_usb_interrupt_in_callback()
267 dev_err(&dev->intf->dev, ld_usb_interrupt_in_callback()
269 dev->buffer_overflow = 1; ld_usb_interrupt_in_callback()
272 spin_unlock(&dev->rbsl); ld_usb_interrupt_in_callback()
274 dev->interrupt_in_done = 1; ld_usb_interrupt_in_callback()
275 wake_up_interruptible(&dev->read_wait); ld_usb_interrupt_in_callback()
283 struct ld_usb *dev = urb->context; ld_usb_interrupt_out_callback() local
290 dev_dbg(&dev->intf->dev, ld_usb_interrupt_out_callback()
294 dev->interrupt_out_busy = 0; ld_usb_interrupt_out_callback()
295 wake_up_interruptible(&dev->write_wait); ld_usb_interrupt_out_callback()
303 struct ld_usb *dev; ld_usb_open() local
319 dev = usb_get_intfdata(interface); ld_usb_open()
321 if (!dev) ld_usb_open()
325 if (mutex_lock_interruptible(&dev->mutex)) ld_usb_open()
329 if (dev->open_count) { ld_usb_open()
333 dev->open_count = 1; ld_usb_open()
336 dev->ring_head = 0; ld_usb_open()
337 dev->ring_tail = 0; ld_usb_open()
338 dev->buffer_overflow = 0; ld_usb_open()
339 usb_fill_int_urb(dev->interrupt_in_urb, ld_usb_open()
342 dev->interrupt_in_endpoint->bEndpointAddress), ld_usb_open()
343 dev->interrupt_in_buffer, ld_usb_open()
344 dev->interrupt_in_endpoint_size, ld_usb_open()
346 dev, ld_usb_open()
347 dev->interrupt_in_interval); ld_usb_open()
349 dev->interrupt_in_running = 1; ld_usb_open()
350 dev->interrupt_in_done = 0; ld_usb_open()
352 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); ld_usb_open()
354 dev_err(&interface->dev, "Couldn't submit interrupt_in_urb %d\n", retval); ld_usb_open()
355 dev->interrupt_in_running = 0; ld_usb_open()
356 dev->open_count = 0; ld_usb_open()
361 file->private_data = dev; ld_usb_open()
364 mutex_unlock(&dev->mutex); ld_usb_open()
374 struct ld_usb *dev; ld_usb_release() local
377 dev = file->private_data; ld_usb_release()
379 if (dev == NULL) { ld_usb_release()
384 if (mutex_lock_interruptible(&dev->mutex)) { ld_usb_release()
389 if (dev->open_count != 1) { ld_usb_release()
393 if (dev->intf == NULL) { ld_usb_release()
395 mutex_unlock(&dev->mutex); ld_usb_release()
396 /* unlock here as ld_usb_delete frees dev */ ld_usb_release()
397 ld_usb_delete(dev); ld_usb_release()
402 if (dev->interrupt_out_busy) ld_usb_release()
403 wait_event_interruptible_timeout(dev->write_wait, !dev->interrupt_out_busy, 2 * HZ); ld_usb_release()
404 ld_usb_abort_transfers(dev); ld_usb_release()
405 dev->open_count = 0; ld_usb_release()
408 mutex_unlock(&dev->mutex); ld_usb_release()
419 struct ld_usb *dev; ld_usb_poll() local
422 dev = file->private_data; ld_usb_poll()
424 if (!dev->intf) ld_usb_poll()
427 poll_wait(file, &dev->read_wait, wait); ld_usb_poll()
428 poll_wait(file, &dev->write_wait, wait); ld_usb_poll()
430 if (dev->ring_head != dev->ring_tail) ld_usb_poll()
432 if (!dev->interrupt_out_busy) ld_usb_poll()
444 struct ld_usb *dev; ld_usb_read() local
450 dev = file->private_data; ld_usb_read()
457 if (mutex_lock_interruptible(&dev->mutex)) { ld_usb_read()
463 if (dev->intf == NULL) { ld_usb_read()
470 spin_lock_irq(&dev->rbsl); ld_usb_read()
471 if (dev->ring_head == dev->ring_tail) { ld_usb_read()
472 dev->interrupt_in_done = 0; ld_usb_read()
473 spin_unlock_irq(&dev->rbsl); ld_usb_read()
478 retval = wait_event_interruptible(dev->read_wait, dev->interrupt_in_done); ld_usb_read()
482 spin_unlock_irq(&dev->rbsl); ld_usb_read()
486 actual_buffer = (size_t*)(dev->ring_buffer + dev->ring_tail*(sizeof(size_t)+dev->interrupt_in_endpoint_size)); ld_usb_read()
489 dev_warn(&dev->intf->dev, "Read buffer overflow, %zd bytes dropped\n", ld_usb_read()
497 dev->ring_tail = (dev->ring_tail+1) % ring_buffer_size; ld_usb_read()
501 spin_lock_irq(&dev->rbsl); ld_usb_read()
502 if (dev->buffer_overflow) { ld_usb_read()
503 dev->buffer_overflow = 0; ld_usb_read()
504 spin_unlock_irq(&dev->rbsl); ld_usb_read()
505 rv = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); ld_usb_read()
507 dev->buffer_overflow = 1; ld_usb_read()
509 spin_unlock_irq(&dev->rbsl); ld_usb_read()
514 mutex_unlock(&dev->mutex); ld_usb_read()
526 struct ld_usb *dev; ld_usb_write() local
530 dev = file->private_data; ld_usb_write()
537 if (mutex_lock_interruptible(&dev->mutex)) { ld_usb_write()
543 if (dev->intf == NULL) { ld_usb_write()
550 if (dev->interrupt_out_busy) { ld_usb_write()
555 retval = wait_event_interruptible(dev->write_wait, !dev->interrupt_out_busy); ld_usb_write()
562 bytes_to_write = min(count, write_buffer_size*dev->interrupt_out_endpoint_size); ld_usb_write()
564 dev_warn(&dev->intf->dev, "Write buffer overflow, %zd bytes dropped\n",count-bytes_to_write); ld_usb_write()
565 dev_dbg(&dev->intf->dev, "%s: count = %zd, bytes_to_write = %zd\n", ld_usb_write()
568 if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) { ld_usb_write()
573 if (dev->interrupt_out_endpoint == NULL) { ld_usb_write()
575 retval = usb_control_msg(interface_to_usbdev(dev->intf), ld_usb_write()
576 usb_sndctrlpipe(interface_to_usbdev(dev->intf), 0), ld_usb_write()
580 dev->interrupt_out_buffer, ld_usb_write()
584 dev_err(&dev->intf->dev, ld_usb_write()
591 usb_fill_int_urb(dev->interrupt_out_urb, ld_usb_write()
592 interface_to_usbdev(dev->intf), ld_usb_write()
593 usb_sndintpipe(interface_to_usbdev(dev->intf), ld_usb_write()
594 dev->interrupt_out_endpoint->bEndpointAddress), ld_usb_write()
595 dev->interrupt_out_buffer, ld_usb_write()
598 dev, ld_usb_write()
599 dev->interrupt_out_interval); ld_usb_write()
601 dev->interrupt_out_busy = 1; ld_usb_write()
604 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); ld_usb_write()
606 dev->interrupt_out_busy = 0; ld_usb_write()
607 dev_err(&dev->intf->dev, ld_usb_write()
615 mutex_unlock(&dev->mutex); ld_usb_write()
651 struct ld_usb *dev = NULL; ld_usb_probe() local
660 dev = kzalloc(sizeof(*dev), GFP_KERNEL); ld_usb_probe()
661 if (dev == NULL) { ld_usb_probe()
662 dev_err(&intf->dev, "Out of memory\n"); ld_usb_probe()
665 mutex_init(&dev->mutex); ld_usb_probe()
666 spin_lock_init(&dev->rbsl); ld_usb_probe()
667 dev->intf = intf; ld_usb_probe()
668 init_waitqueue_head(&dev->read_wait); ld_usb_probe()
669 init_waitqueue_head(&dev->write_wait); ld_usb_probe()
678 dev_err(&intf->dev, "Couldn't allocate string buffer\n"); ld_usb_probe()
693 dev->interrupt_in_endpoint = endpoint; ld_usb_probe()
696 dev->interrupt_out_endpoint = endpoint; ld_usb_probe()
698 if (dev->interrupt_in_endpoint == NULL) { ld_usb_probe()
699 dev_err(&intf->dev, "Interrupt in endpoint not found\n"); ld_usb_probe()
702 if (dev->interrupt_out_endpoint == NULL) ld_usb_probe()
703 dev_warn(&intf->dev, "Interrupt out endpoint not found (using control endpoint instead)\n"); ld_usb_probe()
705 dev->interrupt_in_endpoint_size = usb_endpoint_maxp(dev->interrupt_in_endpoint); ld_usb_probe()
706 dev->ring_buffer = kmalloc(ring_buffer_size*(sizeof(size_t)+dev->interrupt_in_endpoint_size), GFP_KERNEL); ld_usb_probe()
707 if (!dev->ring_buffer) { ld_usb_probe()
708 dev_err(&intf->dev, "Couldn't allocate ring_buffer\n"); ld_usb_probe()
711 dev->interrupt_in_buffer = kmalloc(dev->interrupt_in_endpoint_size, GFP_KERNEL); ld_usb_probe()
712 if (!dev->interrupt_in_buffer) { ld_usb_probe()
713 dev_err(&intf->dev, "Couldn't allocate interrupt_in_buffer\n"); ld_usb_probe()
716 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); ld_usb_probe()
717 if (!dev->interrupt_in_urb) { ld_usb_probe()
718 dev_err(&intf->dev, "Couldn't allocate interrupt_in_urb\n"); ld_usb_probe()
721 dev->interrupt_out_endpoint_size = dev->interrupt_out_endpoint ? usb_endpoint_maxp(dev->interrupt_out_endpoint) : ld_usb_probe()
723 dev->interrupt_out_buffer = kmalloc(write_buffer_size*dev->interrupt_out_endpoint_size, GFP_KERNEL); ld_usb_probe()
724 if (!dev->interrupt_out_buffer) { ld_usb_probe()
725 dev_err(&intf->dev, "Couldn't allocate interrupt_out_buffer\n"); ld_usb_probe()
728 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); ld_usb_probe()
729 if (!dev->interrupt_out_urb) { ld_usb_probe()
730 dev_err(&intf->dev, "Couldn't allocate interrupt_out_urb\n"); ld_usb_probe()
733 dev->interrupt_in_interval = min_interrupt_in_interval > dev->interrupt_in_endpoint->bInterval ? min_interrupt_in_interval : dev->interrupt_in_endpoint->bInterval; ld_usb_probe()
734 if (dev->interrupt_out_endpoint) ld_usb_probe()
735 dev->interrupt_out_interval = min_interrupt_out_interval > dev->interrupt_out_endpoint->bInterval ? min_interrupt_out_interval : dev->interrupt_out_endpoint->bInterval; ld_usb_probe()
738 usb_set_intfdata(intf, dev); ld_usb_probe()
743 dev_err(&intf->dev, "Not able to get a minor for this device.\n"); ld_usb_probe()
749 dev_info(&intf->dev, "LD USB Device #%d now attached to major %d minor %d\n", ld_usb_probe()
756 ld_usb_delete(dev); ld_usb_probe()
768 struct ld_usb *dev; ld_usb_disconnect() local
771 dev = usb_get_intfdata(intf); ld_usb_disconnect()
779 mutex_lock(&dev->mutex); ld_usb_disconnect()
782 if (!dev->open_count) { ld_usb_disconnect()
783 mutex_unlock(&dev->mutex); ld_usb_disconnect()
784 ld_usb_delete(dev); ld_usb_disconnect()
786 dev->intf = NULL; ld_usb_disconnect()
788 wake_up_interruptible_all(&dev->read_wait); ld_usb_disconnect()
789 wake_up_interruptible_all(&dev->write_wait); ld_usb_disconnect()
790 mutex_unlock(&dev->mutex); ld_usb_disconnect()
793 dev_info(&intf->dev, "LD USB Device #%d now disconnected\n", ld_usb_disconnect()
H A Dchaoskey.c9 * entropy for /dev/random and other kernel activities. It also offers
10 * a separate /dev/ entry to allow for direct access to the random
39 dev_dbg(&(usb_if)->dev, format, ## arg)
42 dev_err(&(usb_if)->dev, format, ## arg)
94 static void chaoskey_free(struct chaoskey *dev) chaoskey_free() argument
96 usb_dbg(dev->interface, "free"); chaoskey_free()
97 kfree(dev->name); chaoskey_free()
98 kfree(dev->buf); chaoskey_free()
99 kfree(dev); chaoskey_free()
109 struct chaoskey *dev; chaoskey_probe() local
142 dev = kzalloc(sizeof(struct chaoskey), GFP_KERNEL); chaoskey_probe()
144 if (dev == NULL) chaoskey_probe()
147 dev->buf = kmalloc(size, GFP_KERNEL); chaoskey_probe()
149 if (dev->buf == NULL) { chaoskey_probe()
150 kfree(dev); chaoskey_probe()
159 dev->name = kmalloc(strlen(udev->product) + 1 + chaoskey_probe()
161 if (dev->name == NULL) { chaoskey_probe()
162 kfree(dev->buf); chaoskey_probe()
163 kfree(dev); chaoskey_probe()
167 strcpy(dev->name, udev->product); chaoskey_probe()
168 strcat(dev->name, "-"); chaoskey_probe()
169 strcat(dev->name, udev->serial); chaoskey_probe()
172 dev->interface = interface; chaoskey_probe()
174 dev->in_ep = in_ep; chaoskey_probe()
176 dev->size = size; chaoskey_probe()
177 dev->present = 1; chaoskey_probe()
179 init_waitqueue_head(&dev->wait_q); chaoskey_probe()
181 mutex_init(&dev->lock); chaoskey_probe()
182 mutex_init(&dev->rng_lock); chaoskey_probe()
184 usb_set_intfdata(interface, dev); chaoskey_probe()
190 chaoskey_free(dev); chaoskey_probe()
194 dev->hwrng.name = dev->name ? dev->name : chaoskey_driver.name; chaoskey_probe()
195 dev->hwrng.read = chaoskey_rng_read; chaoskey_probe()
208 dev->hwrng.quality = 1024 + 1023; chaoskey_probe()
210 dev->hwrng_registered = (hwrng_register(&dev->hwrng) == 0); chaoskey_probe()
211 if (!dev->hwrng_registered) chaoskey_probe()
216 usb_dbg(interface, "chaoskey probe success, size %d", dev->size); chaoskey_probe()
222 struct chaoskey *dev; chaoskey_disconnect() local
225 dev = usb_get_intfdata(interface); chaoskey_disconnect()
226 if (!dev) { chaoskey_disconnect()
227 usb_dbg(interface, "disconnect failed - no dev"); chaoskey_disconnect()
231 if (dev->hwrng_registered) chaoskey_disconnect()
232 hwrng_unregister(&dev->hwrng); chaoskey_disconnect()
237 mutex_lock(&dev->lock); chaoskey_disconnect()
239 dev->present = 0; chaoskey_disconnect()
241 if (!dev->open) { chaoskey_disconnect()
242 mutex_unlock(&dev->lock); chaoskey_disconnect()
243 chaoskey_free(dev); chaoskey_disconnect()
245 mutex_unlock(&dev->lock); chaoskey_disconnect()
252 struct chaoskey *dev; chaoskey_open() local
262 dev = usb_get_intfdata(interface); chaoskey_open()
263 if (!dev) { chaoskey_open()
264 usb_dbg(interface, "open (dev)"); chaoskey_open()
268 file->private_data = dev; chaoskey_open()
269 mutex_lock(&dev->lock); chaoskey_open()
270 ++dev->open; chaoskey_open()
271 mutex_unlock(&dev->lock); chaoskey_open()
279 struct chaoskey *dev = file->private_data; chaoskey_release() local
282 if (dev == NULL) chaoskey_release()
285 interface = dev->interface; chaoskey_release()
289 mutex_lock(&dev->lock); chaoskey_release()
291 usb_dbg(interface, "open count at release is %d", dev->open); chaoskey_release()
293 if (dev->open <= 0) { chaoskey_release()
294 usb_dbg(interface, "invalid open count (%d)", dev->open); chaoskey_release()
295 mutex_unlock(&dev->lock); chaoskey_release()
299 --dev->open; chaoskey_release()
301 if (!dev->present) { chaoskey_release()
302 if (dev->open == 0) { chaoskey_release()
303 mutex_unlock(&dev->lock); chaoskey_release()
304 chaoskey_free(dev); chaoskey_release()
306 mutex_unlock(&dev->lock); chaoskey_release()
308 mutex_unlock(&dev->lock); chaoskey_release()
314 /* Fill the buffer. Called with dev->lock held
316 static int _chaoskey_fill(struct chaoskey *dev) _chaoskey_fill() argument
321 struct usb_device *udev = interface_to_usbdev(dev->interface); _chaoskey_fill()
323 usb_dbg(dev->interface, "fill"); _chaoskey_fill()
327 if (dev->valid != dev->used) { _chaoskey_fill()
328 usb_dbg(dev->interface, "not empty yet (valid %d used %d)", _chaoskey_fill()
329 dev->valid, dev->used); _chaoskey_fill()
334 if (!dev->present) { _chaoskey_fill()
335 usb_dbg(dev->interface, "device not present"); _chaoskey_fill()
340 result = usb_autopm_get_interface(dev->interface); _chaoskey_fill()
342 usb_dbg(dev->interface, "wakeup failed (result %d)", result); _chaoskey_fill()
347 usb_rcvbulkpipe(udev, dev->in_ep), _chaoskey_fill()
348 dev->buf, dev->size, &this_read, _chaoskey_fill()
352 usb_autopm_put_interface(dev->interface); _chaoskey_fill()
355 dev->valid = this_read; _chaoskey_fill()
356 dev->used = 0; _chaoskey_fill()
359 usb_dbg(dev->interface, "bulk_msg result %d this_read %d", _chaoskey_fill()
370 struct chaoskey *dev; chaoskey_read() local
376 dev = file->private_data; chaoskey_read()
378 if (dev == NULL || !dev->present) chaoskey_read()
381 usb_dbg(dev->interface, "read %zu", count); chaoskey_read()
388 result = mutex_lock_interruptible(&dev->rng_lock); chaoskey_read()
391 mutex_unlock(&dev->rng_lock); chaoskey_read()
393 result = mutex_lock_interruptible(&dev->lock); chaoskey_read()
396 if (dev->valid == dev->used) { chaoskey_read()
397 result = _chaoskey_fill(dev); chaoskey_read()
399 mutex_unlock(&dev->lock); chaoskey_read()
404 if (dev->used == dev->valid) { chaoskey_read()
405 mutex_unlock(&dev->lock); chaoskey_read()
410 this_time = dev->valid - dev->used; chaoskey_read()
414 remain = copy_to_user(buffer, dev->buf + dev->used, this_time); chaoskey_read()
421 dev->used += this_time - remain; chaoskey_read()
422 mutex_unlock(&dev->lock); chaoskey_read()
429 dev->used += this_time; chaoskey_read()
430 mutex_unlock(&dev->lock); chaoskey_read()
434 usb_dbg(dev->interface, "read %zu bytes", read_count); chaoskey_read()
437 usb_dbg(dev->interface, "empty read, result %d", result); chaoskey_read()
444 struct chaoskey *dev = container_of(rng, struct chaoskey, hwrng); chaoskey_rng_read() local
447 usb_dbg(dev->interface, "rng_read max %zu wait %d", max, wait); chaoskey_rng_read()
449 if (!dev->present) { chaoskey_rng_read()
450 usb_dbg(dev->interface, "device not present"); chaoskey_rng_read()
458 mutex_lock(&dev->rng_lock); chaoskey_rng_read()
460 mutex_lock(&dev->lock); chaoskey_rng_read()
462 mutex_unlock(&dev->rng_lock); chaoskey_rng_read()
468 if (dev->valid == dev->used) chaoskey_rng_read()
469 (void) _chaoskey_fill(dev); chaoskey_rng_read()
471 this_time = dev->valid - dev->used; chaoskey_rng_read()
475 memcpy(data, dev->buf + dev->used, this_time); chaoskey_rng_read()
477 dev->used += this_time; chaoskey_rng_read()
479 mutex_unlock(&dev->lock); chaoskey_rng_read()
481 usb_dbg(dev->interface, "rng_read this_time %d\n", this_time); chaoskey_rng_read()
/linux-4.4.14/drivers/char/pcmcia/
H A Dcm4000_cs.c46 #define reader_to_dev(x) (&x->p_dev->dev)
145 #define ZERO_DEV(dev) \
146 memset(&dev->atr_csum,0, \
204 #define ATRLENCK(dev,pos) \
205 if (pos>=dev->atr_len || pos>=MAX_ATR) \
319 static int parse_atr(struct cm4000_dev *dev) parse_atr() argument
325 DEBUGP(3, dev, "-> parse_atr: dev->atr_len = %i\n", dev->atr_len); parse_atr()
327 if (dev->atr_len < 3) { parse_atr()
328 DEBUGP(5, dev, "parse_atr: atr_len < 3\n"); parse_atr()
332 if (dev->atr[0] == 0x3f) parse_atr()
333 set_bit(IS_INVREV, &dev->flags); parse_atr()
335 clear_bit(IS_INVREV, &dev->flags); parse_atr()
338 ch = dev->atr[1]; parse_atr()
339 dev->proto = 0; /* XXX PROTO */ parse_atr()
341 dev->ta1 = 0x11; /* defaults to 9600 baud */ parse_atr()
345 dev->ta1 = dev->atr[2]; parse_atr()
346 DEBUGP(5, dev, "Card says FiDi is 0x%.2x\n", dev->ta1); parse_atr()
349 dev->ta1 = 0x11; parse_atr()
353 DEBUGP(5, dev, "Yi=%.2x\n", ch & 0xf0); parse_atr()
358 /* ATRLENCK(dev,ix); */ parse_atr()
360 ch = dev->atr[ix]; parse_atr()
363 DEBUGP(5, dev, "card is capable of T=1\n"); parse_atr()
366 DEBUGP(5, dev, "card is capable of T=0\n"); parse_atr()
372 DEBUGP(5, dev, "ix=%d noHist=%d any_t1=%d\n", parse_atr()
373 ix, dev->atr[1] & 15, any_t1); parse_atr()
374 if (ix + 1 + (dev->atr[1] & 0x0f) + any_t1 != dev->atr_len) { parse_atr()
375 DEBUGP(5, dev, "length error\n"); parse_atr()
379 set_bit(IS_ANY_T0, &dev->flags); parse_atr()
382 dev->atr_csum = 0; parse_atr()
384 for (i = 1; i < dev->atr_len; i++) parse_atr()
385 dev->atr_csum ^= dev->atr[i]; parse_atr()
386 if (dev->atr_csum) { parse_atr()
387 set_bit(IS_BAD_CSUM, &dev->flags); parse_atr()
388 DEBUGP(5, dev, "bad checksum\n"); parse_atr()
393 dev->proto = 1; /* XXX PROTO */ parse_atr()
394 set_bit(IS_ANY_T1, &dev->flags); parse_atr()
420 static void set_cardparameter(struct cm4000_dev *dev) set_cardparameter() argument
423 unsigned int iobase = dev->p_dev->resource[0]->start; set_cardparameter()
426 DEBUGP(3, dev, "-> set_cardparameter\n"); set_cardparameter()
428 dev->flags1 = dev->flags1 | (((dev->baudv - 1) & 0x0100) >> 8); set_cardparameter()
429 xoutb(dev->flags1, REG_FLAGS1(iobase)); set_cardparameter()
430 DEBUGP(5, dev, "flags1 = 0x%02x\n", dev->flags1); set_cardparameter()
433 xoutb((unsigned char)((dev->baudv - 1) & 0xFF), REG_BAUDRATE(iobase)); set_cardparameter()
435 DEBUGP(5, dev, "baudv = %i -> write 0x%02x\n", dev->baudv, set_cardparameter()
436 ((dev->baudv - 1) & 0xFF)); set_cardparameter()
440 if (!memcmp(dev->atr, card_fixups[i].atr, set_cardparameter()
446 DEBUGP(3, dev, "<- set_cardparameter\n"); set_cardparameter()
449 static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq) set_protocol() argument
456 unsigned int iobase = dev->p_dev->resource[0]->start; set_protocol()
460 DEBUGP(3, dev, "-> set_protocol\n"); set_protocol()
461 DEBUGP(5, dev, "ptsreq->Protocol = 0x%.8x, ptsreq->Flags=0x%.8x, " set_protocol()
468 dev->pts[0] = 0xff; set_protocol()
469 dev->pts[1] = 0x00; set_protocol()
472 dev->pts[1]++; set_protocol()
473 dev->proto = dev->pts[1]; /* Set new protocol */ set_protocol()
474 dev->pts[1] = (0x01 << 4) | (dev->pts[1]); set_protocol()
477 DEBUGP(5, dev, "Ta(1) from ATR is 0x%.2x\n", dev->ta1); set_protocol()
479 dev->pts[2] = fi_di_table[dev->ta1 & 0x0F][(dev->ta1 >> 4) & 0x0F]; set_protocol()
482 dev->pts[3] = dev->pts[0] ^ dev->pts[1] ^ dev->pts[2]; set_protocol()
484 DEBUGP(5, dev, "pts0=%.2x, pts1=%.2x, pts2=%.2x, pts3=%.2x\n", set_protocol()
485 dev->pts[0], dev->pts[1], dev->pts[2], dev->pts[3]); set_protocol()
488 if (test_bit(IS_INVREV, &dev->flags)) set_protocol()
489 str_invert_revert(dev->pts, 4); set_protocol()
495 DEBUGP(5, dev, "Enable access to the messages buffer\n"); set_protocol()
496 dev->flags1 = 0x20 /* T_Active */ set_protocol()
497 | (test_bit(IS_INVREV, &dev->flags) ? 0x02 : 0x00) /* inv parity */ set_protocol()
498 | ((dev->baudv >> 8) & 0x01); /* MSB-baud */ set_protocol()
499 xoutb(dev->flags1, REG_FLAGS1(iobase)); set_protocol()
501 DEBUGP(5, dev, "Enable message buffer -> flags1 = 0x%.2x\n", set_protocol()
502 dev->flags1); set_protocol()
505 DEBUGP(5, dev, "Write challenge to buffer: "); set_protocol()
508 xoutb(dev->pts[i], REG_BUF_DATA(iobase)); /* buf data */ set_protocol()
510 pr_debug("0x%.2x ", dev->pts[i]); set_protocol()
518 DEBUGP(5, dev, "Set number of bytes to write\n");
526 DEBUGP(5, dev, "Waiting for NumRecBytes getting valid\n");
530 DEBUGP(5, dev, "NumRecBytes is valid\n");
536 DEBUGP(5, dev, "Timeout waiting for NumRecBytes getting "
542 DEBUGP(5, dev, "Reading NumRecBytes\n");
546 DEBUGP(2, dev, "NumRecBytes = %i\n", num_bytes_read);
557 DEBUGP(5, dev, "Timeout reading num_bytes_read\n");
562 DEBUGP(5, dev, "Reset the CARDMAN CONTROLLER\n");
566 DEBUGP(5, dev, "Read PPS reply\n");
573 DEBUGP(2, dev, "PTSreply: ");
580 DEBUGP(5, dev, "Clear Tactive in Flags1\n");
584 if ((dev->pts[0] == pts_reply[0]) &&
585 (dev->pts[1] == pts_reply[1]) &&
586 (dev->pts[2] == pts_reply[2]) && (dev->pts[3] == pts_reply[3])) {
588 dev->baudv = calc_baudv(dev->pts[2]);
589 set_cardparameter(dev); variable
590 } else if ((dev->pts[0] == pts_reply[0]) &&
591 ((dev->pts[1] & 0xef) == pts_reply[1]) &&
594 dev->baudv = calc_baudv(0x11);
595 set_cardparameter(dev); variable
600 DEBUGP(3, dev, "<- set_protocol\n");
604 static int io_detect_cm4000(unsigned int iobase, struct cm4000_dev *dev)
609 clear_bit(IS_ATR_VALID, &dev->flags);
610 set_bit(IS_CMM_ABSENT, &dev->flags);
614 xoutb(dev->flags1 | 0x40, REG_FLAGS1(iobase));
616 clear_bit(IS_ATR_VALID, &dev->flags);
617 set_bit(IS_CMM_ABSENT, &dev->flags);
621 xoutb(dev->flags1, REG_FLAGS1(iobase));
625 static void terminate_monitor(struct cm4000_dev *dev)
631 DEBUGP(3, dev, "-> terminate_monitor\n");
632 wait_event_interruptible(dev->devq,
634 (void *)&dev->flags));
641 DEBUGP(5, dev, "Now allow last cycle of monitor!\n");
642 while (test_bit(LOCK_MONITOR, (void *)&dev->flags))
645 DEBUGP(5, dev, "Delete timer\n");
646 del_timer_sync(&dev->timer);
648 dev->monitor_running = 0;
651 DEBUGP(3, dev, "<- terminate_monitor\n");
664 struct cm4000_dev *dev = (struct cm4000_dev *) p;
665 unsigned int iobase = dev->p_dev->resource[0]->start;
670 DEBUGP(7, dev, "-> monitor_card\n");
673 if (test_and_set_bit(LOCK_MONITOR, &dev->flags)) {
674 DEBUGP(4, dev, "About to stop monitor\n");
676 dev->rlen =
677 dev->rpos =
678 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0;
679 dev->mstate = M_FETCH_ATR;
680 clear_bit(LOCK_MONITOR, &dev->flags);
682 wake_up_interruptible(&dev->devq);
683 DEBUGP(2, dev, "<- monitor_card (we are done now)\n");
688 if (test_and_set_bit(LOCK_IO, (void *)&dev->flags)) {
689 DEBUGP(4, dev, "Couldn't get IO lock\n");
694 dev->flags0 = xinb(REG_FLAGS0(iobase));
695 DEBUGP(7, dev, "dev->flags0 = 0x%2x\n", dev->flags0);
696 DEBUGP(7, dev, "smartcard present: %s\n",
697 dev->flags0 & 1 ? "yes" : "no");
698 DEBUGP(7, dev, "cardman present: %s\n",
699 dev->flags0 == 0xff ? "no" : "yes");
701 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */
702 || dev->flags0 == 0xff) { /* no cardman inserted */
704 dev->rlen =
705 dev->rpos =
706 dev->atr_csum = dev->atr_len_retry = dev->cwarn = 0;
707 dev->mstate = M_FETCH_ATR;
709 dev->flags &= 0x000000ff; /* only keep IO and MONITOR locks */
711 if (dev->flags0 == 0xff) {
712 DEBUGP(4, dev, "set IS_CMM_ABSENT bit\n");
713 set_bit(IS_CMM_ABSENT, &dev->flags);
714 } else if (test_bit(IS_CMM_ABSENT, &dev->flags)) {
715 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit "
717 clear_bit(IS_CMM_ABSENT, &dev->flags);
721 } else if ((dev->flags0 & 1) && test_bit(IS_CMM_ABSENT, &dev->flags)) {
724 DEBUGP(4, dev, "clear IS_CMM_ABSENT bit (card is inserted)\n");
725 clear_bit(IS_CMM_ABSENT, &dev->flags);
728 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) {
729 DEBUGP(7, dev, "believe ATR is already valid (do nothing)\n");
733 switch (dev->mstate) {
736 DEBUGP(4, dev, "M_CARDOFF\n");
740 dev->mdelay = T_10MSEC;
748 dev->rlen =
749 dev->rpos =
750 dev->atr_csum =
751 dev->atr_len_retry = dev->cwarn = 0;
752 dev->mstate = M_FETCH_ATR;
755 dev->mdelay = T_50MSEC;
759 DEBUGP(4, dev, "M_FETCH_ATR\n");
761 DEBUGP(4, dev, "Reset BAUDV to 9600\n");
762 dev->baudv = 0x173; /* 9600 */
768 xoutb(dev->flags0 & 2 ? 0x46 : 0x44, REG_FLAGS0(iobase));
769 dev->mdelay = T_40MSEC;
770 dev->mstate = M_TIMEOUT_WAIT;
773 DEBUGP(4, dev, "M_TIMEOUT_WAIT\n");
775 io_read_num_rec_bytes(iobase, &dev->atr_len);
776 dev->mdelay = T_10MSEC;
777 dev->mstate = M_READ_ATR_LEN;
780 DEBUGP(4, dev, "M_READ_ATR_LEN\n");
785 if (dev->atr_len == io_read_num_rec_bytes(iobase, &s)) {
786 if (dev->atr_len_retry++ >= MAX_ATR_LEN_RETRY) { /* + XX msec */
787 dev->mdelay = T_10MSEC;
788 dev->mstate = M_READ_ATR;
791 dev->atr_len = s;
792 dev->atr_len_retry = 0; /* set new timeout */
795 DEBUGP(4, dev, "Current ATR_LEN = %i\n", dev->atr_len);
798 DEBUGP(4, dev, "M_READ_ATR\n");
800 for (i = 0; i < dev->atr_len; i++) {
802 dev->atr[i] = inb(REG_BUF_DATA(iobase));
805 DEBUGP(4, dev, "Deactivate T_Active flags\n");
806 dev->flags1 = 0x01;
807 xoutb(dev->flags1, REG_FLAGS1(iobase));
810 set_bit(IS_ATR_PRESENT, &dev->flags);
811 if (dev->atr[0] == 0x03)
812 str_invert_revert(dev->atr, dev->atr_len);
813 atrc = parse_atr(dev);
815 dev->mdelay = 0;
816 dev->mstate = M_BAD_CARD;
818 dev->mdelay = T_50MSEC;
819 dev->mstate = M_ATR_PRESENT;
820 set_bit(IS_ATR_VALID, &dev->flags);
823 if (test_bit(IS_ATR_VALID, &dev->flags) == 1) {
824 DEBUGP(4, dev, "monitor_card: ATR valid\n");
827 if ((test_bit(IS_AUTOPPS_ACT, &dev->flags) == 0) &&
828 (dev->ta1 != 0x11) &&
829 !(test_bit(IS_ANY_T0, &dev->flags) &&
830 test_bit(IS_ANY_T1, &dev->flags))) {
831 DEBUGP(4, dev, "Perform AUTOPPS\n");
832 set_bit(IS_AUTOPPS_ACT, &dev->flags);
833 ptsreq.protocol = (0x01 << dev->proto);
838 if (set_protocol(dev, &ptsreq) == 0) {
839 DEBUGP(4, dev, "AUTOPPS ret SUCC\n");
840 clear_bit(IS_AUTOPPS_ACT, &dev->flags);
841 wake_up_interruptible(&dev->atrq);
843 DEBUGP(4, dev, "AUTOPPS failed: "
846 clear_bit(IS_ATR_PRESENT, &dev->flags);
847 clear_bit(IS_ATR_VALID, &dev->flags);
848 dev->rlen =
849 dev->rpos =
850 dev->atr_csum =
851 dev->atr_len_retry = dev->cwarn = 0;
852 dev->mstate = M_FETCH_ATR;
854 dev->mdelay = T_50MSEC;
859 set_cardparameter(dev);
860 if (test_bit(IS_AUTOPPS_ACT, &dev->flags) == 1)
861 DEBUGP(4, dev, "AUTOPPS already active "
863 if (dev->ta1 == 0x11)
864 DEBUGP(4, dev, "No AUTOPPS necessary "
866 if (test_bit(IS_ANY_T0, &dev->flags)
867 && test_bit(IS_ANY_T1, &dev->flags))
868 DEBUGP(4, dev, "Do NOT perform AUTOPPS "
870 clear_bit(IS_AUTOPPS_ACT, &dev->flags);
871 wake_up_interruptible(&dev->atrq);
874 DEBUGP(4, dev, "ATR invalid\n");
875 wake_up_interruptible(&dev->atrq);
879 DEBUGP(4, dev, "M_BAD_CARD\n");
881 if (dev->cwarn == 0 || dev->cwarn == 10) {
882 set_bit(IS_BAD_CARD, &dev->flags);
883 dev_warn(&dev->p_dev->dev, MODULE_NAME ": ");
884 if (test_bit(IS_BAD_CSUM, &dev->flags)) {
885 DEBUGP(4, dev, "ATR checksum (0x%.2x, should "
886 "be zero) failed\n", dev->atr_csum);
889 else if (test_bit(IS_BAD_LENGTH, &dev->flags)) {
890 DEBUGP(4, dev, "ATR length error\n");
892 DEBUGP(4, dev, "card damaged or wrong way "
896 dev->cwarn = 0;
897 wake_up_interruptible(&dev->atrq); /* wake open */
899 dev->cwarn++;
900 dev->mdelay = T_100MSEC;
901 dev->mstate = M_FETCH_ATR;
904 DEBUGP(7, dev, "Unknown action\n");
909 DEBUGP(7, dev, "release_io\n");
910 clear_bit(LOCK_IO, &dev->flags);
911 wake_up_interruptible(&dev->ioq); /* whoever needs IO */
914 DEBUGP(7, dev, "<- monitor_card (returns with timer)\n");
915 mod_timer(&dev->timer, jiffies + dev->mdelay);
916 clear_bit(LOCK_MONITOR, &dev->flags);
924 struct cm4000_dev *dev = filp->private_data;
925 unsigned int iobase = dev->p_dev->resource[0]->start;
929 DEBUGP(2, dev, "-> cmm_read(%s,%d)\n", current->comm, current->pid);
934 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */
935 test_bit(IS_CMM_ABSENT, &dev->flags))
938 if (test_bit(IS_BAD_CSUM, &dev->flags))
943 (dev->atrq,
945 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) {
951 if (test_bit(IS_ATR_VALID, &dev->flags) == 0)
956 (dev->readq,
957 ((filp->f_flags & O_NONBLOCK) || (dev->rpos < dev->rlen)))) {
965 (dev->ioq,
967 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) {
974 dev->flags0 = inb(REG_FLAGS0(iobase));
975 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */
976 || dev->flags0 == 0xff) { /* no cardman inserted */
977 clear_bit(IS_ATR_VALID, &dev->flags);
978 if (dev->flags0 & 1) {
979 set_bit(IS_CMM_ABSENT, &dev->flags);
987 DEBUGP(4, dev, "begin read answer\n");
988 j = min(count, (size_t)(dev->rlen - dev->rpos));
989 k = dev->rpos;
992 DEBUGP(4, dev, "read1 j=%d\n", j);
995 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase));
997 j = min(count, (size_t)(dev->rlen - dev->rpos));
999 DEBUGP(4, dev, "read2 j=%d\n", j);
1000 dev->flags1 |= 0x10; /* MSB buf addr set */
1001 xoutb(dev->flags1, REG_FLAGS1(iobase));
1004 dev->rbuf[i] = xinb(REG_BUF_DATA(iobase));
1008 if (dev->proto == 0 && count > dev->rlen - dev->rpos && i) {
1009 DEBUGP(4, dev, "T=0 and count > buffer\n");
1010 dev->rbuf[i] = dev->rbuf[i - 1];
1011 dev->rbuf[i - 1] = dev->procbyte;
1016 dev->rpos = dev->rlen + 1;
1019 DEBUGP(4, dev, "Clear T1Active\n");
1020 dev->flags1 &= 0xdf;
1021 xoutb(dev->flags1, REG_FLAGS1(iobase));
1025 if (!io_detect_cm4000(iobase, dev)) {
1030 if (test_bit(IS_INVREV, &dev->flags) && count > 0)
1031 str_invert_revert(dev->rbuf, count);
1033 if (copy_to_user(buf, dev->rbuf, count))
1037 clear_bit(LOCK_IO, &dev->flags);
1038 wake_up_interruptible(&dev->ioq);
1040 DEBUGP(2, dev, "<- cmm_read returns: rc = %Zi\n",
1048 struct cm4000_dev *dev = filp->private_data;
1049 unsigned int iobase = dev->p_dev->resource[0]->start;
1059 DEBUGP(2, dev, "-> cmm_write(%s,%d)\n", current->comm, current->pid);
1064 if (dev->proto == 0 && count < 4) {
1066 DEBUGP(4, dev, "T0 short write\n");
1072 sendT0 = dev->proto ? 0 : nr > 5 ? 0x08 : 0;
1074 if (!pcmcia_dev_present(dev->p_dev) || /* device removed */
1075 test_bit(IS_CMM_ABSENT, &dev->flags))
1078 if (test_bit(IS_BAD_CSUM, &dev->flags)) {
1079 DEBUGP(4, dev, "bad csum\n");
1095 (dev->atrq,
1097 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags) != 0)))) {
1103 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) { /* invalid atr */
1104 DEBUGP(4, dev, "invalid ATR\n");
1110 (dev->ioq,
1112 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags) == 0)))) {
1118 if (copy_from_user(dev->sbuf, buf, ((count > 512) ? 512 : count)))
1122 dev->flags0 = inb(REG_FLAGS0(iobase));
1123 if ((dev->flags0 & 1) == 0 /* no smartcard inserted */
1124 || dev->flags0 == 0xff) { /* no cardman inserted */
1125 clear_bit(IS_ATR_VALID, &dev->flags);
1126 if (dev->flags0 & 1) {
1127 set_bit(IS_CMM_ABSENT, &dev->flags);
1130 DEBUGP(4, dev, "IO error\n");
1138 if (!io_detect_cm4000(iobase, dev)) {
1144 dev->flags1 |= (sendT0);
1146 set_cardparameter(dev);
1151 dev->flags1 = 0x20 /* T_Active */
1153 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)/* inverse parity */
1154 | (((dev->baudv - 1) & 0x0100) >> 8); /* MSB-Baud */
1155 DEBUGP(1, dev, "set dev->flags1 = 0x%.2x\n", dev->flags1);
1156 xoutb(dev->flags1, REG_FLAGS1(iobase));
1159 DEBUGP(4, dev, "Xmit data\n");
1162 dev->flags1 = 0x20 /* T_Active */
1165 | (test_bit(IS_INVREV, &dev->flags) ? 2 : 0)
1166 | (((dev->baudv - 1) & 0x0100) >> 8) /* MSB-Baud */
1168 DEBUGP(4, dev, "dev->flags = 0x%.2x - set address "
1169 "high\n", dev->flags1);
1170 xoutb(dev->flags1, REG_FLAGS1(iobase));
1172 if (test_bit(IS_INVREV, &dev->flags)) {
1173 DEBUGP(4, dev, "Apply inverse convention for 0x%.2x "
1174 "-> 0x%.2x\n", (unsigned char)dev->sbuf[i],
1175 invert_revert(dev->sbuf[i]));
1177 xoutb(invert_revert(dev->sbuf[i]),
1181 xoutb(dev->sbuf[i], REG_BUF_DATA(iobase));
1184 DEBUGP(4, dev, "Xmit done\n");
1186 if (dev->proto == 0) {
1189 DEBUGP(4, dev, "T=0 assumes 0 byte reply\n");
1191 if (test_bit(IS_INVREV, &dev->flags))
1204 nsend = 5 + (unsigned char)dev->sbuf[4];
1205 if (dev->sbuf[4] == 0)
1213 if (test_bit(IS_INVREV, &dev->flags)) {
1214 DEBUGP(4, dev, "T=0 set Procedure byte (inverse-reverse) "
1215 "0x%.2x\n", invert_revert(dev->sbuf[1]));
1216 xoutb(invert_revert(dev->sbuf[1]), REG_NUM_BYTES(iobase));
1218 DEBUGP(4, dev, "T=0 set Procedure byte 0x%.2x\n", dev->sbuf[1]);
1219 xoutb(dev->sbuf[1], REG_NUM_BYTES(iobase));
1222 DEBUGP(1, dev, "set NumSendBytes = 0x%.2x\n",
1226 DEBUGP(1, dev, "Trigger CARDMAN CONTROLLER (0x%.2x)\n",
1228 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */
1229 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */
1232 | (dev->flags0 & 2 ? 0 : 4) /* power on if needed */
1233 |(dev->proto ? 0x10 : 0x08) /* T=1/T=0 */
1238 if (dev->proto == 1) {
1239 DEBUGP(4, dev, "Wait for xmit done\n");
1246 DEBUGP(4, dev, "timeout waiting for xmit done\n");
1255 if (dev->proto) {
1261 DEBUGP(4, dev, "infolen=%d\n", infolen);
1267 DEBUGP(4, dev, "timeout waiting for infoLen\n");
1272 clear_bit(IS_PROCBYTE_PRESENT, &dev->flags);
1275 io_read_num_rec_bytes(iobase, &dev->rlen);
1277 if (dev->proto) {
1278 if (dev->rlen >= infolen + 4)
1284 if (s > dev->rlen) {
1285 DEBUGP(1, dev, "NumRecBytes inc (reset timeout)\n");
1287 dev->rlen = s;
1296 else if (dev->proto == 0) {
1299 DEBUGP(1, dev, "NoProcedure byte set\n");
1303 DEBUGP(1, dev, "NoProcedure byte unset "
1305 dev->procbyte = inb(REG_FLAGS1(iobase));
1306 DEBUGP(1, dev, "Read procedure byte 0x%.2x\n",
1307 dev->procbyte);
1311 DEBUGP(1, dev, "T0Done flag (read reply)\n");
1315 if (dev->proto)
1319 DEBUGP(1, dev, "timeout waiting for numRecBytes\n");
1323 if (dev->proto == 0) {
1324 DEBUGP(1, dev, "Wait for T0Done bit to be set\n");
1331 DEBUGP(1, dev, "timeout waiting for T0Done\n");
1336 dev->procbyte = inb(REG_FLAGS1(iobase));
1337 DEBUGP(4, dev, "Read procedure byte 0x%.2x\n",
1338 dev->procbyte);
1340 io_read_num_rec_bytes(iobase, &dev->rlen);
1341 DEBUGP(4, dev, "Read NumRecBytes = %i\n", dev->rlen);
1346 dev->rpos = dev->proto ? 0 : nr == 4 ? 5 : nr > dev->rlen ? 5 : nr;
1347 DEBUGP(4, dev, "dev->rlen = %i, dev->rpos = %i, nr = %i\n",
1348 dev->rlen, dev->rpos, nr);
1351 DEBUGP(4, dev, "Reset SM\n");
1355 DEBUGP(4, dev, "Write failed but clear T_Active\n");
1356 dev->flags1 &= 0xdf;
1357 xoutb(dev->flags1, REG_FLAGS1(iobase));
1360 clear_bit(LOCK_IO, &dev->flags);
1361 wake_up_interruptible(&dev->ioq);
1362 wake_up_interruptible(&dev->readq); /* tell read we have data */
1365 memset((char *)dev->sbuf, 0, 512);
1368 DEBUGP(2, dev, "<- cmm_write\n");
1372 static void start_monitor(struct cm4000_dev *dev)
1374 DEBUGP(3, dev, "-> start_monitor\n");
1375 if (!dev->monitor_running) {
1376 DEBUGP(5, dev, "create, init and add timer\n");
1377 setup_timer(&dev->timer, monitor_card, (unsigned long)dev);
1378 dev->monitor_running = 1;
1379 mod_timer(&dev->timer, jiffies);
1381 DEBUGP(5, dev, "monitor already running\n");
1382 DEBUGP(3, dev, "<- start_monitor\n");
1385 static void stop_monitor(struct cm4000_dev *dev)
1387 DEBUGP(3, dev, "-> stop_monitor\n");
1388 if (dev->monitor_running) {
1389 DEBUGP(5, dev, "stopping monitor\n");
1390 terminate_monitor(dev);
1392 clear_bit(IS_ATR_VALID, &dev->flags);
1393 clear_bit(IS_ATR_PRESENT, &dev->flags);
1395 DEBUGP(5, dev, "monitor already stopped\n");
1396 DEBUGP(3, dev, "<- stop_monitor\n");
1401 struct cm4000_dev *dev = filp->private_data;
1402 unsigned int iobase = dev->p_dev->resource[0]->start;
1416 DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode),
1424 DEBUGP(4, dev, "DEV_OK false\n");
1428 if (test_bit(IS_CMM_ABSENT, &dev->flags)) {
1429 DEBUGP(4, dev, "CMM_ABSENT flag set\n");
1435 DEBUGP(4, dev, "ioctype mismatch\n");
1439 DEBUGP(4, dev, "iocnr mismatch\n");
1444 DEBUGP(4, dev, "iocdir=%.4x iocr=%.4x iocw=%.4x iocsize=%d cmd=%.4x\n",
1459 DEBUGP(4, dev, " ... in CM_IOCGSTATUS\n");
1465 status = dev->flags0 & 3;
1466 if (test_bit(IS_ATR_PRESENT, &dev->flags))
1468 if (test_bit(IS_ATR_VALID, &dev->flags))
1470 if (test_bit(IS_CMM_ABSENT, &dev->flags))
1472 if (test_bit(IS_BAD_CARD, &dev->flags))
1479 DEBUGP(4, dev, "... in CM_IOCGATR\n");
1485 (dev->atrq,
1487 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags)
1497 if (test_bit(IS_ATR_VALID, &dev->flags) == 0) {
1503 if (copy_to_user(atreq->atr, dev->atr,
1504 dev->atr_len))
1507 tmp = dev->atr_len;
1517 DEBUGP(4, dev, "... in CM_IOCARDOFF\n");
1518 if (dev->flags0 & 0x01) {
1519 DEBUGP(4, dev, " Card inserted\n");
1521 DEBUGP(2, dev, " No card inserted\n");
1523 if (dev->flags0 & 0x02) {
1524 DEBUGP(4, dev, " Card powered\n");
1526 DEBUGP(2, dev, " Card not powered\n");
1531 if ((dev->flags0 & 0x01) && (dev->flags0 & 0x02)) {
1535 (dev->ioq,
1537 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags)
1546 DEBUGP(4, dev, "Set Flags0=0x42 \n");
1548 clear_bit(IS_ATR_PRESENT, &dev->flags);
1549 clear_bit(IS_ATR_VALID, &dev->flags);
1550 dev->mstate = M_CARDOFF;
1551 clear_bit(LOCK_IO, &dev->flags);
1553 (dev->atrq,
1555 || (test_bit(IS_ATR_VALID, (void *)&dev->flags) !=
1565 clear_bit(LOCK_IO, &dev->flags);
1566 wake_up_interruptible(&dev->ioq);
1581 DEBUGP(4, dev, "... in CM_IOCSPTS\n");
1584 (dev->atrq,
1586 || (test_bit(IS_ATR_PRESENT, (void *)&dev->flags)
1596 (dev->ioq,
1598 || (test_and_set_bit(LOCK_IO, (void *)&dev->flags)
1607 if ((rc = set_protocol(dev, &krnptsreq)) != 0) {
1609 dev->mstate = M_FETCH_ATR;
1610 clear_bit(IS_ATR_VALID, &dev->flags);
1613 clear_bit(LOCK_IO, &dev->flags);
1614 wake_up_interruptible(&dev->ioq);
1624 DEBUGP(4, dev, "... in default (unknown IOCTL code)\n");
1634 struct cm4000_dev *dev;
1654 dev = link->priv;
1655 filp->private_data = dev;
1657 DEBUGP(2, dev, "-> cmm_open(device=%d.%d process=%s,%d)\n",
1664 ZERO_DEV(dev);
1677 dev->mdelay = T_50MSEC;
1680 start_monitor(dev);
1684 DEBUGP(2, dev, "<- cmm_open\n");
1693 struct cm4000_dev *dev;
1704 dev = link->priv;
1706 DEBUGP(2, dev, "-> cmm_close(maj/min=%d.%d)\n",
1709 stop_monitor(dev);
1711 ZERO_DEV(dev);
1714 wake_up(&dev->devq); /* socket removed? */
1716 DEBUGP(2, dev, "cmm_close\n");
1722 struct cm4000_dev *dev = link->priv;
1727 DEBUGP(3, dev, "-> cmm_cm4000_release\n");
1735 wait_event(dev->devq, (link->open == 0));
1737 /* dev->devq=NULL; this cannot be zeroed earlier */
1738 DEBUGP(3, dev, "<- cmm_cm4000_release\n");
1751 struct cm4000_dev *dev;
1762 dev = link->priv;
1773 struct cm4000_dev *dev;
1775 dev = link->priv;
1776 stop_monitor(dev);
1783 struct cm4000_dev *dev;
1785 dev = link->priv;
1787 start_monitor(dev);
1800 struct cm4000_dev *dev;
1813 dev = kzalloc(sizeof(struct cm4000_dev), GFP_KERNEL);
1814 if (dev == NULL)
1817 dev->p_dev = link;
1818 link->priv = dev;
1821 init_waitqueue_head(&dev->devq);
1822 init_waitqueue_head(&dev->ioq);
1823 init_waitqueue_head(&dev->atrq);
1824 init_waitqueue_head(&dev->readq);
1829 kfree(dev);
1840 struct cm4000_dev *dev = link->priv;
1850 stop_monitor(dev);
1855 kfree(dev);
H A Dcm4040_cs.c40 #define reader_to_dev(x) (&x->p_dev->dev)
109 struct reader_dev *dev = (struct reader_dev *) dummy; cm4040_do_poll() local
110 unsigned int obs = xinb(dev->p_dev->resource[0]->start cm4040_do_poll()
114 set_bit(BS_READABLE, &dev->buffer_status); cm4040_do_poll()
115 DEBUGP(4, dev, "waking up read_wait\n"); cm4040_do_poll()
116 wake_up_interruptible(&dev->read_wait); cm4040_do_poll()
118 clear_bit(BS_READABLE, &dev->buffer_status); cm4040_do_poll()
121 set_bit(BS_WRITABLE, &dev->buffer_status); cm4040_do_poll()
122 DEBUGP(4, dev, "waking up write_wait\n"); cm4040_do_poll()
123 wake_up_interruptible(&dev->write_wait); cm4040_do_poll()
125 clear_bit(BS_WRITABLE, &dev->buffer_status); cm4040_do_poll()
127 if (dev->buffer_status) cm4040_do_poll()
128 wake_up_interruptible(&dev->poll_wait); cm4040_do_poll()
130 mod_timer(&dev->poll_timer, jiffies + POLL_PERIOD); cm4040_do_poll()
133 static void cm4040_stop_poll(struct reader_dev *dev) cm4040_stop_poll() argument
135 del_timer_sync(&dev->poll_timer); cm4040_stop_poll()
138 static int wait_for_bulk_out_ready(struct reader_dev *dev) wait_for_bulk_out_ready() argument
141 int iobase = dev->p_dev->resource[0]->start; wait_for_bulk_out_ready()
146 DEBUGP(4, dev, "BulkOut empty (i=%d)\n", i); wait_for_bulk_out_ready()
151 DEBUGP(4, dev, "wait_event_interruptible_timeout(timeout=%ld\n", wait_for_bulk_out_ready()
152 dev->timeout); wait_for_bulk_out_ready()
153 rc = wait_event_interruptible_timeout(dev->write_wait, wait_for_bulk_out_ready()
155 &dev->buffer_status), wait_for_bulk_out_ready()
156 dev->timeout); wait_for_bulk_out_ready()
159 DEBUGP(4, dev, "woke up: BulkOut empty\n"); wait_for_bulk_out_ready()
161 DEBUGP(4, dev, "woke up: BulkOut full, returning 0 :(\n"); wait_for_bulk_out_ready()
163 DEBUGP(4, dev, "woke up: signal arrived\n"); wait_for_bulk_out_ready()
169 static int write_sync_reg(unsigned char val, struct reader_dev *dev) write_sync_reg() argument
171 int iobase = dev->p_dev->resource[0]->start; write_sync_reg()
174 rc = wait_for_bulk_out_ready(dev); write_sync_reg()
179 rc = wait_for_bulk_out_ready(dev); write_sync_reg()
186 static int wait_for_bulk_in_ready(struct reader_dev *dev) wait_for_bulk_in_ready() argument
189 int iobase = dev->p_dev->resource[0]->start; wait_for_bulk_in_ready()
194 DEBUGP(3, dev, "BulkIn full (i=%d)\n", i); wait_for_bulk_in_ready()
199 DEBUGP(4, dev, "wait_event_interruptible_timeout(timeout=%ld\n", wait_for_bulk_in_ready()
200 dev->timeout); wait_for_bulk_in_ready()
201 rc = wait_event_interruptible_timeout(dev->read_wait, wait_for_bulk_in_ready()
203 &dev->buffer_status), wait_for_bulk_in_ready()
204 dev->timeout); wait_for_bulk_in_ready()
206 DEBUGP(4, dev, "woke up: BulkIn full\n"); wait_for_bulk_in_ready()
208 DEBUGP(4, dev, "woke up: BulkIn not full, returning 0 :(\n"); wait_for_bulk_in_ready()
210 DEBUGP(4, dev, "woke up: signal arrived\n"); wait_for_bulk_in_ready()
218 struct reader_dev *dev = filp->private_data; cm4040_read() local
219 int iobase = dev->p_dev->resource[0]->start; cm4040_read()
226 DEBUGP(2, dev, "-> cm4040_read(%s,%d)\n", current->comm, current->pid); cm4040_read()
235 DEBUGP(4, dev, "filep->f_flags O_NONBLOCK set\n"); cm4040_read()
236 DEBUGP(2, dev, "<- cm4040_read (failure)\n"); cm4040_read()
240 if (!pcmcia_dev_present(dev->p_dev)) cm4040_read()
244 rc = wait_for_bulk_in_ready(dev); cm4040_read()
246 DEBUGP(5, dev, "wait_for_bulk_in_ready rc=%.2x\n", rc); cm4040_read()
247 DEBUGP(2, dev, "<- cm4040_read (failed)\n"); cm4040_read()
252 dev->r_buf[i] = xinb(iobase + REG_OFFSET_BULK_IN); cm4040_read()
254 pr_debug("%lu:%2x ", i, dev->r_buf[i]); cm4040_read()
261 bytes_to_read = 5 + le32_to_cpu(*(__le32 *)&dev->r_buf[1]);
263 DEBUGP(6, dev, "BytesToRead=%zu\n", bytes_to_read);
268 DEBUGP(6, dev, "Min=%zu\n", min_bytes_to_read);
271 rc = wait_for_bulk_in_ready(dev);
273 DEBUGP(5, dev, "wait_for_bulk_in_ready rc=%.2x\n", rc);
274 DEBUGP(2, dev, "<- cm4040_read (failed)\n");
279 dev->r_buf[i+5] = xinb(iobase + REG_OFFSET_BULK_IN);
281 pr_debug("%lu:%2x ", i, dev->r_buf[i]);
289 if (copy_to_user(buf, dev->r_buf, min_bytes_to_read))
292 rc = wait_for_bulk_in_ready(dev);
294 DEBUGP(5, dev, "wait_for_bulk_in_ready rc=%.2x\n", rc);
295 DEBUGP(2, dev, "<- cm4040_read (failed)\n");
301 rc = write_sync_reg(SCR_READER_TO_HOST_DONE, dev);
303 DEBUGP(5, dev, "write_sync_reg c=%.2x\n", rc);
304 DEBUGP(2, dev, "<- cm4040_read (failed)\n");
313 DEBUGP(2, dev, "<- cm4040_read (successfully)\n");
320 struct reader_dev *dev = filp->private_data;
321 int iobase = dev->p_dev->resource[0]->start;
326 DEBUGP(2, dev, "-> cm4040_write(%s,%d)\n", current->comm, current->pid);
329 DEBUGP(2, dev, "<- cm4040_write empty read (successfully)\n");
334 DEBUGP(2, dev, "<- cm4040_write buffersize=%Zd < 5\n", count);
339 DEBUGP(4, dev, "filep->f_flags O_NONBLOCK set\n");
340 DEBUGP(4, dev, "<- cm4040_write (failure)\n");
344 if (!pcmcia_dev_present(dev->p_dev))
348 if (copy_from_user(dev->s_buf, buf, bytes_to_write))
351 switch (dev->s_buf[0]) {
356 dev->timeout = CCID_DRIVER_BULK_DEFAULT_TIMEOUT;
360 dev->timeout = CCID_DRIVER_ASYNC_POWERUP_TIMEOUT;
371 dev->timeout = CCID_DRIVER_MINIMUM_TIMEOUT;
375 rc = write_sync_reg(SCR_HOST_TO_READER_START, dev);
377 DEBUGP(5, dev, "write_sync_reg c=%.2Zx\n", rc);
378 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
385 DEBUGP(4, dev, "start \n");
388 rc = wait_for_bulk_out_ready(dev);
390 DEBUGP(5, dev, "wait_for_bulk_out_ready rc=%.2Zx\n",
392 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
399 xoutb(dev->s_buf[i],iobase + REG_OFFSET_BULK_OUT);
401 DEBUGP(4, dev, "end\n");
403 rc = write_sync_reg(SCR_HOST_TO_READER_DONE, dev);
406 DEBUGP(5, dev, "write_sync_reg c=%.2Zx\n", rc);
407 DEBUGP(2, dev, "<- cm4040_write (failed)\n");
414 DEBUGP(2, dev, "<- cm4040_write (successfully)\n");
420 struct reader_dev *dev = filp->private_data;
423 poll_wait(filp, &dev->poll_wait, wait);
425 if (test_and_clear_bit(BS_READABLE, &dev->buffer_status))
427 if (test_and_clear_bit(BS_WRITABLE, &dev->buffer_status))
430 DEBUGP(2, dev, "<- cm4040_poll(%u)\n", mask);
437 struct reader_dev *dev;
457 dev = link->priv;
458 filp->private_data = dev;
461 DEBUGP(4, dev, "filep->f_flags O_NONBLOCK set\n");
468 dev->poll_timer.data = (unsigned long) dev;
469 mod_timer(&dev->poll_timer, jiffies + POLL_PERIOD);
471 DEBUGP(2, dev, "<- cm4040_open (successfully)\n");
480 struct reader_dev *dev = filp->private_data;
484 DEBUGP(2, dev, "-> cm4040_close(maj/min=%d.%d)\n", imajor(inode),
494 cm4040_stop_poll(dev);
497 wake_up(&dev->devq);
499 DEBUGP(2, dev, "<- cm4040_close\n");
505 struct reader_dev *dev = link->priv;
507 DEBUGP(3, dev, "-> cm4040_reader_release\n");
509 DEBUGP(3, dev, KERN_INFO MODULE_NAME ": delaying release "
511 wait_event(dev->devq, (link->open == 0));
513 DEBUGP(3, dev, "<- cm4040_reader_release\n");
525 struct reader_dev *dev;
535 dev_info(&link->dev, "pcmcia_enable_device failed 0x%x\n",
540 dev = link->priv;
542 DEBUGP(2, dev, "device " DEVICE_NAME "%d at %pR\n", devno,
544 DEBUGP(2, dev, "<- reader_config (succ)\n");
561 struct reader_dev *dev;
572 dev = kzalloc(sizeof(struct reader_dev), GFP_KERNEL);
573 if (dev == NULL)
576 dev->timeout = CCID_DRIVER_MINIMUM_TIMEOUT;
577 dev->buffer_status = 0;
579 link->priv = dev;
580 dev->p_dev = link;
584 init_waitqueue_head(&dev->devq);
585 init_waitqueue_head(&dev->poll_wait);
586 init_waitqueue_head(&dev->read_wait);
587 init_waitqueue_head(&dev->write_wait);
588 setup_timer(&dev->poll_timer, cm4040_do_poll, 0);
593 kfree(dev);
604 struct reader_dev *dev = link->priv;
618 kfree(dev);
/linux-4.4.14/net/nfc/
H A Dcore.c45 int nfc_fw_download(struct nfc_dev *dev, const char *firmware_name) nfc_fw_download() argument
49 pr_debug("%s do firmware %s\n", dev_name(&dev->dev), firmware_name); nfc_fw_download()
51 device_lock(&dev->dev); nfc_fw_download()
53 if (!device_is_registered(&dev->dev)) { nfc_fw_download()
58 if (dev->dev_up) { nfc_fw_download()
63 if (!dev->ops->fw_download) { nfc_fw_download()
68 dev->fw_download_in_progress = true; nfc_fw_download()
69 rc = dev->ops->fw_download(dev, firmware_name); nfc_fw_download()
71 dev->fw_download_in_progress = false; nfc_fw_download()
74 device_unlock(&dev->dev); nfc_fw_download()
81 * @dev: The nfc device to which firmware was downloaded
85 int nfc_fw_download_done(struct nfc_dev *dev, const char *firmware_name, nfc_fw_download_done() argument
88 dev->fw_download_in_progress = false; nfc_fw_download_done()
90 return nfc_genl_fw_download_done(dev, firmware_name, result); nfc_fw_download_done()
97 * @dev: The nfc device to be turned on
101 int nfc_dev_up(struct nfc_dev *dev) nfc_dev_up() argument
105 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_dev_up()
107 device_lock(&dev->dev); nfc_dev_up()
109 if (dev->rfkill && rfkill_blocked(dev->rfkill)) { nfc_dev_up()
114 if (!device_is_registered(&dev->dev)) { nfc_dev_up()
119 if (dev->fw_download_in_progress) { nfc_dev_up()
124 if (dev->dev_up) { nfc_dev_up()
129 if (dev->ops->dev_up) nfc_dev_up()
130 rc = dev->ops->dev_up(dev); nfc_dev_up()
133 dev->dev_up = true; nfc_dev_up()
136 if (dev->ops->discover_se && dev->ops->discover_se(dev)) nfc_dev_up()
140 device_unlock(&dev->dev); nfc_dev_up()
147 * @dev: The nfc device to be turned off
149 int nfc_dev_down(struct nfc_dev *dev) nfc_dev_down() argument
153 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_dev_down()
155 device_lock(&dev->dev); nfc_dev_down()
157 if (!device_is_registered(&dev->dev)) { nfc_dev_down()
162 if (!dev->dev_up) { nfc_dev_down()
167 if (dev->polling || dev->active_target) { nfc_dev_down()
172 if (dev->ops->dev_down) nfc_dev_down()
173 dev->ops->dev_down(dev); nfc_dev_down()
175 dev->dev_up = false; nfc_dev_down()
178 device_unlock(&dev->dev); nfc_dev_down()
184 struct nfc_dev *dev = data; nfc_rfkill_set_block() local
186 pr_debug("%s blocked %d", dev_name(&dev->dev), blocked); nfc_rfkill_set_block()
191 nfc_dev_down(dev); nfc_rfkill_set_block()
203 * @dev: The nfc device that must start polling
209 int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols) nfc_start_poll() argument
214 dev_name(&dev->dev), im_protocols, tm_protocols); nfc_start_poll()
219 device_lock(&dev->dev); nfc_start_poll()
221 if (!device_is_registered(&dev->dev)) { nfc_start_poll()
226 if (!dev->dev_up) { nfc_start_poll()
231 if (dev->polling) { nfc_start_poll()
236 rc = dev->ops->start_poll(dev, im_protocols, tm_protocols); nfc_start_poll()
238 dev->polling = true; nfc_start_poll()
239 dev->rf_mode = NFC_RF_NONE; nfc_start_poll()
243 device_unlock(&dev->dev); nfc_start_poll()
250 * @dev: The nfc device that must stop polling
252 int nfc_stop_poll(struct nfc_dev *dev) nfc_stop_poll() argument
256 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_stop_poll()
258 device_lock(&dev->dev); nfc_stop_poll()
260 if (!device_is_registered(&dev->dev)) { nfc_stop_poll()
265 if (!dev->polling) { nfc_stop_poll()
270 dev->ops->stop_poll(dev); nfc_stop_poll()
271 dev->polling = false; nfc_stop_poll()
272 dev->rf_mode = NFC_RF_NONE; nfc_stop_poll()
275 device_unlock(&dev->dev); nfc_stop_poll()
279 static struct nfc_target *nfc_find_target(struct nfc_dev *dev, u32 target_idx) nfc_find_target() argument
283 for (i = 0; i < dev->n_targets; i++) { nfc_find_target()
284 if (dev->targets[i].idx == target_idx) nfc_find_target()
285 return &dev->targets[i]; nfc_find_target()
291 int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode) nfc_dep_link_up() argument
298 pr_debug("dev_name=%s comm %d\n", dev_name(&dev->dev), comm_mode); nfc_dep_link_up()
300 if (!dev->ops->dep_link_up) nfc_dep_link_up()
303 device_lock(&dev->dev); nfc_dep_link_up()
305 if (!device_is_registered(&dev->dev)) { nfc_dep_link_up()
310 if (dev->dep_link_up == true) { nfc_dep_link_up()
315 gb = nfc_llcp_general_bytes(dev, &gb_len); nfc_dep_link_up()
321 target = nfc_find_target(dev, target_index); nfc_dep_link_up()
327 rc = dev->ops->dep_link_up(dev, target, comm_mode, gb, gb_len); nfc_dep_link_up()
329 dev->active_target = target; nfc_dep_link_up()
330 dev->rf_mode = NFC_RF_INITIATOR; nfc_dep_link_up()
334 device_unlock(&dev->dev); nfc_dep_link_up()
338 int nfc_dep_link_down(struct nfc_dev *dev) nfc_dep_link_down() argument
342 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_dep_link_down()
344 if (!dev->ops->dep_link_down) nfc_dep_link_down()
347 device_lock(&dev->dev); nfc_dep_link_down()
349 if (!device_is_registered(&dev->dev)) { nfc_dep_link_down()
354 if (dev->dep_link_up == false) { nfc_dep_link_down()
359 rc = dev->ops->dep_link_down(dev); nfc_dep_link_down()
361 dev->dep_link_up = false; nfc_dep_link_down()
362 dev->active_target = NULL; nfc_dep_link_down()
363 dev->rf_mode = NFC_RF_NONE; nfc_dep_link_down()
364 nfc_llcp_mac_is_down(dev); nfc_dep_link_down()
365 nfc_genl_dep_link_down_event(dev); nfc_dep_link_down()
369 device_unlock(&dev->dev); nfc_dep_link_down()
374 int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx, nfc_dep_link_is_up() argument
377 dev->dep_link_up = true; nfc_dep_link_is_up()
379 if (!dev->active_target && rf_mode == NFC_RF_INITIATOR) { nfc_dep_link_is_up()
382 target = nfc_find_target(dev, target_idx); nfc_dep_link_is_up()
386 dev->active_target = target; nfc_dep_link_is_up()
389 dev->polling = false; nfc_dep_link_is_up()
390 dev->rf_mode = rf_mode; nfc_dep_link_is_up()
392 nfc_llcp_mac_is_up(dev, target_idx, comm_mode, rf_mode); nfc_dep_link_is_up()
394 return nfc_genl_dep_link_up_event(dev, target_idx, comm_mode, rf_mode); nfc_dep_link_is_up()
401 * @dev: The nfc device that found the target
405 int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol) nfc_activate_target() argument
411 dev_name(&dev->dev), target_idx, protocol); nfc_activate_target()
413 device_lock(&dev->dev); nfc_activate_target()
415 if (!device_is_registered(&dev->dev)) { nfc_activate_target()
420 if (dev->active_target) { nfc_activate_target()
425 target = nfc_find_target(dev, target_idx); nfc_activate_target()
431 rc = dev->ops->activate_target(dev, target, protocol); nfc_activate_target()
433 dev->active_target = target; nfc_activate_target()
434 dev->rf_mode = NFC_RF_INITIATOR; nfc_activate_target()
436 if (dev->ops->check_presence && !dev->shutting_down) nfc_activate_target()
437 mod_timer(&dev->check_pres_timer, jiffies + nfc_activate_target()
442 device_unlock(&dev->dev); nfc_activate_target()
449 * @dev: The nfc device that found the target
452 int nfc_deactivate_target(struct nfc_dev *dev, u32 target_idx, u8 mode) nfc_deactivate_target() argument
457 dev_name(&dev->dev), target_idx); nfc_deactivate_target()
459 device_lock(&dev->dev); nfc_deactivate_target()
461 if (!device_is_registered(&dev->dev)) { nfc_deactivate_target()
466 if (dev->active_target == NULL) { nfc_deactivate_target()
471 if (dev->active_target->idx != target_idx) { nfc_deactivate_target()
476 if (dev->ops->check_presence) nfc_deactivate_target()
477 del_timer_sync(&dev->check_pres_timer); nfc_deactivate_target()
479 dev->ops->deactivate_target(dev, dev->active_target, mode); nfc_deactivate_target()
480 dev->active_target = NULL; nfc_deactivate_target()
483 device_unlock(&dev->dev); nfc_deactivate_target()
490 * @dev: The nfc device that found the target
498 int nfc_data_exchange(struct nfc_dev *dev, u32 target_idx, struct sk_buff *skb, nfc_data_exchange() argument
504 dev_name(&dev->dev), target_idx, skb->len); nfc_data_exchange()
506 device_lock(&dev->dev); nfc_data_exchange()
508 if (!device_is_registered(&dev->dev)) { nfc_data_exchange()
514 if (dev->rf_mode == NFC_RF_INITIATOR && dev->active_target != NULL) { nfc_data_exchange()
515 if (dev->active_target->idx != target_idx) { nfc_data_exchange()
521 if (dev->ops->check_presence) nfc_data_exchange()
522 del_timer_sync(&dev->check_pres_timer); nfc_data_exchange()
524 rc = dev->ops->im_transceive(dev, dev->active_target, skb, cb, nfc_data_exchange()
527 if (!rc && dev->ops->check_presence && !dev->shutting_down) nfc_data_exchange()
528 mod_timer(&dev->check_pres_timer, jiffies + nfc_data_exchange()
530 } else if (dev->rf_mode == NFC_RF_TARGET && dev->ops->tm_send != NULL) { nfc_data_exchange()
531 rc = dev->ops->tm_send(dev, skb); nfc_data_exchange()
540 device_unlock(&dev->dev); nfc_data_exchange()
544 struct nfc_se *nfc_find_se(struct nfc_dev *dev, u32 se_idx) nfc_find_se() argument
548 list_for_each_entry(se, &dev->secure_elements, list) nfc_find_se()
556 int nfc_enable_se(struct nfc_dev *dev, u32 se_idx) nfc_enable_se() argument
561 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); nfc_enable_se()
563 device_lock(&dev->dev); nfc_enable_se()
565 if (!device_is_registered(&dev->dev)) { nfc_enable_se()
570 if (!dev->dev_up) { nfc_enable_se()
575 if (dev->polling) { nfc_enable_se()
580 if (!dev->ops->enable_se || !dev->ops->disable_se) { nfc_enable_se()
585 se = nfc_find_se(dev, se_idx); nfc_enable_se()
596 rc = dev->ops->enable_se(dev, se_idx); nfc_enable_se()
601 device_unlock(&dev->dev); nfc_enable_se()
605 int nfc_disable_se(struct nfc_dev *dev, u32 se_idx) nfc_disable_se() argument
610 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); nfc_disable_se()
612 device_lock(&dev->dev); nfc_disable_se()
614 if (!device_is_registered(&dev->dev)) { nfc_disable_se()
619 if (!dev->dev_up) { nfc_disable_se()
624 if (!dev->ops->enable_se || !dev->ops->disable_se) { nfc_disable_se()
629 se = nfc_find_se(dev, se_idx); nfc_disable_se()
640 rc = dev->ops->disable_se(dev, se_idx); nfc_disable_se()
645 device_unlock(&dev->dev); nfc_disable_se()
649 int nfc_set_remote_general_bytes(struct nfc_dev *dev, u8 *gb, u8 gb_len) nfc_set_remote_general_bytes() argument
651 pr_debug("dev_name=%s gb_len=%d\n", dev_name(&dev->dev), gb_len); nfc_set_remote_general_bytes()
653 return nfc_llcp_set_remote_gb(dev, gb, gb_len); nfc_set_remote_general_bytes()
657 u8 *nfc_get_local_general_bytes(struct nfc_dev *dev, size_t *gb_len) nfc_get_local_general_bytes() argument
659 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_get_local_general_bytes()
661 return nfc_llcp_general_bytes(dev, gb_len); nfc_get_local_general_bytes()
665 int nfc_tm_data_received(struct nfc_dev *dev, struct sk_buff *skb) nfc_tm_data_received() argument
668 if (dev->dep_link_up == false) { nfc_tm_data_received()
673 return nfc_llcp_data_received(dev, skb); nfc_tm_data_received()
677 int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode, nfc_tm_activated() argument
682 device_lock(&dev->dev); nfc_tm_activated()
684 dev->polling = false; nfc_tm_activated()
687 rc = nfc_set_remote_general_bytes(dev, gb, gb_len); nfc_tm_activated()
692 dev->rf_mode = NFC_RF_TARGET; nfc_tm_activated()
695 nfc_dep_link_is_up(dev, 0, comm_mode, NFC_RF_TARGET); nfc_tm_activated()
697 rc = nfc_genl_tm_activated(dev, protocol); nfc_tm_activated()
700 device_unlock(&dev->dev); nfc_tm_activated()
706 int nfc_tm_deactivated(struct nfc_dev *dev) nfc_tm_deactivated() argument
708 dev->dep_link_up = false; nfc_tm_deactivated()
709 dev->rf_mode = NFC_RF_NONE; nfc_tm_deactivated()
711 return nfc_genl_tm_deactivated(dev); nfc_tm_deactivated()
721 struct sk_buff *nfc_alloc_send_skb(struct nfc_dev *dev, struct sock *sk, nfc_alloc_send_skb() argument
729 dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; nfc_alloc_send_skb()
733 skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); nfc_alloc_send_skb()
762 * @dev: The nfc device that found the targets
775 int nfc_targets_found(struct nfc_dev *dev, nfc_targets_found() argument
780 pr_debug("dev_name=%s n_targets=%d\n", dev_name(&dev->dev), n_targets); nfc_targets_found()
783 targets[i].idx = dev->target_next_idx++; nfc_targets_found()
785 device_lock(&dev->dev); nfc_targets_found()
787 if (dev->polling == false) { nfc_targets_found()
788 device_unlock(&dev->dev); nfc_targets_found()
792 dev->polling = false; nfc_targets_found()
794 dev->targets_generation++; nfc_targets_found()
796 kfree(dev->targets); nfc_targets_found()
797 dev->targets = NULL; nfc_targets_found()
800 dev->targets = kmemdup(targets, nfc_targets_found()
804 if (!dev->targets) { nfc_targets_found()
805 dev->n_targets = 0; nfc_targets_found()
806 device_unlock(&dev->dev); nfc_targets_found()
811 dev->n_targets = n_targets; nfc_targets_found()
812 device_unlock(&dev->dev); nfc_targets_found()
814 nfc_genl_targets_found(dev); nfc_targets_found()
823 * @dev: The nfc device that had the activated target in field
832 int nfc_target_lost(struct nfc_dev *dev, u32 target_idx) nfc_target_lost() argument
837 pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx); nfc_target_lost()
839 device_lock(&dev->dev); nfc_target_lost()
841 for (i = 0; i < dev->n_targets; i++) { nfc_target_lost()
842 tg = &dev->targets[i]; nfc_target_lost()
847 if (i == dev->n_targets) { nfc_target_lost()
848 device_unlock(&dev->dev); nfc_target_lost()
852 dev->targets_generation++; nfc_target_lost()
853 dev->n_targets--; nfc_target_lost()
854 dev->active_target = NULL; nfc_target_lost()
856 if (dev->n_targets) { nfc_target_lost()
857 memcpy(&dev->targets[i], &dev->targets[i + 1], nfc_target_lost()
858 (dev->n_targets - i) * sizeof(struct nfc_target)); nfc_target_lost()
860 kfree(dev->targets); nfc_target_lost()
861 dev->targets = NULL; nfc_target_lost()
864 device_unlock(&dev->dev); nfc_target_lost()
866 nfc_genl_target_lost(dev, target_idx); nfc_target_lost()
872 inline void nfc_driver_failure(struct nfc_dev *dev, int err) nfc_driver_failure() argument
874 nfc_targets_found(dev, NULL, 0); nfc_driver_failure()
878 int nfc_add_se(struct nfc_dev *dev, u32 se_idx, u16 type) nfc_add_se() argument
883 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); nfc_add_se()
885 se = nfc_find_se(dev, se_idx); nfc_add_se()
898 list_add(&se->list, &dev->secure_elements); nfc_add_se()
900 rc = nfc_genl_se_added(dev, se_idx, type); nfc_add_se()
912 int nfc_remove_se(struct nfc_dev *dev, u32 se_idx) nfc_remove_se() argument
917 pr_debug("%s se index %d\n", dev_name(&dev->dev), se_idx); nfc_remove_se()
919 list_for_each_entry_safe(se, n, &dev->secure_elements, list) nfc_remove_se()
921 rc = nfc_genl_se_removed(dev, se_idx); nfc_remove_se()
935 int nfc_se_transaction(struct nfc_dev *dev, u8 se_idx, nfc_se_transaction() argument
942 device_lock(&dev->dev); nfc_se_transaction()
949 rc = nfc_genl_se_transaction(dev, se_idx, evt_transaction); nfc_se_transaction()
951 device_unlock(&dev->dev); nfc_se_transaction()
958 struct nfc_dev *dev = to_nfc_dev(d); nfc_release() local
961 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_release()
963 nfc_genl_data_exit(&dev->genl_data); nfc_release()
964 kfree(dev->targets); nfc_release()
966 list_for_each_entry_safe(se, n, &dev->secure_elements, list) { nfc_release()
967 nfc_genl_se_removed(dev, se->idx); nfc_release()
972 kfree(dev); nfc_release()
977 struct nfc_dev *dev = container_of(work, struct nfc_dev, nfc_check_pres_work() local
981 device_lock(&dev->dev); nfc_check_pres_work()
983 if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) { nfc_check_pres_work()
984 rc = dev->ops->check_presence(dev, dev->active_target); nfc_check_pres_work()
988 u32 active_target_idx = dev->active_target->idx; nfc_check_pres_work()
989 device_unlock(&dev->dev); nfc_check_pres_work()
990 nfc_target_lost(dev, active_target_idx); nfc_check_pres_work()
994 if (!dev->shutting_down) nfc_check_pres_work()
995 mod_timer(&dev->check_pres_timer, jiffies + nfc_check_pres_work()
1000 device_unlock(&dev->dev); nfc_check_pres_work()
1005 struct nfc_dev *dev = (struct nfc_dev *)data; nfc_check_pres_timeout() local
1007 schedule_work(&dev->check_pres_work); nfc_check_pres_timeout()
1018 struct nfc_dev *dev = to_nfc_dev(d); match_idx() local
1021 return dev->idx == *idx; match_idx()
1045 struct nfc_dev *dev; nfc_allocate_device() local
1054 dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL); nfc_allocate_device()
1055 if (!dev) nfc_allocate_device()
1058 dev->ops = ops; nfc_allocate_device()
1059 dev->supported_protocols = supported_protocols; nfc_allocate_device()
1060 dev->tx_headroom = tx_headroom; nfc_allocate_device()
1061 dev->tx_tailroom = tx_tailroom; nfc_allocate_device()
1062 INIT_LIST_HEAD(&dev->secure_elements); nfc_allocate_device()
1064 nfc_genl_data_init(&dev->genl_data); nfc_allocate_device()
1066 dev->rf_mode = NFC_RF_NONE; nfc_allocate_device()
1069 dev->targets_generation = 1; nfc_allocate_device()
1072 init_timer(&dev->check_pres_timer); nfc_allocate_device()
1073 dev->check_pres_timer.data = (unsigned long)dev; nfc_allocate_device()
1074 dev->check_pres_timer.function = nfc_check_pres_timeout; nfc_allocate_device()
1076 INIT_WORK(&dev->check_pres_work, nfc_check_pres_work); nfc_allocate_device()
1079 return dev; nfc_allocate_device()
1086 * @dev: The nfc device to register
1088 int nfc_register_device(struct nfc_dev *dev) nfc_register_device() argument
1092 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_register_device()
1094 dev->idx = ida_simple_get(&nfc_index_ida, 0, 0, GFP_KERNEL); nfc_register_device()
1095 if (dev->idx < 0) nfc_register_device()
1096 return dev->idx; nfc_register_device()
1098 dev->dev.class = &nfc_class; nfc_register_device()
1099 dev_set_name(&dev->dev, "nfc%d", dev->idx); nfc_register_device()
1100 device_initialize(&dev->dev); nfc_register_device()
1104 rc = device_add(&dev->dev); nfc_register_device()
1110 rc = nfc_llcp_register_device(dev); nfc_register_device()
1114 rc = nfc_genl_device_added(dev); nfc_register_device()
1117 dev_name(&dev->dev)); nfc_register_device()
1119 dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, nfc_register_device()
1120 RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev); nfc_register_device()
1121 if (dev->rfkill) { nfc_register_device()
1122 if (rfkill_register(dev->rfkill) < 0) { nfc_register_device()
1123 rfkill_destroy(dev->rfkill); nfc_register_device()
1124 dev->rfkill = NULL; nfc_register_device()
1135 * @dev: The nfc device to unregister
1137 void nfc_unregister_device(struct nfc_dev *dev) nfc_unregister_device() argument
1141 pr_debug("dev_name=%s\n", dev_name(&dev->dev)); nfc_unregister_device()
1143 id = dev->idx; nfc_unregister_device()
1145 if (dev->rfkill) { nfc_unregister_device()
1146 rfkill_unregister(dev->rfkill); nfc_unregister_device()
1147 rfkill_destroy(dev->rfkill); nfc_unregister_device()
1150 if (dev->ops->check_presence) { nfc_unregister_device()
1151 device_lock(&dev->dev); nfc_unregister_device()
1152 dev->shutting_down = true; nfc_unregister_device()
1153 device_unlock(&dev->dev); nfc_unregister_device()
1154 del_timer_sync(&dev->check_pres_timer); nfc_unregister_device()
1155 cancel_work_sync(&dev->check_pres_work); nfc_unregister_device()
1158 rc = nfc_genl_device_removed(dev); nfc_unregister_device()
1161 "was removed\n", dev_name(&dev->dev)); nfc_unregister_device()
1163 nfc_llcp_unregister_device(dev); nfc_unregister_device()
1167 device_del(&dev->dev); nfc_unregister_device()
/linux-4.4.14/drivers/net/wireless/realtek/rtl818x/rtl8180/
H A Dgrf5101.c36 static void write_grf5101(struct ieee80211_hw *dev, u8 addr, u32 data) write_grf5101() argument
38 struct rtl8180_priv *priv = dev->priv; write_grf5101()
57 static void grf5101_write_phy_antenna(struct ieee80211_hw *dev, short chan) grf5101_write_phy_antenna() argument
59 struct rtl8180_priv *priv = dev->priv; grf5101_write_phy_antenna()
68 rtl8180_write_phy(dev, 0x10, ant); grf5101_write_phy_antenna()
80 static void grf5101_rf_set_channel(struct ieee80211_hw *dev, grf5101_rf_set_channel() argument
83 struct rtl8180_priv *priv = dev->priv; grf5101_rf_set_channel()
90 write_grf5101(dev, 0x15, 0x0); grf5101_rf_set_channel()
91 write_grf5101(dev, 0x06, txpw); grf5101_rf_set_channel()
92 write_grf5101(dev, 0x15, 0x10); grf5101_rf_set_channel()
93 write_grf5101(dev, 0x15, 0x0); grf5101_rf_set_channel()
96 write_grf5101(dev, 0x07, 0x0); grf5101_rf_set_channel()
97 write_grf5101(dev, 0x0B, chan); grf5101_rf_set_channel()
98 write_grf5101(dev, 0x07, 0x1000); grf5101_rf_set_channel()
100 grf5101_write_phy_antenna(dev, channel); grf5101_rf_set_channel()
103 static void grf5101_rf_stop(struct ieee80211_hw *dev) grf5101_rf_stop() argument
105 struct rtl8180_priv *priv = dev->priv; grf5101_rf_stop()
113 write_grf5101(dev, 0x07, 0x0); grf5101_rf_stop()
114 write_grf5101(dev, 0x1f, 0x45); grf5101_rf_stop()
115 write_grf5101(dev, 0x1f, 0x5); grf5101_rf_stop()
116 write_grf5101(dev, 0x00, 0x8e4); grf5101_rf_stop()
119 static void grf5101_rf_init(struct ieee80211_hw *dev) grf5101_rf_init() argument
121 struct rtl8180_priv *priv = dev->priv; grf5101_rf_init()
125 write_grf5101(dev, 0x1f, 0x0); grf5101_rf_init()
126 write_grf5101(dev, 0x1f, 0x0); grf5101_rf_init()
127 write_grf5101(dev, 0x1f, 0x40); grf5101_rf_init()
128 write_grf5101(dev, 0x1f, 0x60); grf5101_rf_init()
129 write_grf5101(dev, 0x1f, 0x61); grf5101_rf_init()
130 write_grf5101(dev, 0x1f, 0x61); grf5101_rf_init()
131 write_grf5101(dev, 0x00, 0xae4); grf5101_rf_init()
132 write_grf5101(dev, 0x1f, 0x1); grf5101_rf_init()
133 write_grf5101(dev, 0x1f, 0x41); grf5101_rf_init()
134 write_grf5101(dev, 0x1f, 0x61); grf5101_rf_init()
136 write_grf5101(dev, 0x01, 0x1a23); grf5101_rf_init()
137 write_grf5101(dev, 0x02, 0x4971); grf5101_rf_init()
138 write_grf5101(dev, 0x03, 0x41de); grf5101_rf_init()
139 write_grf5101(dev, 0x04, 0x2d80); grf5101_rf_init()
140 write_grf5101(dev, 0x05, 0x68ff); /* 0x61ff original value */ grf5101_rf_init()
141 write_grf5101(dev, 0x06, 0x0); grf5101_rf_init()
142 write_grf5101(dev, 0x07, 0x0); grf5101_rf_init()
143 write_grf5101(dev, 0x08, 0x7533); grf5101_rf_init()
144 write_grf5101(dev, 0x09, 0xc401); grf5101_rf_init()
145 write_grf5101(dev, 0x0a, 0x0); grf5101_rf_init()
146 write_grf5101(dev, 0x0c, 0x1c7); grf5101_rf_init()
147 write_grf5101(dev, 0x0d, 0x29d3); grf5101_rf_init()
148 write_grf5101(dev, 0x0e, 0x2e8); grf5101_rf_init()
149 write_grf5101(dev, 0x10, 0x192); grf5101_rf_init()
150 write_grf5101(dev, 0x11, 0x248); grf5101_rf_init()
151 write_grf5101(dev, 0x12, 0x0); grf5101_rf_init()
152 write_grf5101(dev, 0x13, 0x20c4); grf5101_rf_init()
153 write_grf5101(dev, 0x14, 0xf4fc); grf5101_rf_init()
154 write_grf5101(dev, 0x15, 0x0); grf5101_rf_init()
155 write_grf5101(dev, 0x16, 0x1500); grf5101_rf_init()
157 write_grf5101(dev, 0x07, 0x1000); grf5101_rf_init()
160 rtl8180_write_phy(dev, 0, 0xa8); grf5101_rf_init()
161 rtl8180_write_phy(dev, 3, 0x0); grf5101_rf_init()
162 rtl8180_write_phy(dev, 4, 0xc0); grf5101_rf_init()
163 rtl8180_write_phy(dev, 5, 0x90); grf5101_rf_init()
164 rtl8180_write_phy(dev, 6, 0x1e); grf5101_rf_init()
165 rtl8180_write_phy(dev, 7, 0x64); grf5101_rf_init()
167 grf5101_write_phy_antenna(dev, 1); grf5101_rf_init()
169 rtl8180_write_phy(dev, 0x11, 0x88); grf5101_rf_init()
173 rtl8180_write_phy(dev, 0x12, 0xc0); /* enable ant diversity */ grf5101_rf_init()
175 rtl8180_write_phy(dev, 0x12, 0x40); /* disable ant diversity */ grf5101_rf_init()
177 rtl8180_write_phy(dev, 0x13, 0x90 | priv->csthreshold); grf5101_rf_init()
179 rtl8180_write_phy(dev, 0x19, 0x0); grf5101_rf_init()
180 rtl8180_write_phy(dev, 0x1a, 0xa0); grf5101_rf_init()
181 rtl8180_write_phy(dev, 0x1b, 0x44); grf5101_rf_init()
H A Drtl8225se.c120 static void rtl8187se_three_wire_io(struct ieee80211_hw *dev, u8 *data, rtl8187se_three_wire_io() argument
123 struct rtl8180_priv *priv = dev->priv; rtl8187se_three_wire_io()
135 wiphy_err(dev->wiphy, PFX rtl8187se_three_wire_io()
153 wiphy_err(dev->wiphy, PFX rtl8187se_three_wire_io()
177 static u32 rtl8187se_rf_readreg(struct ieee80211_hw *dev, u8 addr) rtl8187se_rf_readreg() argument
180 rtl8187se_three_wire_io(dev, (u8 *)&dataread, 16, 0); rtl8187se_rf_readreg()
184 static void rtl8187se_rf_writereg(struct ieee80211_hw *dev, u8 addr, u32 data) rtl8187se_rf_writereg() argument
187 rtl8187se_three_wire_io(dev, (u8 *)&outdata, 16, 1); rtl8187se_rf_writereg()
191 static void rtl8225se_write_zebra_agc(struct ieee80211_hw *dev) rtl8225se_write_zebra_agc() argument
196 rtl8225se_write_phy_ofdm(dev, 0xF, ZEBRA_AGC[i]); rtl8225se_write_zebra_agc()
197 rtl8225se_write_phy_ofdm(dev, 0xE, i+0x80); rtl8225se_write_zebra_agc()
198 rtl8225se_write_phy_ofdm(dev, 0xE, 0); rtl8225se_write_zebra_agc()
202 static void rtl8187se_write_ofdm_config(struct ieee80211_hw *dev) rtl8187se_write_ofdm_config() argument
208 rtl8225se_write_phy_ofdm(dev, i, OFDM_CONFIG[i]); rtl8187se_write_ofdm_config()
212 static void rtl8225sez2_rf_set_tx_power(struct ieee80211_hw *dev, int channel) rtl8225sez2_rf_set_tx_power() argument
214 struct rtl8180_priv *priv = dev->priv; rtl8225sez2_rf_set_tx_power()
231 rtl8225se_write_phy_ofdm(dev, 7, 0x5C); rtl8225sez2_rf_set_tx_power()
232 rtl8225se_write_phy_ofdm(dev, 9, 0x5C); rtl8225sez2_rf_set_tx_power()
235 rtl8225se_write_phy_ofdm(dev, 7, 0x54); rtl8225sez2_rf_set_tx_power()
236 rtl8225se_write_phy_ofdm(dev, 9, 0x54); rtl8225sez2_rf_set_tx_power()
238 rtl8225se_write_phy_ofdm(dev, 7, 0x50); rtl8225sez2_rf_set_tx_power()
239 rtl8225se_write_phy_ofdm(dev, 9, 0x50); rtl8225sez2_rf_set_tx_power()
245 static void rtl8187se_write_rf_gain(struct ieee80211_hw *dev) rtl8187se_write_rf_gain() argument
250 rtl8187se_rf_writereg(dev, 0x01, i); mdelay(1); rtl8187se_write_rf_gain()
251 rtl8187se_rf_writereg(dev, 0x02, RF_GAIN_TABLE[i]); mdelay(1); rtl8187se_write_rf_gain()
255 static void rtl8187se_write_initial_gain(struct ieee80211_hw *dev, rtl8187se_write_initial_gain() argument
260 rtl8225se_write_phy_ofdm(dev, 0x17, 0x26); mdelay(1); rtl8187se_write_initial_gain()
261 rtl8225se_write_phy_ofdm(dev, 0x24, 0x86); mdelay(1); rtl8187se_write_initial_gain()
262 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFA); mdelay(1); rtl8187se_write_initial_gain()
265 rtl8225se_write_phy_ofdm(dev, 0x17, 0x36); mdelay(1); rtl8187se_write_initial_gain()
266 rtl8225se_write_phy_ofdm(dev, 0x24, 0x86); mdelay(1); rtl8187se_write_initial_gain()
267 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFA); mdelay(1); rtl8187se_write_initial_gain()
270 rtl8225se_write_phy_ofdm(dev, 0x17, 0x36); mdelay(1); rtl8187se_write_initial_gain()
271 rtl8225se_write_phy_ofdm(dev, 0x24, 0x86); mdelay(1); rtl8187se_write_initial_gain()
272 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFB); mdelay(1); rtl8187se_write_initial_gain()
275 rtl8225se_write_phy_ofdm(dev, 0x17, 0x46); mdelay(1); rtl8187se_write_initial_gain()
276 rtl8225se_write_phy_ofdm(dev, 0x24, 0x86); mdelay(1); rtl8187se_write_initial_gain()
277 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFB); mdelay(1); rtl8187se_write_initial_gain()
280 rtl8225se_write_phy_ofdm(dev, 0x17, 0x46); mdelay(1); rtl8187se_write_initial_gain()
281 rtl8225se_write_phy_ofdm(dev, 0x24, 0x96); mdelay(1); rtl8187se_write_initial_gain()
282 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFB); mdelay(1); rtl8187se_write_initial_gain()
285 rtl8225se_write_phy_ofdm(dev, 0x17, 0x56); mdelay(1); rtl8187se_write_initial_gain()
286 rtl8225se_write_phy_ofdm(dev, 0x24, 0x96); mdelay(1); rtl8187se_write_initial_gain()
287 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFC); mdelay(1); rtl8187se_write_initial_gain()
290 rtl8225se_write_phy_ofdm(dev, 0x17, 0x56); mdelay(1); rtl8187se_write_initial_gain()
291 rtl8225se_write_phy_ofdm(dev, 0x24, 0xA6); mdelay(1); rtl8187se_write_initial_gain()
292 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFC); mdelay(1); rtl8187se_write_initial_gain()
295 rtl8225se_write_phy_ofdm(dev, 0x17, 0x66); mdelay(1); rtl8187se_write_initial_gain()
296 rtl8225se_write_phy_ofdm(dev, 0x24, 0xB6); mdelay(1); rtl8187se_write_initial_gain()
297 rtl8225se_write_phy_ofdm(dev, 0x05, 0xFC); mdelay(1); rtl8187se_write_initial_gain()
302 void rtl8225se_rf_init(struct ieee80211_hw *dev) rtl8225se_rf_init() argument
304 struct rtl8180_priv *priv = dev->priv; rtl8225se_rf_init()
310 rtl8187se_rf_writereg(dev, 0x00, 0x013F); mdelay(1); rtl8225se_rf_init()
311 rf23 = rtl8187se_rf_readreg(dev, 0x08); mdelay(1); rtl8225se_rf_init()
312 rf24 = rtl8187se_rf_readreg(dev, 0x09); mdelay(1); rtl8225se_rf_init()
316 wiphy_info(dev->wiphy, "RTL8225-SE version %s\n", rtl8225se_rf_init()
320 rtl8187se_rf_writereg(dev, 0x00, 0x009F); mdelay(1); rtl8225se_rf_init()
321 rtl8187se_rf_writereg(dev, 0x01, 0x06E0); mdelay(1); rtl8225se_rf_init()
322 rtl8187se_rf_writereg(dev, 0x02, 0x004D); mdelay(1); rtl8225se_rf_init()
323 rtl8187se_rf_writereg(dev, 0x03, 0x07F1); mdelay(1); rtl8225se_rf_init()
324 rtl8187se_rf_writereg(dev, 0x04, 0x0975); mdelay(1); rtl8225se_rf_init()
325 rtl8187se_rf_writereg(dev, 0x05, 0x0C72); mdelay(1); rtl8225se_rf_init()
326 rtl8187se_rf_writereg(dev, 0x06, 0x0AE6); mdelay(1); rtl8225se_rf_init()
327 rtl8187se_rf_writereg(dev, 0x07, 0x00CA); mdelay(1); rtl8225se_rf_init()
328 rtl8187se_rf_writereg(dev, 0x08, 0x0E1C); mdelay(1); rtl8225se_rf_init()
329 rtl8187se_rf_writereg(dev, 0x09, 0x02F0); mdelay(1); rtl8225se_rf_init()
330 rtl8187se_rf_writereg(dev, 0x0A, 0x09D0); mdelay(1); rtl8225se_rf_init()
331 rtl8187se_rf_writereg(dev, 0x0B, 0x01BA); mdelay(1); rtl8225se_rf_init()
332 rtl8187se_rf_writereg(dev, 0x0C, 0x0640); mdelay(1); rtl8225se_rf_init()
333 rtl8187se_rf_writereg(dev, 0x0D, 0x08DF); mdelay(1); rtl8225se_rf_init()
334 rtl8187se_rf_writereg(dev, 0x0E, 0x0020); mdelay(1); rtl8225se_rf_init()
335 rtl8187se_rf_writereg(dev, 0x0F, 0x0990); mdelay(1); rtl8225se_rf_init()
337 rtl8187se_rf_writereg(dev, 0x00, 0x013F); mdelay(1); rtl8225se_rf_init()
338 rtl8187se_rf_writereg(dev, 0x03, 0x0806); mdelay(1); rtl8225se_rf_init()
339 rtl8187se_rf_writereg(dev, 0x04, 0x03A7); mdelay(1); rtl8225se_rf_init()
340 rtl8187se_rf_writereg(dev, 0x05, 0x059B); mdelay(1); rtl8225se_rf_init()
341 rtl8187se_rf_writereg(dev, 0x06, 0x0081); mdelay(1); rtl8225se_rf_init()
342 rtl8187se_rf_writereg(dev, 0x07, 0x01A0); mdelay(1); rtl8225se_rf_init()
343 rtl8187se_rf_writereg(dev, 0x0A, 0x0001); mdelay(1); rtl8225se_rf_init()
344 rtl8187se_rf_writereg(dev, 0x0B, 0x0418); mdelay(1); rtl8225se_rf_init()
345 rtl8187se_rf_writereg(dev, 0x0C, 0x0FBE); mdelay(1); rtl8225se_rf_init()
346 rtl8187se_rf_writereg(dev, 0x0D, 0x0008); mdelay(1); rtl8225se_rf_init()
348 rtl8187se_rf_writereg(dev, 0x0E, 0x0807); rtl8225se_rf_init()
350 rtl8187se_rf_writereg(dev, 0x0E, 0x0806); rtl8225se_rf_init()
352 rtl8187se_rf_writereg(dev, 0x0F, 0x0ACC); mdelay(1); rtl8225se_rf_init()
353 rtl8187se_rf_writereg(dev, 0x00, 0x01D7); mdelay(1); rtl8225se_rf_init()
354 rtl8187se_rf_writereg(dev, 0x03, 0x0E00); mdelay(1); rtl8225se_rf_init()
355 rtl8187se_rf_writereg(dev, 0x04, 0x0E50); mdelay(1); rtl8225se_rf_init()
357 rtl8187se_write_rf_gain(dev); rtl8225se_rf_init()
359 rtl8187se_rf_writereg(dev, 0x05, 0x0203); mdelay(1); rtl8225se_rf_init()
360 rtl8187se_rf_writereg(dev, 0x06, 0x0200); mdelay(1); rtl8225se_rf_init()
361 rtl8187se_rf_writereg(dev, 0x00, 0x0137); mdelay(11); rtl8225se_rf_init()
362 rtl8187se_rf_writereg(dev, 0x0D, 0x0008); mdelay(11); rtl8225se_rf_init()
363 rtl8187se_rf_writereg(dev, 0x00, 0x0037); mdelay(11); rtl8225se_rf_init()
364 rtl8187se_rf_writereg(dev, 0x04, 0x0160); mdelay(11); rtl8225se_rf_init()
365 rtl8187se_rf_writereg(dev, 0x07, 0x0080); mdelay(11); rtl8225se_rf_init()
366 rtl8187se_rf_writereg(dev, 0x02, 0x088D); mdelay(221); rtl8225se_rf_init()
367 rtl8187se_rf_writereg(dev, 0x00, 0x0137); mdelay(11); rtl8225se_rf_init()
368 rtl8187se_rf_writereg(dev, 0x07, 0x0000); mdelay(1); rtl8225se_rf_init()
369 rtl8187se_rf_writereg(dev, 0x07, 0x0180); mdelay(1); rtl8225se_rf_init()
370 rtl8187se_rf_writereg(dev, 0x07, 0x0220); mdelay(1); rtl8225se_rf_init()
371 rtl8187se_rf_writereg(dev, 0x07, 0x03E0); mdelay(1); rtl8225se_rf_init()
372 rtl8187se_rf_writereg(dev, 0x06, 0x00C1); mdelay(1); rtl8225se_rf_init()
373 rtl8187se_rf_writereg(dev, 0x0A, 0x0001); mdelay(1); rtl8225se_rf_init()
377 rtl8187se_rf_writereg(dev, 0x0F, tmp); rtl8225se_rf_init()
378 wiphy_info(dev->wiphy, "Xtal cal\n"); rtl8225se_rf_init()
381 wiphy_info(dev->wiphy, "NO Xtal cal\n"); rtl8225se_rf_init()
382 rtl8187se_rf_writereg(dev, 0x0F, 0x0ACC); rtl8225se_rf_init()
386 rtl8187se_rf_writereg(dev, 0x00, 0x00BF); mdelay(1); rtl8225se_rf_init()
387 rtl8187se_rf_writereg(dev, 0x0D, 0x08DF); mdelay(1); rtl8225se_rf_init()
388 rtl8187se_rf_writereg(dev, 0x02, 0x004D); mdelay(1); rtl8225se_rf_init()
389 rtl8187se_rf_writereg(dev, 0x04, 0x0975); mdelay(31); rtl8225se_rf_init()
390 rtl8187se_rf_writereg(dev, 0x00, 0x0197); mdelay(1); rtl8225se_rf_init()
391 rtl8187se_rf_writereg(dev, 0x05, 0x05AB); mdelay(1); rtl8225se_rf_init()
393 rtl8187se_rf_writereg(dev, 0x00, 0x009F); mdelay(1); rtl8225se_rf_init()
394 rtl8187se_rf_writereg(dev, 0x01, 0x0000); mdelay(1); rtl8225se_rf_init()
395 rtl8187se_rf_writereg(dev, 0x02, 0x0000); mdelay(1); rtl8225se_rf_init()
397 /* TODO: move to dev.c */ rtl8225se_rf_init()
400 rtl8225se_write_phy_cck(dev, 0x00, 0xC8); rtl8225se_rf_init()
401 rtl8225se_write_phy_cck(dev, 0x06, 0x1C); rtl8225se_rf_init()
402 rtl8225se_write_phy_cck(dev, 0x10, 0x78); rtl8225se_rf_init()
403 rtl8225se_write_phy_cck(dev, 0x2E, 0xD0); rtl8225se_rf_init()
404 rtl8225se_write_phy_cck(dev, 0x2F, 0x06); rtl8225se_rf_init()
405 rtl8225se_write_phy_cck(dev, 0x01, 0x46); rtl8225se_rf_init()
412 rtl8225se_write_phy_ofdm(dev, 0x00, 0x12); rtl8225se_rf_init()
414 rtl8225se_write_zebra_agc(dev); rtl8225se_rf_init()
416 rtl8225se_write_phy_ofdm(dev, 0x10, 0x00); rtl8225se_rf_init()
418 rtl8187se_write_ofdm_config(dev); rtl8225se_rf_init()
421 rtl8187se_rf_writereg(dev, 0x00, 0x009F); udelay(500); rtl8225se_rf_init()
422 rtl8187se_rf_writereg(dev, 0x04, 0x0972); udelay(500); rtl8225se_rf_init()
424 rtl8187se_rf_writereg(dev, 0x00, 0x009F); udelay(500); rtl8225se_rf_init()
425 rtl8187se_rf_writereg(dev, 0x04, 0x0972); udelay(500); rtl8225se_rf_init()
427 rtl8225se_write_phy_ofdm(dev, 0x10, 0x40); rtl8225se_rf_init()
428 rtl8225se_write_phy_ofdm(dev, 0x12, 0x40); rtl8225se_rf_init()
430 rtl8187se_write_initial_gain(dev, 4); rtl8225se_rf_init()
433 void rtl8225se_rf_stop(struct ieee80211_hw *dev) rtl8225se_rf_stop() argument
436 struct rtl8180_priv *priv = dev->priv; rtl8225se_rf_stop()
439 rtl8225se_write_phy_ofdm(dev, 0x10, 0x00); rtl8225se_rf_stop()
440 rtl8225se_write_phy_ofdm(dev, 0x12, 0x00); rtl8225se_rf_stop()
442 rtl8187se_rf_writereg(dev, 0x04, 0x0000); rtl8225se_rf_stop()
443 rtl8187se_rf_writereg(dev, 0x00, 0x0000); rtl8225se_rf_stop()
451 void rtl8225se_rf_set_channel(struct ieee80211_hw *dev, rtl8225se_rf_set_channel() argument
457 rtl8225sez2_rf_set_tx_power(dev, chan); rtl8225se_rf_set_channel()
458 rtl8187se_rf_writereg(dev, 0x7, rtl8225se_chan[chan - 1]); rtl8225se_rf_set_channel()
459 if ((rtl8187se_rf_readreg(dev, 0x7) & 0x0F80) != rtl8225se_rf_set_channel()
461 rtl8187se_rf_writereg(dev, 0x7, rtl8225se_chan[chan - 1]); rtl8225se_rf_set_channel()
472 const struct rtl818x_rf_ops *rtl8187se_detect_rf(struct ieee80211_hw *dev) rtl8187se_detect_rf() argument
H A Dmax2820.c45 static void write_max2820(struct ieee80211_hw *dev, u8 addr, u32 data) write_max2820() argument
47 struct rtl8180_priv *priv = dev->priv; write_max2820()
62 static void max2820_write_phy_antenna(struct ieee80211_hw *dev, short chan) max2820_write_phy_antenna() argument
64 struct rtl8180_priv *priv = dev->priv; max2820_write_phy_antenna()
73 rtl8180_write_phy(dev, 0x10, ant); max2820_write_phy_antenna()
92 static void max2820_rf_set_channel(struct ieee80211_hw *dev, max2820_rf_set_channel() argument
95 struct rtl8180_priv *priv = dev->priv; max2820_rf_set_channel()
104 rtl8180_write_phy(dev, 3, txpw); max2820_rf_set_channel()
106 max2820_write_phy_antenna(dev, channel); max2820_rf_set_channel()
107 write_max2820(dev, 3, chan); max2820_rf_set_channel()
110 static void max2820_rf_stop(struct ieee80211_hw *dev) max2820_rf_stop() argument
112 rtl8180_write_phy(dev, 3, 0x8); max2820_rf_stop()
113 write_max2820(dev, 1, 0); max2820_rf_stop()
117 static void max2820_rf_init(struct ieee80211_hw *dev) max2820_rf_init() argument
119 struct rtl8180_priv *priv = dev->priv; max2820_rf_init()
122 write_max2820(dev, 0, 0x007); /* test mode as indicated in datasheet */ max2820_rf_init()
123 write_max2820(dev, 1, 0x01e); /* enable register */ max2820_rf_init()
124 write_max2820(dev, 2, 0x001); /* synt register */ max2820_rf_init()
126 max2820_rf_set_channel(dev, NULL); max2820_rf_init()
128 write_max2820(dev, 4, 0x313); /* rx register */ max2820_rf_init()
134 write_max2820(dev, 5, 0x00f); max2820_rf_init()
137 rtl8180_write_phy(dev, 0, 0x88); /* sys1 */ max2820_rf_init()
138 rtl8180_write_phy(dev, 3, 0x08); /* txagc */ max2820_rf_init()
139 rtl8180_write_phy(dev, 4, 0xf8); /* lnadet */ max2820_rf_init()
140 rtl8180_write_phy(dev, 5, 0x90); /* ifagcinit */ max2820_rf_init()
141 rtl8180_write_phy(dev, 6, 0x1a); /* ifagclimit */ max2820_rf_init()
142 rtl8180_write_phy(dev, 7, 0x64); /* ifagcdet */ max2820_rf_init()
144 max2820_write_phy_antenna(dev, 1); max2820_rf_init()
146 rtl8180_write_phy(dev, 0x11, 0x88); /* trl */ max2820_rf_init()
150 rtl8180_write_phy(dev, 0x12, 0xc7); max2820_rf_init()
152 rtl8180_write_phy(dev, 0x12, 0x47); max2820_rf_init()
154 rtl8180_write_phy(dev, 0x13, 0x9b); max2820_rf_init()
156 rtl8180_write_phy(dev, 0x19, 0x0); /* CHESTLIM */ max2820_rf_init()
157 rtl8180_write_phy(dev, 0x1a, 0x9f); /* CHSQLIM */ max2820_rf_init()
159 max2820_rf_set_channel(dev, NULL); max2820_rf_init()
H A Dsa2400.c46 static void write_sa2400(struct ieee80211_hw *dev, u8 addr, u32 data) write_sa2400() argument
48 struct rtl8180_priv *priv = dev->priv; write_sa2400()
63 static void sa2400_write_phy_antenna(struct ieee80211_hw *dev, short chan) sa2400_write_phy_antenna() argument
65 struct rtl8180_priv *priv = dev->priv; sa2400_write_phy_antenna()
74 rtl8180_write_phy(dev, 0x10, ant); sa2400_write_phy_antenna()
103 static void sa2400_rf_set_channel(struct ieee80211_hw *dev, sa2400_rf_set_channel() argument
106 struct rtl8180_priv *priv = dev->priv; sa2400_rf_set_channel()
112 write_sa2400(dev, 7, txpw); sa2400_rf_set_channel()
114 sa2400_write_phy_antenna(dev, channel); sa2400_rf_set_channel()
116 write_sa2400(dev, 0, chan); sa2400_rf_set_channel()
117 write_sa2400(dev, 1, 0xbb50); sa2400_rf_set_channel()
118 write_sa2400(dev, 2, 0x80); sa2400_rf_set_channel()
119 write_sa2400(dev, 3, 0); sa2400_rf_set_channel()
122 static void sa2400_rf_stop(struct ieee80211_hw *dev) sa2400_rf_stop() argument
124 write_sa2400(dev, 4, 0); sa2400_rf_stop()
127 static void sa2400_rf_init(struct ieee80211_hw *dev) sa2400_rf_init() argument
129 struct rtl8180_priv *priv = dev->priv; sa2400_rf_init()
150 write_sa2400(dev, 0, sa2400_chan[0]); sa2400_rf_init()
151 write_sa2400(dev, 1, 0xbb50); sa2400_rf_init()
152 write_sa2400(dev, 2, 0x80); sa2400_rf_init()
153 write_sa2400(dev, 3, 0); sa2400_rf_init()
154 write_sa2400(dev, 4, 0x19340 | firdac); sa2400_rf_init()
155 write_sa2400(dev, 5, 0x1dfb | (SA2400_MAX_SENS - 54) << 15); sa2400_rf_init()
156 write_sa2400(dev, 4, 0x19348 | firdac); /* calibrate VCO */ sa2400_rf_init()
159 write_sa2400(dev, 4, 0x1938c); /*???*/ sa2400_rf_init()
161 write_sa2400(dev, 4, 0x19340 | firdac); sa2400_rf_init()
163 write_sa2400(dev, 0, sa2400_chan[0]); sa2400_rf_init()
164 write_sa2400(dev, 1, 0xbb50); sa2400_rf_init()
165 write_sa2400(dev, 2, 0x80); sa2400_rf_init()
166 write_sa2400(dev, 3, 0); sa2400_rf_init()
167 write_sa2400(dev, 4, 0x19344 | firdac); /* calibrate filter */ sa2400_rf_init()
170 write_sa2400(dev, 6, 0x13ff | (1 << 23)); /* MANRX */ sa2400_rf_init()
171 write_sa2400(dev, 8, 0); /* VCO */ sa2400_rf_init()
181 write_sa2400(dev, 4, 0x19341); /* calibrates DC */ sa2400_rf_init()
185 write_sa2400(dev, 4, 0x19345); sa2400_rf_init()
196 write_sa2400(dev, 4, 0x19341 | firdac); /* RTX MODE */ sa2400_rf_init()
199 rtl8180_write_phy(dev, 0, 0x98); sa2400_rf_init()
200 rtl8180_write_phy(dev, 3, 0x38); sa2400_rf_init()
201 rtl8180_write_phy(dev, 4, 0xe0); sa2400_rf_init()
202 rtl8180_write_phy(dev, 5, 0x90); sa2400_rf_init()
203 rtl8180_write_phy(dev, 6, 0x1a); sa2400_rf_init()
204 rtl8180_write_phy(dev, 7, 0x64); sa2400_rf_init()
206 sa2400_write_phy_antenna(dev, 1); sa2400_rf_init()
208 rtl8180_write_phy(dev, 0x11, 0x80); sa2400_rf_init()
212 rtl8180_write_phy(dev, 0x12, 0xc7); /* enable ant diversity */ sa2400_rf_init()
214 rtl8180_write_phy(dev, 0x12, 0x47); /* disable ant diversity */ sa2400_rf_init()
216 rtl8180_write_phy(dev, 0x13, 0x90 | priv->csthreshold); sa2400_rf_init()
218 rtl8180_write_phy(dev, 0x19, 0x0); sa2400_rf_init()
219 rtl8180_write_phy(dev, 0x1a, 0xa0); sa2400_rf_init()
/linux-4.4.14/drivers/gpio/
H A Dgpio-adp5520.c27 struct adp5520_gpio *dev; adp5520_gpio_get_value() local
30 dev = container_of(chip, struct adp5520_gpio, gpio_chip); adp5520_gpio_get_value()
37 if (test_bit(off, &dev->output)) adp5520_gpio_get_value()
38 adp5520_read(dev->master, ADP5520_GPIO_OUT, &reg_val); adp5520_gpio_get_value()
40 adp5520_read(dev->master, ADP5520_GPIO_IN, &reg_val); adp5520_gpio_get_value()
42 return !!(reg_val & dev->lut[off]); adp5520_gpio_get_value()
48 struct adp5520_gpio *dev; adp5520_gpio_set_value() local
49 dev = container_of(chip, struct adp5520_gpio, gpio_chip); adp5520_gpio_set_value()
52 adp5520_set_bits(dev->master, ADP5520_GPIO_OUT, dev->lut[off]); adp5520_gpio_set_value()
54 adp5520_clr_bits(dev->master, ADP5520_GPIO_OUT, dev->lut[off]); adp5520_gpio_set_value()
59 struct adp5520_gpio *dev; adp5520_gpio_direction_input() local
60 dev = container_of(chip, struct adp5520_gpio, gpio_chip); adp5520_gpio_direction_input()
62 clear_bit(off, &dev->output); adp5520_gpio_direction_input()
64 return adp5520_clr_bits(dev->master, ADP5520_GPIO_CFG_2, adp5520_gpio_direction_input()
65 dev->lut[off]); adp5520_gpio_direction_input()
71 struct adp5520_gpio *dev; adp5520_gpio_direction_output() local
73 dev = container_of(chip, struct adp5520_gpio, gpio_chip); adp5520_gpio_direction_output()
75 set_bit(off, &dev->output); adp5520_gpio_direction_output()
78 ret |= adp5520_set_bits(dev->master, ADP5520_GPIO_OUT, adp5520_gpio_direction_output()
79 dev->lut[off]); adp5520_gpio_direction_output()
81 ret |= adp5520_clr_bits(dev->master, ADP5520_GPIO_OUT, adp5520_gpio_direction_output()
82 dev->lut[off]); adp5520_gpio_direction_output()
84 ret |= adp5520_set_bits(dev->master, ADP5520_GPIO_CFG_2, adp5520_gpio_direction_output()
85 dev->lut[off]); adp5520_gpio_direction_output()
92 struct adp5520_gpio_platform_data *pdata = dev_get_platdata(&pdev->dev); adp5520_gpio_probe()
93 struct adp5520_gpio *dev; adp5520_gpio_probe() local
99 dev_err(&pdev->dev, "missing platform data\n"); adp5520_gpio_probe()
104 dev_err(&pdev->dev, "only ADP5520 supports GPIO\n"); adp5520_gpio_probe()
108 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); adp5520_gpio_probe()
109 if (dev == NULL) adp5520_gpio_probe()
112 dev->master = pdev->dev.parent; adp5520_gpio_probe()
116 dev->lut[gpios++] = 1 << i; adp5520_gpio_probe()
123 gc = &dev->gpio_chip; adp5520_gpio_probe()
135 ret = adp5520_clr_bits(dev->master, ADP5520_GPIO_CFG_1, adp5520_gpio_probe()
145 ret = adp5520_set_bits(dev->master, ADP5520_LED_CONTROL, adp5520_gpio_probe()
148 ret |= adp5520_set_bits(dev->master, ADP5520_GPIO_PULLUP, adp5520_gpio_probe()
152 dev_err(&pdev->dev, "failed to write\n"); adp5520_gpio_probe()
156 ret = gpiochip_add(&dev->gpio_chip); adp5520_gpio_probe()
160 platform_set_drvdata(pdev, dev); adp5520_gpio_probe()
169 struct adp5520_gpio *dev; adp5520_gpio_remove() local
171 dev = platform_get_drvdata(pdev); adp5520_gpio_remove()
172 gpiochip_remove(&dev->gpio_chip); adp5520_gpio_remove()
H A Dgpio-adp5588.c51 dev_err(&client->dev, "Read Error\n"); adp5588_gpio_read()
61 dev_err(&client->dev, "Write Error\n"); adp5588_gpio_write()
68 struct adp5588_gpio *dev = adp5588_gpio_get_value() local
74 mutex_lock(&dev->lock); adp5588_gpio_get_value()
76 if (dev->dir[bank] & bit) adp5588_gpio_get_value()
77 val = dev->dat_out[bank]; adp5588_gpio_get_value()
79 val = adp5588_gpio_read(dev->client, GPIO_DAT_STAT1 + bank); adp5588_gpio_get_value()
81 mutex_unlock(&dev->lock); adp5588_gpio_get_value()
90 struct adp5588_gpio *dev = adp5588_gpio_set_value() local
96 mutex_lock(&dev->lock); adp5588_gpio_set_value()
98 dev->dat_out[bank] |= bit; adp5588_gpio_set_value()
100 dev->dat_out[bank] &= ~bit; adp5588_gpio_set_value()
102 adp5588_gpio_write(dev->client, GPIO_DAT_OUT1 + bank, adp5588_gpio_set_value()
103 dev->dat_out[bank]); adp5588_gpio_set_value()
104 mutex_unlock(&dev->lock); adp5588_gpio_set_value()
111 struct adp5588_gpio *dev = adp5588_gpio_direction_input() local
116 mutex_lock(&dev->lock); adp5588_gpio_direction_input()
117 dev->dir[bank] &= ~ADP5588_BIT(off); adp5588_gpio_direction_input()
118 ret = adp5588_gpio_write(dev->client, GPIO_DIR1 + bank, dev->dir[bank]); adp5588_gpio_direction_input()
119 mutex_unlock(&dev->lock); adp5588_gpio_direction_input()
129 struct adp5588_gpio *dev = adp5588_gpio_direction_output() local
135 mutex_lock(&dev->lock); adp5588_gpio_direction_output()
136 dev->dir[bank] |= bit; adp5588_gpio_direction_output()
139 dev->dat_out[bank] |= bit; adp5588_gpio_direction_output()
141 dev->dat_out[bank] &= ~bit; adp5588_gpio_direction_output()
143 ret = adp5588_gpio_write(dev->client, GPIO_DAT_OUT1 + bank, adp5588_gpio_direction_output()
144 dev->dat_out[bank]); adp5588_gpio_direction_output()
145 ret |= adp5588_gpio_write(dev->client, GPIO_DIR1 + bank, adp5588_gpio_direction_output()
146 dev->dir[bank]); adp5588_gpio_direction_output()
147 mutex_unlock(&dev->lock); adp5588_gpio_direction_output()
155 struct adp5588_gpio *dev = adp5588_gpio_to_irq() local
157 return dev->irq_base + off; adp5588_gpio_to_irq()
162 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); adp5588_irq_bus_lock() local
164 mutex_lock(&dev->irq_lock); adp5588_irq_bus_lock()
177 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); adp5588_irq_bus_sync_unlock() local
181 if (dev->int_en[i] ^ dev->irq_mask[i]) { adp5588_irq_bus_sync_unlock()
182 dev->int_en[i] = dev->irq_mask[i]; adp5588_irq_bus_sync_unlock()
183 adp5588_gpio_write(dev->client, GPIO_INT_EN1 + i, adp5588_irq_bus_sync_unlock()
184 dev->int_en[i]); adp5588_irq_bus_sync_unlock()
187 mutex_unlock(&dev->irq_lock); adp5588_irq_bus_sync_unlock()
192 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); adp5588_irq_mask() local
193 unsigned gpio = d->irq - dev->irq_base; adp5588_irq_mask()
195 dev->irq_mask[ADP5588_BANK(gpio)] &= ~ADP5588_BIT(gpio); adp5588_irq_mask()
200 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); adp5588_irq_unmask() local
201 unsigned gpio = d->irq - dev->irq_base; adp5588_irq_unmask()
203 dev->irq_mask[ADP5588_BANK(gpio)] |= ADP5588_BIT(gpio); adp5588_irq_unmask()
208 struct adp5588_gpio *dev = irq_data_get_irq_chip_data(d); adp5588_irq_set_type() local
209 uint16_t gpio = d->irq - dev->irq_base; adp5588_irq_set_type()
213 dev_err(&dev->client->dev, "irq %d: unsupported type %d\n", adp5588_irq_set_type()
222 dev->int_lvl[bank] |= bit; adp5588_irq_set_type()
224 dev->int_lvl[bank] &= ~bit; adp5588_irq_set_type()
228 adp5588_gpio_direction_input(&dev->gpio_chip, gpio); adp5588_irq_set_type()
229 adp5588_gpio_write(dev->client, GPIO_INT_LVL1 + bank, adp5588_irq_set_type()
230 dev->int_lvl[bank]); adp5588_irq_set_type()
249 dev_err(&client->dev, "Read INT_STAT Error\n"); adp5588_gpio_read_intstat()
256 struct adp5588_gpio *dev = devid; adp5588_irq_handler() local
259 status = adp5588_gpio_read(dev->client, INT_STAT); adp5588_irq_handler()
262 ret = adp5588_gpio_read_intstat(dev->client, dev->irq_stat); adp5588_irq_handler()
264 memset(dev->irq_stat, 0, ARRAY_SIZE(dev->irq_stat)); adp5588_irq_handler()
268 pending = dev->irq_stat[bank] & dev->irq_mask[bank]; adp5588_irq_handler()
272 handle_nested_irq(dev->irq_base + adp5588_irq_handler()
282 adp5588_gpio_write(dev->client, INT_STAT, status); /* Status is W1C */ adp5588_irq_handler()
287 static int adp5588_irq_setup(struct adp5588_gpio *dev) adp5588_irq_setup() argument
289 struct i2c_client *client = dev->client; adp5588_irq_setup()
291 dev_get_platdata(&client->dev); adp5588_irq_setup()
297 adp5588_gpio_read_intstat(client, dev->irq_stat); /* read to clear */ adp5588_irq_setup()
299 dev->irq_base = pdata->irq_base; adp5588_irq_setup()
300 mutex_init(&dev->irq_lock); adp5588_irq_setup()
302 for (gpio = 0; gpio < dev->gpio_chip.ngpio; gpio++) { adp5588_irq_setup()
303 int irq = gpio + dev->irq_base; adp5588_irq_setup()
304 irq_set_chip_data(irq, dev); adp5588_irq_setup()
315 dev_name(&client->dev), dev); adp5588_irq_setup()
317 dev_err(&client->dev, "failed to request irq %d\n", adp5588_irq_setup()
322 dev->gpio_chip.to_irq = adp5588_gpio_to_irq; adp5588_irq_setup()
329 dev->irq_base = 0; adp5588_irq_setup()
333 static void adp5588_irq_teardown(struct adp5588_gpio *dev) adp5588_irq_teardown() argument
335 if (dev->irq_base) adp5588_irq_teardown()
336 free_irq(dev->client->irq, dev); adp5588_irq_teardown()
340 static int adp5588_irq_setup(struct adp5588_gpio *dev) adp5588_irq_setup() argument
342 struct i2c_client *client = dev->client; adp5588_irq_setup()
343 dev_warn(&client->dev, "interrupt support not compiled in\n"); adp5588_irq_setup()
348 static void adp5588_irq_teardown(struct adp5588_gpio *dev) adp5588_irq_teardown() argument
357 dev_get_platdata(&client->dev); adp5588_gpio_probe()
358 struct adp5588_gpio *dev; adp5588_gpio_probe() local
363 dev_err(&client->dev, "missing platform data\n"); adp5588_gpio_probe()
369 dev_err(&client->dev, "SMBUS Byte Data not Supported\n"); adp5588_gpio_probe()
373 dev = devm_kzalloc(&client->dev, sizeof(*dev), GFP_KERNEL); adp5588_gpio_probe()
374 if (!dev) adp5588_gpio_probe()
377 dev->client = client; adp5588_gpio_probe()
379 gc = &dev->gpio_chip; adp5588_gpio_probe()
392 mutex_init(&dev->lock); adp5588_gpio_probe()
394 ret = adp5588_gpio_read(dev->client, DEV_ID); adp5588_gpio_probe()
401 dev->dat_out[i] = adp5588_gpio_read(client, GPIO_DAT_OUT1 + i); adp5588_gpio_probe()
402 dev->dir[i] = adp5588_gpio_read(client, GPIO_DIR1 + i); adp5588_gpio_probe()
413 dev_warn(&client->dev, "GPIO int not supported\n"); adp5588_gpio_probe()
415 ret = adp5588_irq_setup(dev); adp5588_gpio_probe()
421 ret = gpiochip_add(&dev->gpio_chip); adp5588_gpio_probe()
425 dev_info(&client->dev, "IRQ Base: %d Rev.: %d\n", adp5588_gpio_probe()
431 dev_warn(&client->dev, "setup failed, %d\n", ret); adp5588_gpio_probe()
434 i2c_set_clientdata(client, dev); adp5588_gpio_probe()
439 adp5588_irq_teardown(dev); adp5588_gpio_probe()
447 dev_get_platdata(&client->dev); adp5588_gpio_remove()
448 struct adp5588_gpio *dev = i2c_get_clientdata(client); adp5588_gpio_remove() local
453 dev->gpio_chip.base, dev->gpio_chip.ngpio, adp5588_gpio_remove()
456 dev_err(&client->dev, "teardown failed %d\n", ret); adp5588_gpio_remove()
461 if (dev->irq_base) adp5588_gpio_remove()
462 free_irq(dev->client->irq, dev); adp5588_gpio_remove()
464 gpiochip_remove(&dev->gpio_chip); adp5588_gpio_remove()
/linux-4.4.14/drivers/media/rc/
H A Dene_ir.c50 static void ene_set_reg_addr(struct ene_device *dev, u16 reg) ene_set_reg_addr() argument
52 outb(reg >> 8, dev->hw_io + ENE_ADDR_HI); ene_set_reg_addr()
53 outb(reg & 0xFF, dev->hw_io + ENE_ADDR_LO); ene_set_reg_addr()
57 static u8 ene_read_reg(struct ene_device *dev, u16 reg) ene_read_reg() argument
60 ene_set_reg_addr(dev, reg); ene_read_reg()
61 retval = inb(dev->hw_io + ENE_IO); ene_read_reg()
67 static void ene_write_reg(struct ene_device *dev, u16 reg, u8 value) ene_write_reg() argument
70 ene_set_reg_addr(dev, reg); ene_write_reg()
71 outb(value, dev->hw_io + ENE_IO); ene_write_reg()
75 static void ene_set_reg_mask(struct ene_device *dev, u16 reg, u8 mask) ene_set_reg_mask() argument
78 ene_set_reg_addr(dev, reg); ene_set_reg_mask()
79 outb(inb(dev->hw_io + ENE_IO) | mask, dev->hw_io + ENE_IO); ene_set_reg_mask()
83 static void ene_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask) ene_clear_reg_mask() argument
86 ene_set_reg_addr(dev, reg); ene_clear_reg_mask()
87 outb(inb(dev->hw_io + ENE_IO) & ~mask, dev->hw_io + ENE_IO); ene_clear_reg_mask()
91 static void ene_set_clear_reg_mask(struct ene_device *dev, u16 reg, u8 mask, ene_set_clear_reg_mask() argument
95 ene_set_reg_mask(dev, reg, mask); ene_set_clear_reg_mask()
97 ene_clear_reg_mask(dev, reg, mask); ene_set_clear_reg_mask()
101 static int ene_hw_detect(struct ene_device *dev) ene_hw_detect() argument
107 ene_clear_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD); ene_hw_detect()
108 chip_major = ene_read_reg(dev, ENE_ECVER_MAJOR); ene_hw_detect()
109 chip_minor = ene_read_reg(dev, ENE_ECVER_MINOR); ene_hw_detect()
110 ene_set_reg_mask(dev, ENE_ECSTS, ENE_ECSTS_RSRVD); ene_hw_detect()
112 hw_revision = ene_read_reg(dev, ENE_ECHV); ene_hw_detect()
113 old_ver = ene_read_reg(dev, ENE_HW_VER_OLD); ene_hw_detect()
115 dev->pll_freq = (ene_read_reg(dev, ENE_PLLFRH) << 4) + ene_hw_detect()
116 (ene_read_reg(dev, ENE_PLLFRL) >> 4); ene_hw_detect()
119 dev->rx_period_adjust = ene_hw_detect()
120 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 2 : 4; ene_hw_detect()
132 pr_notice("PLL freq = %d\n", dev->pll_freq); ene_hw_detect()
140 dev->hw_revision = ENE_HW_C; ene_hw_detect()
143 dev->hw_revision = ENE_HW_B; ene_hw_detect()
146 dev->hw_revision = ENE_HW_D; ene_hw_detect()
151 if (dev->hw_revision < ENE_HW_C) ene_hw_detect()
154 fw_reg1 = ene_read_reg(dev, ENE_FW1); ene_hw_detect()
155 fw_reg2 = ene_read_reg(dev, ENE_FW2); ene_hw_detect()
159 dev->hw_use_gpio_0a = !!(fw_reg2 & ENE_FW2_GP0A); ene_hw_detect()
160 dev->hw_learning_and_tx_capable = !!(fw_reg2 & ENE_FW2_LEARNING); ene_hw_detect()
161 dev->hw_extra_buffer = !!(fw_reg1 & ENE_FW1_HAS_EXTRA_BUF); ene_hw_detect()
163 if (dev->hw_learning_and_tx_capable) ene_hw_detect()
164 dev->hw_fan_input = !!(fw_reg2 & ENE_FW2_FAN_INPUT); ene_hw_detect()
168 if (dev->hw_learning_and_tx_capable) { ene_hw_detect()
177 dev->hw_use_gpio_0a ? "40" : "0A"); ene_hw_detect()
179 if (dev->hw_fan_input) ene_hw_detect()
183 if (!dev->hw_fan_input) ene_hw_detect()
185 dev->hw_use_gpio_0a ? "0A" : "40"); ene_hw_detect()
187 if (dev->hw_extra_buffer) ene_hw_detect()
193 static void ene_rx_setup_hw_buffer(struct ene_device *dev) ene_rx_setup_hw_buffer() argument
197 ene_rx_read_hw_pointer(dev); ene_rx_setup_hw_buffer()
198 dev->r_pointer = dev->w_pointer; ene_rx_setup_hw_buffer()
200 if (!dev->hw_extra_buffer) { ene_rx_setup_hw_buffer()
201 dev->buffer_len = ENE_FW_PACKET_SIZE * 2; ene_rx_setup_hw_buffer()
205 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER); ene_rx_setup_hw_buffer()
206 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER+1) << 8; ene_rx_setup_hw_buffer()
207 dev->extra_buf1_address = tmp; ene_rx_setup_hw_buffer()
209 dev->extra_buf1_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 2); ene_rx_setup_hw_buffer()
211 tmp = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 3); ene_rx_setup_hw_buffer()
212 tmp |= ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 4) << 8; ene_rx_setup_hw_buffer()
213 dev->extra_buf2_address = tmp; ene_rx_setup_hw_buffer()
215 dev->extra_buf2_len = ene_read_reg(dev, ENE_FW_SAMPLE_BUFFER + 5); ene_rx_setup_hw_buffer()
217 dev->buffer_len = dev->extra_buf1_len + dev->extra_buf2_len + 8; ene_rx_setup_hw_buffer()
221 dev->extra_buf1_address, dev->extra_buf1_len); ene_rx_setup_hw_buffer()
223 dev->extra_buf2_address, dev->extra_buf2_len); ene_rx_setup_hw_buffer()
225 pr_notice("Total buffer len = %d\n", dev->buffer_len); ene_rx_setup_hw_buffer()
227 if (dev->buffer_len > 64 || dev->buffer_len < 16) ene_rx_setup_hw_buffer()
230 if (dev->extra_buf1_address > 0xFBFC || ene_rx_setup_hw_buffer()
231 dev->extra_buf1_address < 0xEC00) ene_rx_setup_hw_buffer()
234 if (dev->extra_buf2_address > 0xFBFC || ene_rx_setup_hw_buffer()
235 dev->extra_buf2_address < 0xEC00) ene_rx_setup_hw_buffer()
238 if (dev->r_pointer > dev->buffer_len) ene_rx_setup_hw_buffer()
241 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND); ene_rx_setup_hw_buffer()
245 dev->hw_extra_buffer = false; ene_rx_setup_hw_buffer()
246 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND); ene_rx_setup_hw_buffer()
251 static void ene_rx_restore_hw_buffer(struct ene_device *dev) ene_rx_restore_hw_buffer() argument
253 if (!dev->hw_extra_buffer) ene_rx_restore_hw_buffer()
256 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 0, ene_rx_restore_hw_buffer()
257 dev->extra_buf1_address & 0xFF); ene_rx_restore_hw_buffer()
258 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 1, ene_rx_restore_hw_buffer()
259 dev->extra_buf1_address >> 8); ene_rx_restore_hw_buffer()
260 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 2, dev->extra_buf1_len); ene_rx_restore_hw_buffer()
262 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 3, ene_rx_restore_hw_buffer()
263 dev->extra_buf2_address & 0xFF); ene_rx_restore_hw_buffer()
264 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 4, ene_rx_restore_hw_buffer()
265 dev->extra_buf2_address >> 8); ene_rx_restore_hw_buffer()
266 ene_write_reg(dev, ENE_FW_SAMPLE_BUFFER + 5, ene_rx_restore_hw_buffer()
267 dev->extra_buf2_len); ene_rx_restore_hw_buffer()
268 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_EXTRA_BUF_HND); ene_rx_restore_hw_buffer()
272 static void ene_rx_read_hw_pointer(struct ene_device *dev) ene_rx_read_hw_pointer() argument
274 if (dev->hw_extra_buffer) ene_rx_read_hw_pointer()
275 dev->w_pointer = ene_read_reg(dev, ENE_FW_RX_POINTER); ene_rx_read_hw_pointer()
277 dev->w_pointer = ene_read_reg(dev, ENE_FW2) ene_rx_read_hw_pointer()
281 dev->w_pointer, dev->r_pointer); ene_rx_read_hw_pointer()
285 static int ene_rx_get_sample_reg(struct ene_device *dev) ene_rx_get_sample_reg() argument
289 if (dev->r_pointer == dev->w_pointer) { ene_rx_get_sample_reg()
291 ene_rx_read_hw_pointer(dev); ene_rx_get_sample_reg()
294 if (dev->r_pointer == dev->w_pointer) { ene_rx_get_sample_reg()
295 dbg_verbose("RB: end of data at %d", dev->r_pointer); ene_rx_get_sample_reg()
299 dbg_verbose("RB: reading at offset %d", dev->r_pointer); ene_rx_get_sample_reg()
300 r_pointer = dev->r_pointer; ene_rx_get_sample_reg()
302 dev->r_pointer++; ene_rx_get_sample_reg()
303 if (dev->r_pointer == dev->buffer_len) ene_rx_get_sample_reg()
304 dev->r_pointer = 0; ene_rx_get_sample_reg()
306 dbg_verbose("RB: next read will be from offset %d", dev->r_pointer); ene_rx_get_sample_reg()
315 if (r_pointer < dev->extra_buf1_len) { ene_rx_get_sample_reg()
317 return dev->extra_buf1_address + r_pointer; ene_rx_get_sample_reg()
320 r_pointer -= dev->extra_buf1_len; ene_rx_get_sample_reg()
322 if (r_pointer < dev->extra_buf2_len) { ene_rx_get_sample_reg()
324 return dev->extra_buf2_address + r_pointer; ene_rx_get_sample_reg()
332 static void ene_rx_sense_carrier(struct ene_device *dev) ene_rx_sense_carrier() argument
337 int period = ene_read_reg(dev, ENE_CIRCAR_PRD); ene_rx_sense_carrier()
338 int hperiod = ene_read_reg(dev, ENE_CIRCAR_HPRD); ene_rx_sense_carrier()
355 if (dev->carrier_detect_enabled) { ene_rx_sense_carrier()
359 ir_raw_event_store(dev->rdev, &ev); ene_rx_sense_carrier()
364 static void ene_rx_enable_cir_engine(struct ene_device *dev, bool enable) ene_rx_enable_cir_engine() argument
366 ene_set_clear_reg_mask(dev, ENE_CIRCFG, ene_rx_enable_cir_engine()
371 static void ene_rx_select_input(struct ene_device *dev, bool gpio_0a) ene_rx_select_input() argument
373 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_GPIO0A, gpio_0a); ene_rx_select_input()
380 static void ene_rx_enable_fan_input(struct ene_device *dev, bool enable) ene_rx_enable_fan_input() argument
382 if (!dev->hw_fan_input) ene_rx_enable_fan_input()
386 ene_write_reg(dev, ENE_FAN_AS_IN1, 0); ene_rx_enable_fan_input()
388 ene_write_reg(dev, ENE_FAN_AS_IN1, ENE_FAN_AS_IN1_EN); ene_rx_enable_fan_input()
389 ene_write_reg(dev, ENE_FAN_AS_IN2, ENE_FAN_AS_IN2_EN); ene_rx_enable_fan_input()
394 static void ene_rx_setup(struct ene_device *dev) ene_rx_setup() argument
396 bool learning_mode = dev->learning_mode_enabled || ene_rx_setup()
397 dev->carrier_detect_enabled; ene_rx_setup()
404 ene_write_reg(dev, ENE_CIRCFG2, 0x00); ene_rx_setup()
409 dev->pll_freq == ENE_DEFAULT_PLL_FREQ ? 1 : 2; ene_rx_setup()
411 ene_write_reg(dev, ENE_CIRRLC_CFG, ene_rx_setup()
415 if (dev->hw_revision < ENE_HW_C) ene_rx_setup()
420 WARN_ON(!dev->hw_learning_and_tx_capable); ene_rx_setup()
427 ene_rx_select_input(dev, !dev->hw_use_gpio_0a); ene_rx_setup()
428 dev->rx_fan_input_inuse = false; ene_rx_setup()
431 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD); ene_rx_setup()
434 ene_write_reg(dev, ENE_CIRCAR_PULS, 0x63); ene_rx_setup()
435 ene_set_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT, ene_rx_setup()
436 dev->carrier_detect_enabled || debug); ene_rx_setup()
438 if (dev->hw_fan_input) ene_rx_setup()
439 dev->rx_fan_input_inuse = true; ene_rx_setup()
441 ene_rx_select_input(dev, dev->hw_use_gpio_0a); ene_rx_setup()
444 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_CARR_DEMOD); ene_rx_setup()
445 ene_clear_reg_mask(dev, ENE_CIRCFG2, ENE_CIRCFG2_CARR_DETECT); ene_rx_setup()
449 if (dev->rx_fan_input_inuse) { ene_rx_setup()
450 dev->rdev->rx_resolution = US_TO_NS(ENE_FW_SAMPLE_PERIOD_FAN); ene_rx_setup()
454 dev->rdev->min_timeout = dev->rdev->max_timeout = ene_rx_setup()
458 dev->rdev->rx_resolution = US_TO_NS(sample_period); ene_rx_setup()
465 dev->rdev->min_timeout = US_TO_NS(127 * sample_period); ene_rx_setup()
466 dev->rdev->max_timeout = US_TO_NS(200000); ene_rx_setup()
469 if (dev->hw_learning_and_tx_capable) ene_rx_setup()
470 dev->rdev->tx_resolution = US_TO_NS(sample_period); ene_rx_setup()
472 if (dev->rdev->timeout > dev->rdev->max_timeout) ene_rx_setup()
473 dev->rdev->timeout = dev->rdev->max_timeout; ene_rx_setup()
474 if (dev->rdev->timeout < dev->rdev->min_timeout) ene_rx_setup()
475 dev->rdev->timeout = dev->rdev->min_timeout; ene_rx_setup()
479 static void ene_rx_enable_hw(struct ene_device *dev) ene_rx_enable_hw() argument
484 if (dev->hw_revision < ENE_HW_C) { ene_rx_enable_hw()
485 ene_write_reg(dev, ENEB_IRQ, dev->irq << 1); ene_rx_enable_hw()
486 ene_write_reg(dev, ENEB_IRQ_UNK1, 0x01); ene_rx_enable_hw()
488 reg_value = ene_read_reg(dev, ENE_IRQ) & 0xF0; ene_rx_enable_hw()
491 reg_value |= (dev->irq & ENE_IRQ_MASK); ene_rx_enable_hw()
492 ene_write_reg(dev, ENE_IRQ, reg_value); ene_rx_enable_hw()
496 ene_rx_enable_fan_input(dev, dev->rx_fan_input_inuse); ene_rx_enable_hw()
497 ene_rx_enable_cir_engine(dev, !dev->rx_fan_input_inuse); ene_rx_enable_hw()
500 ene_irq_status(dev); ene_rx_enable_hw()
503 ene_set_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ); ene_rx_enable_hw()
506 ir_raw_event_set_idle(dev->rdev, true); ene_rx_enable_hw()
510 static void ene_rx_enable(struct ene_device *dev) ene_rx_enable() argument
512 ene_rx_enable_hw(dev); ene_rx_enable()
513 dev->rx_enabled = true; ene_rx_enable()
517 static void ene_rx_disable_hw(struct ene_device *dev) ene_rx_disable_hw() argument
520 ene_rx_enable_cir_engine(dev, false); ene_rx_disable_hw()
521 ene_rx_enable_fan_input(dev, false); ene_rx_disable_hw()
524 ene_clear_reg_mask(dev, ENE_FW1, ENE_FW1_ENABLE | ENE_FW1_IRQ); ene_rx_disable_hw()
525 ir_raw_event_set_idle(dev->rdev, true); ene_rx_disable_hw()
529 static void ene_rx_disable(struct ene_device *dev) ene_rx_disable() argument
531 ene_rx_disable_hw(dev); ene_rx_disable()
532 dev->rx_enabled = false; ene_rx_disable()
538 static void ene_rx_reset(struct ene_device *dev) ene_rx_reset() argument
540 ene_clear_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN); ene_rx_reset()
541 ene_set_reg_mask(dev, ENE_CIRCFG, ENE_CIRCFG_RX_EN); ene_rx_reset()
545 static void ene_tx_set_carrier(struct ene_device *dev) ene_tx_set_carrier() argument
550 spin_lock_irqsave(&dev->hw_lock, flags); ene_tx_set_carrier()
552 ene_set_clear_reg_mask(dev, ENE_CIRCFG, ene_tx_set_carrier()
553 ENE_CIRCFG_TX_CARR, dev->tx_period > 0); ene_tx_set_carrier()
555 if (!dev->tx_period) ene_tx_set_carrier()
558 BUG_ON(dev->tx_duty_cycle >= 100 || dev->tx_duty_cycle <= 0); ene_tx_set_carrier()
560 tx_puls_width = dev->tx_period / (100 / dev->tx_duty_cycle); ene_tx_set_carrier()
565 dbg("TX: pulse distance = %d * 500 ns", dev->tx_period); ene_tx_set_carrier()
568 ene_write_reg(dev, ENE_CIRMOD_PRD, dev->tx_period | ENE_CIRMOD_PRD_POL); ene_tx_set_carrier()
569 ene_write_reg(dev, ENE_CIRMOD_HPRD, tx_puls_width); ene_tx_set_carrier()
571 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_tx_set_carrier()
575 static void ene_tx_set_transmitters(struct ene_device *dev) ene_tx_set_transmitters() argument
579 spin_lock_irqsave(&dev->hw_lock, flags); ene_tx_set_transmitters()
580 ene_set_clear_reg_mask(dev, ENE_GPIOFS8, ENE_GPIOFS8_GPIO41, ene_tx_set_transmitters()
581 !!(dev->transmitter_mask & 0x01)); ene_tx_set_transmitters()
582 ene_set_clear_reg_mask(dev, ENE_GPIOFS1, ENE_GPIOFS1_GPIO0D, ene_tx_set_transmitters()
583 !!(dev->transmitter_mask & 0x02)); ene_tx_set_transmitters()
584 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_tx_set_transmitters()
588 static void ene_tx_enable(struct ene_device *dev) ene_tx_enable() argument
590 u8 conf1 = ene_read_reg(dev, ENE_CIRCFG); ene_tx_enable()
591 u8 fwreg2 = ene_read_reg(dev, ENE_FW2); ene_tx_enable()
593 dev->saved_conf1 = conf1; ene_tx_enable()
606 if (dev->hw_revision == ENE_HW_C) ene_tx_enable()
611 ene_write_reg(dev, ENE_CIRCFG, conf1); ene_tx_enable()
615 static void ene_tx_disable(struct ene_device *dev) ene_tx_disable() argument
617 ene_write_reg(dev, ENE_CIRCFG, dev->saved_conf1); ene_tx_disable()
618 dev->tx_buffer = NULL; ene_tx_disable()
622 /* TX one sample - must be called with dev->hw_lock*/ ene_tx_sample()
623 static void ene_tx_sample(struct ene_device *dev) ene_tx_sample() argument
627 bool pulse = dev->tx_sample_pulse; ene_tx_sample()
629 if (!dev->tx_buffer) { ene_tx_sample()
635 if (!dev->tx_sample) { ene_tx_sample()
637 if (dev->tx_pos == dev->tx_len) { ene_tx_sample()
638 if (!dev->tx_done) { ene_tx_sample()
640 dev->tx_done = true; ene_tx_sample()
644 ene_tx_disable(dev); ene_tx_sample()
645 complete(&dev->tx_complete); ene_tx_sample()
650 sample = dev->tx_buffer[dev->tx_pos++]; ene_tx_sample()
651 dev->tx_sample_pulse = !dev->tx_sample_pulse; ene_tx_sample()
653 dev->tx_sample = DIV_ROUND_CLOSEST(sample, sample_period); ene_tx_sample()
655 if (!dev->tx_sample) ene_tx_sample()
656 dev->tx_sample = 1; ene_tx_sample()
659 raw_tx = min(dev->tx_sample , (unsigned int)ENE_CIRRLC_OUT_MASK); ene_tx_sample()
660 dev->tx_sample -= raw_tx; ene_tx_sample()
667 ene_write_reg(dev, ene_tx_sample()
668 dev->tx_reg ? ENE_CIRRLC_OUT1 : ENE_CIRRLC_OUT0, raw_tx); ene_tx_sample()
670 dev->tx_reg = !dev->tx_reg; ene_tx_sample()
674 mod_timer(&dev->tx_sim_timer, jiffies + HZ / 500); ene_tx_sample()
680 struct ene_device *dev = (struct ene_device *)data; ene_tx_irqsim() local
683 spin_lock_irqsave(&dev->hw_lock, flags); ene_tx_irqsim()
684 ene_tx_sample(dev); ene_tx_irqsim()
685 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_tx_irqsim()
690 static int ene_irq_status(struct ene_device *dev) ene_irq_status() argument
696 fw_flags2 = ene_read_reg(dev, ENE_FW2); ene_irq_status()
698 if (dev->hw_revision < ENE_HW_C) { ene_irq_status()
699 irq_status = ene_read_reg(dev, ENEB_IRQ_STATUS); ene_irq_status()
704 ene_clear_reg_mask(dev, ENEB_IRQ_STATUS, ENEB_IRQ_STATUS_IR); ene_irq_status()
708 irq_status = ene_read_reg(dev, ENE_IRQ); ene_irq_status()
713 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS); ene_irq_status()
714 ene_write_reg(dev, ENE_IRQ, irq_status & ~ENE_IRQ_STATUS); ene_irq_status()
719 ene_write_reg(dev, ENE_FW2, fw_flags2 & ~ENE_FW2_RXIRQ); ene_irq_status()
723 fw_flags1 = ene_read_reg(dev, ENE_FW1); ene_irq_status()
725 ene_write_reg(dev, ENE_FW1, fw_flags1 & ~ENE_FW1_TXIRQ); ene_irq_status()
740 struct ene_device *dev = (struct ene_device *)data; ene_isr() local
743 spin_lock_irqsave(&dev->hw_lock, flags); ene_isr()
746 ene_rx_read_hw_pointer(dev); ene_isr()
747 irq_status = ene_irq_status(dev); ene_isr()
756 if (!dev->hw_learning_and_tx_capable) { ene_isr()
760 ene_tx_sample(dev); ene_isr()
768 if (dev->hw_learning_and_tx_capable) ene_isr()
769 ene_rx_sense_carrier(dev); ene_isr()
773 if (!dev->hw_extra_buffer) ene_isr()
774 dev->r_pointer = dev->w_pointer == 0 ? ENE_FW_PACKET_SIZE : 0; ene_isr()
778 reg = ene_rx_get_sample_reg(dev); ene_isr()
784 hw_value = ene_read_reg(dev, reg); ene_isr()
786 if (dev->rx_fan_input_inuse) { ene_isr()
791 hw_value |= ene_read_reg(dev, reg + offset) << 8; ene_isr()
803 if (dev->rx_period_adjust) { ene_isr()
805 hw_sample /= (100 + dev->rx_period_adjust); ene_isr()
809 if (!dev->hw_extra_buffer && !hw_sample) { ene_isr()
810 dev->r_pointer = dev->w_pointer; ene_isr()
818 ir_raw_event_store_with_filter(dev->rdev, &ev); ene_isr()
821 ir_raw_event_handle(dev->rdev); ene_isr()
823 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_isr()
828 static void ene_setup_default_settings(struct ene_device *dev) ene_setup_default_settings() argument
830 dev->tx_period = 32; ene_setup_default_settings()
831 dev->tx_duty_cycle = 50; /*%*/ ene_setup_default_settings()
832 dev->transmitter_mask = 0x03; ene_setup_default_settings()
833 dev->learning_mode_enabled = learning_mode_force; ene_setup_default_settings()
836 dev->rdev->timeout = US_TO_NS(150000); ene_setup_default_settings()
840 static void ene_setup_hw_settings(struct ene_device *dev) ene_setup_hw_settings() argument
842 if (dev->hw_learning_and_tx_capable) { ene_setup_hw_settings()
843 ene_tx_set_carrier(dev); ene_setup_hw_settings()
844 ene_tx_set_transmitters(dev); ene_setup_hw_settings()
847 ene_rx_setup(dev); ene_setup_hw_settings()
853 struct ene_device *dev = rdev->priv; ene_open() local
856 spin_lock_irqsave(&dev->hw_lock, flags); ene_open()
857 ene_rx_enable(dev); ene_open()
858 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_open()
865 struct ene_device *dev = rdev->priv; ene_close() local
867 spin_lock_irqsave(&dev->hw_lock, flags); ene_close()
869 ene_rx_disable(dev); ene_close()
870 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_close()
876 struct ene_device *dev = rdev->priv; ene_set_tx_mask() local
886 dev->transmitter_mask = tx_mask; ene_set_tx_mask()
887 ene_tx_set_transmitters(dev); ene_set_tx_mask()
894 struct ene_device *dev = rdev->priv; ene_set_tx_carrier() local
910 dev->tx_period = period; ene_set_tx_carrier()
911 ene_tx_set_carrier(dev); ene_set_tx_carrier()
918 struct ene_device *dev = rdev->priv; ene_set_tx_duty_cycle() local
920 dev->tx_duty_cycle = duty_cycle; ene_set_tx_duty_cycle()
921 ene_tx_set_carrier(dev); ene_set_tx_duty_cycle()
928 struct ene_device *dev = rdev->priv; ene_set_learning_mode() local
930 if (enable == dev->learning_mode_enabled) ene_set_learning_mode()
933 spin_lock_irqsave(&dev->hw_lock, flags); ene_set_learning_mode()
934 dev->learning_mode_enabled = enable; ene_set_learning_mode()
935 ene_rx_disable(dev); ene_set_learning_mode()
936 ene_rx_setup(dev); ene_set_learning_mode()
937 ene_rx_enable(dev); ene_set_learning_mode()
938 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_set_learning_mode()
944 struct ene_device *dev = rdev->priv; ene_set_carrier_report() local
947 if (enable == dev->carrier_detect_enabled) ene_set_carrier_report()
950 spin_lock_irqsave(&dev->hw_lock, flags); ene_set_carrier_report()
951 dev->carrier_detect_enabled = enable; ene_set_carrier_report()
952 ene_rx_disable(dev); ene_set_carrier_report()
953 ene_rx_setup(dev); ene_set_carrier_report()
954 ene_rx_enable(dev); ene_set_carrier_report()
955 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_set_carrier_report()
962 struct ene_device *dev = rdev->priv; ene_set_idle() local
965 ene_rx_reset(dev); ene_set_idle()
973 struct ene_device *dev = rdev->priv; ene_transmit() local
976 dev->tx_buffer = buf; ene_transmit()
977 dev->tx_len = n; ene_transmit()
978 dev->tx_pos = 0; ene_transmit()
979 dev->tx_reg = 0; ene_transmit()
980 dev->tx_done = 0; ene_transmit()
981 dev->tx_sample = 0; ene_transmit()
982 dev->tx_sample_pulse = false; ene_transmit()
984 dbg("TX: %d samples", dev->tx_len); ene_transmit()
986 spin_lock_irqsave(&dev->hw_lock, flags); ene_transmit()
988 ene_tx_enable(dev); ene_transmit()
991 ene_tx_sample(dev); ene_transmit()
992 ene_tx_sample(dev); ene_transmit()
994 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_transmit()
996 if (wait_for_completion_timeout(&dev->tx_complete, 2 * HZ) == 0) { ene_transmit()
998 spin_lock_irqsave(&dev->hw_lock, flags); ene_transmit()
999 ene_tx_disable(dev); ene_transmit()
1000 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_transmit()
1011 struct ene_device *dev; ene_probe() local
1014 dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL); ene_probe()
1016 if (!dev || !rdev) ene_probe()
1023 dev->hw_io = -1; ene_probe()
1024 dev->irq = -1; ene_probe()
1033 spin_lock_init(&dev->hw_lock); ene_probe()
1035 dev->hw_io = pnp_port_start(pnp_dev, 0); ene_probe()
1036 dev->irq = pnp_irq(pnp_dev, 0); ene_probe()
1039 pnp_set_drvdata(pnp_dev, dev); ene_probe()
1040 dev->pnp_dev = pnp_dev; ene_probe()
1047 error = ene_hw_detect(dev); ene_probe()
1051 if (!dev->hw_learning_and_tx_capable && txsim) { ene_probe()
1052 dev->hw_learning_and_tx_capable = true; ene_probe()
1053 setup_timer(&dev->tx_sim_timer, ene_tx_irqsim, ene_probe()
1054 (long unsigned int)dev); ene_probe()
1058 if (!dev->hw_learning_and_tx_capable) ene_probe()
1063 rdev->priv = dev; ene_probe()
1071 if (dev->hw_learning_and_tx_capable) { ene_probe()
1073 init_completion(&dev->tx_complete); ene_probe()
1082 dev->rdev = rdev; ene_probe()
1084 ene_rx_setup_hw_buffer(dev); ene_probe()
1085 ene_setup_default_settings(dev); ene_probe()
1086 ene_setup_hw_settings(dev); ene_probe()
1088 device_set_wakeup_capable(&pnp_dev->dev, true); ene_probe()
1089 device_set_wakeup_enable(&pnp_dev->dev, true); ene_probe()
1097 if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) { ene_probe()
1101 if (request_irq(dev->irq, ene_isr, ene_probe()
1102 IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) { ene_probe()
1110 release_region(dev->hw_io, ENE_IO_SIZE); ene_probe()
1116 kfree(dev); ene_probe()
1123 struct ene_device *dev = pnp_get_drvdata(pnp_dev); ene_remove() local
1126 spin_lock_irqsave(&dev->hw_lock, flags); ene_remove()
1127 ene_rx_disable(dev); ene_remove()
1128 ene_rx_restore_hw_buffer(dev); ene_remove()
1129 spin_unlock_irqrestore(&dev->hw_lock, flags); ene_remove()
1131 free_irq(dev->irq, dev); ene_remove()
1132 release_region(dev->hw_io, ENE_IO_SIZE); ene_remove()
1133 rc_unregister_device(dev->rdev); ene_remove()
1134 kfree(dev); ene_remove()
1138 static void ene_enable_wake(struct ene_device *dev, bool enable) ene_enable_wake() argument
1141 ene_set_clear_reg_mask(dev, ENE_FW1, ENE_FW1_WAKE, enable); ene_enable_wake()
1147 struct ene_device *dev = pnp_get_drvdata(pnp_dev); ene_suspend() local
1148 bool wake = device_may_wakeup(&dev->pnp_dev->dev); ene_suspend()
1150 if (!wake && dev->rx_enabled) ene_suspend()
1151 ene_rx_disable_hw(dev); ene_suspend()
1153 ene_enable_wake(dev, wake); ene_suspend()
1159 struct ene_device *dev = pnp_get_drvdata(pnp_dev); ene_resume() local
1160 ene_setup_hw_settings(dev); ene_resume()
1162 if (dev->rx_enabled) ene_resume()
1163 ene_rx_enable(dev); ene_resume()
1165 ene_enable_wake(dev, false); ene_resume()
1172 struct ene_device *dev = pnp_get_drvdata(pnp_dev); ene_shutdown() local
1173 ene_enable_wake(dev, true); ene_shutdown()
/linux-4.4.14/drivers/media/platform/vivid/
H A Dvivid-vid-cap.c103 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_cap_queue_setup() local
104 unsigned buffers = tpg_g_buffers(&dev->tpg); vid_cap_queue_setup()
105 unsigned h = dev->fmt_cap_rect.height; vid_cap_queue_setup()
108 if (dev->field_cap == V4L2_FIELD_ALTERNATE) { vid_cap_queue_setup()
117 if (dev->queue_setup_error) { vid_cap_queue_setup()
122 dev->queue_setup_error = false; vid_cap_queue_setup()
141 vfmt = vivid_get_format(dev, mp->pixelformat); vid_cap_queue_setup()
144 if (sizes[p] < tpg_g_line_width(&dev->tpg, p) * h + vid_cap_queue_setup()
150 sizes[p] = tpg_g_line_width(&dev->tpg, p) * h + vid_cap_queue_setup()
151 dev->fmt_cap->data_offset[p]; vid_cap_queue_setup()
164 dprintk(dev, 1, "%s: count=%d\n", __func__, *nbuffers); vid_cap_queue_setup()
166 dprintk(dev, 1, "%s: size[%u]=%u\n", __func__, p, sizes[p]); vid_cap_queue_setup()
173 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); vid_cap_buf_prepare() local
175 unsigned buffers = tpg_g_buffers(&dev->tpg); vid_cap_buf_prepare()
178 dprintk(dev, 1, "%s\n", __func__); vid_cap_buf_prepare()
180 if (WARN_ON(NULL == dev->fmt_cap)) vid_cap_buf_prepare()
183 if (dev->buf_prepare_error) { vid_cap_buf_prepare()
188 dev->buf_prepare_error = false; vid_cap_buf_prepare()
192 size = tpg_g_line_width(&dev->tpg, p) * dev->fmt_cap_rect.height + vid_cap_buf_prepare()
193 dev->fmt_cap->data_offset[p]; vid_cap_buf_prepare()
196 dprintk(dev, 1, "%s data will not fit into plane %u (%lu < %lu)\n", vid_cap_buf_prepare()
202 vb->planes[p].data_offset = dev->fmt_cap->data_offset[p]; vid_cap_buf_prepare()
211 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); vid_cap_buf_finish() local
216 if (!vivid_is_sdtv_cap(dev)) vid_cap_buf_finish()
224 if (dev->std_cap & V4L2_STD_525_60) vid_cap_buf_finish()
237 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); vid_cap_buf_queue() local
240 dprintk(dev, 1, "%s\n", __func__); vid_cap_buf_queue()
242 spin_lock(&dev->slock); vid_cap_buf_queue()
243 list_add_tail(&buf->list, &dev->vid_cap_active); vid_cap_buf_queue()
244 spin_unlock(&dev->slock); vid_cap_buf_queue()
249 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_cap_start_streaming() local
253 if (vb2_is_streaming(&dev->vb_vid_out_q)) vid_cap_start_streaming()
254 dev->can_loop_video = vivid_vid_can_loop(dev); vid_cap_start_streaming()
256 if (dev->kthread_vid_cap) vid_cap_start_streaming()
259 dev->vid_cap_seq_count = 0; vid_cap_start_streaming()
260 dprintk(dev, 1, "%s\n", __func__); vid_cap_start_streaming()
262 dev->must_blank[i] = tpg_g_perc_fill(&dev->tpg) < 100; vid_cap_start_streaming()
263 if (dev->start_streaming_error) { vid_cap_start_streaming()
264 dev->start_streaming_error = false; vid_cap_start_streaming()
267 err = vivid_start_generating_vid_cap(dev, &dev->vid_cap_streaming); vid_cap_start_streaming()
272 list_for_each_entry_safe(buf, tmp, &dev->vid_cap_active, list) { vid_cap_start_streaming()
284 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_cap_stop_streaming() local
286 dprintk(dev, 1, "%s\n", __func__); vid_cap_stop_streaming()
287 vivid_stop_generating_vid_cap(dev, &dev->vid_cap_streaming); vid_cap_stop_streaming()
288 dev->can_loop_video = false; vid_cap_stop_streaming()
307 void vivid_update_quality(struct vivid_dev *dev) vivid_update_quality() argument
311 if (dev->loop_video && (vivid_is_svid_cap(dev) || vivid_is_hdmi_cap(dev))) { vivid_update_quality()
316 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); vivid_update_quality()
319 if (vivid_is_hdmi_cap(dev) && VIVID_INVALID_SIGNAL(dev->dv_timings_signal_mode)) { vivid_update_quality()
320 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); vivid_update_quality()
323 if (vivid_is_sdtv_cap(dev) && VIVID_INVALID_SIGNAL(dev->std_signal_mode)) { vivid_update_quality()
324 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, 0); vivid_update_quality()
327 if (!vivid_is_tv_cap(dev)) { vivid_update_quality()
328 tpg_s_quality(&dev->tpg, TPG_QUAL_COLOR, 0); vivid_update_quality()
338 freq_modulus = (dev->tv_freq - 676 /* (43.25-1) * 16 */) % (6 * 16); vivid_update_quality()
340 tpg_s_quality(&dev->tpg, TPG_QUAL_NOISE, vivid_update_quality()
341 next_pseudo_random32(dev->tv_freq ^ 0x55) & 0x3f); vivid_update_quality()
345 tpg_s_quality(&dev->tpg, TPG_QUAL_GRAY, 0); vivid_update_quality()
347 tpg_s_quality(&dev->tpg, TPG_QUAL_COLOR, 0); vivid_update_quality()
353 static enum tpg_quality vivid_get_quality(struct vivid_dev *dev, s32 *afc) vivid_get_quality() argument
359 if (tpg_g_quality(&dev->tpg) == TPG_QUAL_COLOR || vivid_get_quality()
360 tpg_g_quality(&dev->tpg) == TPG_QUAL_NOISE) vivid_get_quality()
361 return tpg_g_quality(&dev->tpg); vivid_get_quality()
369 freq_modulus = (dev->tv_freq - 676 /* (43.25-1) * 16 */) % (6 * 16); vivid_get_quality()
375 enum tpg_video_aspect vivid_get_video_aspect(const struct vivid_dev *dev) vivid_get_video_aspect() argument
377 if (vivid_is_sdtv_cap(dev)) vivid_get_video_aspect()
378 return dev->std_aspect_ratio; vivid_get_video_aspect()
380 if (vivid_is_hdmi_cap(dev)) vivid_get_video_aspect()
381 return dev->dv_timings_aspect_ratio; vivid_get_video_aspect()
386 static enum tpg_pixel_aspect vivid_get_pixel_aspect(const struct vivid_dev *dev) vivid_get_pixel_aspect() argument
388 if (vivid_is_sdtv_cap(dev)) vivid_get_pixel_aspect()
389 return (dev->std_cap & V4L2_STD_525_60) ? vivid_get_pixel_aspect()
392 if (vivid_is_hdmi_cap(dev) && vivid_get_pixel_aspect()
393 dev->src_rect.width == 720 && dev->src_rect.height <= 576) vivid_get_pixel_aspect()
394 return dev->src_rect.height == 480 ? vivid_get_pixel_aspect()
404 void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls) vivid_update_format_cap() argument
406 struct v4l2_bt_timings *bt = &dev->dv_timings_cap.bt; vivid_update_format_cap()
409 switch (dev->input_type[dev->input]) { vivid_update_format_cap()
412 dev->src_rect.width = webcam_sizes[dev->webcam_size_idx].width; vivid_update_format_cap()
413 dev->src_rect.height = webcam_sizes[dev->webcam_size_idx].height; vivid_update_format_cap()
414 dev->timeperframe_vid_cap = webcam_intervals[dev->webcam_ival_idx]; vivid_update_format_cap()
415 dev->field_cap = V4L2_FIELD_NONE; vivid_update_format_cap()
416 tpg_s_rgb_range(&dev->tpg, V4L2_DV_RGB_RANGE_AUTO); vivid_update_format_cap()
420 dev->field_cap = dev->tv_field_cap; vivid_update_format_cap()
421 dev->src_rect.width = 720; vivid_update_format_cap()
422 if (dev->std_cap & V4L2_STD_525_60) { vivid_update_format_cap()
423 dev->src_rect.height = 480; vivid_update_format_cap()
424 dev->timeperframe_vid_cap = (struct v4l2_fract) { 1001, 30000 }; vivid_update_format_cap()
425 dev->service_set_cap = V4L2_SLICED_CAPTION_525; vivid_update_format_cap()
427 dev->src_rect.height = 576; vivid_update_format_cap()
428 dev->timeperframe_vid_cap = (struct v4l2_fract) { 1000, 25000 }; vivid_update_format_cap()
429 dev->service_set_cap = V4L2_SLICED_WSS_625 | V4L2_SLICED_TELETEXT_B; vivid_update_format_cap()
431 tpg_s_rgb_range(&dev->tpg, V4L2_DV_RGB_RANGE_AUTO); vivid_update_format_cap()
434 dev->src_rect.width = bt->width; vivid_update_format_cap()
435 dev->src_rect.height = bt->height; vivid_update_format_cap()
437 dev->timeperframe_vid_cap = (struct v4l2_fract) { vivid_update_format_cap()
441 dev->field_cap = V4L2_FIELD_ALTERNATE; vivid_update_format_cap()
443 dev->field_cap = V4L2_FIELD_NONE; vivid_update_format_cap()
449 if (keep_controls || !dev->colorspace) vivid_update_format_cap()
453 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); vivid_update_format_cap()
455 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_709); vivid_update_format_cap()
456 v4l2_ctrl_s_ctrl(dev->real_rgb_range_cap, 1); vivid_update_format_cap()
458 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); vivid_update_format_cap()
459 v4l2_ctrl_s_ctrl(dev->real_rgb_range_cap, 0); vivid_update_format_cap()
461 tpg_s_rgb_range(&dev->tpg, v4l2_ctrl_g_ctrl(dev->rgb_range_cap)); vivid_update_format_cap()
464 vivid_update_quality(dev); vivid_update_format_cap()
465 tpg_reset_source(&dev->tpg, dev->src_rect.width, dev->src_rect.height, dev->field_cap); vivid_update_format_cap()
466 dev->crop_cap = dev->src_rect; vivid_update_format_cap()
467 dev->crop_bounds_cap = dev->src_rect; vivid_update_format_cap()
468 dev->compose_cap = dev->crop_cap; vivid_update_format_cap()
469 if (V4L2_FIELD_HAS_T_OR_B(dev->field_cap)) vivid_update_format_cap()
470 dev->compose_cap.height /= 2; vivid_update_format_cap()
471 dev->fmt_cap_rect = dev->compose_cap; vivid_update_format_cap()
472 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); vivid_update_format_cap()
473 tpg_s_pixel_aspect(&dev->tpg, vivid_get_pixel_aspect(dev)); vivid_update_format_cap()
474 tpg_update_mv_step(&dev->tpg); vivid_update_format_cap()
478 static enum v4l2_field vivid_field_cap(struct vivid_dev *dev, enum v4l2_field field) vivid_field_cap() argument
480 if (vivid_is_sdtv_cap(dev)) { vivid_field_cap()
495 if (vivid_is_hdmi_cap(dev)) vivid_field_cap()
496 return dev->dv_timings_cap.bt.interlaced ? V4L2_FIELD_ALTERNATE : vivid_field_cap()
501 static unsigned vivid_colorspace_cap(struct vivid_dev *dev) vivid_colorspace_cap() argument
503 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) vivid_colorspace_cap()
504 return tpg_g_colorspace(&dev->tpg); vivid_colorspace_cap()
505 return dev->colorspace_out; vivid_colorspace_cap()
508 static unsigned vivid_xfer_func_cap(struct vivid_dev *dev) vivid_xfer_func_cap() argument
510 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) vivid_xfer_func_cap()
511 return tpg_g_xfer_func(&dev->tpg); vivid_xfer_func_cap()
512 return dev->xfer_func_out; vivid_xfer_func_cap()
515 static unsigned vivid_ycbcr_enc_cap(struct vivid_dev *dev) vivid_ycbcr_enc_cap() argument
517 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) vivid_ycbcr_enc_cap()
518 return tpg_g_ycbcr_enc(&dev->tpg); vivid_ycbcr_enc_cap()
519 return dev->ycbcr_enc_out; vivid_ycbcr_enc_cap()
522 static unsigned vivid_quantization_cap(struct vivid_dev *dev) vivid_quantization_cap() argument
524 if (!dev->loop_video || vivid_is_webcam(dev) || vivid_is_tv_cap(dev)) vivid_quantization_cap()
525 return tpg_g_quantization(&dev->tpg); vivid_quantization_cap()
526 return dev->quantization_out; vivid_quantization_cap()
532 struct vivid_dev *dev = video_drvdata(file); vivid_g_fmt_vid_cap() local
536 mp->width = dev->fmt_cap_rect.width; vivid_g_fmt_vid_cap()
537 mp->height = dev->fmt_cap_rect.height; vivid_g_fmt_vid_cap()
538 mp->field = dev->field_cap; vivid_g_fmt_vid_cap()
539 mp->pixelformat = dev->fmt_cap->fourcc; vivid_g_fmt_vid_cap()
540 mp->colorspace = vivid_colorspace_cap(dev); vivid_g_fmt_vid_cap()
541 mp->xfer_func = vivid_xfer_func_cap(dev); vivid_g_fmt_vid_cap()
542 mp->ycbcr_enc = vivid_ycbcr_enc_cap(dev); vivid_g_fmt_vid_cap()
543 mp->quantization = vivid_quantization_cap(dev); vivid_g_fmt_vid_cap()
544 mp->num_planes = dev->fmt_cap->buffers; vivid_g_fmt_vid_cap()
546 mp->plane_fmt[p].bytesperline = tpg_g_bytesperline(&dev->tpg, p); vivid_g_fmt_vid_cap()
548 tpg_g_line_width(&dev->tpg, p) * mp->height + vivid_g_fmt_vid_cap()
549 dev->fmt_cap->data_offset[p]; vivid_g_fmt_vid_cap()
559 struct vivid_dev *dev = video_drvdata(file); vivid_try_fmt_vid_cap() local
566 fmt = vivid_get_format(dev, mp->pixelformat); vivid_try_fmt_vid_cap()
568 dprintk(dev, 1, "Fourcc format (0x%08x) unknown.\n", vivid_try_fmt_vid_cap()
571 fmt = vivid_get_format(dev, mp->pixelformat); vivid_try_fmt_vid_cap()
574 mp->field = vivid_field_cap(dev, mp->field); vivid_try_fmt_vid_cap()
575 if (vivid_is_webcam(dev)) { vivid_try_fmt_vid_cap()
581 } else if (vivid_is_sdtv_cap(dev)) { vivid_try_fmt_vid_cap()
583 h = (dev->std_cap & V4L2_STD_525_60) ? 480 : 576; vivid_try_fmt_vid_cap()
585 w = dev->src_rect.width; vivid_try_fmt_vid_cap()
586 h = dev->src_rect.height; vivid_try_fmt_vid_cap()
590 if (vivid_is_webcam(dev) || vivid_try_fmt_vid_cap()
591 (!dev->has_scaler_cap && !dev->has_crop_cap && !dev->has_compose_cap)) { vivid_try_fmt_vid_cap()
599 if (dev->has_scaler_cap && !dev->has_compose_cap) { vivid_try_fmt_vid_cap()
603 } else if (!dev->has_scaler_cap && dev->has_crop_cap && !dev->has_compose_cap) { vivid_try_fmt_vid_cap()
604 rect_set_max_size(&r, &dev->src_rect); vivid_try_fmt_vid_cap()
605 } else if (!dev->has_scaler_cap && !dev->has_crop_cap) { vivid_try_fmt_vid_cap()
606 rect_set_min_size(&r, &dev->src_rect); vivid_try_fmt_vid_cap()
625 pfmt[p].sizeimage = tpg_calc_line_width(&dev->tpg, p, pfmt[p].bytesperline) * vivid_try_fmt_vid_cap()
629 mp->colorspace = vivid_colorspace_cap(dev); vivid_try_fmt_vid_cap()
630 mp->ycbcr_enc = vivid_ycbcr_enc_cap(dev); vivid_try_fmt_vid_cap()
631 mp->xfer_func = vivid_xfer_func_cap(dev); vivid_try_fmt_vid_cap()
632 mp->quantization = vivid_quantization_cap(dev); vivid_try_fmt_vid_cap()
641 struct vivid_dev *dev = video_drvdata(file); vivid_s_fmt_vid_cap() local
642 struct v4l2_rect *crop = &dev->crop_cap; vivid_s_fmt_vid_cap()
643 struct v4l2_rect *compose = &dev->compose_cap; vivid_s_fmt_vid_cap()
644 struct vb2_queue *q = &dev->vb_vid_cap_q; vivid_s_fmt_vid_cap()
654 dprintk(dev, 1, "%s device busy\n", __func__); vivid_s_fmt_vid_cap()
658 if (dev->overlay_cap_owner && dev->fb_cap.fmt.pixelformat != mp->pixelformat) { vivid_s_fmt_vid_cap()
659 dprintk(dev, 1, "overlay is active, can't change pixelformat\n"); vivid_s_fmt_vid_cap()
663 dev->fmt_cap = vivid_get_format(dev, mp->pixelformat); vivid_s_fmt_vid_cap()
669 if (!vivid_is_webcam(dev) && vivid_s_fmt_vid_cap()
670 (dev->has_scaler_cap || dev->has_crop_cap || dev->has_compose_cap)) { vivid_s_fmt_vid_cap()
673 if (dev->has_scaler_cap) { vivid_s_fmt_vid_cap()
674 if (dev->has_compose_cap) vivid_s_fmt_vid_cap()
678 if (dev->has_crop_cap && !dev->has_compose_cap) { vivid_s_fmt_vid_cap()
692 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_s_fmt_vid_cap()
693 } else if (dev->has_crop_cap) { vivid_s_fmt_vid_cap()
707 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_s_fmt_vid_cap()
709 } else if (dev->has_crop_cap && !dev->has_compose_cap) { vivid_s_fmt_vid_cap()
712 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_s_fmt_vid_cap()
716 } else if (!dev->has_crop_cap) { vivid_s_fmt_vid_cap()
721 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_s_fmt_vid_cap()
729 } else if (vivid_is_webcam(dev)) { vivid_s_fmt_vid_cap()
735 dev->webcam_size_idx = i; vivid_s_fmt_vid_cap()
736 if (dev->webcam_ival_idx >= 2 * (VIVID_WEBCAM_SIZES - i)) vivid_s_fmt_vid_cap()
737 dev->webcam_ival_idx = 2 * (VIVID_WEBCAM_SIZES - i) - 1; vivid_s_fmt_vid_cap()
738 vivid_update_format_cap(dev, false); vivid_s_fmt_vid_cap()
747 dev->fmt_cap_rect.width = mp->width; vivid_s_fmt_vid_cap()
748 dev->fmt_cap_rect.height = mp->height; vivid_s_fmt_vid_cap()
749 tpg_s_buf_height(&dev->tpg, mp->height); vivid_s_fmt_vid_cap()
750 tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc); vivid_s_fmt_vid_cap()
751 for (p = 0; p < tpg_g_buffers(&dev->tpg); p++) vivid_s_fmt_vid_cap()
752 tpg_s_bytesperline(&dev->tpg, p, mp->plane_fmt[p].bytesperline); vivid_s_fmt_vid_cap()
753 dev->field_cap = mp->field; vivid_s_fmt_vid_cap()
754 if (dev->field_cap == V4L2_FIELD_ALTERNATE) vivid_s_fmt_vid_cap()
755 tpg_s_field(&dev->tpg, V4L2_FIELD_TOP, true); vivid_s_fmt_vid_cap()
757 tpg_s_field(&dev->tpg, dev->field_cap, false); vivid_s_fmt_vid_cap()
758 tpg_s_crop_compose(&dev->tpg, &dev->crop_cap, &dev->compose_cap); vivid_s_fmt_vid_cap()
759 if (vivid_is_sdtv_cap(dev)) vivid_s_fmt_vid_cap()
760 dev->tv_field_cap = mp->field; vivid_s_fmt_vid_cap()
761 tpg_update_mv_step(&dev->tpg); vivid_s_fmt_vid_cap()
768 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_cap_mplane() local
770 if (!dev->multiplanar) vidioc_g_fmt_vid_cap_mplane()
778 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_cap_mplane() local
780 if (!dev->multiplanar) vidioc_try_fmt_vid_cap_mplane()
788 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_cap_mplane() local
790 if (!dev->multiplanar) vidioc_s_fmt_vid_cap_mplane()
798 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_cap() local
800 if (dev->multiplanar) vidioc_g_fmt_vid_cap()
808 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_cap() local
810 if (dev->multiplanar) vidioc_try_fmt_vid_cap()
818 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_cap() local
820 if (dev->multiplanar) vidioc_s_fmt_vid_cap()
828 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_g_selection() local
830 if (!dev->has_crop_cap && !dev->has_compose_cap) vivid_vid_cap_g_selection()
834 if (vivid_is_webcam(dev)) vivid_vid_cap_g_selection()
840 if (!dev->has_crop_cap) vivid_vid_cap_g_selection()
842 sel->r = dev->crop_cap; vivid_vid_cap_g_selection()
846 if (!dev->has_crop_cap) vivid_vid_cap_g_selection()
848 sel->r = dev->src_rect; vivid_vid_cap_g_selection()
851 if (!dev->has_compose_cap) vivid_vid_cap_g_selection()
856 if (!dev->has_compose_cap) vivid_vid_cap_g_selection()
858 sel->r = dev->compose_cap; vivid_vid_cap_g_selection()
861 if (!dev->has_compose_cap) vivid_vid_cap_g_selection()
863 sel->r = dev->fmt_cap_rect; vivid_vid_cap_g_selection()
873 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_s_selection() local
874 struct v4l2_rect *crop = &dev->crop_cap; vivid_vid_cap_s_selection()
875 struct v4l2_rect *compose = &dev->compose_cap; vivid_vid_cap_s_selection()
876 unsigned factor = V4L2_FIELD_HAS_T_OR_B(dev->field_cap) ? 2 : 1; vivid_vid_cap_s_selection()
879 if (!dev->has_crop_cap && !dev->has_compose_cap) vivid_vid_cap_s_selection()
883 if (vivid_is_webcam(dev)) vivid_vid_cap_s_selection()
888 if (!dev->has_crop_cap) vivid_vid_cap_s_selection()
894 rect_set_max_size(&s->r, &dev->src_rect); vivid_vid_cap_s_selection()
895 rect_map_inside(&s->r, &dev->crop_bounds_cap); vivid_vid_cap_s_selection()
898 if (dev->has_scaler_cap) { vivid_vid_cap_s_selection()
899 struct v4l2_rect fmt = dev->fmt_cap_rect; vivid_vid_cap_s_selection()
912 if (!dev->has_compose_cap) vivid_vid_cap_s_selection()
914 if (!rect_same_size(&dev->fmt_cap_rect, &fmt) && vivid_vid_cap_s_selection()
915 vb2_is_busy(&dev->vb_vid_cap_q)) vivid_vid_cap_s_selection()
917 if (dev->has_compose_cap) { vivid_vid_cap_s_selection()
921 dev->fmt_cap_rect = fmt; vivid_vid_cap_s_selection()
922 tpg_s_buf_height(&dev->tpg, fmt.height); vivid_vid_cap_s_selection()
923 } else if (dev->has_compose_cap) { vivid_vid_cap_s_selection()
924 struct v4l2_rect fmt = dev->fmt_cap_rect; vivid_vid_cap_s_selection()
927 if (!rect_same_size(&dev->fmt_cap_rect, &fmt) && vivid_vid_cap_s_selection()
928 vb2_is_busy(&dev->vb_vid_cap_q)) vivid_vid_cap_s_selection()
930 dev->fmt_cap_rect = fmt; vivid_vid_cap_s_selection()
931 tpg_s_buf_height(&dev->tpg, fmt.height); vivid_vid_cap_s_selection()
933 rect_map_inside(compose, &dev->fmt_cap_rect); vivid_vid_cap_s_selection()
935 if (!rect_same_size(&s->r, &dev->fmt_cap_rect) && vivid_vid_cap_s_selection()
936 vb2_is_busy(&dev->vb_vid_cap_q)) vivid_vid_cap_s_selection()
938 rect_set_size_to(&dev->fmt_cap_rect, &s->r); vivid_vid_cap_s_selection()
940 rect_map_inside(compose, &dev->fmt_cap_rect); vivid_vid_cap_s_selection()
941 tpg_s_buf_height(&dev->tpg, dev->fmt_cap_rect.height); vivid_vid_cap_s_selection()
948 if (!dev->has_compose_cap) vivid_vid_cap_s_selection()
954 rect_set_max_size(&s->r, &dev->fmt_cap_rect); vivid_vid_cap_s_selection()
955 if (dev->has_scaler_cap) { vivid_vid_cap_s_selection()
958 dev->src_rect.width * MAX_ZOOM, vivid_vid_cap_s_selection()
959 (dev->src_rect.height / factor) * MAX_ZOOM vivid_vid_cap_s_selection()
963 if (dev->has_crop_cap) { vivid_vid_cap_s_selection()
977 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_vid_cap_s_selection()
979 } else if (dev->has_crop_cap) { vivid_vid_cap_s_selection()
982 rect_set_max_size(&s->r, &dev->src_rect); vivid_vid_cap_s_selection()
984 rect_map_inside(crop, &dev->crop_bounds_cap); vivid_vid_cap_s_selection()
988 rect_set_size_to(&s->r, &dev->src_rect); vivid_vid_cap_s_selection()
991 rect_map_inside(&s->r, &dev->fmt_cap_rect); vivid_vid_cap_s_selection()
992 if (dev->bitmap_cap && (compose->width != s->r.width || vivid_vid_cap_s_selection()
994 kfree(dev->bitmap_cap); vivid_vid_cap_s_selection()
995 dev->bitmap_cap = NULL; vivid_vid_cap_s_selection()
1003 tpg_s_crop_compose(&dev->tpg, crop, compose); vivid_vid_cap_s_selection()
1010 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_cropcap() local
1015 switch (vivid_get_pixel_aspect(dev)) { vivid_vid_cap_cropcap()
1035 struct vivid_dev *dev = video_drvdata(file); vidioc_enum_fmt_vid_overlay() local
1038 if (dev->multiplanar) vidioc_enum_fmt_vid_overlay()
1053 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_overlay() local
1054 const struct v4l2_rect *compose = &dev->compose_cap; vidioc_g_fmt_vid_overlay()
1058 if (dev->multiplanar) vidioc_g_fmt_vid_overlay()
1061 win->w.top = dev->overlay_cap_top; vidioc_g_fmt_vid_overlay()
1062 win->w.left = dev->overlay_cap_left; vidioc_g_fmt_vid_overlay()
1065 win->field = dev->overlay_cap_field; vidioc_g_fmt_vid_overlay()
1066 win->clipcount = dev->clipcount_cap; vidioc_g_fmt_vid_overlay()
1067 if (clipcount > dev->clipcount_cap) vidioc_g_fmt_vid_overlay()
1068 clipcount = dev->clipcount_cap; vidioc_g_fmt_vid_overlay()
1069 if (dev->bitmap_cap == NULL) vidioc_g_fmt_vid_overlay()
1072 if (copy_to_user(win->bitmap, dev->bitmap_cap, vidioc_g_fmt_vid_overlay()
1077 if (copy_to_user(win->clips, dev->clips_cap, vidioc_g_fmt_vid_overlay()
1078 clipcount * sizeof(dev->clips_cap[0]))) vidioc_g_fmt_vid_overlay()
1087 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_overlay() local
1088 const struct v4l2_rect *compose = &dev->compose_cap; vidioc_try_fmt_vid_overlay()
1092 if (dev->multiplanar) vidioc_try_fmt_vid_overlay()
1096 -dev->fb_cap.fmt.width, dev->fb_cap.fmt.width); vidioc_try_fmt_vid_overlay()
1098 -dev->fb_cap.fmt.height, dev->fb_cap.fmt.height); vidioc_try_fmt_vid_overlay()
1110 if (copy_from_user(dev->try_clips_cap, win->clips, vidioc_try_fmt_vid_overlay()
1111 win->clipcount * sizeof(dev->clips_cap[0]))) vidioc_try_fmt_vid_overlay()
1114 struct v4l2_rect *r = &dev->try_clips_cap[i].c; vidioc_try_fmt_vid_overlay()
1116 r->top = clamp_t(s32, r->top, 0, dev->fb_cap.fmt.height - 1); vidioc_try_fmt_vid_overlay()
1117 r->height = clamp_t(s32, r->height, 1, dev->fb_cap.fmt.height - r->top); vidioc_try_fmt_vid_overlay()
1118 r->left = clamp_t(u32, r->left, 0, dev->fb_cap.fmt.width - 1); vidioc_try_fmt_vid_overlay()
1119 r->width = clamp_t(u32, r->width, 1, dev->fb_cap.fmt.width - r->left); vidioc_try_fmt_vid_overlay()
1126 struct v4l2_rect *r1 = &dev->try_clips_cap[i].c; vidioc_try_fmt_vid_overlay()
1129 struct v4l2_rect *r2 = &dev->try_clips_cap[j].c; vidioc_try_fmt_vid_overlay()
1135 if (copy_to_user(win->clips, dev->try_clips_cap, vidioc_try_fmt_vid_overlay()
1136 win->clipcount * sizeof(dev->clips_cap[0]))) vidioc_try_fmt_vid_overlay()
1145 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_overlay() local
1146 const struct v4l2_rect *compose = &dev->compose_cap; vidioc_s_fmt_vid_overlay()
1150 unsigned clips_size = win->clipcount * sizeof(dev->clips_cap[0]); vidioc_s_fmt_vid_overlay()
1167 dev->overlay_cap_top = win->w.top; vidioc_s_fmt_vid_overlay()
1168 dev->overlay_cap_left = win->w.left; vidioc_s_fmt_vid_overlay()
1169 dev->overlay_cap_field = win->field; vidioc_s_fmt_vid_overlay()
1170 vfree(dev->bitmap_cap); vidioc_s_fmt_vid_overlay()
1171 dev->bitmap_cap = new_bitmap; vidioc_s_fmt_vid_overlay()
1172 dev->clipcount_cap = win->clipcount; vidioc_s_fmt_vid_overlay()
1173 if (dev->clipcount_cap) vidioc_s_fmt_vid_overlay()
1174 memcpy(dev->clips_cap, dev->try_clips_cap, clips_size); vidioc_s_fmt_vid_overlay()
1180 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_overlay() local
1182 if (dev->multiplanar) vivid_vid_cap_overlay()
1185 if (i && dev->fb_vbase_cap == NULL) vivid_vid_cap_overlay()
1188 if (i && dev->fb_cap.fmt.pixelformat != dev->fmt_cap->fourcc) { vivid_vid_cap_overlay()
1189 dprintk(dev, 1, "mismatch between overlay and video capture pixelformats\n"); vivid_vid_cap_overlay()
1193 if (dev->overlay_cap_owner && dev->overlay_cap_owner != fh) vivid_vid_cap_overlay()
1195 dev->overlay_cap_owner = i ? fh : NULL; vivid_vid_cap_overlay()
1202 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_g_fbuf() local
1204 if (dev->multiplanar) vivid_vid_cap_g_fbuf()
1207 *a = dev->fb_cap; vivid_vid_cap_g_fbuf()
1220 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_s_fbuf() local
1223 if (dev->multiplanar) vivid_vid_cap_s_fbuf()
1229 if (dev->overlay_cap_owner) vivid_vid_cap_s_fbuf()
1233 dev->fb_cap.base = NULL; vivid_vid_cap_s_fbuf()
1234 dev->fb_vbase_cap = NULL; vivid_vid_cap_s_fbuf()
1240 fmt = vivid_get_format(dev, a->fmt.pixelformat); vivid_vid_cap_s_fbuf()
1248 dev->fb_vbase_cap = phys_to_virt((unsigned long)a->base); vivid_vid_cap_s_fbuf()
1249 dev->fb_cap = *a; vivid_vid_cap_s_fbuf()
1250 dev->overlay_cap_left = clamp_t(int, dev->overlay_cap_left, vivid_vid_cap_s_fbuf()
1251 -dev->fb_cap.fmt.width, dev->fb_cap.fmt.width); vivid_vid_cap_s_fbuf()
1252 dev->overlay_cap_top = clamp_t(int, dev->overlay_cap_top, vivid_vid_cap_s_fbuf()
1253 -dev->fb_cap.fmt.height, dev->fb_cap.fmt.height); vivid_vid_cap_s_fbuf()
1265 struct vivid_dev *dev = video_drvdata(file); vidioc_enum_input() local
1267 if (inp->index >= dev->num_inputs) vidioc_enum_input()
1271 switch (dev->input_type[inp->index]) { vidioc_enum_input()
1274 dev->input_name_counter[inp->index]); vidioc_enum_input()
1279 dev->input_name_counter[inp->index]); vidioc_enum_input()
1282 if (dev->has_audio_inputs) vidioc_enum_input()
1288 dev->input_name_counter[inp->index]); vidioc_enum_input()
1290 if (dev->has_audio_inputs) vidioc_enum_input()
1296 dev->input_name_counter[inp->index]); vidioc_enum_input()
1298 if (dev->edid_blocks == 0 || vidioc_enum_input()
1299 dev->dv_timings_signal_mode == NO_SIGNAL) vidioc_enum_input()
1301 else if (dev->dv_timings_signal_mode == NO_LOCK || vidioc_enum_input()
1302 dev->dv_timings_signal_mode == OUT_OF_RANGE) vidioc_enum_input()
1306 if (dev->sensor_hflip) vidioc_enum_input()
1308 if (dev->sensor_vflip) vidioc_enum_input()
1310 if (dev->input == inp->index && vivid_is_sdtv_cap(dev)) { vidioc_enum_input()
1311 if (dev->std_signal_mode == NO_SIGNAL) { vidioc_enum_input()
1313 } else if (dev->std_signal_mode == NO_LOCK) { vidioc_enum_input()
1315 } else if (vivid_is_tv_cap(dev)) { vidioc_enum_input()
1316 switch (tpg_g_quality(&dev->tpg)) { vidioc_enum_input()
1333 struct vivid_dev *dev = video_drvdata(file); vidioc_g_input() local
1335 *i = dev->input; vidioc_g_input()
1341 struct vivid_dev *dev = video_drvdata(file); vidioc_s_input() local
1342 struct v4l2_bt_timings *bt = &dev->dv_timings_cap.bt; vidioc_s_input()
1345 if (i >= dev->num_inputs) vidioc_s_input()
1348 if (i == dev->input) vidioc_s_input()
1351 if (vb2_is_busy(&dev->vb_vid_cap_q) || vb2_is_busy(&dev->vb_vbi_cap_q)) vidioc_s_input()
1354 dev->input = i; vidioc_s_input()
1355 dev->vid_cap_dev.tvnorms = 0; vidioc_s_input()
1356 if (dev->input_type[i] == TV || dev->input_type[i] == SVID) { vidioc_s_input()
1357 dev->tv_audio_input = (dev->input_type[i] == TV) ? 0 : 1; vidioc_s_input()
1358 dev->vid_cap_dev.tvnorms = V4L2_STD_ALL; vidioc_s_input()
1360 dev->vbi_cap_dev.tvnorms = dev->vid_cap_dev.tvnorms; vidioc_s_input()
1361 vivid_update_format_cap(dev, false); vidioc_s_input()
1363 if (dev->colorspace) { vidioc_s_input()
1364 switch (dev->input_type[i]) { vidioc_s_input()
1366 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); vidioc_s_input()
1370 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); vidioc_s_input()
1374 if (dev->src_rect.width == 720 && dev->src_rect.height <= 576) vidioc_s_input()
1375 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_170M); vidioc_s_input()
1377 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_709); vidioc_s_input()
1379 v4l2_ctrl_s_ctrl(dev->colorspace, VIVID_CS_SRGB); vidioc_s_input()
1392 brightness = 128 * i + dev->input_brightness[i]; vidioc_s_input()
1393 v4l2_ctrl_modify_range(dev->brightness, vidioc_s_input()
1395 v4l2_ctrl_s_ctrl(dev->brightness, brightness); vidioc_s_input()
1409 struct vivid_dev *dev = video_drvdata(file); vidioc_g_audio() local
1411 if (!vivid_is_sdtv_cap(dev)) vidioc_g_audio()
1413 *vin = vivid_audio_inputs[dev->tv_audio_input]; vidioc_g_audio()
1419 struct vivid_dev *dev = video_drvdata(file); vidioc_s_audio() local
1421 if (!vivid_is_sdtv_cap(dev)) vidioc_s_audio()
1425 dev->tv_audio_input = vin->index; vidioc_s_audio()
1431 struct vivid_dev *dev = video_drvdata(file); vivid_video_g_frequency() local
1435 vf->frequency = dev->tv_freq; vivid_video_g_frequency()
1441 struct vivid_dev *dev = video_drvdata(file); vivid_video_s_frequency() local
1445 dev->tv_freq = clamp_t(unsigned, vf->frequency, MIN_TV_FREQ, MAX_TV_FREQ); vivid_video_s_frequency()
1446 if (vivid_is_tv_cap(dev)) vivid_video_s_frequency()
1447 vivid_update_quality(dev); vivid_video_s_frequency()
1453 struct vivid_dev *dev = video_drvdata(file); vivid_video_s_tuner() local
1459 dev->tv_audmode = vt->audmode; vivid_video_s_tuner()
1465 struct vivid_dev *dev = video_drvdata(file); vivid_video_g_tuner() local
1473 vt->audmode = dev->tv_audmode; vivid_video_g_tuner()
1476 qual = vivid_get_quality(dev, &vt->afc); vivid_video_g_tuner()
1488 unsigned channel_nr = dev->tv_freq / (6 * 16); vivid_video_g_tuner()
1489 unsigned options = (dev->std_cap & V4L2_STD_NTSC_M) ? 4 : 3; vivid_video_g_tuner()
1499 if (dev->std_cap & V4L2_STD_NTSC_M) vivid_video_g_tuner()
1555 struct vivid_dev *dev = video_drvdata(file); vidioc_querystd() local
1557 if (!vivid_is_sdtv_cap(dev)) vidioc_querystd()
1559 if (dev->std_signal_mode == NO_SIGNAL || vidioc_querystd()
1560 dev->std_signal_mode == NO_LOCK) { vidioc_querystd()
1564 if (vivid_is_tv_cap(dev) && tpg_g_quality(&dev->tpg) == TPG_QUAL_NOISE) { vidioc_querystd()
1566 } else if (dev->std_signal_mode == CURRENT_STD) { vidioc_querystd()
1567 *id = dev->std_cap; vidioc_querystd()
1568 } else if (dev->std_signal_mode == SELECTED_STD) { vidioc_querystd()
1569 *id = dev->query_std; vidioc_querystd()
1571 *id = vivid_standard[dev->query_std_last]; vidioc_querystd()
1572 dev->query_std_last = (dev->query_std_last + 1) % ARRAY_SIZE(vivid_standard); vidioc_querystd()
1580 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_s_std() local
1582 if (!vivid_is_sdtv_cap(dev)) vivid_vid_cap_s_std()
1584 if (dev->std_cap == id) vivid_vid_cap_s_std()
1586 if (vb2_is_busy(&dev->vb_vid_cap_q) || vb2_is_busy(&dev->vb_vbi_cap_q)) vivid_vid_cap_s_std()
1588 dev->std_cap = id; vivid_vid_cap_s_std()
1589 vivid_update_format_cap(dev, false); vivid_vid_cap_s_std()
1656 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_s_dv_timings() local
1658 if (!vivid_is_hdmi_cap(dev)) vivid_vid_cap_s_dv_timings()
1665 if (v4l2_match_dv_timings(timings, &dev->dv_timings_cap, 0)) vivid_vid_cap_s_dv_timings()
1667 if (vb2_is_busy(&dev->vb_vid_cap_q)) vivid_vid_cap_s_dv_timings()
1670 dev->dv_timings_cap = *timings; vivid_vid_cap_s_dv_timings()
1671 vivid_update_format_cap(dev, false); vivid_vid_cap_s_dv_timings()
1678 struct vivid_dev *dev = video_drvdata(file); vidioc_query_dv_timings() local
1680 if (!vivid_is_hdmi_cap(dev)) vidioc_query_dv_timings()
1682 if (dev->dv_timings_signal_mode == NO_SIGNAL || vidioc_query_dv_timings()
1683 dev->edid_blocks == 0) vidioc_query_dv_timings()
1685 if (dev->dv_timings_signal_mode == NO_LOCK) vidioc_query_dv_timings()
1687 if (dev->dv_timings_signal_mode == OUT_OF_RANGE) { vidioc_query_dv_timings()
1691 if (dev->dv_timings_signal_mode == CURRENT_DV_TIMINGS) { vidioc_query_dv_timings()
1692 *timings = dev->dv_timings_cap; vidioc_query_dv_timings()
1693 } else if (dev->dv_timings_signal_mode == SELECTED_DV_TIMINGS) { vidioc_query_dv_timings()
1694 *timings = v4l2_dv_timings_presets[dev->query_dv_timings]; vidioc_query_dv_timings()
1696 *timings = v4l2_dv_timings_presets[dev->query_dv_timings_last]; vidioc_query_dv_timings()
1697 dev->query_dv_timings_last = (dev->query_dv_timings_last + 1) % vidioc_query_dv_timings()
1698 dev->query_dv_timings_size; vidioc_query_dv_timings()
1706 struct vivid_dev *dev = video_drvdata(file); vidioc_s_edid() local
1709 if (edid->pad >= dev->num_inputs) vidioc_s_edid()
1711 if (dev->input_type[edid->pad] != HDMI || edid->start_block) vidioc_s_edid()
1714 dev->edid_blocks = 0; vidioc_s_edid()
1717 if (edid->blocks > dev->edid_max_blocks) { vidioc_s_edid()
1718 edid->blocks = dev->edid_max_blocks; vidioc_s_edid()
1721 dev->edid_blocks = edid->blocks; vidioc_s_edid()
1722 memcpy(dev->edid, edid->edid, edid->blocks * 128); vidioc_s_edid()
1729 struct vivid_dev *dev = video_drvdata(file); vidioc_enum_framesizes() local
1731 if (!vivid_is_webcam(dev) && !dev->has_scaler_cap) vidioc_enum_framesizes()
1733 if (vivid_get_format(dev, fsize->pixel_format) == NULL) vidioc_enum_framesizes()
1735 if (vivid_is_webcam(dev)) { vidioc_enum_framesizes()
1758 struct vivid_dev *dev = video_drvdata(file); vidioc_enum_frameintervals() local
1762 fmt = vivid_get_format(dev, fival->pixel_format); vidioc_enum_frameintervals()
1766 if (!vivid_is_webcam(dev)) { vidioc_enum_frameintervals()
1774 fival->discrete = dev->timeperframe_vid_cap; vidioc_enum_frameintervals()
1794 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_g_parm() local
1796 if (parm->type != (dev->multiplanar ? vivid_vid_cap_g_parm()
1802 parm->parm.capture.timeperframe = dev->timeperframe_vid_cap; vivid_vid_cap_g_parm()
1813 struct vivid_dev *dev = video_drvdata(file); vivid_vid_cap_s_parm() local
1814 unsigned ival_sz = 2 * (VIVID_WEBCAM_SIZES - dev->webcam_size_idx); vivid_vid_cap_s_parm()
1818 if (parm->type != (dev->multiplanar ? vivid_vid_cap_s_parm()
1822 if (!vivid_is_webcam(dev)) vivid_vid_cap_s_parm()
1834 dev->webcam_ival_idx = i; vivid_vid_cap_s_parm()
1835 tpf = webcam_intervals[dev->webcam_ival_idx]; vivid_vid_cap_s_parm()
1840 dev->cap_seq_resync = true; vivid_vid_cap_s_parm()
1841 dev->timeperframe_vid_cap = tpf; vivid_vid_cap_s_parm()
H A Dvivid-kthread-out.c54 static void vivid_thread_vid_out_tick(struct vivid_dev *dev) vivid_thread_vid_out_tick() argument
59 dprintk(dev, 1, "Video Output Thread Tick\n"); vivid_thread_vid_out_tick()
62 if (dev->perc_dropped_buffers && vivid_thread_vid_out_tick()
63 prandom_u32_max(100) < dev->perc_dropped_buffers) vivid_thread_vid_out_tick()
66 spin_lock(&dev->slock); vivid_thread_vid_out_tick()
71 if (!list_empty(&dev->vid_out_active) && vivid_thread_vid_out_tick()
72 !list_is_singular(&dev->vid_out_active)) { vivid_thread_vid_out_tick()
73 vid_out_buf = list_entry(dev->vid_out_active.next, vivid_thread_vid_out_tick()
77 if (!list_empty(&dev->vbi_out_active) && vivid_thread_vid_out_tick()
78 (dev->field_out != V4L2_FIELD_ALTERNATE || vivid_thread_vid_out_tick()
79 (dev->vbi_out_seq_count & 1))) { vivid_thread_vid_out_tick()
80 vbi_out_buf = list_entry(dev->vbi_out_active.next, vivid_thread_vid_out_tick()
84 spin_unlock(&dev->slock); vivid_thread_vid_out_tick()
90 vid_out_buf->vb.sequence = dev->vid_out_seq_count; vivid_thread_vid_out_tick()
91 if (dev->field_out == V4L2_FIELD_ALTERNATE) { vivid_thread_vid_out_tick()
99 vid_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset; vivid_thread_vid_out_tick()
100 vb2_buffer_done(&vid_out_buf->vb.vb2_buf, dev->dqbuf_error ? vivid_thread_vid_out_tick()
102 dprintk(dev, 2, "vid_out buffer %d done\n", vivid_thread_vid_out_tick()
107 if (dev->stream_sliced_vbi_out) vivid_thread_vid_out_tick()
108 vivid_sliced_vbi_out_process(dev, vbi_out_buf); vivid_thread_vid_out_tick()
110 vbi_out_buf->vb.sequence = dev->vbi_out_seq_count; vivid_thread_vid_out_tick()
112 vbi_out_buf->vb.timestamp.tv_sec += dev->time_wrap_offset; vivid_thread_vid_out_tick()
113 vb2_buffer_done(&vbi_out_buf->vb.vb2_buf, dev->dqbuf_error ? vivid_thread_vid_out_tick()
115 dprintk(dev, 2, "vbi_out buffer %d done\n", vivid_thread_vid_out_tick()
118 dev->dqbuf_error = false; vivid_thread_vid_out_tick()
123 struct vivid_dev *dev = data; vivid_thread_vid_out() local
133 dprintk(dev, 1, "Video Output Thread Start\n"); vivid_thread_vid_out()
138 dev->out_seq_offset = 0; vivid_thread_vid_out()
139 if (dev->seq_wrap) vivid_thread_vid_out()
140 dev->out_seq_count = 0xffffff80U; vivid_thread_vid_out()
141 dev->jiffies_vid_out = jiffies; vivid_thread_vid_out()
142 dev->vid_out_seq_start = dev->vbi_out_seq_start = 0; vivid_thread_vid_out()
143 dev->out_seq_resync = false; vivid_thread_vid_out()
150 mutex_lock(&dev->mutex); vivid_thread_vid_out()
152 if (dev->out_seq_resync) { vivid_thread_vid_out()
153 dev->jiffies_vid_out = cur_jiffies; vivid_thread_vid_out()
154 dev->out_seq_offset = dev->out_seq_count + 1; vivid_thread_vid_out()
155 dev->out_seq_count = 0; vivid_thread_vid_out()
156 dev->out_seq_resync = false; vivid_thread_vid_out()
158 numerator = dev->timeperframe_vid_out.numerator; vivid_thread_vid_out()
159 denominator = dev->timeperframe_vid_out.denominator; vivid_thread_vid_out()
161 if (dev->field_out == V4L2_FIELD_ALTERNATE) vivid_thread_vid_out()
165 jiffies_since_start = cur_jiffies - dev->jiffies_vid_out; vivid_thread_vid_out()
178 dev->jiffies_vid_out = cur_jiffies; vivid_thread_vid_out()
179 dev->out_seq_offset = buffers_since_start; vivid_thread_vid_out()
182 dev->out_seq_count = buffers_since_start + dev->out_seq_offset; vivid_thread_vid_out()
183 dev->vid_out_seq_count = dev->out_seq_count - dev->vid_out_seq_start; vivid_thread_vid_out()
184 dev->vbi_out_seq_count = dev->out_seq_count - dev->vbi_out_seq_start; vivid_thread_vid_out()
186 vivid_thread_vid_out_tick(dev); vivid_thread_vid_out()
187 mutex_unlock(&dev->mutex); vivid_thread_vid_out()
196 jiffies_since_start = jiffies - dev->jiffies_vid_out; vivid_thread_vid_out()
214 dprintk(dev, 1, "Video Output Thread End\n"); vivid_thread_vid_out()
218 static void vivid_grab_controls(struct vivid_dev *dev, bool grab) vivid_grab_controls() argument
220 v4l2_ctrl_grab(dev->ctrl_has_crop_out, grab); vivid_grab_controls()
221 v4l2_ctrl_grab(dev->ctrl_has_compose_out, grab); vivid_grab_controls()
222 v4l2_ctrl_grab(dev->ctrl_has_scaler_out, grab); vivid_grab_controls()
223 v4l2_ctrl_grab(dev->ctrl_tx_mode, grab); vivid_grab_controls()
224 v4l2_ctrl_grab(dev->ctrl_tx_rgb_range, grab); vivid_grab_controls()
227 int vivid_start_generating_vid_out(struct vivid_dev *dev, bool *pstreaming) vivid_start_generating_vid_out() argument
229 dprintk(dev, 1, "%s\n", __func__); vivid_start_generating_vid_out()
231 if (dev->kthread_vid_out) { vivid_start_generating_vid_out()
232 u32 seq_count = dev->out_seq_count + dev->seq_wrap * 128; vivid_start_generating_vid_out()
234 if (pstreaming == &dev->vid_out_streaming) vivid_start_generating_vid_out()
235 dev->vid_out_seq_start = seq_count; vivid_start_generating_vid_out()
237 dev->vbi_out_seq_start = seq_count; vivid_start_generating_vid_out()
243 dev->jiffies_vid_out = jiffies; vivid_start_generating_vid_out()
244 dev->vid_out_seq_start = dev->seq_wrap * 128; vivid_start_generating_vid_out()
245 dev->vbi_out_seq_start = dev->seq_wrap * 128; vivid_start_generating_vid_out()
247 dev->kthread_vid_out = kthread_run(vivid_thread_vid_out, dev, vivid_start_generating_vid_out()
248 "%s-vid-out", dev->v4l2_dev.name); vivid_start_generating_vid_out()
250 if (IS_ERR(dev->kthread_vid_out)) { vivid_start_generating_vid_out()
251 v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n"); vivid_start_generating_vid_out()
252 return PTR_ERR(dev->kthread_vid_out); vivid_start_generating_vid_out()
255 vivid_grab_controls(dev, true); vivid_start_generating_vid_out()
257 dprintk(dev, 1, "returning from %s\n", __func__); vivid_start_generating_vid_out()
261 void vivid_stop_generating_vid_out(struct vivid_dev *dev, bool *pstreaming) vivid_stop_generating_vid_out() argument
263 dprintk(dev, 1, "%s\n", __func__); vivid_stop_generating_vid_out()
265 if (dev->kthread_vid_out == NULL) vivid_stop_generating_vid_out()
269 if (pstreaming == &dev->vid_out_streaming) { vivid_stop_generating_vid_out()
271 while (!list_empty(&dev->vid_out_active)) { vivid_stop_generating_vid_out()
274 buf = list_entry(dev->vid_out_active.next, vivid_stop_generating_vid_out()
278 dprintk(dev, 2, "vid_out buffer %d done\n", vivid_stop_generating_vid_out()
283 if (pstreaming == &dev->vbi_out_streaming) { vivid_stop_generating_vid_out()
284 while (!list_empty(&dev->vbi_out_active)) { vivid_stop_generating_vid_out()
287 buf = list_entry(dev->vbi_out_active.next, vivid_stop_generating_vid_out()
291 dprintk(dev, 2, "vbi_out buffer %d done\n", vivid_stop_generating_vid_out()
296 if (dev->vid_out_streaming || dev->vbi_out_streaming) vivid_stop_generating_vid_out()
300 vivid_grab_controls(dev, false); vivid_stop_generating_vid_out()
301 mutex_unlock(&dev->mutex); vivid_stop_generating_vid_out()
302 kthread_stop(dev->kthread_vid_out); vivid_stop_generating_vid_out()
303 dev->kthread_vid_out = NULL; vivid_stop_generating_vid_out()
304 mutex_lock(&dev->mutex); vivid_stop_generating_vid_out()
H A Dvivid-kthread-cap.c54 static inline v4l2_std_id vivid_get_std_cap(const struct vivid_dev *dev) vivid_get_std_cap() argument
56 if (vivid_is_sdtv_cap(dev)) vivid_get_std_cap()
57 return dev->std_cap; vivid_get_std_cap()
61 static void copy_pix(struct vivid_dev *dev, int win_y, int win_x, copy_pix() argument
65 int left = dev->overlay_out_left; copy_pix()
66 int top = dev->overlay_out_top; copy_pix()
73 if (dev->bitmap_out) { copy_pix()
74 const u8 *p = dev->bitmap_out; copy_pix()
75 unsigned stride = (dev->compose_out.width + 7) / 8; copy_pix()
77 win_x -= dev->compose_out.left; copy_pix()
78 win_y -= dev->compose_out.top; copy_pix()
83 for (i = 0; i < dev->clipcount_out; i++) { copy_pix()
84 struct v4l2_rect *r = &dev->clips_out[i].c; copy_pix()
90 if ((dev->fbuf_out_flags & V4L2_FBUF_FLAG_CHROMAKEY) && copy_pix()
91 *osd != dev->chromakey_out) copy_pix()
93 if ((dev->fbuf_out_flags & V4L2_FBUF_FLAG_SRC_CHROMAKEY) && copy_pix()
94 out == dev->chromakey_out) copy_pix()
96 if (dev->fmt_cap->alpha_mask) { copy_pix()
97 if ((dev->fbuf_out_flags & V4L2_FBUF_FLAG_GLOBAL_ALPHA) && copy_pix()
98 dev->global_alpha_out) copy_pix()
100 if ((dev->fbuf_out_flags & V4L2_FBUF_FLAG_LOCAL_ALPHA) && copy_pix()
101 *cap & dev->fmt_cap->alpha_mask) copy_pix()
103 if ((dev->fbuf_out_flags & V4L2_FBUF_FLAG_LOCAL_INV_ALPHA) && copy_pix()
104 !(*cap & dev->fmt_cap->alpha_mask)) copy_pix()
110 static void blend_line(struct vivid_dev *dev, unsigned y_offset, unsigned x_offset, blend_line() argument
117 copy_pix(dev, y_offset, x_offset + x, blend_line()
175 static void vivid_precalc_copy_rects(struct vivid_dev *dev) vivid_precalc_copy_rects() argument
179 0, 0, dev->display_width, dev->display_height vivid_precalc_copy_rects()
183 dev->overlay_out_left, dev->overlay_out_top, vivid_precalc_copy_rects()
184 dev->compose_out.width, dev->compose_out.height vivid_precalc_copy_rects()
187 dev->loop_vid_copy = rect_intersect(&dev->crop_cap, &dev->compose_out); vivid_precalc_copy_rects()
189 dev->loop_vid_out = dev->loop_vid_copy; vivid_precalc_copy_rects()
190 rect_scale(&dev->loop_vid_out, &dev->compose_out, &dev->crop_out); vivid_precalc_copy_rects()
191 dev->loop_vid_out.left += dev->crop_out.left; vivid_precalc_copy_rects()
192 dev->loop_vid_out.top += dev->crop_out.top; vivid_precalc_copy_rects()
194 dev->loop_vid_cap = dev->loop_vid_copy; vivid_precalc_copy_rects()
195 rect_scale(&dev->loop_vid_cap, &dev->crop_cap, &dev->compose_cap); vivid_precalc_copy_rects()
197 dprintk(dev, 1, vivid_precalc_copy_rects()
199 dev->loop_vid_copy.width, dev->loop_vid_copy.height, vivid_precalc_copy_rects()
200 dev->loop_vid_copy.left, dev->loop_vid_copy.top, vivid_precalc_copy_rects()
201 dev->loop_vid_out.width, dev->loop_vid_out.height, vivid_precalc_copy_rects()
202 dev->loop_vid_out.left, dev->loop_vid_out.top, vivid_precalc_copy_rects()
203 dev->loop_vid_cap.width, dev->loop_vid_cap.height, vivid_precalc_copy_rects()
204 dev->loop_vid_cap.left, dev->loop_vid_cap.top); vivid_precalc_copy_rects()
209 r_overlay.left += dev->compose_out.left - dev->overlay_out_left; vivid_precalc_copy_rects()
210 r_overlay.top += dev->compose_out.top - dev->overlay_out_top; vivid_precalc_copy_rects()
212 dev->loop_vid_overlay = rect_intersect(&r_overlay, &dev->loop_vid_copy); vivid_precalc_copy_rects()
213 dev->loop_fb_copy = dev->loop_vid_overlay; vivid_precalc_copy_rects()
215 /* shift dev->loop_fb_copy back again to the fb origin */ vivid_precalc_copy_rects()
216 dev->loop_fb_copy.left -= dev->compose_out.left - dev->overlay_out_left; vivid_precalc_copy_rects()
217 dev->loop_fb_copy.top -= dev->compose_out.top - dev->overlay_out_top; vivid_precalc_copy_rects()
219 dev->loop_vid_overlay_cap = dev->loop_vid_overlay; vivid_precalc_copy_rects()
220 rect_scale(&dev->loop_vid_overlay_cap, &dev->crop_cap, &dev->compose_cap); vivid_precalc_copy_rects()
222 dprintk(dev, 1, vivid_precalc_copy_rects()
224 dev->loop_fb_copy.width, dev->loop_fb_copy.height, vivid_precalc_copy_rects()
225 dev->loop_fb_copy.left, dev->loop_fb_copy.top, vivid_precalc_copy_rects()
226 dev->loop_vid_overlay.width, dev->loop_vid_overlay.height, vivid_precalc_copy_rects()
227 dev->loop_vid_overlay.left, dev->loop_vid_overlay.top, vivid_precalc_copy_rects()
228 dev->loop_vid_overlay_cap.width, dev->loop_vid_overlay_cap.height, vivid_precalc_copy_rects()
229 dev->loop_vid_overlay_cap.left, dev->loop_vid_overlay_cap.top); vivid_precalc_copy_rects()
246 static int vivid_copy_buffer(struct vivid_dev *dev, unsigned p, u8 *vcapbuf, vivid_copy_buffer() argument
249 bool blank = dev->must_blank[vid_cap_buf->vb.vb2_buf.index]; vivid_copy_buffer()
250 struct tpg_data *tpg = &dev->tpg; vivid_copy_buffer()
252 unsigned vdiv = dev->fmt_out->vdownsampling[p]; vivid_copy_buffer()
254 unsigned img_width = tpg_hdiv(tpg, p, dev->compose_cap.width); vivid_copy_buffer()
255 unsigned img_height = dev->compose_cap.height; vivid_copy_buffer()
257 unsigned stride_out = dev->bytesperline_out[p]; vivid_copy_buffer()
258 unsigned stride_osd = dev->display_byte_stride; vivid_copy_buffer()
263 bool blend = dev->bitmap_out || dev->clipcount_out || dev->fbuf_out_flags; vivid_copy_buffer()
273 unsigned vid_cap_left = tpg_hdiv(tpg, p, dev->loop_vid_cap.left); vivid_copy_buffer()
277 vid_out_int_part = dev->loop_vid_out.height / dev->loop_vid_cap.height; vivid_copy_buffer()
278 vid_out_fract_part = dev->loop_vid_out.height % dev->loop_vid_cap.height; vivid_copy_buffer()
280 if (!list_empty(&dev->vid_out_active)) vivid_copy_buffer()
281 vid_out_buf = list_entry(dev->vid_out_active.next, vivid_copy_buffer()
289 dev->bytesperline_out, dev->fmt_out_rect.height); vivid_copy_buffer()
290 if (p < dev->fmt_out->buffers) vivid_copy_buffer()
292 voutbuf += tpg_hdiv(tpg, p, dev->loop_vid_out.left) + vivid_copy_buffer()
293 (dev->loop_vid_out.top / vdiv) * stride_out; vivid_copy_buffer()
294 vcapbuf += tpg_hdiv(tpg, p, dev->compose_cap.left) + vivid_copy_buffer()
295 (dev->compose_cap.top / vdiv) * stride_cap; vivid_copy_buffer()
297 if (dev->loop_vid_copy.width == 0 || dev->loop_vid_copy.height == 0) { vivid_copy_buffer()
307 if (dev->overlay_out_enabled && vivid_copy_buffer()
308 dev->loop_vid_overlay.width && dev->loop_vid_overlay.height) { vivid_copy_buffer()
309 vosdbuf = dev->video_vbase; vivid_copy_buffer()
310 vosdbuf += (dev->loop_fb_copy.left * twopixsize) / 2 + vivid_copy_buffer()
311 dev->loop_fb_copy.top * stride_osd; vivid_copy_buffer()
312 vid_overlay_int_part = dev->loop_vid_overlay.height / vivid_copy_buffer()
313 dev->loop_vid_overlay_cap.height; vivid_copy_buffer()
314 vid_overlay_fract_part = dev->loop_vid_overlay.height % vivid_copy_buffer()
315 dev->loop_vid_overlay_cap.height; vivid_copy_buffer()
318 vid_cap_right = tpg_hdiv(tpg, p, dev->loop_vid_cap.left + dev->loop_vid_cap.width); vivid_copy_buffer()
320 quick = dev->loop_vid_out.width == dev->loop_vid_cap.width; vivid_copy_buffer()
322 dev->cur_scaled_line = dev->loop_vid_out.height; vivid_copy_buffer()
325 bool osdline = vosdbuf && y >= dev->loop_vid_overlay_cap.top && vivid_copy_buffer()
326 y < dev->loop_vid_overlay_cap.top + dev->loop_vid_overlay_cap.height; vivid_copy_buffer()
332 if (y < dev->loop_vid_cap.top || vivid_copy_buffer()
333 y >= dev->loop_vid_cap.top + dev->loop_vid_cap.height) { vivid_copy_buffer()
339 if (dev->loop_vid_cap.left) vivid_copy_buffer()
350 tpg_hdiv(tpg, p, dev->loop_vid_cap.width)); vivid_copy_buffer()
353 if (dev->cur_scaled_line == vid_out_y) { vivid_copy_buffer()
354 memcpy(vcapbuf + vid_cap_left, dev->scaled_line, vivid_copy_buffer()
355 tpg_hdiv(tpg, p, dev->loop_vid_cap.width)); vivid_copy_buffer()
359 scale_line(voutbuf + vid_out_y * stride_out, dev->scaled_line, vivid_copy_buffer()
360 tpg_hdiv(tpg, p, dev->loop_vid_out.width), vivid_copy_buffer()
361 tpg_hdiv(tpg, p, dev->loop_vid_cap.width), vivid_copy_buffer()
369 ((dev->loop_vid_overlay.left - dev->loop_vid_copy.left) * vivid_copy_buffer()
373 scale_line(voutbuf + vid_out_y * stride_out, dev->blended_line, vivid_copy_buffer()
374 dev->loop_vid_out.width, dev->loop_vid_copy.width, vivid_copy_buffer()
377 blend_line(dev, vid_overlay_y + dev->loop_vid_overlay.top, vivid_copy_buffer()
378 dev->loop_vid_overlay.left, vivid_copy_buffer()
379 dev->blended_line + offset, osd, vivid_copy_buffer()
380 dev->loop_vid_overlay.width, twopixsize / 2); vivid_copy_buffer()
382 memcpy(dev->blended_line + offset, vivid_copy_buffer()
383 osd, (dev->loop_vid_overlay.width * twopixsize) / 2); vivid_copy_buffer()
384 scale_line(dev->blended_line, dev->scaled_line, vivid_copy_buffer()
385 dev->loop_vid_copy.width, dev->loop_vid_cap.width, vivid_copy_buffer()
388 dev->cur_scaled_line = vid_out_y; vivid_copy_buffer()
389 memcpy(vcapbuf + vid_cap_left, dev->scaled_line, vivid_copy_buffer()
390 tpg_hdiv(tpg, p, dev->loop_vid_cap.width)); vivid_copy_buffer()
396 if (vid_overlay_error >= dev->loop_vid_overlay_cap.height) { vivid_copy_buffer()
397 vid_overlay_error -= dev->loop_vid_overlay_cap.height; vivid_copy_buffer()
403 if (vid_out_error >= dev->loop_vid_cap.height / vdiv) { vivid_copy_buffer()
404 vid_out_error -= dev->loop_vid_cap.height / vdiv; vivid_copy_buffer()
416 static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf) vivid_fillbuff() argument
418 struct tpg_data *tpg = &dev->tpg; vivid_fillbuff()
419 unsigned factor = V4L2_FIELD_HAS_T_OR_B(dev->field_cap) ? 2 : 1; vivid_fillbuff()
421 bool is_tv = vivid_is_sdtv_cap(dev); vivid_fillbuff()
422 bool is_60hz = is_tv && (dev->std_cap & V4L2_STD_525_60); vivid_fillbuff()
431 if (dev->loop_video && dev->can_loop_video && vivid_fillbuff()
432 ((vivid_is_svid_cap(dev) && vivid_fillbuff()
433 !VIVID_INVALID_SIGNAL(dev->std_signal_mode)) || vivid_fillbuff()
434 (vivid_is_hdmi_cap(dev) && vivid_fillbuff()
435 !VIVID_INVALID_SIGNAL(dev->dv_timings_signal_mode)))) vivid_fillbuff()
438 buf->vb.sequence = dev->vid_cap_seq_count; vivid_fillbuff()
443 if (dev->tstamp_src_is_soe) vivid_fillbuff()
445 if (dev->field_cap == V4L2_FIELD_ALTERNATE) { vivid_fillbuff()
452 buf->vb.field = ((dev->vid_cap_seq_count & 1) ^ is_60hz) ? vivid_fillbuff()
460 buf->vb.field = dev->field_cap; vivid_fillbuff()
463 dev->field_cap == V4L2_FIELD_ALTERNATE); vivid_fillbuff()
464 tpg_s_perc_fill_blank(tpg, dev->must_blank[buf->vb.vb2_buf.index]); vivid_fillbuff()
466 vivid_precalc_copy_rects(dev); vivid_fillbuff()
477 if (p < tpg_g_buffers(tpg) && dev->fmt_cap->data_offset[p]) { vivid_fillbuff()
478 memset(vbuf, dev->fmt_cap->data_offset[p] & 0xff, vivid_fillbuff()
479 dev->fmt_cap->data_offset[p]); vivid_fillbuff()
480 vbuf += dev->fmt_cap->data_offset[p]; vivid_fillbuff()
483 if (!is_loop || vivid_copy_buffer(dev, p, vbuf, buf)) vivid_fillbuff()
484 tpg_fill_plane_buffer(tpg, vivid_get_std_cap(dev), vivid_fillbuff()
487 dev->must_blank[buf->vb.vb2_buf.index] = false; vivid_fillbuff()
490 if (dev->field_cap != V4L2_FIELD_ALTERNATE || vivid_fillbuff()
492 dev->ms_vid_cap = vivid_fillbuff()
493 jiffies_to_msecs(jiffies - dev->jiffies_vid_cap); vivid_fillbuff()
495 ms = dev->ms_vid_cap; vivid_fillbuff()
496 if (dev->osd_mode <= 1) { vivid_fillbuff()
503 (dev->field_cap == V4L2_FIELD_ALTERNATE) ? vivid_fillbuff()
508 if (dev->osd_mode == 0) { vivid_fillbuff()
510 dev->src_rect.width, dev->src_rect.height, dev->input); vivid_fillbuff()
513 gain = v4l2_ctrl_g_ctrl(dev->gain); vivid_fillbuff()
514 mutex_lock(dev->ctrl_hdl_user_vid.lock); vivid_fillbuff()
517 dev->brightness->cur.val, vivid_fillbuff()
518 dev->contrast->cur.val, vivid_fillbuff()
519 dev->saturation->cur.val, vivid_fillbuff()
520 dev->hue->cur.val); vivid_fillbuff()
524 dev->autogain->cur.val, gain, dev->alpha->cur.val); vivid_fillbuff()
525 mutex_unlock(dev->ctrl_hdl_user_vid.lock); vivid_fillbuff()
527 mutex_lock(dev->ctrl_hdl_user_aud.lock); vivid_fillbuff()
530 dev->volume->cur.val, dev->mute->cur.val); vivid_fillbuff()
531 mutex_unlock(dev->ctrl_hdl_user_aud.lock); vivid_fillbuff()
533 mutex_lock(dev->ctrl_hdl_user_gen.lock); vivid_fillbuff()
535 dev->int32->cur.val, vivid_fillbuff()
536 *dev->int64->p_cur.p_s64, vivid_fillbuff()
537 dev->bitmask->cur.val); vivid_fillbuff()
540 dev->boolean->cur.val, vivid_fillbuff()
541 dev->menu->qmenu[dev->menu->cur.val], vivid_fillbuff()
542 dev->string->p_cur.p_char); vivid_fillbuff()
545 dev->int_menu->qmenu_int[dev->int_menu->cur.val], vivid_fillbuff()
546 dev->int_menu->cur.val); vivid_fillbuff()
547 mutex_unlock(dev->ctrl_hdl_user_gen.lock); vivid_fillbuff()
549 if (dev->button_pressed) { vivid_fillbuff()
550 dev->button_pressed--; vivid_fillbuff()
560 if (!dev->tstamp_src_is_soe) vivid_fillbuff()
562 buf->vb.timestamp.tv_sec += dev->time_wrap_offset; vivid_fillbuff()
568 static bool valid_pix(struct vivid_dev *dev, int win_y, int win_x, int fb_y, int fb_x) valid_pix() argument
572 if (dev->bitmap_cap) { valid_pix()
578 const u8 *p = dev->bitmap_cap; valid_pix()
579 unsigned stride = (dev->compose_cap.width + 7) / 8; valid_pix()
585 for (i = 0; i < dev->clipcount_cap; i++) { valid_pix()
590 struct v4l2_rect *r = &dev->clips_cap[i].c; valid_pix()
603 static void vivid_overlay(struct vivid_dev *dev, struct vivid_buffer *buf) vivid_overlay() argument
605 struct tpg_data *tpg = &dev->tpg; vivid_overlay()
607 void *vbase = dev->fb_vbase_cap; vivid_overlay()
609 unsigned img_width = dev->compose_cap.width; vivid_overlay()
610 unsigned img_height = dev->compose_cap.height; vivid_overlay()
613 bool quick = dev->bitmap_cap == NULL && dev->clipcount_cap == 0; vivid_overlay()
622 if ((dev->overlay_cap_field == V4L2_FIELD_TOP || vivid_overlay()
623 dev->overlay_cap_field == V4L2_FIELD_BOTTOM) && vivid_overlay()
624 dev->overlay_cap_field != buf->vb.field) vivid_overlay()
627 vbuf += dev->compose_cap.left * pixsize + dev->compose_cap.top * stride; vivid_overlay()
628 x = dev->overlay_cap_left; vivid_overlay()
635 w = dev->fb_cap.fmt.width - x; vivid_overlay()
641 if (dev->overlay_cap_top >= 0) vivid_overlay()
642 vbase += dev->overlay_cap_top * dev->fb_cap.fmt.bytesperline; vivid_overlay()
643 for (y = dev->overlay_cap_top; vivid_overlay()
644 y < dev->overlay_cap_top + (int)img_height; vivid_overlay()
648 if (y < 0 || y > dev->fb_cap.fmt.height) vivid_overlay()
653 vbase += dev->fb_cap.fmt.bytesperline; vivid_overlay()
657 if (!valid_pix(dev, y - dev->overlay_cap_top, vivid_overlay()
664 vbase += dev->fb_cap.fmt.bytesperline; vivid_overlay()
668 static void vivid_thread_vid_cap_tick(struct vivid_dev *dev, int dropped_bufs) vivid_thread_vid_cap_tick() argument
673 dprintk(dev, 1, "Video Capture Thread Tick\n"); vivid_thread_vid_cap_tick()
676 tpg_update_mv_count(&dev->tpg, vivid_thread_vid_cap_tick()
677 dev->field_cap == V4L2_FIELD_NONE || vivid_thread_vid_cap_tick()
678 dev->field_cap == V4L2_FIELD_ALTERNATE); vivid_thread_vid_cap_tick()
681 if (dev->perc_dropped_buffers && vivid_thread_vid_cap_tick()
682 prandom_u32_max(100) < dev->perc_dropped_buffers) vivid_thread_vid_cap_tick()
685 spin_lock(&dev->slock); vivid_thread_vid_cap_tick()
686 if (!list_empty(&dev->vid_cap_active)) { vivid_thread_vid_cap_tick()
687 vid_cap_buf = list_entry(dev->vid_cap_active.next, struct vivid_buffer, list); vivid_thread_vid_cap_tick()
690 if (!list_empty(&dev->vbi_cap_active)) { vivid_thread_vid_cap_tick()
691 if (dev->field_cap != V4L2_FIELD_ALTERNATE || vivid_thread_vid_cap_tick()
692 (dev->vbi_cap_seq_count & 1)) { vivid_thread_vid_cap_tick()
693 vbi_cap_buf = list_entry(dev->vbi_cap_active.next, vivid_thread_vid_cap_tick()
698 spin_unlock(&dev->slock); vivid_thread_vid_cap_tick()
705 vivid_fillbuff(dev, vid_cap_buf); vivid_thread_vid_cap_tick()
706 dprintk(dev, 1, "filled buffer %d\n", vivid_thread_vid_cap_tick()
710 if (dev->overlay_cap_owner && dev->fb_cap.base && vivid_thread_vid_cap_tick()
711 dev->fb_cap.fmt.pixelformat == dev->fmt_cap->fourcc) vivid_thread_vid_cap_tick()
712 vivid_overlay(dev, vid_cap_buf); vivid_thread_vid_cap_tick()
714 vb2_buffer_done(&vid_cap_buf->vb.vb2_buf, dev->dqbuf_error ? vivid_thread_vid_cap_tick()
716 dprintk(dev, 2, "vid_cap buffer %d done\n", vivid_thread_vid_cap_tick()
721 if (dev->stream_sliced_vbi_cap) vivid_thread_vid_cap_tick()
722 vivid_sliced_vbi_cap_process(dev, vbi_cap_buf); vivid_thread_vid_cap_tick()
724 vivid_raw_vbi_cap_process(dev, vbi_cap_buf); vivid_thread_vid_cap_tick()
725 vb2_buffer_done(&vbi_cap_buf->vb.vb2_buf, dev->dqbuf_error ? vivid_thread_vid_cap_tick()
727 dprintk(dev, 2, "vbi_cap %d done\n", vivid_thread_vid_cap_tick()
730 dev->dqbuf_error = false; vivid_thread_vid_cap_tick()
734 tpg_update_mv_count(&dev->tpg, dev->field_cap == V4L2_FIELD_NONE || vivid_thread_vid_cap_tick()
735 dev->field_cap == V4L2_FIELD_ALTERNATE); vivid_thread_vid_cap_tick()
740 struct vivid_dev *dev = data; vivid_thread_vid_cap() local
751 dprintk(dev, 1, "Video Capture Thread Start\n"); vivid_thread_vid_cap()
756 dev->cap_seq_offset = 0; vivid_thread_vid_cap()
757 dev->cap_seq_count = 0; vivid_thread_vid_cap()
758 dev->cap_seq_resync = false; vivid_thread_vid_cap()
759 dev->jiffies_vid_cap = jiffies; vivid_thread_vid_cap()
766 mutex_lock(&dev->mutex); vivid_thread_vid_cap()
768 if (dev->cap_seq_resync) { vivid_thread_vid_cap()
769 dev->jiffies_vid_cap = cur_jiffies; vivid_thread_vid_cap()
770 dev->cap_seq_offset = dev->cap_seq_count + 1; vivid_thread_vid_cap()
771 dev->cap_seq_count = 0; vivid_thread_vid_cap()
772 dev->cap_seq_resync = false; vivid_thread_vid_cap()
774 numerator = dev->timeperframe_vid_cap.numerator; vivid_thread_vid_cap()
775 denominator = dev->timeperframe_vid_cap.denominator; vivid_thread_vid_cap()
777 if (dev->field_cap == V4L2_FIELD_ALTERNATE) vivid_thread_vid_cap()
781 jiffies_since_start = cur_jiffies - dev->jiffies_vid_cap; vivid_thread_vid_cap()
794 dev->jiffies_vid_cap = cur_jiffies; vivid_thread_vid_cap()
795 dev->cap_seq_offset = buffers_since_start; vivid_thread_vid_cap()
798 dropped_bufs = buffers_since_start + dev->cap_seq_offset - dev->cap_seq_count; vivid_thread_vid_cap()
799 dev->cap_seq_count = buffers_since_start + dev->cap_seq_offset; vivid_thread_vid_cap()
800 dev->vid_cap_seq_count = dev->cap_seq_count - dev->vid_cap_seq_start; vivid_thread_vid_cap()
801 dev->vbi_cap_seq_count = dev->cap_seq_count - dev->vbi_cap_seq_start; vivid_thread_vid_cap()
803 vivid_thread_vid_cap_tick(dev, dropped_bufs); vivid_thread_vid_cap()
812 jiffies_since_start = jiffies - dev->jiffies_vid_cap; vivid_thread_vid_cap()
814 mutex_unlock(&dev->mutex); vivid_thread_vid_cap()
830 dprintk(dev, 1, "Video Capture Thread End\n"); vivid_thread_vid_cap()
834 static void vivid_grab_controls(struct vivid_dev *dev, bool grab) vivid_grab_controls() argument
836 v4l2_ctrl_grab(dev->ctrl_has_crop_cap, grab); vivid_grab_controls()
837 v4l2_ctrl_grab(dev->ctrl_has_compose_cap, grab); vivid_grab_controls()
838 v4l2_ctrl_grab(dev->ctrl_has_scaler_cap, grab); vivid_grab_controls()
841 int vivid_start_generating_vid_cap(struct vivid_dev *dev, bool *pstreaming) vivid_start_generating_vid_cap() argument
843 dprintk(dev, 1, "%s\n", __func__); vivid_start_generating_vid_cap()
845 if (dev->kthread_vid_cap) { vivid_start_generating_vid_cap()
846 u32 seq_count = dev->cap_seq_count + dev->seq_wrap * 128; vivid_start_generating_vid_cap()
848 if (pstreaming == &dev->vid_cap_streaming) vivid_start_generating_vid_cap()
849 dev->vid_cap_seq_start = seq_count; vivid_start_generating_vid_cap()
851 dev->vbi_cap_seq_start = seq_count; vivid_start_generating_vid_cap()
857 tpg_init_mv_count(&dev->tpg); vivid_start_generating_vid_cap()
859 dev->vid_cap_seq_start = dev->seq_wrap * 128; vivid_start_generating_vid_cap()
860 dev->vbi_cap_seq_start = dev->seq_wrap * 128; vivid_start_generating_vid_cap()
862 dev->kthread_vid_cap = kthread_run(vivid_thread_vid_cap, dev, vivid_start_generating_vid_cap()
863 "%s-vid-cap", dev->v4l2_dev.name); vivid_start_generating_vid_cap()
865 if (IS_ERR(dev->kthread_vid_cap)) { vivid_start_generating_vid_cap()
866 v4l2_err(&dev->v4l2_dev, "kernel_thread() failed\n"); vivid_start_generating_vid_cap()
867 return PTR_ERR(dev->kthread_vid_cap); vivid_start_generating_vid_cap()
870 vivid_grab_controls(dev, true); vivid_start_generating_vid_cap()
872 dprintk(dev, 1, "returning from %s\n", __func__); vivid_start_generating_vid_cap()
876 void vivid_stop_generating_vid_cap(struct vivid_dev *dev, bool *pstreaming) vivid_stop_generating_vid_cap() argument
878 dprintk(dev, 1, "%s\n", __func__); vivid_stop_generating_vid_cap()
880 if (dev->kthread_vid_cap == NULL) vivid_stop_generating_vid_cap()
884 if (pstreaming == &dev->vid_cap_streaming) { vivid_stop_generating_vid_cap()
886 while (!list_empty(&dev->vid_cap_active)) { vivid_stop_generating_vid_cap()
889 buf = list_entry(dev->vid_cap_active.next, vivid_stop_generating_vid_cap()
893 dprintk(dev, 2, "vid_cap buffer %d done\n", vivid_stop_generating_vid_cap()
898 if (pstreaming == &dev->vbi_cap_streaming) { vivid_stop_generating_vid_cap()
899 while (!list_empty(&dev->vbi_cap_active)) { vivid_stop_generating_vid_cap()
902 buf = list_entry(dev->vbi_cap_active.next, vivid_stop_generating_vid_cap()
906 dprintk(dev, 2, "vbi_cap buffer %d done\n", vivid_stop_generating_vid_cap()
911 if (dev->vid_cap_streaming || dev->vbi_cap_streaming) vivid_stop_generating_vid_cap()
915 vivid_grab_controls(dev, false); vivid_stop_generating_vid_cap()
916 mutex_unlock(&dev->mutex); vivid_stop_generating_vid_cap()
917 kthread_stop(dev->kthread_vid_cap); vivid_stop_generating_vid_cap()
918 dev->kthread_vid_cap = NULL; vivid_stop_generating_vid_cap()
919 mutex_lock(&dev->mutex); vivid_stop_generating_vid_cap()
H A Dvivid-vid-out.c39 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_out_queue_setup() local
40 const struct vivid_fmt *vfmt = dev->fmt_out; vid_out_queue_setup()
42 unsigned h = dev->fmt_out_rect.height; vid_out_queue_setup()
43 unsigned size = dev->bytesperline_out[0] * h; vid_out_queue_setup()
47 size += dev->bytesperline_out[p] * h / vfmt->vdownsampling[p]; vid_out_queue_setup()
49 if (dev->field_out == V4L2_FIELD_ALTERNATE) { vid_out_queue_setup()
58 if (dev->queue_setup_error) { vid_out_queue_setup()
63 dev->queue_setup_error = false; vid_out_queue_setup()
87 if (sizes[p] < dev->bytesperline_out[p] * h) vid_out_queue_setup()
92 sizes[p] = p ? dev->bytesperline_out[p] * h : size; vid_out_queue_setup()
105 dprintk(dev, 1, "%s: count=%d\n", __func__, *nbuffers); vid_out_queue_setup()
107 dprintk(dev, 1, "%s: size[%u]=%u\n", __func__, p, sizes[p]); vid_out_queue_setup()
114 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); vid_out_buf_prepare() local
119 dprintk(dev, 1, "%s\n", __func__); vid_out_buf_prepare()
121 if (WARN_ON(NULL == dev->fmt_out)) vid_out_buf_prepare()
124 planes = dev->fmt_out->planes; vid_out_buf_prepare()
126 if (dev->buf_prepare_error) { vid_out_buf_prepare()
131 dev->buf_prepare_error = false; vid_out_buf_prepare()
135 if (dev->field_out != V4L2_FIELD_ALTERNATE) vid_out_buf_prepare()
136 vbuf->field = dev->field_out; vid_out_buf_prepare()
142 size = dev->bytesperline_out[p] * dev->fmt_out_rect.height + vid_out_buf_prepare()
146 dprintk(dev, 1, "%s the payload is too small for plane %u (%lu < %lu)\n", vid_out_buf_prepare()
158 struct vivid_dev *dev = vb2_get_drv_priv(vb->vb2_queue); vid_out_buf_queue() local
161 dprintk(dev, 1, "%s\n", __func__); vid_out_buf_queue()
163 spin_lock(&dev->slock); vid_out_buf_queue()
164 list_add_tail(&buf->list, &dev->vid_out_active); vid_out_buf_queue()
165 spin_unlock(&dev->slock); vid_out_buf_queue()
170 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_out_start_streaming() local
173 if (vb2_is_streaming(&dev->vb_vid_cap_q)) vid_out_start_streaming()
174 dev->can_loop_video = vivid_vid_can_loop(dev); vid_out_start_streaming()
176 if (dev->kthread_vid_out) vid_out_start_streaming()
179 dev->vid_out_seq_count = 0; vid_out_start_streaming()
180 dprintk(dev, 1, "%s\n", __func__); vid_out_start_streaming()
181 if (dev->start_streaming_error) { vid_out_start_streaming()
182 dev->start_streaming_error = false; vid_out_start_streaming()
185 err = vivid_start_generating_vid_out(dev, &dev->vid_out_streaming); vid_out_start_streaming()
190 list_for_each_entry_safe(buf, tmp, &dev->vid_out_active, list) { vid_out_start_streaming()
202 struct vivid_dev *dev = vb2_get_drv_priv(vq); vid_out_stop_streaming() local
204 dprintk(dev, 1, "%s\n", __func__); vid_out_stop_streaming()
205 vivid_stop_generating_vid_out(dev, &dev->vid_out_streaming); vid_out_stop_streaming()
206 dev->can_loop_video = false; vid_out_stop_streaming()
223 void vivid_update_format_out(struct vivid_dev *dev) vivid_update_format_out() argument
225 struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt; vivid_update_format_out()
228 switch (dev->output_type[dev->output]) { vivid_update_format_out()
231 dev->field_out = dev->tv_field_out; vivid_update_format_out()
232 dev->sink_rect.width = 720; vivid_update_format_out()
233 if (dev->std_out & V4L2_STD_525_60) { vivid_update_format_out()
234 dev->sink_rect.height = 480; vivid_update_format_out()
235 dev->timeperframe_vid_out = (struct v4l2_fract) { 1001, 30000 }; vivid_update_format_out()
236 dev->service_set_out = V4L2_SLICED_CAPTION_525; vivid_update_format_out()
238 dev->sink_rect.height = 576; vivid_update_format_out()
239 dev->timeperframe_vid_out = (struct v4l2_fract) { 1000, 25000 }; vivid_update_format_out()
240 dev->service_set_out = V4L2_SLICED_WSS_625 | V4L2_SLICED_TELETEXT_B; vivid_update_format_out()
242 dev->colorspace_out = V4L2_COLORSPACE_SMPTE170M; vivid_update_format_out()
245 dev->sink_rect.width = bt->width; vivid_update_format_out()
246 dev->sink_rect.height = bt->height; vivid_update_format_out()
248 dev->timeperframe_vid_out = (struct v4l2_fract) { vivid_update_format_out()
252 dev->field_out = V4L2_FIELD_ALTERNATE; vivid_update_format_out()
254 dev->field_out = V4L2_FIELD_NONE; vivid_update_format_out()
255 if (!dev->dvi_d_out && (bt->flags & V4L2_DV_FL_IS_CE_VIDEO)) { vivid_update_format_out()
257 dev->colorspace_out = V4L2_COLORSPACE_SMPTE170M; vivid_update_format_out()
259 dev->colorspace_out = V4L2_COLORSPACE_REC709; vivid_update_format_out()
261 dev->colorspace_out = V4L2_COLORSPACE_SRGB; vivid_update_format_out()
265 dev->xfer_func_out = V4L2_XFER_FUNC_DEFAULT; vivid_update_format_out()
266 dev->ycbcr_enc_out = V4L2_YCBCR_ENC_DEFAULT; vivid_update_format_out()
267 dev->quantization_out = V4L2_QUANTIZATION_DEFAULT; vivid_update_format_out()
268 dev->compose_out = dev->sink_rect; vivid_update_format_out()
269 dev->compose_bounds_out = dev->sink_rect; vivid_update_format_out()
270 dev->crop_out = dev->compose_out; vivid_update_format_out()
271 if (V4L2_FIELD_HAS_T_OR_B(dev->field_out)) vivid_update_format_out()
272 dev->crop_out.height /= 2; vivid_update_format_out()
273 dev->fmt_out_rect = dev->crop_out; vivid_update_format_out()
274 for (p = 0; p < dev->fmt_out->planes; p++) vivid_update_format_out()
275 dev->bytesperline_out[p] = vivid_update_format_out()
276 (dev->sink_rect.width * dev->fmt_out->bit_depth[p]) / 8; vivid_update_format_out()
280 static enum v4l2_field vivid_field_out(struct vivid_dev *dev, enum v4l2_field field) vivid_field_out() argument
282 if (vivid_is_svid_out(dev)) { vivid_field_out()
295 if (vivid_is_hdmi_out(dev)) vivid_field_out()
296 return dev->dv_timings_out.bt.interlaced ? V4L2_FIELD_ALTERNATE : vivid_field_out()
301 static enum tpg_pixel_aspect vivid_get_pixel_aspect(const struct vivid_dev *dev) vivid_get_pixel_aspect() argument
303 if (vivid_is_svid_out(dev)) vivid_get_pixel_aspect()
304 return (dev->std_out & V4L2_STD_525_60) ? vivid_get_pixel_aspect()
307 if (vivid_is_hdmi_out(dev) && vivid_get_pixel_aspect()
308 dev->sink_rect.width == 720 && dev->sink_rect.height <= 576) vivid_get_pixel_aspect()
309 return dev->sink_rect.height == 480 ? vivid_get_pixel_aspect()
318 struct vivid_dev *dev = video_drvdata(file); vivid_g_fmt_vid_out() local
320 const struct vivid_fmt *fmt = dev->fmt_out; vivid_g_fmt_vid_out()
323 mp->width = dev->fmt_out_rect.width; vivid_g_fmt_vid_out()
324 mp->height = dev->fmt_out_rect.height; vivid_g_fmt_vid_out()
325 mp->field = dev->field_out; vivid_g_fmt_vid_out()
327 mp->colorspace = dev->colorspace_out; vivid_g_fmt_vid_out()
328 mp->xfer_func = dev->xfer_func_out; vivid_g_fmt_vid_out()
329 mp->ycbcr_enc = dev->ycbcr_enc_out; vivid_g_fmt_vid_out()
330 mp->quantization = dev->quantization_out; vivid_g_fmt_vid_out()
333 mp->plane_fmt[p].bytesperline = dev->bytesperline_out[p]; vivid_g_fmt_vid_out()
338 unsigned stride = dev->bytesperline_out[p]; vivid_g_fmt_vid_out()
349 struct vivid_dev *dev = video_drvdata(file); vivid_try_fmt_vid_out() local
350 struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt; vivid_try_fmt_vid_out()
359 fmt = vivid_get_format(dev, mp->pixelformat); vivid_try_fmt_vid_out()
361 dprintk(dev, 1, "Fourcc format (0x%08x) unknown.\n", vivid_try_fmt_vid_out()
364 fmt = vivid_get_format(dev, mp->pixelformat); vivid_try_fmt_vid_out()
367 mp->field = vivid_field_out(dev, mp->field); vivid_try_fmt_vid_out()
368 if (vivid_is_svid_out(dev)) { vivid_try_fmt_vid_out()
370 h = (dev->std_out & V4L2_STD_525_60) ? 480 : 576; vivid_try_fmt_vid_out()
372 w = dev->sink_rect.width; vivid_try_fmt_vid_out()
373 h = dev->sink_rect.height; vivid_try_fmt_vid_out()
377 if (!dev->has_scaler_out && !dev->has_crop_out && !dev->has_compose_out) { vivid_try_fmt_vid_out()
385 if (dev->has_scaler_out && !dev->has_crop_out) { vivid_try_fmt_vid_out()
389 } else if (!dev->has_scaler_out && dev->has_compose_out && !dev->has_crop_out) { vivid_try_fmt_vid_out()
390 rect_set_max_size(&r, &dev->sink_rect); vivid_try_fmt_vid_out()
391 } else if (!dev->has_scaler_out && !dev->has_compose_out) { vivid_try_fmt_vid_out()
392 rect_set_min_size(&r, &dev->sink_rect); vivid_try_fmt_vid_out()
419 if (vivid_is_svid_out(dev)) { vivid_try_fmt_vid_out()
421 } else if (dev->dvi_d_out || !(bt->flags & V4L2_DV_FL_IS_CE_VIDEO)) { vivid_try_fmt_vid_out()
423 if (dev->dvi_d_out) vivid_try_fmt_vid_out()
442 struct vivid_dev *dev = video_drvdata(file); vivid_s_fmt_vid_out() local
443 struct v4l2_rect *crop = &dev->crop_out; vivid_s_fmt_vid_out()
444 struct v4l2_rect *compose = &dev->compose_out; vivid_s_fmt_vid_out()
445 struct vb2_queue *q = &dev->vb_vid_out_q; vivid_s_fmt_vid_out()
454 (vivid_is_svid_out(dev) || vivid_s_fmt_vid_out()
455 mp->width != dev->fmt_out_rect.width || vivid_s_fmt_vid_out()
456 mp->height != dev->fmt_out_rect.height || vivid_s_fmt_vid_out()
457 mp->pixelformat != dev->fmt_out->fourcc || vivid_s_fmt_vid_out()
458 mp->field != dev->field_out)) { vivid_s_fmt_vid_out()
459 dprintk(dev, 1, "%s device busy\n", __func__); vivid_s_fmt_vid_out()
471 dev->fmt_out = vivid_get_format(dev, mp->pixelformat); vivid_s_fmt_vid_out()
475 if (dev->has_scaler_out || dev->has_crop_out || dev->has_compose_out) { vivid_s_fmt_vid_out()
478 if (dev->has_scaler_out) { vivid_s_fmt_vid_out()
479 if (dev->has_crop_out) vivid_s_fmt_vid_out()
483 if (dev->has_compose_out && !dev->has_crop_out) { vivid_s_fmt_vid_out()
497 rect_map_inside(compose, &dev->compose_bounds_out); vivid_s_fmt_vid_out()
498 } else if (dev->has_compose_out) { vivid_s_fmt_vid_out()
512 rect_map_inside(compose, &dev->compose_bounds_out); vivid_s_fmt_vid_out()
514 } else if (dev->has_compose_out && !dev->has_crop_out) { vivid_s_fmt_vid_out()
518 rect_map_inside(compose, &dev->compose_bounds_out); vivid_s_fmt_vid_out()
519 } else if (!dev->has_compose_out) { vivid_s_fmt_vid_out()
526 rect_map_inside(compose, &dev->compose_bounds_out); vivid_s_fmt_vid_out()
542 dev->fmt_out_rect.width = mp->width; vivid_s_fmt_vid_out()
543 dev->fmt_out_rect.height = mp->height; vivid_s_fmt_vid_out()
545 dev->bytesperline_out[p] = mp->plane_fmt[p].bytesperline; vivid_s_fmt_vid_out()
546 for (p = dev->fmt_out->buffers; p < dev->fmt_out->planes; p++) vivid_s_fmt_vid_out()
547 dev->bytesperline_out[p] = vivid_s_fmt_vid_out()
548 (dev->bytesperline_out[0] * dev->fmt_out->bit_depth[p]) / vivid_s_fmt_vid_out()
549 dev->fmt_out->bit_depth[0]; vivid_s_fmt_vid_out()
550 dev->field_out = mp->field; vivid_s_fmt_vid_out()
551 if (vivid_is_svid_out(dev)) vivid_s_fmt_vid_out()
552 dev->tv_field_out = mp->field; vivid_s_fmt_vid_out()
555 dev->colorspace_out = mp->colorspace; vivid_s_fmt_vid_out()
556 dev->xfer_func_out = mp->xfer_func; vivid_s_fmt_vid_out()
557 dev->ycbcr_enc_out = mp->ycbcr_enc; vivid_s_fmt_vid_out()
558 dev->quantization_out = mp->quantization; vivid_s_fmt_vid_out()
559 if (dev->loop_video) { vivid_s_fmt_vid_out()
560 vivid_send_source_change(dev, SVID); vivid_s_fmt_vid_out()
561 vivid_send_source_change(dev, HDMI); vivid_s_fmt_vid_out()
569 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_out_mplane() local
571 if (!dev->multiplanar) vidioc_g_fmt_vid_out_mplane()
579 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_out_mplane() local
581 if (!dev->multiplanar) vidioc_try_fmt_vid_out_mplane()
589 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_out_mplane() local
591 if (!dev->multiplanar) vidioc_s_fmt_vid_out_mplane()
599 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_out() local
601 if (dev->multiplanar) vidioc_g_fmt_vid_out()
609 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_out() local
611 if (dev->multiplanar) vidioc_try_fmt_vid_out()
619 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_out() local
621 if (dev->multiplanar) vidioc_s_fmt_vid_out()
629 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_g_selection() local
631 if (!dev->has_crop_out && !dev->has_compose_out) vivid_vid_out_g_selection()
639 if (!dev->has_crop_out) vivid_vid_out_g_selection()
641 sel->r = dev->crop_out; vivid_vid_out_g_selection()
644 if (!dev->has_crop_out) vivid_vid_out_g_selection()
646 sel->r = dev->fmt_out_rect; vivid_vid_out_g_selection()
649 if (!dev->has_crop_out) vivid_vid_out_g_selection()
654 if (!dev->has_compose_out) vivid_vid_out_g_selection()
656 sel->r = dev->compose_out; vivid_vid_out_g_selection()
660 if (!dev->has_compose_out) vivid_vid_out_g_selection()
662 sel->r = dev->sink_rect; vivid_vid_out_g_selection()
672 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_s_selection() local
673 struct v4l2_rect *crop = &dev->crop_out; vivid_vid_out_s_selection()
674 struct v4l2_rect *compose = &dev->compose_out; vivid_vid_out_s_selection()
675 unsigned factor = V4L2_FIELD_HAS_T_OR_B(dev->field_out) ? 2 : 1; vivid_vid_out_s_selection()
678 if (!dev->has_crop_out && !dev->has_compose_out) vivid_vid_out_s_selection()
685 if (!dev->has_crop_out) vivid_vid_out_s_selection()
691 rect_set_max_size(&s->r, &dev->fmt_out_rect); vivid_vid_out_s_selection()
692 if (dev->has_scaler_out) { vivid_vid_out_s_selection()
695 dev->sink_rect.width * MAX_ZOOM, vivid_vid_out_s_selection()
696 (dev->sink_rect.height / factor) * MAX_ZOOM vivid_vid_out_s_selection()
700 if (dev->has_compose_out) { vivid_vid_out_s_selection()
714 rect_map_inside(compose, &dev->compose_bounds_out); vivid_vid_out_s_selection()
716 } else if (dev->has_compose_out) { vivid_vid_out_s_selection()
719 rect_set_max_size(&s->r, &dev->sink_rect); vivid_vid_out_s_selection()
721 rect_map_inside(compose, &dev->compose_bounds_out); vivid_vid_out_s_selection()
725 rect_set_size_to(&s->r, &dev->sink_rect); vivid_vid_out_s_selection()
728 rect_map_inside(&s->r, &dev->fmt_out_rect); vivid_vid_out_s_selection()
732 if (!dev->has_compose_out) vivid_vid_out_s_selection()
738 rect_set_max_size(&s->r, &dev->sink_rect); vivid_vid_out_s_selection()
739 rect_map_inside(&s->r, &dev->compose_bounds_out); vivid_vid_out_s_selection()
742 if (dev->has_scaler_out) { vivid_vid_out_s_selection()
743 struct v4l2_rect fmt = dev->fmt_out_rect; vivid_vid_out_s_selection()
756 if (!dev->has_crop_out) vivid_vid_out_s_selection()
758 if (!rect_same_size(&dev->fmt_out_rect, &fmt) && vivid_vid_out_s_selection()
759 vb2_is_busy(&dev->vb_vid_out_q)) vivid_vid_out_s_selection()
761 if (dev->has_crop_out) { vivid_vid_out_s_selection()
765 dev->fmt_out_rect = fmt; vivid_vid_out_s_selection()
766 } else if (dev->has_crop_out) { vivid_vid_out_s_selection()
767 struct v4l2_rect fmt = dev->fmt_out_rect; vivid_vid_out_s_selection()
770 if (!rect_same_size(&dev->fmt_out_rect, &fmt) && vivid_vid_out_s_selection()
771 vb2_is_busy(&dev->vb_vid_out_q)) vivid_vid_out_s_selection()
773 dev->fmt_out_rect = fmt; vivid_vid_out_s_selection()
775 rect_map_inside(crop, &dev->fmt_out_rect); vivid_vid_out_s_selection()
777 if (!rect_same_size(&s->r, &dev->fmt_out_rect) && vivid_vid_out_s_selection()
778 vb2_is_busy(&dev->vb_vid_out_q)) vivid_vid_out_s_selection()
780 rect_set_size_to(&dev->fmt_out_rect, &s->r); vivid_vid_out_s_selection()
783 rect_map_inside(crop, &dev->fmt_out_rect); vivid_vid_out_s_selection()
787 if (dev->bitmap_out && (compose->width != s->r.width || vivid_vid_out_s_selection()
789 kfree(dev->bitmap_out); vivid_vid_out_s_selection()
790 dev->bitmap_out = NULL; vivid_vid_out_s_selection()
804 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_cropcap() local
809 switch (vivid_get_pixel_aspect(dev)) { vivid_vid_out_cropcap()
829 struct vivid_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_out_overlay() local
830 const struct v4l2_rect *compose = &dev->compose_out; vidioc_g_fmt_vid_out_overlay()
834 if (!dev->has_fb) vidioc_g_fmt_vid_out_overlay()
836 win->w.top = dev->overlay_out_top; vidioc_g_fmt_vid_out_overlay()
837 win->w.left = dev->overlay_out_left; vidioc_g_fmt_vid_out_overlay()
840 win->clipcount = dev->clipcount_out; vidioc_g_fmt_vid_out_overlay()
842 win->chromakey = dev->chromakey_out; vidioc_g_fmt_vid_out_overlay()
843 win->global_alpha = dev->global_alpha_out; vidioc_g_fmt_vid_out_overlay()
844 if (clipcount > dev->clipcount_out) vidioc_g_fmt_vid_out_overlay()
845 clipcount = dev->clipcount_out; vidioc_g_fmt_vid_out_overlay()
846 if (dev->bitmap_out == NULL) vidioc_g_fmt_vid_out_overlay()
849 if (copy_to_user(win->bitmap, dev->bitmap_out, vidioc_g_fmt_vid_out_overlay()
850 ((dev->compose_out.width + 7) / 8) * dev->compose_out.height)) vidioc_g_fmt_vid_out_overlay()
854 if (copy_to_user(win->clips, dev->clips_out, vidioc_g_fmt_vid_out_overlay()
855 clipcount * sizeof(dev->clips_out[0]))) vidioc_g_fmt_vid_out_overlay()
864 struct vivid_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_out_overlay() local
865 const struct v4l2_rect *compose = &dev->compose_out; vidioc_try_fmt_vid_out_overlay()
869 if (!dev->has_fb) vidioc_try_fmt_vid_out_overlay()
872 -dev->display_width, dev->display_width); vidioc_try_fmt_vid_out_overlay()
874 -dev->display_height, dev->display_height); vidioc_try_fmt_vid_out_overlay()
887 if (copy_from_user(dev->try_clips_out, win->clips, vidioc_try_fmt_vid_out_overlay()
888 win->clipcount * sizeof(dev->clips_out[0]))) vidioc_try_fmt_vid_out_overlay()
891 struct v4l2_rect *r = &dev->try_clips_out[i].c; vidioc_try_fmt_vid_out_overlay()
893 r->top = clamp_t(s32, r->top, 0, dev->display_height - 1); vidioc_try_fmt_vid_out_overlay()
894 r->height = clamp_t(s32, r->height, 1, dev->display_height - r->top); vidioc_try_fmt_vid_out_overlay()
895 r->left = clamp_t(u32, r->left, 0, dev->display_width - 1); vidioc_try_fmt_vid_out_overlay()
896 r->width = clamp_t(u32, r->width, 1, dev->display_width - r->left); vidioc_try_fmt_vid_out_overlay()
903 struct v4l2_rect *r1 = &dev->try_clips_out[i].c; vidioc_try_fmt_vid_out_overlay()
906 struct v4l2_rect *r2 = &dev->try_clips_out[j].c; vidioc_try_fmt_vid_out_overlay()
912 if (copy_to_user(win->clips, dev->try_clips_out, vidioc_try_fmt_vid_out_overlay()
913 win->clipcount * sizeof(dev->clips_out[0]))) vidioc_try_fmt_vid_out_overlay()
922 struct vivid_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_out_overlay() local
923 const struct v4l2_rect *compose = &dev->compose_out; vidioc_s_fmt_vid_out_overlay()
927 unsigned clips_size = win->clipcount * sizeof(dev->clips_out[0]); vidioc_s_fmt_vid_out_overlay()
940 dev->overlay_out_top = win->w.top; vidioc_s_fmt_vid_out_overlay()
941 dev->overlay_out_left = win->w.left; vidioc_s_fmt_vid_out_overlay()
942 kfree(dev->bitmap_out); vidioc_s_fmt_vid_out_overlay()
943 dev->bitmap_out = new_bitmap; vidioc_s_fmt_vid_out_overlay()
944 dev->clipcount_out = win->clipcount; vidioc_s_fmt_vid_out_overlay()
945 if (dev->clipcount_out) vidioc_s_fmt_vid_out_overlay()
946 memcpy(dev->clips_out, dev->try_clips_out, clips_size); vidioc_s_fmt_vid_out_overlay()
947 dev->chromakey_out = win->chromakey; vidioc_s_fmt_vid_out_overlay()
948 dev->global_alpha_out = win->global_alpha; vidioc_s_fmt_vid_out_overlay()
954 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_overlay() local
956 if (i && !dev->fmt_out->can_do_overlay) { vivid_vid_out_overlay()
957 dprintk(dev, 1, "unsupported output format for output overlay\n"); vivid_vid_out_overlay()
961 dev->overlay_out_enabled = i; vivid_vid_out_overlay()
968 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_g_fbuf() local
978 a->flags = V4L2_FBUF_FLAG_OVERLAY | dev->fbuf_out_flags; vivid_vid_out_g_fbuf()
979 a->base = (void *)dev->video_pbase; vivid_vid_out_g_fbuf()
980 a->fmt.width = dev->display_width; vivid_vid_out_g_fbuf()
981 a->fmt.height = dev->display_height; vivid_vid_out_g_fbuf()
982 if (dev->fb_defined.green.length == 5) vivid_vid_out_g_fbuf()
986 a->fmt.bytesperline = dev->display_byte_stride; vivid_vid_out_g_fbuf()
997 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_s_fbuf() local
1016 dev->fbuf_out_flags &= ~(chroma_flags | alpha_flags); vivid_vid_out_s_fbuf()
1017 dev->fbuf_out_flags = a->flags & (chroma_flags | alpha_flags); vivid_vid_out_s_fbuf()
1029 struct vivid_dev *dev = video_drvdata(file); vidioc_enum_output() local
1031 if (out->index >= dev->num_outputs) vidioc_enum_output()
1035 switch (dev->output_type[out->index]) { vidioc_enum_output()
1038 dev->output_name_counter[out->index]); vidioc_enum_output()
1040 if (dev->has_audio_outputs) vidioc_enum_output()
1046 dev->output_name_counter[out->index]); vidioc_enum_output()
1055 struct vivid_dev *dev = video_drvdata(file); vidioc_g_output() local
1057 *o = dev->output; vidioc_g_output()
1063 struct vivid_dev *dev = video_drvdata(file); vidioc_s_output() local
1065 if (o >= dev->num_outputs) vidioc_s_output()
1068 if (o == dev->output) vidioc_s_output()
1071 if (vb2_is_busy(&dev->vb_vid_out_q) || vb2_is_busy(&dev->vb_vbi_out_q)) vidioc_s_output()
1074 dev->output = o; vidioc_s_output()
1075 dev->tv_audio_output = 0; vidioc_s_output()
1076 if (dev->output_type[o] == SVID) vidioc_s_output()
1077 dev->vid_out_dev.tvnorms = V4L2_STD_ALL; vidioc_s_output()
1079 dev->vid_out_dev.tvnorms = 0; vidioc_s_output()
1081 dev->vbi_out_dev.tvnorms = dev->vid_out_dev.tvnorms; vidioc_s_output()
1082 vivid_update_format_out(dev); vidioc_s_output()
1096 struct vivid_dev *dev = video_drvdata(file); vidioc_g_audout() local
1098 if (!vivid_is_svid_out(dev)) vidioc_g_audout()
1100 *vout = vivid_audio_outputs[dev->tv_audio_output]; vidioc_g_audout()
1106 struct vivid_dev *dev = video_drvdata(file); vidioc_s_audout() local
1108 if (!vivid_is_svid_out(dev)) vidioc_s_audout()
1112 dev->tv_audio_output = vout->index; vidioc_s_audout()
1118 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_s_std() local
1120 if (!vivid_is_svid_out(dev)) vivid_vid_out_s_std()
1122 if (dev->std_out == id) vivid_vid_out_s_std()
1124 if (vb2_is_busy(&dev->vb_vid_out_q) || vb2_is_busy(&dev->vb_vbi_out_q)) vivid_vid_out_s_std()
1126 dev->std_out = id; vivid_vid_out_s_std()
1127 vivid_update_format_out(dev); vivid_vid_out_s_std()
1145 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_s_dv_timings() local
1146 if (!vivid_is_hdmi_out(dev)) vivid_vid_out_s_dv_timings()
1152 if (v4l2_match_dv_timings(timings, &dev->dv_timings_out, 0)) vivid_vid_out_s_dv_timings()
1154 if (vb2_is_busy(&dev->vb_vid_out_q)) vivid_vid_out_s_dv_timings()
1156 dev->dv_timings_out = *timings; vivid_vid_out_s_dv_timings()
1157 vivid_update_format_out(dev); vivid_vid_out_s_dv_timings()
1164 struct vivid_dev *dev = video_drvdata(file); vivid_vid_out_g_parm() local
1166 if (parm->type != (dev->multiplanar ? vivid_vid_out_g_parm()
1172 parm->parm.output.timeperframe = dev->timeperframe_vid_out; vivid_vid_out_g_parm()
H A Dvivid-ctrls.c108 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_gen); vivid_user_gen_s_ctrl() local
112 v4l2_info(&dev->v4l2_dev, "disconnect\n"); vivid_user_gen_s_ctrl()
113 clear_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags); vivid_user_gen_s_ctrl()
114 clear_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags); vivid_user_gen_s_ctrl()
115 clear_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags); vivid_user_gen_s_ctrl()
116 clear_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags); vivid_user_gen_s_ctrl()
117 clear_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags); vivid_user_gen_s_ctrl()
118 clear_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags); vivid_user_gen_s_ctrl()
119 clear_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags); vivid_user_gen_s_ctrl()
122 vivid_clear_fb(dev); vivid_user_gen_s_ctrl()
125 dev->button_pressed = 30; vivid_user_gen_s_ctrl()
287 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); vivid_user_vid_g_volatile_ctrl() local
291 dev->gain->val = dev->jiffies_vid_cap & 0xff; vivid_user_vid_g_volatile_ctrl()
299 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_user_vid); vivid_user_vid_s_ctrl() local
303 dev->input_brightness[dev->input] = ctrl->val - dev->input * 128; vivid_user_vid_s_ctrl()
304 tpg_s_brightness(&dev->tpg, dev->input_brightness[dev->input]); vivid_user_vid_s_ctrl()
307 tpg_s_contrast(&dev->tpg, ctrl->val); vivid_user_vid_s_ctrl()
310 tpg_s_saturation(&dev->tpg, ctrl->val); vivid_user_vid_s_ctrl()
313 tpg_s_hue(&dev->tpg, ctrl->val); vivid_user_vid_s_ctrl()
316 dev->hflip = ctrl->val; vivid_user_vid_s_ctrl()
317 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); vivid_user_vid_s_ctrl()
320 dev->vflip = ctrl->val; vivid_user_vid_s_ctrl()
321 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); vivid_user_vid_s_ctrl()
324 tpg_s_alpha_component(&dev->tpg, ctrl->val); vivid_user_vid_s_ctrl()
351 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_cap); vivid_vid_cap_s_ctrl() local
356 vivid_update_quality(dev); vivid_vid_cap_s_ctrl()
357 tpg_s_pattern(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
360 tpg_s_colorspace(&dev->tpg, colorspaces[ctrl->val]); vivid_vid_cap_s_ctrl()
361 vivid_send_source_change(dev, TV); vivid_vid_cap_s_ctrl()
362 vivid_send_source_change(dev, SVID); vivid_vid_cap_s_ctrl()
363 vivid_send_source_change(dev, HDMI); vivid_vid_cap_s_ctrl()
364 vivid_send_source_change(dev, WEBCAM); vivid_vid_cap_s_ctrl()
367 tpg_s_xfer_func(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
368 vivid_send_source_change(dev, TV); vivid_vid_cap_s_ctrl()
369 vivid_send_source_change(dev, SVID); vivid_vid_cap_s_ctrl()
370 vivid_send_source_change(dev, HDMI); vivid_vid_cap_s_ctrl()
371 vivid_send_source_change(dev, WEBCAM); vivid_vid_cap_s_ctrl()
374 tpg_s_ycbcr_enc(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
375 vivid_send_source_change(dev, TV); vivid_vid_cap_s_ctrl()
376 vivid_send_source_change(dev, SVID); vivid_vid_cap_s_ctrl()
377 vivid_send_source_change(dev, HDMI); vivid_vid_cap_s_ctrl()
378 vivid_send_source_change(dev, WEBCAM); vivid_vid_cap_s_ctrl()
381 tpg_s_quantization(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
382 vivid_send_source_change(dev, TV); vivid_vid_cap_s_ctrl()
383 vivid_send_source_change(dev, SVID); vivid_vid_cap_s_ctrl()
384 vivid_send_source_change(dev, HDMI); vivid_vid_cap_s_ctrl()
385 vivid_send_source_change(dev, WEBCAM); vivid_vid_cap_s_ctrl()
388 if (!vivid_is_hdmi_cap(dev)) vivid_vid_cap_s_ctrl()
390 tpg_s_rgb_range(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
393 tpg_s_real_rgb_range(&dev->tpg, ctrl->val ? vivid_vid_cap_s_ctrl()
397 tpg_s_alpha_mode(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
400 tpg_s_mv_hor_mode(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
403 tpg_s_mv_vert_mode(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
406 dev->osd_mode = ctrl->val; vivid_vid_cap_s_ctrl()
409 tpg_s_perc_fill(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
411 dev->must_blank[i] = ctrl->val < 100; vivid_vid_cap_s_ctrl()
414 tpg_s_insert_sav(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
417 tpg_s_insert_eav(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
420 dev->sensor_hflip = ctrl->val; vivid_vid_cap_s_ctrl()
421 tpg_s_hflip(&dev->tpg, dev->sensor_hflip ^ dev->hflip); vivid_vid_cap_s_ctrl()
424 dev->sensor_vflip = ctrl->val; vivid_vid_cap_s_ctrl()
425 tpg_s_vflip(&dev->tpg, dev->sensor_vflip ^ dev->vflip); vivid_vid_cap_s_ctrl()
428 dev->has_crop_cap = ctrl->val; vivid_vid_cap_s_ctrl()
429 vivid_update_format_cap(dev, true); vivid_vid_cap_s_ctrl()
432 dev->has_compose_cap = ctrl->val; vivid_vid_cap_s_ctrl()
433 vivid_update_format_cap(dev, true); vivid_vid_cap_s_ctrl()
436 dev->has_scaler_cap = ctrl->val; vivid_vid_cap_s_ctrl()
437 vivid_update_format_cap(dev, true); vivid_vid_cap_s_ctrl()
440 tpg_s_show_border(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
443 tpg_s_show_square(&dev->tpg, ctrl->val); vivid_vid_cap_s_ctrl()
446 dev->std_aspect_ratio = ctrl->val; vivid_vid_cap_s_ctrl()
447 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); vivid_vid_cap_s_ctrl()
450 dev->dv_timings_signal_mode = dev->ctrl_dv_timings_signal_mode->val; vivid_vid_cap_s_ctrl()
451 if (dev->dv_timings_signal_mode == SELECTED_DV_TIMINGS) vivid_vid_cap_s_ctrl()
452 dev->query_dv_timings = dev->ctrl_dv_timings->val; vivid_vid_cap_s_ctrl()
453 v4l2_ctrl_activate(dev->ctrl_dv_timings, vivid_vid_cap_s_ctrl()
454 dev->dv_timings_signal_mode == SELECTED_DV_TIMINGS); vivid_vid_cap_s_ctrl()
455 vivid_update_quality(dev); vivid_vid_cap_s_ctrl()
456 vivid_send_source_change(dev, HDMI); vivid_vid_cap_s_ctrl()
459 dev->dv_timings_aspect_ratio = ctrl->val; vivid_vid_cap_s_ctrl()
460 tpg_s_video_aspect(&dev->tpg, vivid_get_video_aspect(dev)); vivid_vid_cap_s_ctrl()
463 dev->tstamp_src_is_soe = ctrl->val; vivid_vid_cap_s_ctrl()
464 dev->vb_vid_cap_q.timestamp_flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK; vivid_vid_cap_s_ctrl()
465 if (dev->tstamp_src_is_soe) vivid_vid_cap_s_ctrl()
466 dev->vb_vid_cap_q.timestamp_flags |= V4L2_BUF_FLAG_TSTAMP_SRC_SOE; vivid_vid_cap_s_ctrl()
469 dev->edid_max_blocks = ctrl->val; vivid_vid_cap_s_ctrl()
470 if (dev->edid_blocks > dev->edid_max_blocks) vivid_vid_cap_s_ctrl()
471 dev->edid_blocks = dev->edid_max_blocks; vivid_vid_cap_s_ctrl()
805 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_loop_cap); vivid_loop_cap_s_ctrl() local
809 dev->loop_video = ctrl->val; vivid_loop_cap_s_ctrl()
810 vivid_update_quality(dev); vivid_loop_cap_s_ctrl()
811 vivid_send_source_change(dev, SVID); vivid_loop_cap_s_ctrl()
812 vivid_send_source_change(dev, HDMI); vivid_loop_cap_s_ctrl()
836 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vbi_cap); vivid_vbi_cap_s_ctrl() local
840 dev->vbi_cap_interlaced = ctrl->val; vivid_vbi_cap_s_ctrl()
864 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_vid_out); vivid_vid_out_s_ctrl() local
865 struct v4l2_bt_timings *bt = &dev->dv_timings_out.bt; vivid_vid_out_s_ctrl()
869 dev->has_crop_out = ctrl->val; vivid_vid_out_s_ctrl()
870 vivid_update_format_out(dev); vivid_vid_out_s_ctrl()
873 dev->has_compose_out = ctrl->val; vivid_vid_out_s_ctrl()
874 vivid_update_format_out(dev); vivid_vid_out_s_ctrl()
877 dev->has_scaler_out = ctrl->val; vivid_vid_out_s_ctrl()
878 vivid_update_format_out(dev); vivid_vid_out_s_ctrl()
881 dev->dvi_d_out = ctrl->val == V4L2_DV_TX_MODE_DVI_D; vivid_vid_out_s_ctrl()
882 if (!vivid_is_hdmi_out(dev)) vivid_vid_out_s_ctrl()
884 if (!dev->dvi_d_out && (bt->flags & V4L2_DV_FL_IS_CE_VIDEO)) { vivid_vid_out_s_ctrl()
886 dev->colorspace_out = V4L2_COLORSPACE_SMPTE170M; vivid_vid_out_s_ctrl()
888 dev->colorspace_out = V4L2_COLORSPACE_REC709; vivid_vid_out_s_ctrl()
889 dev->quantization_out = V4L2_QUANTIZATION_DEFAULT; vivid_vid_out_s_ctrl()
891 dev->colorspace_out = V4L2_COLORSPACE_SRGB; vivid_vid_out_s_ctrl()
892 dev->quantization_out = dev->dvi_d_out ? vivid_vid_out_s_ctrl()
896 if (dev->loop_video) vivid_vid_out_s_ctrl()
897 vivid_send_source_change(dev, HDMI); vivid_vid_out_s_ctrl()
942 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_streaming); vivid_streaming_s_ctrl() local
947 dev->dqbuf_error = true; vivid_streaming_s_ctrl()
950 dev->perc_dropped_buffers = ctrl->val; vivid_streaming_s_ctrl()
953 dev->queue_setup_error = true; vivid_streaming_s_ctrl()
956 dev->buf_prepare_error = true; vivid_streaming_s_ctrl()
959 dev->start_streaming_error = true; vivid_streaming_s_ctrl()
962 if (vb2_start_streaming_called(&dev->vb_vid_cap_q)) vivid_streaming_s_ctrl()
963 vb2_queue_error(&dev->vb_vid_cap_q); vivid_streaming_s_ctrl()
964 if (vb2_start_streaming_called(&dev->vb_vbi_cap_q)) vivid_streaming_s_ctrl()
965 vb2_queue_error(&dev->vb_vbi_cap_q); vivid_streaming_s_ctrl()
966 if (vb2_start_streaming_called(&dev->vb_vid_out_q)) vivid_streaming_s_ctrl()
967 vb2_queue_error(&dev->vb_vid_out_q); vivid_streaming_s_ctrl()
968 if (vb2_start_streaming_called(&dev->vb_vbi_out_q)) vivid_streaming_s_ctrl()
969 vb2_queue_error(&dev->vb_vbi_out_q); vivid_streaming_s_ctrl()
970 if (vb2_start_streaming_called(&dev->vb_sdr_cap_q)) vivid_streaming_s_ctrl()
971 vb2_queue_error(&dev->vb_sdr_cap_q); vivid_streaming_s_ctrl()
974 dev->seq_wrap = ctrl->val; vivid_streaming_s_ctrl()
977 dev->time_wrap = ctrl->val; vivid_streaming_s_ctrl()
979 dev->time_wrap_offset = 0; vivid_streaming_s_ctrl()
983 dev->time_wrap_offset = -tv.tv_sec - 16; vivid_streaming_s_ctrl()
1061 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdtv_cap); vivid_sdtv_cap_s_ctrl() local
1065 dev->std_signal_mode = dev->ctrl_std_signal_mode->val; vivid_sdtv_cap_s_ctrl()
1066 if (dev->std_signal_mode == SELECTED_STD) vivid_sdtv_cap_s_ctrl()
1067 dev->query_std = vivid_standard[dev->ctrl_standard->val]; vivid_sdtv_cap_s_ctrl()
1068 v4l2_ctrl_activate(dev->ctrl_standard, dev->std_signal_mode == SELECTED_STD); vivid_sdtv_cap_s_ctrl()
1069 vivid_update_quality(dev); vivid_sdtv_cap_s_ctrl()
1070 vivid_send_source_change(dev, TV); vivid_sdtv_cap_s_ctrl()
1071 vivid_send_source_change(dev, SVID); vivid_sdtv_cap_s_ctrl()
1116 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_rx); vivid_radio_rx_s_ctrl() local
1120 dev->radio_rx_hw_seek_mode = ctrl->val; vivid_radio_rx_s_ctrl()
1123 dev->radio_rx_hw_seek_prog_lim = ctrl->val; vivid_radio_rx_s_ctrl()
1126 dev->rds_gen.use_rbds = ctrl->val; vivid_radio_rx_s_ctrl()
1129 dev->radio_rx_rds_controls = ctrl->val; vivid_radio_rx_s_ctrl()
1130 dev->radio_rx_caps &= ~V4L2_CAP_READWRITE; vivid_radio_rx_s_ctrl()
1131 dev->radio_rx_rds_use_alternates = false; vivid_radio_rx_s_ctrl()
1132 if (!dev->radio_rx_rds_controls) { vivid_radio_rx_s_ctrl()
1133 dev->radio_rx_caps |= V4L2_CAP_READWRITE; vivid_radio_rx_s_ctrl()
1134 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, 0); vivid_radio_rx_s_ctrl()
1135 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, 0); vivid_radio_rx_s_ctrl()
1136 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, 0); vivid_radio_rx_s_ctrl()
1137 __v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, 0); vivid_radio_rx_s_ctrl()
1138 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ""); vivid_radio_rx_s_ctrl()
1139 __v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ""); vivid_radio_rx_s_ctrl()
1141 v4l2_ctrl_activate(dev->radio_rx_rds_pty, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1142 v4l2_ctrl_activate(dev->radio_rx_rds_psname, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1143 v4l2_ctrl_activate(dev->radio_rx_rds_radiotext, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1144 v4l2_ctrl_activate(dev->radio_rx_rds_ta, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1145 v4l2_ctrl_activate(dev->radio_rx_rds_tp, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1146 v4l2_ctrl_activate(dev->radio_rx_rds_ms, dev->radio_rx_rds_controls); vivid_radio_rx_s_ctrl()
1149 dev->radio_rx_rds_enabled = ctrl->val; vivid_radio_rx_s_ctrl()
1213 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_radio_tx); vivid_radio_tx_s_ctrl() local
1217 dev->radio_tx_rds_controls = ctrl->val; vivid_radio_tx_s_ctrl()
1218 dev->radio_tx_caps &= ~V4L2_CAP_READWRITE; vivid_radio_tx_s_ctrl()
1219 if (!dev->radio_tx_rds_controls) vivid_radio_tx_s_ctrl()
1220 dev->radio_tx_caps |= V4L2_CAP_READWRITE; vivid_radio_tx_s_ctrl()
1223 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1224 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, ctrl->val); vivid_radio_tx_s_ctrl()
1227 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1228 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, ctrl->p_new.p_char); vivid_radio_tx_s_ctrl()
1231 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1232 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, ctrl->p_new.p_char); vivid_radio_tx_s_ctrl()
1235 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1236 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, ctrl->val); vivid_radio_tx_s_ctrl()
1239 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1240 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, ctrl->val); vivid_radio_tx_s_ctrl()
1243 if (dev->radio_rx_rds_controls) vivid_radio_tx_s_ctrl()
1244 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, ctrl->val); vivid_radio_tx_s_ctrl()
1269 struct vivid_dev *dev = container_of(ctrl->handler, struct vivid_dev, ctrl_hdl_sdr_cap); vivid_sdr_cap_s_ctrl() local
1273 dev->sdr_fm_deviation = ctrl->val; vivid_sdr_cap_s_ctrl()
1303 int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap, vivid_create_controls() argument
1307 struct v4l2_ctrl_handler *hdl_user_gen = &dev->ctrl_hdl_user_gen; vivid_create_controls()
1308 struct v4l2_ctrl_handler *hdl_user_vid = &dev->ctrl_hdl_user_vid; vivid_create_controls()
1309 struct v4l2_ctrl_handler *hdl_user_aud = &dev->ctrl_hdl_user_aud; vivid_create_controls()
1310 struct v4l2_ctrl_handler *hdl_streaming = &dev->ctrl_hdl_streaming; vivid_create_controls()
1311 struct v4l2_ctrl_handler *hdl_sdtv_cap = &dev->ctrl_hdl_sdtv_cap; vivid_create_controls()
1312 struct v4l2_ctrl_handler *hdl_loop_cap = &dev->ctrl_hdl_loop_cap; vivid_create_controls()
1313 struct v4l2_ctrl_handler *hdl_vid_cap = &dev->ctrl_hdl_vid_cap; vivid_create_controls()
1314 struct v4l2_ctrl_handler *hdl_vid_out = &dev->ctrl_hdl_vid_out; vivid_create_controls()
1315 struct v4l2_ctrl_handler *hdl_vbi_cap = &dev->ctrl_hdl_vbi_cap; vivid_create_controls()
1316 struct v4l2_ctrl_handler *hdl_vbi_out = &dev->ctrl_hdl_vbi_out; vivid_create_controls()
1317 struct v4l2_ctrl_handler *hdl_radio_rx = &dev->ctrl_hdl_radio_rx; vivid_create_controls()
1318 struct v4l2_ctrl_handler *hdl_radio_tx = &dev->ctrl_hdl_radio_tx; vivid_create_controls()
1319 struct v4l2_ctrl_handler *hdl_sdr_cap = &dev->ctrl_hdl_sdr_cap; vivid_create_controls()
1356 dev->volume = v4l2_ctrl_new_std(hdl_user_aud, NULL, vivid_create_controls()
1358 dev->mute = v4l2_ctrl_new_std(hdl_user_aud, NULL, vivid_create_controls()
1360 if (dev->has_vid_cap) { vivid_create_controls()
1361 dev->brightness = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1364 dev->input_brightness[i] = 128; vivid_create_controls()
1365 dev->contrast = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1367 dev->saturation = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1369 dev->hue = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1375 dev->autogain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1377 dev->gain = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1379 dev->alpha = v4l2_ctrl_new_std(hdl_user_vid, &vivid_user_vid_ctrl_ops, vivid_create_controls()
1382 dev->button = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_button, NULL); vivid_create_controls()
1383 dev->int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int32, NULL); vivid_create_controls()
1384 dev->int64 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int64, NULL); vivid_create_controls()
1385 dev->boolean = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_boolean, NULL); vivid_create_controls()
1386 dev->menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_menu, NULL); vivid_create_controls()
1387 dev->string = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_string, NULL); vivid_create_controls()
1388 dev->bitmask = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_bitmask, NULL); vivid_create_controls()
1389 dev->int_menu = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_int_menu, NULL); vivid_create_controls()
1394 if (dev->has_vid_cap) { vivid_create_controls()
1405 dev->test_pattern = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1418 dev->ctrl_has_crop_cap = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1420 dev->ctrl_has_compose_cap = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1422 dev->ctrl_has_scaler_cap = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1427 dev->colorspace = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1435 if (dev->has_vid_out && show_ccs_out) { vivid_create_controls()
1436 dev->ctrl_has_crop_out = v4l2_ctrl_new_custom(hdl_vid_out, vivid_create_controls()
1438 dev->ctrl_has_compose_out = v4l2_ctrl_new_custom(hdl_vid_out, vivid_create_controls()
1440 dev->ctrl_has_scaler_out = v4l2_ctrl_new_custom(hdl_vid_out, vivid_create_controls()
1462 if (has_sdtv && (dev->has_vid_cap || dev->has_vbi_cap)) { vivid_create_controls()
1463 if (dev->has_vid_cap) vivid_create_controls()
1465 dev->ctrl_std_signal_mode = v4l2_ctrl_new_custom(hdl_sdtv_cap, vivid_create_controls()
1467 dev->ctrl_standard = v4l2_ctrl_new_custom(hdl_sdtv_cap, vivid_create_controls()
1469 if (dev->ctrl_std_signal_mode) vivid_create_controls()
1470 v4l2_ctrl_cluster(2, &dev->ctrl_std_signal_mode); vivid_create_controls()
1471 if (dev->has_raw_vbi_cap) vivid_create_controls()
1475 if (has_hdmi && dev->has_vid_cap) { vivid_create_controls()
1476 dev->ctrl_dv_timings_signal_mode = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1479 vivid_ctrl_dv_timings.max = dev->query_dv_timings_size - 1; vivid_create_controls()
1481 (const char * const *)dev->query_dv_timings_qmenu; vivid_create_controls()
1482 dev->ctrl_dv_timings = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1484 if (dev->ctrl_dv_timings_signal_mode) vivid_create_controls()
1485 v4l2_ctrl_cluster(2, &dev->ctrl_dv_timings_signal_mode); vivid_create_controls()
1489 dev->real_rgb_range_cap = v4l2_ctrl_new_custom(hdl_vid_cap, vivid_create_controls()
1491 dev->rgb_range_cap = v4l2_ctrl_new_std_menu(hdl_vid_cap, vivid_create_controls()
1496 if (has_hdmi && dev->has_vid_out) { vivid_create_controls()
1501 dev->ctrl_tx_rgb_range = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, vivid_create_controls()
1504 dev->ctrl_tx_mode = v4l2_ctrl_new_std_menu(hdl_vid_out, NULL, vivid_create_controls()
1508 if ((dev->has_vid_cap && dev->has_vid_out) || vivid_create_controls()
1509 (dev->has_vbi_cap && dev->has_vbi_out)) vivid_create_controls()
1512 if (dev->has_fb) vivid_create_controls()
1515 if (dev->has_radio_rx) { vivid_create_controls()
1522 dev->radio_rx_rds_pty = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1525 dev->radio_rx_rds_psname = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1528 dev->radio_rx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1531 dev->radio_rx_rds_ta = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1534 dev->radio_rx_rds_tp = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1537 dev->radio_rx_rds_ms = v4l2_ctrl_new_std(hdl_radio_rx, vivid_create_controls()
1541 if (dev->has_radio_tx) { vivid_create_controls()
1544 dev->radio_tx_rds_pi = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1547 dev->radio_tx_rds_pty = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1550 dev->radio_tx_rds_psname = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1553 if (dev->radio_tx_rds_psname) vivid_create_controls()
1554 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_psname, "VIVID-TX"); vivid_create_controls()
1555 dev->radio_tx_rds_radiotext = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1558 if (dev->radio_tx_rds_radiotext) vivid_create_controls()
1559 v4l2_ctrl_s_ctrl_string(dev->radio_tx_rds_radiotext, vivid_create_controls()
1561 dev->radio_tx_rds_mono_stereo = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1564 dev->radio_tx_rds_art_head = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1567 dev->radio_tx_rds_compressed = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1570 dev->radio_tx_rds_dyn_pty = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1573 dev->radio_tx_rds_ta = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1576 dev->radio_tx_rds_tp = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1579 dev->radio_tx_rds_ms = v4l2_ctrl_new_std(hdl_radio_tx, vivid_create_controls()
1583 if (dev->has_sdr_cap) { vivid_create_controls()
1600 if (dev->autogain) vivid_create_controls()
1601 v4l2_ctrl_auto_cluster(2, &dev->autogain, 0, true); vivid_create_controls()
1603 if (dev->has_vid_cap) { vivid_create_controls()
1612 dev->vid_cap_dev.ctrl_handler = hdl_vid_cap; vivid_create_controls()
1614 if (dev->has_vid_out) { vivid_create_controls()
1620 dev->vid_out_dev.ctrl_handler = hdl_vid_out; vivid_create_controls()
1622 if (dev->has_vbi_cap) { vivid_create_controls()
1629 dev->vbi_cap_dev.ctrl_handler = hdl_vbi_cap; vivid_create_controls()
1631 if (dev->has_vbi_out) { vivid_create_controls()
1636 dev->vbi_out_dev.ctrl_handler = hdl_vbi_out; vivid_create_controls()
1638 if (dev->has_radio_rx) { vivid_create_controls()
1643 dev->radio_rx_dev.ctrl_handler = hdl_radio_rx; vivid_create_controls()
1645 if (dev->has_radio_tx) { vivid_create_controls()
1650 dev->radio_tx_dev.ctrl_handler = hdl_radio_tx; vivid_create_controls()
1652 if (dev->has_sdr_cap) { vivid_create_controls()
1657 dev->sdr_cap_dev.ctrl_handler = hdl_sdr_cap; vivid_create_controls()
1662 void vivid_free_controls(struct vivid_dev *dev) vivid_free_controls() argument
1664 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_cap); vivid_free_controls()
1665 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vid_out); vivid_free_controls()
1666 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_cap); vivid_free_controls()
1667 v4l2_ctrl_handler_free(&dev->ctrl_hdl_vbi_out); vivid_free_controls()
1668 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_rx); vivid_free_controls()
1669 v4l2_ctrl_handler_free(&dev->ctrl_hdl_radio_tx); vivid_free_controls()
1670 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdr_cap); vivid_free_controls()
1671 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_gen); vivid_free_controls()
1672 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_vid); vivid_free_controls()
1673 v4l2_ctrl_handler_free(&dev->ctrl_hdl_user_aud); vivid_free_controls()
1674 v4l2_ctrl_handler_free(&dev->ctrl_hdl_streaming); vivid_free_controls()
1675 v4l2_ctrl_handler_free(&dev->ctrl_hdl_sdtv_cap); vivid_free_controls()
1676 v4l2_ctrl_handler_free(&dev->ctrl_hdl_loop_cap); vivid_free_controls()
H A Dvivid-core.c202 struct vivid_dev *dev = video_drvdata(file); vidioc_querycap() local
208 "platform:%s", dev->v4l2_dev.name); vidioc_querycap()
211 cap->device_caps = dev->vid_cap_caps; vidioc_querycap()
213 cap->device_caps = dev->vid_out_caps; vidioc_querycap()
215 cap->device_caps = dev->vbi_cap_caps; vidioc_querycap()
217 cap->device_caps = dev->vbi_out_caps; vidioc_querycap()
219 cap->device_caps = dev->sdr_cap_caps; vidioc_querycap()
221 cap->device_caps = dev->radio_rx_caps; vidioc_querycap()
223 cap->device_caps = dev->radio_tx_caps; vidioc_querycap()
224 cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps | vidioc_querycap()
225 dev->vbi_cap_caps | dev->vbi_out_caps | vidioc_querycap()
226 dev->radio_rx_caps | dev->radio_tx_caps | vidioc_querycap()
227 dev->sdr_cap_caps | V4L2_CAP_DEVICE_CAPS; vidioc_querycap()
275 struct vivid_dev *dev = video_drvdata(file); vidioc_g_frequency() local
281 &dev->radio_rx_freq : &dev->radio_tx_freq, vf); vidioc_g_frequency()
289 struct vivid_dev *dev = video_drvdata(file); vidioc_s_frequency() local
295 &dev->radio_rx_freq : &dev->radio_tx_freq, vf); vidioc_s_frequency()
397 struct vivid_dev *dev = video_drvdata(file); vidioc_log_status() local
402 tpg_log_status(&dev->tpg); vidioc_log_status()
446 static bool vivid_is_last_user(struct vivid_dev *dev) vivid_is_last_user() argument
448 unsigned uses = vivid_is_in_use(&dev->vid_cap_dev) + vivid_is_last_user()
449 vivid_is_in_use(&dev->vid_out_dev) + vivid_is_last_user()
450 vivid_is_in_use(&dev->vbi_cap_dev) + vivid_is_last_user()
451 vivid_is_in_use(&dev->vbi_out_dev) + vivid_is_last_user()
452 vivid_is_in_use(&dev->sdr_cap_dev) + vivid_is_last_user()
453 vivid_is_in_use(&dev->radio_rx_dev) + vivid_is_last_user()
454 vivid_is_in_use(&dev->radio_tx_dev); vivid_is_last_user()
461 struct vivid_dev *dev = video_drvdata(file); vivid_fop_release() local
464 mutex_lock(&dev->mutex); vivid_fop_release()
466 !video_is_registered(vdev) && vivid_is_last_user(dev)) { vivid_fop_release()
472 v4l2_info(&dev->v4l2_dev, "reconnect\n"); vivid_fop_release()
473 set_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags); vivid_fop_release()
474 set_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags); vivid_fop_release()
475 set_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags); vivid_fop_release()
476 set_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags); vivid_fop_release()
477 set_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags); vivid_fop_release()
478 set_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags); vivid_fop_release()
479 set_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags); vivid_fop_release()
481 mutex_unlock(&dev->mutex); vivid_fop_release()
482 if (file->private_data == dev->overlay_cap_owner) vivid_fop_release()
483 dev->overlay_cap_owner = NULL; vivid_fop_release()
484 if (file->private_data == dev->radio_rx_rds_owner) { vivid_fop_release()
485 dev->radio_rx_rds_last_block = 0; vivid_fop_release()
486 dev->radio_rx_rds_owner = NULL; vivid_fop_release()
488 if (file->private_data == dev->radio_tx_rds_owner) { vivid_fop_release()
489 dev->radio_tx_rds_last_block = 0; vivid_fop_release()
490 dev->radio_tx_rds_owner = NULL; vivid_fop_release()
635 struct vivid_dev *dev = container_of(v4l2_dev, struct vivid_dev, v4l2_dev); vivid_dev_release() local
637 vivid_free_controls(dev); vivid_dev_release()
638 v4l2_device_unregister(&dev->v4l2_dev); vivid_dev_release()
639 vfree(dev->scaled_line); vivid_dev_release()
640 vfree(dev->blended_line); vivid_dev_release()
641 vfree(dev->edid); vivid_dev_release()
642 vfree(dev->bitmap_cap); vivid_dev_release()
643 vfree(dev->bitmap_out); vivid_dev_release()
644 tpg_free(&dev->tpg); vivid_dev_release()
645 kfree(dev->query_dv_timings_qmenu); vivid_dev_release()
646 kfree(dev); vivid_dev_release()
659 struct vivid_dev *dev; vivid_create_instance() local
668 dev = kzalloc(sizeof(*dev), GFP_KERNEL); vivid_create_instance()
669 if (!dev) vivid_create_instance()
672 dev->inst = inst; vivid_create_instance()
675 snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), vivid_create_instance()
677 ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev); vivid_create_instance()
679 kfree(dev); vivid_create_instance()
682 dev->v4l2_dev.release = vivid_dev_release; vivid_create_instance()
687 dev->multiplanar = multiplanar[inst] > 1; vivid_create_instance()
688 v4l2_info(&dev->v4l2_dev, "using %splanar format API\n", vivid_create_instance()
689 dev->multiplanar ? "multi" : "single "); vivid_create_instance()
692 dev->num_inputs = num_inputs[inst]; vivid_create_instance()
693 if (dev->num_inputs < 1) vivid_create_instance()
694 dev->num_inputs = 1; vivid_create_instance()
695 if (dev->num_inputs >= MAX_INPUTS) vivid_create_instance()
696 dev->num_inputs = MAX_INPUTS; vivid_create_instance()
697 for (i = 0; i < dev->num_inputs; i++) { vivid_create_instance()
698 dev->input_type[i] = (input_types[inst] >> (i * 2)) & 0x3; vivid_create_instance()
699 dev->input_name_counter[i] = in_type_counter[dev->input_type[i]]++; vivid_create_instance()
701 dev->has_audio_inputs = in_type_counter[TV] && in_type_counter[SVID]; vivid_create_instance()
704 dev->num_outputs = num_outputs[inst]; vivid_create_instance()
705 if (dev->num_outputs < 1) vivid_create_instance()
706 dev->num_outputs = 1; vivid_create_instance()
707 if (dev->num_outputs >= MAX_OUTPUTS) vivid_create_instance()
708 dev->num_outputs = MAX_OUTPUTS; vivid_create_instance()
709 for (i = 0; i < dev->num_outputs; i++) { vivid_create_instance()
710 dev->output_type[i] = ((output_types[inst] >> i) & 1) ? HDMI : SVID; vivid_create_instance()
711 dev->output_name_counter[i] = out_type_counter[dev->output_type[i]]++; vivid_create_instance()
713 dev->has_audio_outputs = out_type_counter[SVID]; vivid_create_instance()
716 dev->has_vid_cap = node_type & 0x0001; vivid_create_instance()
720 dev->has_raw_vbi_cap = node_type & 0x0004; vivid_create_instance()
721 dev->has_sliced_vbi_cap = node_type & 0x0008; vivid_create_instance()
722 dev->has_vbi_cap = dev->has_raw_vbi_cap | dev->has_sliced_vbi_cap; vivid_create_instance()
726 dev->has_vid_out = node_type & 0x0100; vivid_create_instance()
730 dev->has_raw_vbi_out = node_type & 0x0400; vivid_create_instance()
731 dev->has_sliced_vbi_out = node_type & 0x0800; vivid_create_instance()
732 dev->has_vbi_out = dev->has_raw_vbi_out | dev->has_sliced_vbi_out; vivid_create_instance()
736 dev->has_radio_rx = node_type & 0x0010; vivid_create_instance()
739 dev->has_radio_tx = node_type & 0x1000; vivid_create_instance()
742 dev->has_sdr_cap = node_type & 0x0020; vivid_create_instance()
745 has_tuner = ((dev->has_vid_cap || dev->has_vbi_cap) && in_type_counter[TV]) || vivid_create_instance()
746 dev->has_radio_rx || dev->has_sdr_cap; vivid_create_instance()
749 has_modulator = dev->has_radio_tx; vivid_create_instance()
751 if (dev->has_vid_cap) vivid_create_instance()
753 dev->has_fb = node_type & 0x10000; vivid_create_instance()
761 dev->has_crop_cap = ccs_cap & 1; vivid_create_instance()
762 dev->has_compose_cap = ccs_cap & 2; vivid_create_instance()
763 dev->has_scaler_cap = ccs_cap & 4; vivid_create_instance()
764 v4l2_info(&dev->v4l2_dev, "Capture Crop: %c Compose: %c Scaler: %c\n", vivid_create_instance()
765 dev->has_crop_cap ? 'Y' : 'N', vivid_create_instance()
766 dev->has_compose_cap ? 'Y' : 'N', vivid_create_instance()
767 dev->has_scaler_cap ? 'Y' : 'N'); vivid_create_instance()
776 dev->has_crop_out = ccs_out & 1; vivid_create_instance()
777 dev->has_compose_out = ccs_out & 2; vivid_create_instance()
778 dev->has_scaler_out = ccs_out & 4; vivid_create_instance()
779 v4l2_info(&dev->v4l2_dev, "Output Crop: %c Compose: %c Scaler: %c\n", vivid_create_instance()
780 dev->has_crop_out ? 'Y' : 'N', vivid_create_instance()
781 dev->has_compose_out ? 'Y' : 'N', vivid_create_instance()
782 dev->has_scaler_out ? 'Y' : 'N'); vivid_create_instance()
787 if (dev->has_vid_cap) { vivid_create_instance()
789 dev->vid_cap_caps = dev->multiplanar ? vivid_create_instance()
792 dev->vid_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; vivid_create_instance()
793 if (dev->has_audio_inputs) vivid_create_instance()
794 dev->vid_cap_caps |= V4L2_CAP_AUDIO; vivid_create_instance()
796 dev->vid_cap_caps |= V4L2_CAP_TUNER; vivid_create_instance()
798 if (dev->has_vid_out) { vivid_create_instance()
800 dev->vid_out_caps = dev->multiplanar ? vivid_create_instance()
803 if (dev->has_fb) vivid_create_instance()
804 dev->vid_out_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY; vivid_create_instance()
805 dev->vid_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; vivid_create_instance()
806 if (dev->has_audio_outputs) vivid_create_instance()
807 dev->vid_out_caps |= V4L2_CAP_AUDIO; vivid_create_instance()
809 if (dev->has_vbi_cap) { vivid_create_instance()
811 dev->vbi_cap_caps = (dev->has_raw_vbi_cap ? V4L2_CAP_VBI_CAPTURE : 0) | vivid_create_instance()
812 (dev->has_sliced_vbi_cap ? V4L2_CAP_SLICED_VBI_CAPTURE : 0); vivid_create_instance()
813 dev->vbi_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; vivid_create_instance()
814 if (dev->has_audio_inputs) vivid_create_instance()
815 dev->vbi_cap_caps |= V4L2_CAP_AUDIO; vivid_create_instance()
817 dev->vbi_cap_caps |= V4L2_CAP_TUNER; vivid_create_instance()
819 if (dev->has_vbi_out) { vivid_create_instance()
821 dev->vbi_out_caps = (dev->has_raw_vbi_out ? V4L2_CAP_VBI_OUTPUT : 0) | vivid_create_instance()
822 (dev->has_sliced_vbi_out ? V4L2_CAP_SLICED_VBI_OUTPUT : 0); vivid_create_instance()
823 dev->vbi_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; vivid_create_instance()
824 if (dev->has_audio_outputs) vivid_create_instance()
825 dev->vbi_out_caps |= V4L2_CAP_AUDIO; vivid_create_instance()
827 if (dev->has_sdr_cap) { vivid_create_instance()
829 dev->sdr_cap_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_TUNER; vivid_create_instance()
830 dev->sdr_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; vivid_create_instance()
833 if (dev->has_radio_rx) vivid_create_instance()
834 dev->radio_rx_caps = V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE | vivid_create_instance()
838 if (dev->has_radio_tx) vivid_create_instance()
839 dev->radio_tx_caps = V4L2_CAP_RDS_OUTPUT | V4L2_CAP_MODULATOR | vivid_create_instance()
843 tpg_init(&dev->tpg, 640, 360); vivid_create_instance()
844 if (tpg_alloc(&dev->tpg, MAX_ZOOM * MAX_WIDTH)) vivid_create_instance()
846 dev->scaled_line = vzalloc(MAX_ZOOM * MAX_WIDTH); vivid_create_instance()
847 if (!dev->scaled_line) vivid_create_instance()
849 dev->blended_line = vzalloc(MAX_ZOOM * MAX_WIDTH); vivid_create_instance()
850 if (!dev->blended_line) vivid_create_instance()
854 dev->edid = vmalloc(256 * 128); vivid_create_instance()
855 if (!dev->edid) vivid_create_instance()
859 while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width) vivid_create_instance()
860 dev->query_dv_timings_size++; vivid_create_instance()
861 dev->query_dv_timings_qmenu = kmalloc(dev->query_dv_timings_size * vivid_create_instance()
863 if (dev->query_dv_timings_qmenu == NULL) vivid_create_instance()
865 for (i = 0; i < dev->query_dv_timings_size; i++) { vivid_create_instance()
867 char *p = (char *)&dev->query_dv_timings_qmenu[dev->query_dv_timings_size]; vivid_create_instance()
871 dev->query_dv_timings_qmenu[i] = p; vivid_create_instance()
881 if (!dev->has_audio_inputs) { vivid_create_instance()
882 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO); vivid_create_instance()
883 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO); vivid_create_instance()
884 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO); vivid_create_instance()
885 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO); vivid_create_instance()
886 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO); vivid_create_instance()
887 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO); vivid_create_instance()
889 if (!dev->has_audio_outputs) { vivid_create_instance()
890 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT); vivid_create_instance()
891 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT); vivid_create_instance()
892 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT); vivid_create_instance()
893 v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT); vivid_create_instance()
894 v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT); vivid_create_instance()
895 v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT); vivid_create_instance()
898 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD); vivid_create_instance()
899 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD); vivid_create_instance()
900 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD); vivid_create_instance()
901 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD); vivid_create_instance()
904 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD); vivid_create_instance()
905 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD); vivid_create_instance()
906 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD); vivid_create_instance()
909 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY); vivid_create_instance()
910 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY); vivid_create_instance()
911 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY); vivid_create_instance()
912 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY); vivid_create_instance()
915 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER); vivid_create_instance()
916 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER); vivid_create_instance()
917 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER); vivid_create_instance()
918 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER); vivid_create_instance()
921 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID); vivid_create_instance()
922 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID); vivid_create_instance()
923 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP); vivid_create_instance()
924 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS); vivid_create_instance()
925 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS); vivid_create_instance()
926 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS); vivid_create_instance()
927 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS); vivid_create_instance()
930 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID); vivid_create_instance()
931 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP); vivid_create_instance()
932 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS); vivid_create_instance()
933 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS); vivid_create_instance()
934 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS); vivid_create_instance()
936 if (!dev->has_fb) { vivid_create_instance()
937 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF); vivid_create_instance()
938 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF); vivid_create_instance()
939 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY); vivid_create_instance()
941 v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK); vivid_create_instance()
942 v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK); vivid_create_instance()
943 v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK); vivid_create_instance()
944 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY); vivid_create_instance()
945 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY); vivid_create_instance()
946 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES); vivid_create_instance()
947 v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS); vivid_create_instance()
948 v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY); vivid_create_instance()
949 v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY); vivid_create_instance()
952 dev->fmt_cap = &vivid_formats[0]; vivid_create_instance()
953 dev->fmt_out = &vivid_formats[0]; vivid_create_instance()
954 if (!dev->multiplanar) vivid_create_instance()
956 dev->webcam_size_idx = 1; vivid_create_instance()
957 dev->webcam_ival_idx = 3; vivid_create_instance()
958 tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc); vivid_create_instance()
959 dev->std_cap = V4L2_STD_PAL; vivid_create_instance()
960 dev->std_out = V4L2_STD_PAL; vivid_create_instance()
961 if (dev->input_type[0] == TV || dev->input_type[0] == SVID) vivid_create_instance()
963 if (dev->output_type[0] == SVID) vivid_create_instance()
965 dev->dv_timings_cap = def_dv_timings; vivid_create_instance()
966 dev->dv_timings_out = def_dv_timings; vivid_create_instance()
967 dev->tv_freq = 2804 /* 175.25 * 16 */; vivid_create_instance()
968 dev->tv_audmode = V4L2_TUNER_MODE_STEREO; vivid_create_instance()
969 dev->tv_field_cap = V4L2_FIELD_INTERLACED; vivid_create_instance()
970 dev->tv_field_out = V4L2_FIELD_INTERLACED; vivid_create_instance()
971 dev->radio_rx_freq = 95000 * 16; vivid_create_instance()
972 dev->radio_rx_audmode = V4L2_TUNER_MODE_STEREO; vivid_create_instance()
973 if (dev->has_radio_tx) { vivid_create_instance()
974 dev->radio_tx_freq = 95500 * 16; vivid_create_instance()
975 dev->radio_rds_loop = false; vivid_create_instance()
977 dev->radio_tx_subchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_RDS; vivid_create_instance()
978 dev->sdr_adc_freq = 300000; vivid_create_instance()
979 dev->sdr_fm_freq = 50000000; vivid_create_instance()
980 dev->sdr_pixelformat = V4L2_SDR_FMT_CU8; vivid_create_instance()
981 dev->sdr_buffersize = SDR_CAP_SAMPLES_PER_BUF * 2; vivid_create_instance()
983 dev->edid_max_blocks = dev->edid_blocks = 2; vivid_create_instance()
984 memcpy(dev->edid, vivid_hdmi_edid, sizeof(vivid_hdmi_edid)); vivid_create_instance()
985 ktime_get_ts(&dev->radio_rds_init_ts); vivid_create_instance()
988 ret = vivid_create_controls(dev, ccs_cap == -1, ccs_out == -1, no_error_inj, vivid_create_instance()
999 vivid_update_format_cap(dev, false); vivid_create_instance()
1000 vivid_update_format_out(dev); vivid_create_instance()
1002 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_cap); vivid_create_instance()
1003 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_out); vivid_create_instance()
1004 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_cap); vivid_create_instance()
1005 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_out); vivid_create_instance()
1006 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_rx); vivid_create_instance()
1007 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_tx); vivid_create_instance()
1008 v4l2_ctrl_handler_setup(&dev->ctrl_hdl_sdr_cap); vivid_create_instance()
1011 dev->fb_cap.fmt.width = dev->src_rect.width; vivid_create_instance()
1012 dev->fb_cap.fmt.height = dev->src_rect.height; vivid_create_instance()
1013 dev->fb_cap.fmt.pixelformat = dev->fmt_cap->fourcc; vivid_create_instance()
1014 dev->fb_cap.fmt.bytesperline = dev->src_rect.width * tpg_g_twopixelsize(&dev->tpg, 0) / 2; vivid_create_instance()
1015 dev->fb_cap.fmt.sizeimage = dev->src_rect.height * dev->fb_cap.fmt.bytesperline; vivid_create_instance()
1018 spin_lock_init(&dev->slock); vivid_create_instance()
1019 mutex_init(&dev->mutex); vivid_create_instance()
1022 INIT_LIST_HEAD(&dev->vid_cap_active); vivid_create_instance()
1023 INIT_LIST_HEAD(&dev->vid_out_active); vivid_create_instance()
1024 INIT_LIST_HEAD(&dev->vbi_cap_active); vivid_create_instance()
1025 INIT_LIST_HEAD(&dev->vbi_out_active); vivid_create_instance()
1026 INIT_LIST_HEAD(&dev->sdr_cap_active); vivid_create_instance()
1029 if (dev->has_vid_cap) { vivid_create_instance()
1031 q = &dev->vb_vid_cap_q; vivid_create_instance()
1032 q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE : vivid_create_instance()
1035 q->drv_priv = dev; vivid_create_instance()
1041 q->lock = &dev->mutex; vivid_create_instance()
1048 if (dev->has_vid_out) { vivid_create_instance()
1050 q = &dev->vb_vid_out_q; vivid_create_instance()
1051 q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE : vivid_create_instance()
1054 q->drv_priv = dev; vivid_create_instance()
1060 q->lock = &dev->mutex; vivid_create_instance()
1067 if (dev->has_vbi_cap) { vivid_create_instance()
1069 q = &dev->vb_vbi_cap_q; vivid_create_instance()
1070 q->type = dev->has_raw_vbi_cap ? V4L2_BUF_TYPE_VBI_CAPTURE : vivid_create_instance()
1073 q->drv_priv = dev; vivid_create_instance()
1079 q->lock = &dev->mutex; vivid_create_instance()
1086 if (dev->has_vbi_out) { vivid_create_instance()
1088 q = &dev->vb_vbi_out_q; vivid_create_instance()
1089 q->type = dev->has_raw_vbi_out ? V4L2_BUF_TYPE_VBI_OUTPUT : vivid_create_instance()
1092 q->drv_priv = dev; vivid_create_instance()
1098 q->lock = &dev->mutex; vivid_create_instance()
1105 if (dev->has_sdr_cap) { vivid_create_instance()
1107 q = &dev->vb_sdr_cap_q; vivid_create_instance()
1110 q->drv_priv = dev; vivid_create_instance()
1116 q->lock = &dev->mutex; vivid_create_instance()
1123 if (dev->has_fb) { vivid_create_instance()
1125 ret = vivid_fb_init(dev); vivid_create_instance()
1128 v4l2_info(&dev->v4l2_dev, "Framebuffer device registered as fb%d\n", vivid_create_instance()
1129 dev->fb_info.node); vivid_create_instance()
1133 if (dev->has_vid_cap) { vivid_create_instance()
1134 vfd = &dev->vid_cap_dev; vivid_create_instance()
1139 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1140 vfd->queue = &dev->vb_vid_cap_q; vivid_create_instance()
1147 vfd->lock = &dev->mutex; vivid_create_instance()
1148 video_set_drvdata(vfd, dev); vivid_create_instance()
1153 v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n", vivid_create_instance()
1157 if (dev->has_vid_out) { vivid_create_instance()
1158 vfd = &dev->vid_out_dev; vivid_create_instance()
1164 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1165 vfd->queue = &dev->vb_vid_out_q; vivid_create_instance()
1172 vfd->lock = &dev->mutex; vivid_create_instance()
1173 video_set_drvdata(vfd, dev); vivid_create_instance()
1178 v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s\n", vivid_create_instance()
1182 if (dev->has_vbi_cap) { vivid_create_instance()
1183 vfd = &dev->vbi_cap_dev; vivid_create_instance()
1188 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1189 vfd->queue = &dev->vb_vbi_cap_q; vivid_create_instance()
1190 vfd->lock = &dev->mutex; vivid_create_instance()
1192 video_set_drvdata(vfd, dev); vivid_create_instance()
1197 v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s, supports %s VBI\n", vivid_create_instance()
1199 (dev->has_raw_vbi_cap && dev->has_sliced_vbi_cap) ? vivid_create_instance()
1201 (dev->has_raw_vbi_cap ? "raw" : "sliced")); vivid_create_instance()
1204 if (dev->has_vbi_out) { vivid_create_instance()
1205 vfd = &dev->vbi_out_dev; vivid_create_instance()
1211 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1212 vfd->queue = &dev->vb_vbi_out_q; vivid_create_instance()
1213 vfd->lock = &dev->mutex; vivid_create_instance()
1215 video_set_drvdata(vfd, dev); vivid_create_instance()
1220 v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s, supports %s VBI\n", vivid_create_instance()
1222 (dev->has_raw_vbi_out && dev->has_sliced_vbi_out) ? vivid_create_instance()
1224 (dev->has_raw_vbi_out ? "raw" : "sliced")); vivid_create_instance()
1227 if (dev->has_sdr_cap) { vivid_create_instance()
1228 vfd = &dev->sdr_cap_dev; vivid_create_instance()
1233 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1234 vfd->queue = &dev->vb_sdr_cap_q; vivid_create_instance()
1235 vfd->lock = &dev->mutex; vivid_create_instance()
1236 video_set_drvdata(vfd, dev); vivid_create_instance()
1241 v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n", vivid_create_instance()
1245 if (dev->has_radio_rx) { vivid_create_instance()
1246 vfd = &dev->radio_rx_dev; vivid_create_instance()
1251 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1252 vfd->lock = &dev->mutex; vivid_create_instance()
1253 video_set_drvdata(vfd, dev); vivid_create_instance()
1258 v4l2_info(&dev->v4l2_dev, "V4L2 receiver device registered as %s\n", vivid_create_instance()
1262 if (dev->has_radio_tx) { vivid_create_instance()
1263 vfd = &dev->radio_tx_dev; vivid_create_instance()
1269 vfd->v4l2_dev = &dev->v4l2_dev; vivid_create_instance()
1270 vfd->lock = &dev->mutex; vivid_create_instance()
1271 video_set_drvdata(vfd, dev); vivid_create_instance()
1276 v4l2_info(&dev->v4l2_dev, "V4L2 transmitter device registered as %s\n", vivid_create_instance()
1281 vivid_devs[inst] = dev; vivid_create_instance()
1286 video_unregister_device(&dev->radio_tx_dev); vivid_create_instance()
1287 video_unregister_device(&dev->radio_rx_dev); vivid_create_instance()
1288 video_unregister_device(&dev->sdr_cap_dev); vivid_create_instance()
1289 video_unregister_device(&dev->vbi_out_dev); vivid_create_instance()
1290 video_unregister_device(&dev->vbi_cap_dev); vivid_create_instance()
1291 video_unregister_device(&dev->vid_out_dev); vivid_create_instance()
1292 video_unregister_device(&dev->vid_cap_dev); vivid_create_instance()
1294 v4l2_device_put(&dev->v4l2_dev); vivid_create_instance()
1341 struct vivid_dev *dev; vivid_remove() local
1346 dev = vivid_devs[i]; vivid_remove()
1347 if (!dev) vivid_remove()
1350 if (dev->has_vid_cap) { vivid_remove()
1351 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1352 video_device_node_name(&dev->vid_cap_dev)); vivid_remove()
1353 video_unregister_device(&dev->vid_cap_dev); vivid_remove()
1355 if (dev->has_vid_out) { vivid_remove()
1356 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1357 video_device_node_name(&dev->vid_out_dev)); vivid_remove()
1358 video_unregister_device(&dev->vid_out_dev); vivid_remove()
1360 if (dev->has_vbi_cap) { vivid_remove()
1361 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1362 video_device_node_name(&dev->vbi_cap_dev)); vivid_remove()
1363 video_unregister_device(&dev->vbi_cap_dev); vivid_remove()
1365 if (dev->has_vbi_out) { vivid_remove()
1366 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1367 video_device_node_name(&dev->vbi_out_dev)); vivid_remove()
1368 video_unregister_device(&dev->vbi_out_dev); vivid_remove()
1370 if (dev->has_sdr_cap) { vivid_remove()
1371 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1372 video_device_node_name(&dev->sdr_cap_dev)); vivid_remove()
1373 video_unregister_device(&dev->sdr_cap_dev); vivid_remove()
1375 if (dev->has_radio_rx) { vivid_remove()
1376 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1377 video_device_node_name(&dev->radio_rx_dev)); vivid_remove()
1378 video_unregister_device(&dev->radio_rx_dev); vivid_remove()
1380 if (dev->has_radio_tx) { vivid_remove()
1381 v4l2_info(&dev->v4l2_dev, "unregistering %s\n", vivid_remove()
1382 video_device_node_name(&dev->radio_tx_dev)); vivid_remove()
1383 video_unregister_device(&dev->radio_tx_dev); vivid_remove()
1385 if (dev->has_fb) { vivid_remove()
1386 v4l2_info(&dev->v4l2_dev, "unregistering fb%d\n", vivid_remove()
1387 dev->fb_info.node); vivid_remove()
1388 unregister_framebuffer(&dev->fb_info); vivid_remove()
1389 vivid_fb_release_buffers(dev); vivid_remove()
1391 v4l2_device_put(&dev->v4l2_dev); vivid_remove()
1397 static void vivid_pdev_release(struct device *dev) vivid_pdev_release() argument
1403 .dev.release = vivid_pdev_release,
H A Dvivid-osd.c60 void vivid_clear_fb(struct vivid_dev *dev) vivid_clear_fb() argument
62 void *p = dev->video_vbase; vivid_clear_fb()
66 if (dev->fb_defined.green.length == 6) vivid_clear_fb()
69 for (y = 0; y < dev->display_height; y++) { vivid_clear_fb()
72 for (x = 0; x < dev->display_width; x++) vivid_clear_fb()
74 p += dev->display_byte_stride; vivid_clear_fb()
82 struct vivid_dev *dev = (struct vivid_dev *)info->par; vivid_fb_ioctl() local
100 dprintk(dev, 1, "Unknown ioctl %08x\n", cmd); vivid_fb_ioctl()
108 static int vivid_fb_set_var(struct vivid_dev *dev, struct fb_var_screeninfo *var) vivid_fb_set_var() argument
110 dprintk(dev, 1, "vivid_fb_set_var\n"); vivid_fb_set_var()
113 dprintk(dev, 1, "vivid_fb_set_var - Invalid bpp\n"); vivid_fb_set_var()
116 dev->display_byte_stride = var->xres * dev->bytes_per_pixel; vivid_fb_set_var()
121 static int vivid_fb_get_fix(struct vivid_dev *dev, struct fb_fix_screeninfo *fix) vivid_fb_get_fix() argument
123 dprintk(dev, 1, "vivid_fb_get_fix\n"); vivid_fb_get_fix()
126 fix->smem_start = dev->video_pbase; vivid_fb_get_fix()
127 fix->smem_len = dev->video_buffer_size; vivid_fb_get_fix()
133 fix->line_length = dev->display_byte_stride; vivid_fb_get_fix()
141 static int _vivid_fb_check_var(struct fb_var_screeninfo *var, struct vivid_dev *dev) _vivid_fb_check_var() argument
143 dprintk(dev, 1, "vivid_fb_check_var\n"); _vivid_fb_check_var()
183 struct vivid_dev *dev = (struct vivid_dev *) info->par; vivid_fb_check_var() local
185 dprintk(dev, 1, "vivid_fb_check_var\n"); vivid_fb_check_var()
186 return _vivid_fb_check_var(var, dev); vivid_fb_check_var()
197 struct vivid_dev *dev = (struct vivid_dev *) info->par; vivid_fb_set_par() local
199 dprintk(dev, 1, "vivid_fb_set_par\n"); vivid_fb_set_par()
201 rc = vivid_fb_set_var(dev, &info->var); vivid_fb_set_par()
202 vivid_fb_get_fix(dev, &info->fix); vivid_fb_set_par()
244 struct vivid_dev *dev = (struct vivid_dev *)info->par; vivid_fb_blank() local
246 dprintk(dev, 1, "Set blanking mode : %d\n", blank_mode); vivid_fb_blank()
277 static int vivid_fb_init_vidmode(struct vivid_dev *dev) vivid_fb_init_vidmode() argument
283 dev->bits_per_pixel = 16; vivid_fb_init_vidmode()
284 dev->bytes_per_pixel = dev->bits_per_pixel / 8; vivid_fb_init_vidmode()
289 dev->display_byte_stride = start_window.width * dev->bytes_per_pixel; vivid_fb_init_vidmode()
296 dev->display_width = start_window.width; vivid_fb_init_vidmode()
297 dev->display_height = start_window.height; vivid_fb_init_vidmode()
301 dev->fb_defined.xres = dev->display_width; vivid_fb_init_vidmode()
302 dev->fb_defined.yres = dev->display_height; vivid_fb_init_vidmode()
303 dev->fb_defined.xres_virtual = dev->display_width; vivid_fb_init_vidmode()
304 dev->fb_defined.yres_virtual = dev->display_height; vivid_fb_init_vidmode()
305 dev->fb_defined.bits_per_pixel = dev->bits_per_pixel; vivid_fb_init_vidmode()
306 dev->fb_defined.vmode = FB_VMODE_NONINTERLACED; vivid_fb_init_vidmode()
307 dev->fb_defined.left_margin = start_window.left + 1; vivid_fb_init_vidmode()
308 dev->fb_defined.upper_margin = start_window.top + 1; vivid_fb_init_vidmode()
309 dev->fb_defined.accel_flags = FB_ACCEL_NONE; vivid_fb_init_vidmode()
310 dev->fb_defined.nonstd = 0; vivid_fb_init_vidmode()
312 dev->fb_defined.green.length = 5; vivid_fb_init_vidmode()
316 _vivid_fb_check_var(&dev->fb_defined, dev); vivid_fb_init_vidmode()
320 vivid_fb_get_fix(dev, &dev->fb_fix); vivid_fb_init_vidmode()
324 dev->fb_info.node = -1; vivid_fb_init_vidmode()
325 dev->fb_info.flags = FBINFO_FLAG_DEFAULT; vivid_fb_init_vidmode()
326 dev->fb_info.fbops = &vivid_fb_ops; vivid_fb_init_vidmode()
327 dev->fb_info.par = dev; vivid_fb_init_vidmode()
328 dev->fb_info.var = dev->fb_defined; vivid_fb_init_vidmode()
329 dev->fb_info.fix = dev->fb_fix; vivid_fb_init_vidmode()
330 dev->fb_info.screen_base = (u8 __iomem *)dev->video_vbase; vivid_fb_init_vidmode()
331 dev->fb_info.fbops = &vivid_fb_ops; vivid_fb_init_vidmode()
334 dev->fb_info.monspecs.hfmin = 8000; vivid_fb_init_vidmode()
335 dev->fb_info.monspecs.hfmax = 70000; vivid_fb_init_vidmode()
336 dev->fb_info.monspecs.vfmin = 10; vivid_fb_init_vidmode()
337 dev->fb_info.monspecs.vfmax = 100; vivid_fb_init_vidmode()
340 if (fb_alloc_cmap(&dev->fb_info.cmap, 256, 1)) { vivid_fb_init_vidmode()
346 dev->fb_info.pseudo_palette = kmalloc_array(16, sizeof(u32), GFP_KERNEL); vivid_fb_init_vidmode()
348 return dev->fb_info.pseudo_palette ? 0 : -ENOMEM; vivid_fb_init_vidmode()
352 void vivid_fb_release_buffers(struct vivid_dev *dev) vivid_fb_release_buffers() argument
354 if (dev->video_vbase == NULL) vivid_fb_release_buffers()
358 if (dev->fb_info.cmap.len) vivid_fb_release_buffers()
359 fb_dealloc_cmap(&dev->fb_info.cmap); vivid_fb_release_buffers()
362 kfree(dev->fb_info.pseudo_palette); vivid_fb_release_buffers()
363 kfree((void *)dev->video_vbase); vivid_fb_release_buffers()
368 int vivid_fb_init(struct vivid_dev *dev) vivid_fb_init() argument
372 dev->video_buffer_size = MAX_OSD_HEIGHT * MAX_OSD_WIDTH * 2; vivid_fb_init()
373 dev->video_vbase = kzalloc(dev->video_buffer_size, GFP_KERNEL | GFP_DMA32); vivid_fb_init()
374 if (dev->video_vbase == NULL) vivid_fb_init()
376 dev->video_pbase = virt_to_phys(dev->video_vbase); vivid_fb_init()
379 dev->video_pbase, dev->video_vbase, vivid_fb_init()
380 dev->video_buffer_size / 1024); vivid_fb_init()
383 ret = vivid_fb_init_vidmode(dev); vivid_fb_init()
385 vivid_fb_release_buffers(dev); vivid_fb_init()
389 vivid_clear_fb(dev); vivid_fb_init()
392 if (register_framebuffer(&dev->fb_info) < 0) { vivid_fb_init()
393 vivid_fb_release_buffers(dev); vivid_fb_init()
398 vivid_fb_set_par(&dev->fb_info); vivid_fb_init()
H A Dvivid-radio-common.c71 void vivid_radio_rds_init(struct vivid_dev *dev) vivid_radio_rds_init() argument
73 struct vivid_rds_gen *rds = &dev->rds_gen; vivid_radio_rds_init()
74 bool alt = dev->radio_rx_rds_use_alternates; vivid_radio_rds_init()
77 if (dev->radio_rds_loop && !dev->radio_tx_rds_controls) vivid_radio_rds_init()
80 if (dev->radio_rds_loop) { vivid_radio_rds_init()
81 v4l2_ctrl_lock(dev->radio_tx_rds_pi); vivid_radio_rds_init()
82 rds->picode = dev->radio_tx_rds_pi->cur.val; vivid_radio_rds_init()
83 rds->pty = dev->radio_tx_rds_pty->cur.val; vivid_radio_rds_init()
84 rds->mono_stereo = dev->radio_tx_rds_mono_stereo->cur.val; vivid_radio_rds_init()
85 rds->art_head = dev->radio_tx_rds_art_head->cur.val; vivid_radio_rds_init()
86 rds->compressed = dev->radio_tx_rds_compressed->cur.val; vivid_radio_rds_init()
87 rds->dyn_pty = dev->radio_tx_rds_dyn_pty->cur.val; vivid_radio_rds_init()
88 rds->ta = dev->radio_tx_rds_ta->cur.val; vivid_radio_rds_init()
89 rds->tp = dev->radio_tx_rds_tp->cur.val; vivid_radio_rds_init()
90 rds->ms = dev->radio_tx_rds_ms->cur.val; vivid_radio_rds_init()
92 dev->radio_tx_rds_psname->p_cur.p_char, vivid_radio_rds_init()
95 dev->radio_tx_rds_radiotext->p_cur.p_char + alt * 64, vivid_radio_rds_init()
97 v4l2_ctrl_unlock(dev->radio_tx_rds_pi); vivid_radio_rds_init()
99 vivid_rds_gen_fill(rds, dev->radio_rx_freq, alt); vivid_radio_rds_init()
101 if (dev->radio_rx_rds_controls) { vivid_radio_rds_init()
102 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_pty, rds->pty); vivid_radio_rds_init()
103 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ta, rds->ta); vivid_radio_rds_init()
104 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_tp, rds->tp); vivid_radio_rds_init()
105 v4l2_ctrl_s_ctrl(dev->radio_rx_rds_ms, rds->ms); vivid_radio_rds_init()
106 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_psname, rds->psname); vivid_radio_rds_init()
107 v4l2_ctrl_s_ctrl_string(dev->radio_rx_rds_radiotext, rds->radiotext); vivid_radio_rds_init()
108 if (!dev->radio_rds_loop) vivid_radio_rds_init()
109 dev->radio_rx_rds_use_alternates = !dev->radio_rx_rds_use_alternates; vivid_radio_rds_init()
118 static void vivid_radio_calc_sig_qual(struct vivid_dev *dev) vivid_radio_calc_sig_qual() argument
128 if (dev->radio_rx_freq <= AM_FREQ_RANGE_HIGH) { vivid_radio_calc_sig_qual()
132 sig_qual = (dev->radio_rx_freq + delta) % mod - delta; vivid_radio_calc_sig_qual()
133 if (dev->has_radio_tx) vivid_radio_calc_sig_qual()
134 sig_qual_tx = dev->radio_rx_freq - dev->radio_tx_freq; vivid_radio_calc_sig_qual()
141 if (!dev->radio_rds_loop && !dev->radio_tx_rds_controls) vivid_radio_calc_sig_qual()
142 memset(dev->rds_gen.data, 0, vivid_radio_calc_sig_qual()
143 sizeof(dev->rds_gen.data)); vivid_radio_calc_sig_qual()
144 dev->radio_rds_loop = dev->radio_rx_freq >= FM_FREQ_RANGE_LOW; vivid_radio_calc_sig_qual()
146 dev->radio_rds_loop = false; vivid_radio_calc_sig_qual()
148 if (dev->radio_rx_freq <= AM_FREQ_RANGE_HIGH) vivid_radio_calc_sig_qual()
150 dev->radio_rx_sig_qual = sig_qual; vivid_radio_calc_sig_qual()
163 struct vivid_dev *dev = video_drvdata(file); vivid_radio_s_frequency() local
186 vivid_radio_calc_sig_qual(dev); vivid_radio_s_frequency()
187 vivid_radio_rds_init(dev); vivid_radio_s_frequency()
/linux-4.4.14/drivers/watchdog/
H A Dorion_wdt.c77 struct orion_watchdog *dev) orion_wdt_clock_init()
81 dev->clk = clk_get(&pdev->dev, NULL); orion_wdt_clock_init()
82 if (IS_ERR(dev->clk)) orion_wdt_clock_init()
83 return PTR_ERR(dev->clk); orion_wdt_clock_init()
84 ret = clk_prepare_enable(dev->clk); orion_wdt_clock_init()
86 clk_put(dev->clk); orion_wdt_clock_init()
90 dev->clk_rate = clk_get_rate(dev->clk); orion_wdt_clock_init()
95 struct orion_watchdog *dev) armada370_wdt_clock_init()
99 dev->clk = clk_get(&pdev->dev, NULL); armada370_wdt_clock_init()
100 if (IS_ERR(dev->clk)) armada370_wdt_clock_init()
101 return PTR_ERR(dev->clk); armada370_wdt_clock_init()
102 ret = clk_prepare_enable(dev->clk); armada370_wdt_clock_init()
104 clk_put(dev->clk); armada370_wdt_clock_init()
109 atomic_io_modify(dev->reg + TIMER_CTRL, armada370_wdt_clock_init()
113 dev->clk_rate = clk_get_rate(dev->clk) / WDT_A370_RATIO; armada370_wdt_clock_init()
118 struct orion_watchdog *dev) armada375_wdt_clock_init()
122 dev->clk = of_clk_get_by_name(pdev->dev.of_node, "fixed"); armada375_wdt_clock_init()
123 if (!IS_ERR(dev->clk)) { armada375_wdt_clock_init()
124 ret = clk_prepare_enable(dev->clk); armada375_wdt_clock_init()
126 clk_put(dev->clk); armada375_wdt_clock_init()
130 atomic_io_modify(dev->reg + TIMER_CTRL, armada375_wdt_clock_init()
133 dev->clk_rate = clk_get_rate(dev->clk); armada375_wdt_clock_init()
139 dev->clk = clk_get(&pdev->dev, NULL); armada375_wdt_clock_init()
140 if (IS_ERR(dev->clk)) armada375_wdt_clock_init()
141 return PTR_ERR(dev->clk); armada375_wdt_clock_init()
143 ret = clk_prepare_enable(dev->clk); armada375_wdt_clock_init()
145 clk_put(dev->clk); armada375_wdt_clock_init()
149 atomic_io_modify(dev->reg + TIMER_CTRL, armada375_wdt_clock_init()
152 dev->clk_rate = clk_get_rate(dev->clk) / WDT_A370_RATIO; armada375_wdt_clock_init()
158 struct orion_watchdog *dev) armadaxp_wdt_clock_init()
162 dev->clk = of_clk_get_by_name(pdev->dev.of_node, "fixed"); armadaxp_wdt_clock_init()
163 if (IS_ERR(dev->clk)) armadaxp_wdt_clock_init()
164 return PTR_ERR(dev->clk); armadaxp_wdt_clock_init()
165 ret = clk_prepare_enable(dev->clk); armadaxp_wdt_clock_init()
167 clk_put(dev->clk); armadaxp_wdt_clock_init()
172 atomic_io_modify(dev->reg + TIMER_CTRL, armadaxp_wdt_clock_init()
176 dev->clk_rate = clk_get_rate(dev->clk); armadaxp_wdt_clock_init()
182 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_ping() local
184 writel(dev->clk_rate * wdt_dev->timeout, orion_wdt_ping()
185 dev->reg + dev->data->wdt_counter_offset); orion_wdt_ping()
191 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); armada375_start() local
195 writel(dev->clk_rate * wdt_dev->timeout, armada375_start()
196 dev->reg + dev->data->wdt_counter_offset); armada375_start()
199 atomic_io_modify(dev->reg + TIMER_A370_STATUS, WDT_A370_EXPIRED, 0); armada375_start()
202 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, armada375_start()
203 dev->data->wdt_enable_bit); armada375_start()
206 reg = readl(dev->rstout); armada375_start()
207 reg |= dev->data->rstout_enable_bit; armada375_start()
208 writel(reg, dev->rstout); armada375_start()
210 atomic_io_modify(dev->rstout_mask, dev->data->rstout_mask_bit, 0); armada375_start()
216 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); armada370_start() local
220 writel(dev->clk_rate * wdt_dev->timeout, armada370_start()
221 dev->reg + dev->data->wdt_counter_offset); armada370_start()
224 atomic_io_modify(dev->reg + TIMER_A370_STATUS, WDT_A370_EXPIRED, 0); armada370_start()
227 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, armada370_start()
228 dev->data->wdt_enable_bit); armada370_start()
231 reg = readl(dev->rstout); armada370_start()
232 reg |= dev->data->rstout_enable_bit; armada370_start()
233 writel(reg, dev->rstout); armada370_start()
239 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_start() local
242 writel(dev->clk_rate * wdt_dev->timeout, orion_start()
243 dev->reg + dev->data->wdt_counter_offset); orion_start()
246 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, orion_start()
247 dev->data->wdt_enable_bit); orion_start()
250 atomic_io_modify(dev->rstout, dev->data->rstout_enable_bit, orion_start()
251 dev->data->rstout_enable_bit); orion_start()
258 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_start() local
261 return dev->data->start(wdt_dev); orion_wdt_start()
266 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_stop() local
269 atomic_io_modify(dev->rstout, dev->data->rstout_enable_bit, 0); orion_stop()
272 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0); orion_stop()
279 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); armada375_stop() local
283 atomic_io_modify(dev->rstout_mask, dev->data->rstout_mask_bit, armada375_stop()
284 dev->data->rstout_mask_bit); armada375_stop()
285 reg = readl(dev->rstout); armada375_stop()
286 reg &= ~dev->data->rstout_enable_bit; armada375_stop()
287 writel(reg, dev->rstout); armada375_stop()
290 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0); armada375_stop()
297 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); armada370_stop() local
301 reg = readl(dev->rstout); armada370_stop()
302 reg &= ~dev->data->rstout_enable_bit; armada370_stop()
303 writel(reg, dev->rstout); armada370_stop()
306 atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0); armada370_stop()
313 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_stop() local
315 return dev->data->stop(wdt_dev); orion_wdt_stop()
318 static int orion_enabled(struct orion_watchdog *dev) orion_enabled() argument
322 enabled = readl(dev->rstout) & dev->data->rstout_enable_bit; orion_enabled()
323 running = readl(dev->reg + TIMER_CTRL) & dev->data->wdt_enable_bit; orion_enabled()
328 static int armada375_enabled(struct orion_watchdog *dev) armada375_enabled() argument
332 masked = readl(dev->rstout_mask) & dev->data->rstout_mask_bit; armada375_enabled()
333 enabled = readl(dev->rstout) & dev->data->rstout_enable_bit; armada375_enabled()
334 running = readl(dev->reg + TIMER_CTRL) & dev->data->wdt_enable_bit; armada375_enabled()
341 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_enabled() local
343 return dev->data->enabled(dev); orion_wdt_enabled()
348 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_get_timeleft() local
349 return readl(dev->reg + dev->data->wdt_counter_offset) / dev->clk_rate; orion_wdt_get_timeleft()
393 return devm_ioremap(&pdev->dev, res->start, orion_wdt_ioremap_rstout()
399 return devm_ioremap(&pdev->dev, rstout, 0x4); orion_wdt_ioremap_rstout()
480 struct orion_watchdog *dev) orion_wdt_get_regs()
482 struct device_node *node = pdev->dev.of_node; orion_wdt_get_regs()
488 dev->reg = devm_ioremap(&pdev->dev, res->start, orion_wdt_get_regs()
490 if (!dev->reg) orion_wdt_get_regs()
496 dev->rstout = orion_wdt_ioremap_rstout(pdev, res->start & orion_wdt_get_regs()
498 if (!dev->rstout) orion_wdt_get_regs()
506 dev->rstout = devm_ioremap_resource(&pdev->dev, res); orion_wdt_get_regs()
507 if (IS_ERR(dev->rstout)) orion_wdt_get_regs()
508 return PTR_ERR(dev->rstout); orion_wdt_get_regs()
515 dev->rstout = devm_ioremap_resource(&pdev->dev, res); orion_wdt_get_regs()
516 if (IS_ERR(dev->rstout)) orion_wdt_get_regs()
517 return PTR_ERR(dev->rstout); orion_wdt_get_regs()
522 dev->rstout_mask = devm_ioremap(&pdev->dev, res->start, orion_wdt_get_regs()
524 if (!dev->rstout_mask) orion_wdt_get_regs()
536 struct orion_watchdog *dev; orion_wdt_probe() local
541 dev = devm_kzalloc(&pdev->dev, sizeof(struct orion_watchdog), orion_wdt_probe()
543 if (!dev) orion_wdt_probe()
546 match = of_match_device(orion_wdt_of_match_table, &pdev->dev); orion_wdt_probe()
551 dev->wdt.info = &orion_wdt_info; orion_wdt_probe()
552 dev->wdt.ops = &orion_wdt_ops; orion_wdt_probe()
553 dev->wdt.min_timeout = 1; orion_wdt_probe()
554 dev->data = match->data; orion_wdt_probe()
556 ret = orion_wdt_get_regs(pdev, dev); orion_wdt_probe()
560 ret = dev->data->clock_init(pdev, dev); orion_wdt_probe()
562 dev_err(&pdev->dev, "cannot initialize clock\n"); orion_wdt_probe()
566 wdt_max_duration = WDT_MAX_CYCLE_COUNT / dev->clk_rate; orion_wdt_probe()
568 dev->wdt.timeout = wdt_max_duration; orion_wdt_probe()
569 dev->wdt.max_timeout = wdt_max_duration; orion_wdt_probe()
570 dev->wdt.parent = &pdev->dev; orion_wdt_probe()
571 watchdog_init_timeout(&dev->wdt, heartbeat, &pdev->dev); orion_wdt_probe()
573 platform_set_drvdata(pdev, &dev->wdt); orion_wdt_probe()
574 watchdog_set_drvdata(&dev->wdt, dev); orion_wdt_probe()
582 if (!orion_wdt_enabled(&dev->wdt)) orion_wdt_probe()
583 orion_wdt_stop(&dev->wdt); orion_wdt_probe()
592 ret = devm_request_irq(&pdev->dev, irq, orion_wdt_irq, 0, orion_wdt_probe()
593 pdev->name, dev); orion_wdt_probe()
595 dev_err(&pdev->dev, "failed to request IRQ\n"); orion_wdt_probe()
600 watchdog_set_nowayout(&dev->wdt, nowayout); orion_wdt_probe()
601 ret = watchdog_register_device(&dev->wdt); orion_wdt_probe()
606 dev->wdt.timeout, nowayout ? ", nowayout" : ""); orion_wdt_probe()
610 clk_disable_unprepare(dev->clk); orion_wdt_probe()
611 clk_put(dev->clk); orion_wdt_probe()
618 struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); orion_wdt_remove() local
621 clk_disable_unprepare(dev->clk); orion_wdt_remove()
622 clk_put(dev->clk); orion_wdt_remove()
76 orion_wdt_clock_init(struct platform_device *pdev, struct orion_watchdog *dev) orion_wdt_clock_init() argument
94 armada370_wdt_clock_init(struct platform_device *pdev, struct orion_watchdog *dev) armada370_wdt_clock_init() argument
117 armada375_wdt_clock_init(struct platform_device *pdev, struct orion_watchdog *dev) armada375_wdt_clock_init() argument
157 armadaxp_wdt_clock_init(struct platform_device *pdev, struct orion_watchdog *dev) armadaxp_wdt_clock_init() argument
479 orion_wdt_get_regs(struct platform_device *pdev, struct orion_watchdog *dev) orion_wdt_get_regs() argument
/linux-4.4.14/drivers/net/usb/
H A Drtl8150.c156 static int get_registers(rtl8150_t * dev, u16 indx, u16 size, void *data) get_registers() argument
158 return usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), get_registers()
163 static int set_registers(rtl8150_t * dev, u16 indx, u16 size, void *data) set_registers() argument
165 return usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), set_registers()
176 dev_dbg(&urb->dev->dev, "%s failed with %d", __func__, status); async_set_reg_cb()
181 static int async_set_registers(rtl8150_t *dev, u16 indx, u16 size, u16 reg) async_set_registers() argument
201 usb_fill_control_urb(async_urb, dev->udev, async_set_registers()
202 usb_sndctrlpipe(dev->udev, 0), (void *)&req->dr, async_set_registers()
207 netif_device_detach(dev->netdev); async_set_registers()
208 dev_err(&dev->udev->dev, "%s failed with %d\n", __func__, res); async_set_registers()
213 static int read_mii_word(rtl8150_t * dev, u8 phy, __u8 indx, u16 * reg) read_mii_word() argument
223 set_registers(dev, PHYADD, sizeof(data), data); read_mii_word()
224 set_registers(dev, PHYCNT, 1, &tmp); read_mii_word()
226 get_registers(dev, PHYCNT, 1, data); read_mii_word()
230 get_registers(dev, PHYDAT, 2, data); read_mii_word()
237 static int write_mii_word(rtl8150_t * dev, u8 phy, __u8 indx, u16 reg) write_mii_word() argument
248 set_registers(dev, PHYADD, sizeof(data), data); write_mii_word()
249 set_registers(dev, PHYCNT, 1, &tmp); write_mii_word()
251 get_registers(dev, PHYCNT, 1, data); write_mii_word()
260 static inline void set_ethernet_addr(rtl8150_t * dev) set_ethernet_addr() argument
264 get_registers(dev, IDR, sizeof(node_id), node_id); set_ethernet_addr()
265 memcpy(dev->netdev->dev_addr, node_id, sizeof(node_id)); set_ethernet_addr()
271 rtl8150_t *dev = netdev_priv(netdev); rtl8150_set_mac_address() local
279 set_registers(dev, IDR, netdev->addr_len, netdev->dev_addr); rtl8150_set_mac_address()
285 get_registers(dev, CR, 1, &cr); rtl8150_set_mac_address()
288 set_registers(dev, CR, 1, &cr); rtl8150_set_mac_address()
292 set_registers(dev, IDR_EEPROM + (i * 2), 2, rtl8150_set_mac_address()
297 set_registers(dev, CR, 1, &cr); rtl8150_set_mac_address()
303 static int rtl8150_reset(rtl8150_t * dev) rtl8150_reset() argument
308 set_registers(dev, CR, 1, &data); rtl8150_reset()
310 get_registers(dev, CR, 1, &data); rtl8150_reset()
316 static int alloc_all_urbs(rtl8150_t * dev) alloc_all_urbs() argument
318 dev->rx_urb = usb_alloc_urb(0, GFP_KERNEL); alloc_all_urbs()
319 if (!dev->rx_urb) alloc_all_urbs()
321 dev->tx_urb = usb_alloc_urb(0, GFP_KERNEL); alloc_all_urbs()
322 if (!dev->tx_urb) { alloc_all_urbs()
323 usb_free_urb(dev->rx_urb); alloc_all_urbs()
326 dev->intr_urb = usb_alloc_urb(0, GFP_KERNEL); alloc_all_urbs()
327 if (!dev->intr_urb) { alloc_all_urbs()
328 usb_free_urb(dev->rx_urb); alloc_all_urbs()
329 usb_free_urb(dev->tx_urb); alloc_all_urbs()
336 static void free_all_urbs(rtl8150_t * dev) free_all_urbs() argument
338 usb_free_urb(dev->rx_urb); free_all_urbs()
339 usb_free_urb(dev->tx_urb); free_all_urbs()
340 usb_free_urb(dev->intr_urb); free_all_urbs()
343 static void unlink_all_urbs(rtl8150_t * dev) unlink_all_urbs() argument
345 usb_kill_urb(dev->rx_urb); unlink_all_urbs()
346 usb_kill_urb(dev->tx_urb); unlink_all_urbs()
347 usb_kill_urb(dev->intr_urb); unlink_all_urbs()
350 static inline struct sk_buff *pull_skb(rtl8150_t *dev) pull_skb() argument
356 if (dev->rx_skb_pool[i]) { pull_skb()
357 skb = dev->rx_skb_pool[i]; pull_skb()
358 dev->rx_skb_pool[i] = NULL; pull_skb()
367 rtl8150_t *dev; read_bulk_callback() local
375 dev = urb->context; read_bulk_callback()
376 if (!dev) read_bulk_callback()
378 if (test_bit(RTL8150_UNPLUG, &dev->flags)) read_bulk_callback()
380 netdev = dev->netdev; read_bulk_callback()
391 dev_warn(&urb->dev->dev, "may be reset is needed?..\n"); read_bulk_callback()
395 dev_warn(&urb->dev->dev, "Rx status %d\n", status); read_bulk_callback()
399 if (!dev->rx_skb) read_bulk_callback()
409 skb_put(dev->rx_skb, pkt_len); read_bulk_callback()
410 dev->rx_skb->protocol = eth_type_trans(dev->rx_skb, netdev); read_bulk_callback()
411 netif_rx(dev->rx_skb); read_bulk_callback()
415 spin_lock(&dev->rx_pool_lock); read_bulk_callback()
416 skb = pull_skb(dev); read_bulk_callback()
417 spin_unlock(&dev->rx_pool_lock); read_bulk_callback()
421 dev->rx_skb = skb; read_bulk_callback()
423 usb_fill_bulk_urb(dev->rx_urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), read_bulk_callback()
424 dev->rx_skb->data, RTL8150_MTU, read_bulk_callback, dev); read_bulk_callback()
425 result = usb_submit_urb(dev->rx_urb, GFP_ATOMIC); read_bulk_callback()
427 netif_device_detach(dev->netdev); read_bulk_callback()
429 set_bit(RX_URB_FAIL, &dev->flags); read_bulk_callback()
432 clear_bit(RX_URB_FAIL, &dev->flags); read_bulk_callback()
437 tasklet_schedule(&dev->tl); read_bulk_callback()
442 rtl8150_t *dev; write_bulk_callback() local
445 dev = urb->context; write_bulk_callback()
446 if (!dev) write_bulk_callback()
448 dev_kfree_skb_irq(dev->tx_skb); write_bulk_callback()
449 if (!netif_device_present(dev->netdev)) write_bulk_callback()
452 dev_info(&urb->dev->dev, "%s: Tx status %d\n", write_bulk_callback()
453 dev->netdev->name, status); write_bulk_callback()
454 dev->netdev->trans_start = jiffies; write_bulk_callback()
455 netif_wake_queue(dev->netdev); write_bulk_callback()
460 rtl8150_t *dev; intr_callback() local
465 dev = urb->context; intr_callback()
466 if (!dev) intr_callback()
477 dev_info(&urb->dev->dev, "%s: intr status %d\n", intr_callback()
478 dev->netdev->name, status); intr_callback()
484 dev->netdev->stats.tx_errors++; intr_callback()
486 dev->netdev->stats.tx_aborted_errors++; intr_callback()
488 dev->netdev->stats.tx_window_errors++; intr_callback()
490 dev->netdev->stats.tx_carrier_errors++; intr_callback()
494 if (netif_carrier_ok(dev->netdev)) { intr_callback()
495 netif_carrier_off(dev->netdev); intr_callback()
496 netdev_dbg(dev->netdev, "%s: LINK LOST\n", __func__); intr_callback()
499 if (!netif_carrier_ok(dev->netdev)) { intr_callback()
500 netif_carrier_on(dev->netdev); intr_callback()
501 netdev_dbg(dev->netdev, "%s: LINK CAME BACK\n", __func__); intr_callback()
508 netif_device_detach(dev->netdev); intr_callback()
510 dev_err(&dev->udev->dev, intr_callback()
512 dev->udev->bus->bus_name, dev->udev->devpath, res); intr_callback()
517 rtl8150_t *dev = usb_get_intfdata(intf); rtl8150_suspend() local
519 netif_device_detach(dev->netdev); rtl8150_suspend()
521 if (netif_running(dev->netdev)) { rtl8150_suspend()
522 usb_kill_urb(dev->rx_urb); rtl8150_suspend()
523 usb_kill_urb(dev->intr_urb); rtl8150_suspend()
530 rtl8150_t *dev = usb_get_intfdata(intf); rtl8150_resume() local
532 netif_device_attach(dev->netdev); rtl8150_resume()
533 if (netif_running(dev->netdev)) { rtl8150_resume()
534 dev->rx_urb->status = 0; rtl8150_resume()
535 dev->rx_urb->actual_length = 0; rtl8150_resume()
536 read_bulk_callback(dev->rx_urb); rtl8150_resume()
538 dev->intr_urb->status = 0; rtl8150_resume()
539 dev->intr_urb->actual_length = 0; rtl8150_resume()
540 intr_callback(dev->intr_urb); rtl8150_resume()
551 static void fill_skb_pool(rtl8150_t *dev) fill_skb_pool() argument
557 if (dev->rx_skb_pool[i]) fill_skb_pool()
564 dev->rx_skb_pool[i] = skb; fill_skb_pool()
568 static void free_skb_pool(rtl8150_t *dev) free_skb_pool() argument
573 if (dev->rx_skb_pool[i]) free_skb_pool()
574 dev_kfree_skb(dev->rx_skb_pool[i]); free_skb_pool()
579 struct rtl8150 *dev = (struct rtl8150 *)data; rx_fixup() local
583 spin_lock_irq(&dev->rx_pool_lock); rx_fixup()
584 fill_skb_pool(dev); rx_fixup()
585 spin_unlock_irq(&dev->rx_pool_lock); rx_fixup()
586 if (test_bit(RX_URB_FAIL, &dev->flags)) rx_fixup()
587 if (dev->rx_skb) rx_fixup()
589 spin_lock_irq(&dev->rx_pool_lock); rx_fixup()
590 skb = pull_skb(dev); rx_fixup()
591 spin_unlock_irq(&dev->rx_pool_lock); rx_fixup()
594 dev->rx_skb = skb; rx_fixup()
595 usb_fill_bulk_urb(dev->rx_urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), rx_fixup()
596 dev->rx_skb->data, RTL8150_MTU, read_bulk_callback, dev); rx_fixup()
598 status = usb_submit_urb(dev->rx_urb, GFP_ATOMIC); rx_fixup()
600 netif_device_detach(dev->netdev); rx_fixup()
602 set_bit(RX_URB_FAIL, &dev->flags); rx_fixup()
605 clear_bit(RX_URB_FAIL, &dev->flags); rx_fixup()
610 tasklet_schedule(&dev->tl); rx_fixup()
613 static int enable_net_traffic(rtl8150_t * dev) enable_net_traffic() argument
617 if (!rtl8150_reset(dev)) { enable_net_traffic()
618 dev_warn(&dev->udev->dev, "device reset failed\n"); enable_net_traffic()
625 set_bit(RTL8150_HW_CRC, &dev->flags); enable_net_traffic()
626 set_registers(dev, RCR, 1, &rcr); enable_net_traffic()
627 set_registers(dev, TCR, 1, &tcr); enable_net_traffic()
628 set_registers(dev, CR, 1, &cr); enable_net_traffic()
629 get_registers(dev, MSR, 1, &msr); enable_net_traffic()
634 static void disable_net_traffic(rtl8150_t * dev) disable_net_traffic() argument
638 get_registers(dev, CR, 1, &cr); disable_net_traffic()
640 set_registers(dev, CR, 1, &cr); disable_net_traffic()
645 rtl8150_t *dev = netdev_priv(netdev); rtl8150_tx_timeout() local
646 dev_warn(&netdev->dev, "Tx timeout.\n"); rtl8150_tx_timeout()
647 usb_unlink_urb(dev->tx_urb); rtl8150_tx_timeout()
653 rtl8150_t *dev = netdev_priv(netdev); rtl8150_set_multicast() local
659 dev_info(&netdev->dev, "%s: promiscuous mode\n", netdev->name); rtl8150_set_multicast()
664 dev_info(&netdev->dev, "%s: allmulti set\n", netdev->name); rtl8150_set_multicast()
669 async_set_registers(dev, RCR, sizeof(rx_creg), rx_creg); rtl8150_set_multicast()
676 rtl8150_t *dev = netdev_priv(netdev); rtl8150_start_xmit() local
682 dev->tx_skb = skb; rtl8150_start_xmit()
683 usb_fill_bulk_urb(dev->tx_urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), rtl8150_start_xmit()
684 skb->data, count, write_bulk_callback, dev); rtl8150_start_xmit()
685 if ((res = usb_submit_urb(dev->tx_urb, GFP_ATOMIC))) { rtl8150_start_xmit()
688 netif_device_detach(dev->netdev); rtl8150_start_xmit()
690 dev_warn(&netdev->dev, "failed tx_urb %d\n", res); rtl8150_start_xmit()
706 rtl8150_t *dev = netdev_priv(netdev); set_carrier() local
709 get_registers(dev, CSCR, 2, &tmp); set_carrier()
718 rtl8150_t *dev = netdev_priv(netdev); rtl8150_open() local
721 if (dev->rx_skb == NULL) rtl8150_open()
722 dev->rx_skb = pull_skb(dev); rtl8150_open()
723 if (!dev->rx_skb) rtl8150_open()
726 set_registers(dev, IDR, 6, netdev->dev_addr); rtl8150_open()
728 usb_fill_bulk_urb(dev->rx_urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), rtl8150_open()
729 dev->rx_skb->data, RTL8150_MTU, read_bulk_callback, dev); rtl8150_open()
730 if ((res = usb_submit_urb(dev->rx_urb, GFP_KERNEL))) { rtl8150_open()
732 netif_device_detach(dev->netdev); rtl8150_open()
733 dev_warn(&netdev->dev, "rx_urb submit failed: %d\n", res); rtl8150_open()
736 usb_fill_int_urb(dev->intr_urb, dev->udev, usb_rcvintpipe(dev->udev, 3), rtl8150_open()
737 dev->intr_buff, INTBUFSIZE, intr_callback, rtl8150_open()
738 dev, dev->intr_interval); rtl8150_open()
739 if ((res = usb_submit_urb(dev->intr_urb, GFP_KERNEL))) { rtl8150_open()
741 netif_device_detach(dev->netdev); rtl8150_open()
742 dev_warn(&netdev->dev, "intr_urb submit failed: %d\n", res); rtl8150_open()
743 usb_kill_urb(dev->rx_urb); rtl8150_open()
746 enable_net_traffic(dev); rtl8150_open()
755 rtl8150_t *dev = netdev_priv(netdev); rtl8150_close() local
758 if (!test_bit(RTL8150_UNPLUG, &dev->flags)) rtl8150_close()
759 disable_net_traffic(dev); rtl8150_close()
760 unlink_all_urbs(dev); rtl8150_close()
767 rtl8150_t *dev = netdev_priv(netdev); rtl8150_get_drvinfo() local
771 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); rtl8150_get_drvinfo()
776 rtl8150_t *dev = netdev_priv(netdev); rtl8150_get_settings() local
787 ecmd->phy_address = dev->phy; rtl8150_get_settings()
788 get_registers(dev, BMCR, 2, &bmcr); rtl8150_get_settings()
789 get_registers(dev, ANLP, 2, &lpa); rtl8150_get_settings()
819 rtl8150_t *dev = netdev_priv(netdev); rtl8150_ioctl() local
825 data[0] = dev->phy; rtl8150_ioctl()
827 read_mii_word(dev, dev->phy, (data[1] & 0x1f), &data[3]); rtl8150_ioctl()
832 write_mii_word(dev, dev->phy, (data[1] & 0x1f), data[2]); rtl8150_ioctl()
858 rtl8150_t *dev; rtl8150_probe() local
865 dev = netdev_priv(netdev); rtl8150_probe()
867 dev->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); rtl8150_probe()
868 if (!dev->intr_buff) { rtl8150_probe()
873 tasklet_init(&dev->tl, rx_fixup, (unsigned long)dev); rtl8150_probe()
874 spin_lock_init(&dev->rx_pool_lock); rtl8150_probe()
876 dev->udev = udev; rtl8150_probe()
877 dev->netdev = netdev; rtl8150_probe()
881 dev->intr_interval = 100; /* 100ms */ rtl8150_probe()
883 if (!alloc_all_urbs(dev)) { rtl8150_probe()
884 dev_err(&intf->dev, "out of memory\n"); rtl8150_probe()
887 if (!rtl8150_reset(dev)) { rtl8150_probe()
888 dev_err(&intf->dev, "couldn't reset the device\n"); rtl8150_probe()
891 fill_skb_pool(dev); rtl8150_probe()
892 set_ethernet_addr(dev); rtl8150_probe()
894 usb_set_intfdata(intf, dev); rtl8150_probe()
895 SET_NETDEV_DEV(netdev, &intf->dev); rtl8150_probe()
897 dev_err(&intf->dev, "couldn't register the device\n"); rtl8150_probe()
901 dev_info(&intf->dev, "%s: rtl8150 is detected\n", netdev->name); rtl8150_probe()
907 free_skb_pool(dev); rtl8150_probe()
909 free_all_urbs(dev); rtl8150_probe()
911 kfree(dev->intr_buff); rtl8150_probe()
918 rtl8150_t *dev = usb_get_intfdata(intf); rtl8150_disconnect() local
921 if (dev) { rtl8150_disconnect()
922 set_bit(RTL8150_UNPLUG, &dev->flags); rtl8150_disconnect()
923 tasklet_kill(&dev->tl); rtl8150_disconnect()
924 unregister_netdev(dev->netdev); rtl8150_disconnect()
925 unlink_all_urbs(dev); rtl8150_disconnect()
926 free_all_urbs(dev); rtl8150_disconnect()
927 free_skb_pool(dev); rtl8150_disconnect()
928 if (dev->rx_skb) rtl8150_disconnect()
929 dev_kfree_skb(dev->rx_skb); rtl8150_disconnect()
930 kfree(dev->intr_buff); rtl8150_disconnect()
931 free_netdev(dev->netdev); rtl8150_disconnect()
H A Dusbnet.c67 #define RX_QLEN(dev) ((dev)->rx_qlen)
68 #define TX_QLEN(dev) ((dev)->tx_qlen)
96 int usbnet_get_endpoints(struct usbnet *dev, struct usb_interface *intf) usbnet_get_endpoints() argument
146 !(dev->driver_info->flags & FLAG_NO_SETINT)) { usbnet_get_endpoints()
147 tmp = usb_set_interface (dev->udev, alt->desc.bInterfaceNumber, usbnet_get_endpoints()
153 dev->in = usb_rcvbulkpipe (dev->udev, usbnet_get_endpoints()
155 dev->out = usb_sndbulkpipe (dev->udev, usbnet_get_endpoints()
157 dev->status = status; usbnet_get_endpoints()
162 int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress) usbnet_get_ethernet_addr() argument
167 ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf); usbnet_get_ethernet_addr()
169 tmp = hex2bin(dev->net->dev_addr, buf, 6); usbnet_get_ethernet_addr()
171 dev_dbg(&dev->udev->dev, usbnet_get_ethernet_addr()
183 struct usbnet *dev = urb->context; intr_complete() local
189 dev->driver_info->status(dev, urb); intr_complete()
195 netif_dbg(dev, ifdown, dev->net, intr_complete()
203 netdev_dbg(dev->net, "intr status %d\n", status); intr_complete()
209 netif_err(dev, timer, dev->net, intr_complete()
213 static int init_status (struct usbnet *dev, struct usb_interface *intf) init_status() argument
220 if (!dev->driver_info->status) init_status()
223 pipe = usb_rcvintpipe (dev->udev, init_status()
224 dev->status->desc.bEndpointAddress init_status()
226 maxp = usb_maxpacket (dev->udev, pipe, 0); init_status()
229 period = max ((int) dev->status->desc.bInterval, init_status()
230 (dev->udev->speed == USB_SPEED_HIGH) ? 7 : 3); init_status()
234 dev->interrupt = usb_alloc_urb (0, GFP_KERNEL); init_status()
235 if (!dev->interrupt) { init_status()
239 usb_fill_int_urb(dev->interrupt, dev->udev, pipe, init_status()
240 buf, maxp, intr_complete, dev, period); init_status()
241 dev->interrupt->transfer_flags |= URB_FREE_BUFFER; init_status()
242 dev_dbg(&intf->dev, init_status()
251 int usbnet_status_start(struct usbnet *dev, gfp_t mem_flags) usbnet_status_start() argument
255 WARN_ON_ONCE(dev->interrupt == NULL); usbnet_status_start()
256 if (dev->interrupt) { usbnet_status_start()
257 mutex_lock(&dev->interrupt_mutex); usbnet_status_start()
259 if (++dev->interrupt_count == 1) usbnet_status_start()
260 ret = usb_submit_urb(dev->interrupt, mem_flags); usbnet_status_start()
262 dev_dbg(&dev->udev->dev, "incremented interrupt URB count to %d\n", usbnet_status_start()
263 dev->interrupt_count); usbnet_status_start()
264 mutex_unlock(&dev->interrupt_mutex); usbnet_status_start()
271 static int __usbnet_status_start_force(struct usbnet *dev, gfp_t mem_flags) __usbnet_status_start_force() argument
275 mutex_lock(&dev->interrupt_mutex); __usbnet_status_start_force()
276 if (dev->interrupt_count) { __usbnet_status_start_force()
277 ret = usb_submit_urb(dev->interrupt, mem_flags); __usbnet_status_start_force()
278 dev_dbg(&dev->udev->dev, __usbnet_status_start_force()
281 mutex_unlock(&dev->interrupt_mutex); __usbnet_status_start_force()
286 void usbnet_status_stop(struct usbnet *dev) usbnet_status_stop() argument
288 if (dev->interrupt) { usbnet_status_stop()
289 mutex_lock(&dev->interrupt_mutex); usbnet_status_stop()
290 WARN_ON(dev->interrupt_count == 0); usbnet_status_stop()
292 if (dev->interrupt_count && --dev->interrupt_count == 0) usbnet_status_stop()
293 usb_kill_urb(dev->interrupt); usbnet_status_stop()
295 dev_dbg(&dev->udev->dev, usbnet_status_stop()
297 dev->interrupt_count); usbnet_status_stop()
298 mutex_unlock(&dev->interrupt_mutex); usbnet_status_stop()
304 static void __usbnet_status_stop_force(struct usbnet *dev) __usbnet_status_stop_force() argument
306 if (dev->interrupt) { __usbnet_status_stop_force()
307 mutex_lock(&dev->interrupt_mutex); __usbnet_status_stop_force()
308 usb_kill_urb(dev->interrupt); __usbnet_status_stop_force()
309 dev_dbg(&dev->udev->dev, "killed interrupt URB for suspend\n"); __usbnet_status_stop_force()
310 mutex_unlock(&dev->interrupt_mutex); __usbnet_status_stop_force()
318 void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb) usbnet_skb_return() argument
322 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { usbnet_skb_return()
323 skb_queue_tail(&dev->rxq_pause, skb); usbnet_skb_return()
327 skb->protocol = eth_type_trans (skb, dev->net); usbnet_skb_return()
328 dev->net->stats.rx_packets++; usbnet_skb_return()
329 dev->net->stats.rx_bytes += skb->len; usbnet_skb_return()
331 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", usbnet_skb_return()
340 netif_dbg(dev, rx_err, dev->net, usbnet_skb_return()
346 void usbnet_update_max_qlen(struct usbnet *dev) usbnet_update_max_qlen() argument
348 enum usb_device_speed speed = dev->udev->speed; usbnet_update_max_qlen()
352 dev->rx_qlen = MAX_QUEUE_MEMORY / dev->rx_urb_size; usbnet_update_max_qlen()
353 dev->tx_qlen = MAX_QUEUE_MEMORY / dev->hard_mtu; usbnet_update_max_qlen()
361 dev->rx_qlen = 5 * MAX_QUEUE_MEMORY / dev->rx_urb_size; usbnet_update_max_qlen()
362 dev->tx_qlen = 5 * MAX_QUEUE_MEMORY / dev->hard_mtu; usbnet_update_max_qlen()
365 dev->rx_qlen = dev->tx_qlen = 4; usbnet_update_max_qlen()
380 struct usbnet *dev = netdev_priv(net); usbnet_change_mtu()
382 int old_hard_mtu = dev->hard_mtu; usbnet_change_mtu()
383 int old_rx_urb_size = dev->rx_urb_size; usbnet_change_mtu()
388 if ((ll_mtu % dev->maxpacket) == 0) usbnet_change_mtu()
392 dev->hard_mtu = net->mtu + net->hard_header_len; usbnet_change_mtu()
393 if (dev->rx_urb_size == old_hard_mtu) { usbnet_change_mtu()
394 dev->rx_urb_size = dev->hard_mtu; usbnet_change_mtu()
395 if (dev->rx_urb_size > old_rx_urb_size) usbnet_change_mtu()
396 usbnet_unlink_rx_urbs(dev); usbnet_change_mtu()
400 usbnet_update_max_qlen(dev); usbnet_change_mtu()
422 static enum skb_state defer_bh(struct usbnet *dev, struct sk_buff *skb, defer_bh()
434 /* defer_bh() is never called with list == &dev->done. defer_bh()
436 * dev->done.lock here with list->lock held. defer_bh()
438 spin_lock_nested(&dev->done.lock, SINGLE_DEPTH_NESTING); defer_bh()
440 __skb_queue_tail(&dev->done, skb); defer_bh()
441 if (dev->done.qlen == 1) defer_bh()
442 tasklet_schedule(&dev->bh); defer_bh()
443 spin_unlock(&dev->done.lock); defer_bh()
453 void usbnet_defer_kevent (struct usbnet *dev, int work) usbnet_defer_kevent()
455 set_bit (work, &dev->flags); usbnet_defer_kevent()
456 if (!schedule_work (&dev->kevent)) { usbnet_defer_kevent()
458 netdev_err(dev->net, "kevent %d may have been dropped\n", work); usbnet_defer_kevent()
460 netdev_dbg(dev->net, "kevent %d scheduled\n", work); usbnet_defer_kevent()
469 static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) rx_submit()
475 size_t size = dev->rx_urb_size; rx_submit()
478 if (test_bit(EVENT_RX_KILL, &dev->flags)) { rx_submit()
483 skb = __netdev_alloc_skb_ip_align(dev->net, size, flags); rx_submit()
485 netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); rx_submit()
486 usbnet_defer_kevent (dev, EVENT_RX_MEMORY); rx_submit()
493 entry->dev = dev; rx_submit()
496 usb_fill_bulk_urb (urb, dev->udev, dev->in, rx_submit()
499 spin_lock_irqsave (&dev->rxq.lock, lockflags); rx_submit()
501 if (netif_running (dev->net) && rx_submit()
502 netif_device_present (dev->net) && rx_submit()
503 !test_bit (EVENT_RX_HALT, &dev->flags) && rx_submit()
504 !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) { rx_submit()
507 usbnet_defer_kevent (dev, EVENT_RX_HALT); rx_submit()
510 usbnet_defer_kevent (dev, EVENT_RX_MEMORY); rx_submit()
513 netif_dbg(dev, ifdown, dev->net, "device gone\n"); rx_submit()
514 netif_device_detach (dev->net); rx_submit()
520 netif_dbg(dev, rx_err, dev->net, rx_submit()
522 tasklet_schedule (&dev->bh); rx_submit()
525 __usbnet_queue_skb(&dev->rxq, skb, rx_start); rx_submit()
528 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); rx_submit()
531 spin_unlock_irqrestore (&dev->rxq.lock, lockflags); rx_submit()
542 static inline void rx_process (struct usbnet *dev, struct sk_buff *skb) rx_process()
544 if (dev->driver_info->rx_fixup && rx_process()
545 !dev->driver_info->rx_fixup (dev, skb)) { rx_process()
547 if (!(dev->driver_info->flags & FLAG_RX_ASSEMBLE)) rx_process()
548 dev->net->stats.rx_errors++; rx_process()
554 if (dev->driver_info->flags & FLAG_MULTI_PACKET) rx_process()
558 dev->net->stats.rx_errors++; rx_process()
559 dev->net->stats.rx_length_errors++; rx_process()
560 netif_dbg(dev, rx_err, dev->net, "rx length %d\n", skb->len); rx_process()
562 usbnet_skb_return(dev, skb); rx_process()
567 skb_queue_tail(&dev->done, skb);
576 struct usbnet *dev = entry->dev; rx_complete()
595 dev->net->stats.rx_errors++; rx_complete()
596 usbnet_defer_kevent (dev, EVENT_RX_HALT); rx_complete()
602 netif_dbg(dev, ifdown, dev->net, rx_complete()
613 dev->net->stats.rx_errors++; rx_complete()
614 if (!timer_pending (&dev->delay)) { rx_complete()
615 mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES); rx_complete()
616 netif_dbg(dev, link, dev->net, rx_complete()
627 dev->net->stats.rx_over_errors++; rx_complete()
632 dev->net->stats.rx_errors++; rx_complete()
633 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); rx_complete()
638 if (++dev->pkt_cnt > 30) { rx_complete()
639 dev->pkt_cnt = 0; rx_complete()
640 dev->pkt_err = 0; rx_complete()
643 dev->pkt_err++; rx_complete()
644 if (dev->pkt_err > 20) rx_complete()
645 set_bit(EVENT_RX_KILL, &dev->flags); rx_complete()
648 state = defer_bh(dev, skb, &dev->rxq, state); rx_complete()
651 if (netif_running (dev->net) && rx_complete()
652 !test_bit (EVENT_RX_HALT, &dev->flags) && rx_complete()
654 rx_submit (dev, urb, GFP_ATOMIC); rx_complete()
655 usb_mark_last_busy(dev->udev); rx_complete()
660 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n");
664 void usbnet_pause_rx(struct usbnet *dev) usbnet_pause_rx()
666 set_bit(EVENT_RX_PAUSED, &dev->flags); usbnet_pause_rx()
668 netif_dbg(dev, rx_status, dev->net, "paused rx queue enabled\n");
672 void usbnet_resume_rx(struct usbnet *dev) usbnet_resume_rx()
677 clear_bit(EVENT_RX_PAUSED, &dev->flags); usbnet_resume_rx()
679 while ((skb = skb_dequeue(&dev->rxq_pause)) != NULL) { usbnet_resume_rx()
680 usbnet_skb_return(dev, skb); usbnet_resume_rx()
684 tasklet_schedule(&dev->bh); usbnet_resume_rx()
686 netif_dbg(dev, rx_status, dev->net, usbnet_resume_rx()
691 void usbnet_purge_paused_rxq(struct usbnet *dev) usbnet_purge_paused_rxq()
693 skb_queue_purge(&dev->rxq_pause);
701 static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q) unlink_urbs()
736 netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
749 void usbnet_unlink_rx_urbs(struct usbnet *dev) usbnet_unlink_rx_urbs()
751 if (netif_running(dev->net)) { usbnet_unlink_rx_urbs()
752 (void) unlink_urbs (dev, &dev->rxq); usbnet_unlink_rx_urbs()
753 tasklet_schedule(&dev->bh); usbnet_unlink_rx_urbs()
775 static void usbnet_terminate_urbs(struct usbnet *dev) usbnet_terminate_urbs()
781 add_wait_queue(&dev->wait, &wait); usbnet_terminate_urbs()
783 temp = unlink_urbs(dev, &dev->txq) + usbnet_terminate_urbs()
784 unlink_urbs(dev, &dev->rxq); usbnet_terminate_urbs()
787 wait_skb_queue_empty(&dev->rxq); usbnet_terminate_urbs()
788 wait_skb_queue_empty(&dev->txq); usbnet_terminate_urbs()
789 wait_skb_queue_empty(&dev->done); usbnet_terminate_urbs()
790 netif_dbg(dev, ifdown, dev->net, usbnet_terminate_urbs()
793 remove_wait_queue(&dev->wait, &wait);
798 struct usbnet *dev = netdev_priv(net); usbnet_stop()
799 struct driver_info *info = dev->driver_info; usbnet_stop()
802 clear_bit(EVENT_DEV_OPEN, &dev->flags); usbnet_stop()
805 netif_info(dev, ifdown, dev->net, usbnet_stop()
811 pm = usb_autopm_get_interface(dev->intf); usbnet_stop()
815 retval = info->stop(dev); usbnet_stop()
817 netif_info(dev, ifdown, dev->net, usbnet_stop()
820 dev->udev->bus->bus_name, dev->udev->devpath, usbnet_stop()
825 usbnet_terminate_urbs(dev); usbnet_stop()
827 usbnet_status_stop(dev); usbnet_stop()
829 usbnet_purge_paused_rxq(dev); usbnet_stop()
831 mpn = !test_and_clear_bit(EVENT_NO_RUNTIME_PM, &dev->flags); usbnet_stop()
837 dev->flags = 0; usbnet_stop()
838 del_timer_sync (&dev->delay); usbnet_stop()
839 tasklet_kill (&dev->bh); usbnet_stop()
841 usb_autopm_put_interface(dev->intf); usbnet_stop()
844 info->manage_power(dev, 0); usbnet_stop()
846 usb_autopm_put_interface(dev->intf); usbnet_stop()
860 struct usbnet *dev = netdev_priv(net); usbnet_open()
862 struct driver_info *info = dev->driver_info; usbnet_open()
864 if ((retval = usb_autopm_get_interface(dev->intf)) < 0) { usbnet_open()
865 netif_info(dev, ifup, dev->net, usbnet_open()
868 dev->udev->bus->bus_name, usbnet_open()
869 dev->udev->devpath, usbnet_open()
875 if (info->reset && (retval = info->reset (dev)) < 0) { usbnet_open()
876 netif_info(dev, ifup, dev->net, usbnet_open()
879 dev->udev->bus->bus_name, usbnet_open()
880 dev->udev->devpath, usbnet_open()
886 usbnet_update_max_qlen(dev); usbnet_open()
889 if (info->check_connect && (retval = info->check_connect (dev)) < 0) { usbnet_open()
890 netif_dbg(dev, ifup, dev->net, "can't open; %d\n", retval); usbnet_open()
895 if (dev->interrupt) { usbnet_open()
896 retval = usbnet_status_start(dev, GFP_KERNEL); usbnet_open()
898 netif_err(dev, ifup, dev->net, usbnet_open()
904 set_bit(EVENT_DEV_OPEN, &dev->flags); usbnet_open()
906 netif_info(dev, ifup, dev->net, usbnet_open()
908 (int)RX_QLEN(dev), (int)TX_QLEN(dev), usbnet_open()
909 dev->net->mtu, usbnet_open()
910 (dev->driver_info->flags & FLAG_FRAMING_NC) ? "NetChip" : usbnet_open()
911 (dev->driver_info->flags & FLAG_FRAMING_GL) ? "GeneSys" : usbnet_open()
912 (dev->driver_info->flags & FLAG_FRAMING_Z) ? "Zaurus" : usbnet_open()
913 (dev->driver_info->flags & FLAG_FRAMING_RN) ? "RNDIS" : usbnet_open()
914 (dev->driver_info->flags & FLAG_FRAMING_AX) ? "ASIX" : usbnet_open()
918 dev->pkt_cnt = 0; usbnet_open()
919 dev->pkt_err = 0; usbnet_open()
920 clear_bit(EVENT_RX_KILL, &dev->flags); usbnet_open()
923 tasklet_schedule (&dev->bh); usbnet_open()
925 retval = info->manage_power(dev, 1); usbnet_open()
928 set_bit(EVENT_NO_RUNTIME_PM, &dev->flags); usbnet_open()
930 usb_autopm_put_interface(dev->intf); usbnet_open()
935 usb_autopm_put_interface(dev->intf); usbnet_open()
949 struct usbnet *dev = netdev_priv(net); usbnet_get_settings()
951 if (!dev->mii.mdio_read) usbnet_get_settings()
954 return mii_ethtool_gset(&dev->mii, cmd);
960 struct usbnet *dev = netdev_priv(net); usbnet_set_settings()
963 if (!dev->mii.mdio_write) usbnet_set_settings()
966 retval = mii_ethtool_sset(&dev->mii, cmd); usbnet_set_settings()
969 if (dev->driver_info->link_reset) usbnet_set_settings()
970 dev->driver_info->link_reset(dev); usbnet_set_settings()
973 usbnet_update_max_qlen(dev); usbnet_set_settings()
982 struct usbnet *dev = netdev_priv(net); usbnet_get_link()
985 if (dev->driver_info->check_connect) usbnet_get_link()
986 return dev->driver_info->check_connect (dev) == 0; usbnet_get_link()
989 if (dev->mii.mdio_read) usbnet_get_link()
990 return mii_link_ok(&dev->mii); usbnet_get_link()
999 struct usbnet *dev = netdev_priv(net); usbnet_nway_reset()
1001 if (!dev->mii.mdio_write) usbnet_nway_reset()
1004 return mii_nway_restart(&dev->mii);
1010 struct usbnet *dev = netdev_priv(net); usbnet_get_drvinfo()
1012 strlcpy (info->driver, dev->driver_name, sizeof info->driver); usbnet_get_drvinfo()
1014 strlcpy (info->fw_version, dev->driver_info->description, usbnet_get_drvinfo()
1016 usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
1022 struct usbnet *dev = netdev_priv(net); usbnet_get_msglevel()
1024 return dev->msg_enable;
1030 struct usbnet *dev = netdev_priv(net); usbnet_set_msglevel()
1032 dev->msg_enable = level;
1050 static void __handle_link_change(struct usbnet *dev) __handle_link_change()
1052 if (!test_bit(EVENT_DEV_OPEN, &dev->flags)) __handle_link_change()
1055 if (!netif_carrier_ok(dev->net)) { __handle_link_change()
1057 unlink_urbs(dev, &dev->rxq); __handle_link_change()
1065 tasklet_schedule(&dev->bh); __handle_link_change()
1069 usbnet_update_max_qlen(dev); __handle_link_change()
1071 clear_bit(EVENT_LINK_CHANGE, &dev->flags);
1076 struct usbnet *dev = netdev_priv(net); usbnet_set_rx_mode()
1078 usbnet_defer_kevent(dev, EVENT_SET_RX_MODE);
1081 static void __handle_set_rx_mode(struct usbnet *dev) __handle_set_rx_mode()
1083 if (dev->driver_info->set_rx_mode) __handle_set_rx_mode()
1084 (dev->driver_info->set_rx_mode)(dev); __handle_set_rx_mode()
1086 clear_bit(EVENT_SET_RX_MODE, &dev->flags);
1097 struct usbnet *dev = usbnet_deferred_kevent()
1102 if (test_bit (EVENT_TX_HALT, &dev->flags)) { usbnet_deferred_kevent()
1103 unlink_urbs (dev, &dev->txq); usbnet_deferred_kevent()
1104 status = usb_autopm_get_interface(dev->intf); usbnet_deferred_kevent()
1107 status = usb_clear_halt (dev->udev, dev->out); usbnet_deferred_kevent()
1108 usb_autopm_put_interface(dev->intf); usbnet_deferred_kevent()
1112 if (netif_msg_tx_err (dev)) usbnet_deferred_kevent()
1114 netdev_err(dev->net, "can't clear tx halt, status %d\n", usbnet_deferred_kevent()
1117 clear_bit (EVENT_TX_HALT, &dev->flags); usbnet_deferred_kevent()
1119 netif_wake_queue (dev->net); usbnet_deferred_kevent()
1122 if (test_bit (EVENT_RX_HALT, &dev->flags)) { usbnet_deferred_kevent()
1123 unlink_urbs (dev, &dev->rxq); usbnet_deferred_kevent()
1124 status = usb_autopm_get_interface(dev->intf); usbnet_deferred_kevent()
1127 status = usb_clear_halt (dev->udev, dev->in); usbnet_deferred_kevent()
1128 usb_autopm_put_interface(dev->intf); usbnet_deferred_kevent()
1132 if (netif_msg_rx_err (dev)) usbnet_deferred_kevent()
1134 netdev_err(dev->net, "can't clear rx halt, status %d\n", usbnet_deferred_kevent()
1137 clear_bit (EVENT_RX_HALT, &dev->flags); usbnet_deferred_kevent()
1138 tasklet_schedule (&dev->bh); usbnet_deferred_kevent()
1143 if (test_bit (EVENT_RX_MEMORY, &dev->flags)) { usbnet_deferred_kevent()
1147 if (netif_running (dev->net)) usbnet_deferred_kevent()
1150 clear_bit (EVENT_RX_MEMORY, &dev->flags); usbnet_deferred_kevent()
1152 clear_bit (EVENT_RX_MEMORY, &dev->flags); usbnet_deferred_kevent()
1153 status = usb_autopm_get_interface(dev->intf); usbnet_deferred_kevent()
1158 if (rx_submit (dev, urb, GFP_KERNEL) == -ENOLINK) usbnet_deferred_kevent()
1160 usb_autopm_put_interface(dev->intf); usbnet_deferred_kevent()
1163 tasklet_schedule (&dev->bh); usbnet_deferred_kevent()
1167 if (test_bit (EVENT_LINK_RESET, &dev->flags)) { usbnet_deferred_kevent()
1168 struct driver_info *info = dev->driver_info; usbnet_deferred_kevent()
1171 clear_bit (EVENT_LINK_RESET, &dev->flags); usbnet_deferred_kevent()
1172 status = usb_autopm_get_interface(dev->intf); usbnet_deferred_kevent()
1175 if(info->link_reset && (retval = info->link_reset(dev)) < 0) { usbnet_deferred_kevent()
1176 usb_autopm_put_interface(dev->intf); usbnet_deferred_kevent()
1178 netdev_info(dev->net, "link reset failed (%d) usbnet usb-%s-%s, %s\n", usbnet_deferred_kevent()
1180 dev->udev->bus->bus_name, usbnet_deferred_kevent()
1181 dev->udev->devpath, usbnet_deferred_kevent()
1184 usb_autopm_put_interface(dev->intf); usbnet_deferred_kevent()
1188 __handle_link_change(dev); usbnet_deferred_kevent()
1191 if (test_bit (EVENT_LINK_CHANGE, &dev->flags)) usbnet_deferred_kevent()
1192 __handle_link_change(dev); usbnet_deferred_kevent()
1194 if (test_bit (EVENT_SET_RX_MODE, &dev->flags)) usbnet_deferred_kevent()
1195 __handle_set_rx_mode(dev); usbnet_deferred_kevent()
1198 if (dev->flags) usbnet_deferred_kevent()
1199 netdev_dbg(dev->net, "kevent done, flags = 0x%lx\n", dev->flags);
1208 struct usbnet *dev = entry->dev; tx_complete()
1211 dev->net->stats.tx_packets += entry->packets; tx_complete()
1212 dev->net->stats.tx_bytes += entry->length; tx_complete()
1214 dev->net->stats.tx_errors++; tx_complete()
1218 usbnet_defer_kevent (dev, EVENT_TX_HALT); tx_complete()
1232 usb_mark_last_busy(dev->udev); tx_complete()
1233 if (!timer_pending (&dev->delay)) { tx_complete()
1234 mod_timer (&dev->delay, tx_complete()
1236 netif_dbg(dev, link, dev->net, tx_complete()
1239 netif_stop_queue (dev->net); tx_complete()
1242 netif_dbg(dev, tx_err, dev->net, tx_complete()
1248 usb_autopm_put_interface_async(dev->intf); tx_complete()
1249 (void) defer_bh(dev, skb, &dev->txq, tx_done);
1256 struct usbnet *dev = netdev_priv(net); usbnet_tx_timeout()
1258 unlink_urbs (dev, &dev->txq); usbnet_tx_timeout()
1259 tasklet_schedule (&dev->bh); usbnet_tx_timeout()
1264 if (dev->driver_info->recover) usbnet_tx_timeout()
1265 (dev->driver_info->recover)(dev);
1307 struct usbnet *dev = netdev_priv(net); usbnet_start_xmit()
1311 struct driver_info *info = dev->driver_info; usbnet_start_xmit()
1321 skb = info->tx_fixup (dev, skb, GFP_ATOMIC); usbnet_start_xmit()
1326 netif_dbg(dev, tx_err, dev->net, "can't tx_fixup skb\n"); usbnet_start_xmit()
1332 netif_dbg(dev, tx_err, dev->net, "no urb\n"); usbnet_start_xmit()
1338 entry->dev = dev; usbnet_start_xmit()
1340 usb_fill_bulk_urb (urb, dev->udev, dev->out, usbnet_start_xmit()
1342 if (dev->can_dma_sg) { usbnet_start_xmit()
1355 if (length % dev->maxpacket == 0) { usbnet_start_xmit()
1364 dev->padding_pkt, 1); usbnet_start_xmit()
1383 spin_lock_irqsave(&dev->txq.lock, flags); usbnet_start_xmit()
1384 retval = usb_autopm_get_interface_async(dev->intf); usbnet_start_xmit()
1386 spin_unlock_irqrestore(&dev->txq.lock, flags); usbnet_start_xmit()
1392 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { usbnet_start_xmit()
1394 usb_anchor_urb(urb, &dev->deferred); usbnet_start_xmit()
1398 spin_unlock_irqrestore(&dev->txq.lock, flags); usbnet_start_xmit()
1399 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); usbnet_start_xmit()
1407 usbnet_defer_kevent (dev, EVENT_TX_HALT); usbnet_start_xmit()
1408 usb_autopm_put_interface_async(dev->intf); usbnet_start_xmit()
1411 usb_autopm_put_interface_async(dev->intf); usbnet_start_xmit()
1412 netif_dbg(dev, tx_err, dev->net, usbnet_start_xmit()
1417 __usbnet_queue_skb(&dev->txq, skb, tx_start); usbnet_start_xmit()
1418 if (dev->txq.qlen >= TX_QLEN (dev)) usbnet_start_xmit()
1421 spin_unlock_irqrestore (&dev->txq.lock, flags); usbnet_start_xmit()
1424 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", retval); usbnet_start_xmit()
1426 dev->net->stats.tx_dropped++; usbnet_start_xmit()
1435 netif_dbg(dev, tx_queued, dev->net, usbnet_start_xmit()
1444 static int rx_alloc_submit(struct usbnet *dev, gfp_t flags) rx_alloc_submit()
1451 for (i = 0; i < 10 && dev->rxq.qlen < RX_QLEN(dev); i++) { rx_alloc_submit()
1454 ret = rx_submit(dev, urb, flags); rx_alloc_submit()
1472 struct usbnet *dev = (struct usbnet *) param; usbnet_bh()
1476 while ((skb = skb_dequeue (&dev->done))) { usbnet_bh()
1481 rx_process (dev, skb); usbnet_bh()
1490 netdev_dbg(dev->net, "bogus skb state %d\n", entry->state); usbnet_bh()
1495 clear_bit(EVENT_RX_KILL, &dev->flags); usbnet_bh()
1500 if (waitqueue_active(&dev->wait)) { usbnet_bh()
1501 if (dev->txq.qlen + dev->rxq.qlen + dev->done.qlen == 0) usbnet_bh()
1502 wake_up_all(&dev->wait); usbnet_bh()
1505 } else if (netif_running (dev->net) && usbnet_bh()
1506 netif_device_present (dev->net) && usbnet_bh()
1507 netif_carrier_ok(dev->net) && usbnet_bh()
1508 !timer_pending (&dev->delay) && usbnet_bh()
1509 !test_bit (EVENT_RX_HALT, &dev->flags)) { usbnet_bh()
1510 int temp = dev->rxq.qlen; usbnet_bh()
1512 if (temp < RX_QLEN(dev)) { usbnet_bh()
1513 if (rx_alloc_submit(dev, GFP_ATOMIC) == -ENOLINK) usbnet_bh()
1515 if (temp != dev->rxq.qlen) usbnet_bh()
1516 netif_dbg(dev, link, dev->net, usbnet_bh()
1518 temp, dev->rxq.qlen); usbnet_bh()
1519 if (dev->rxq.qlen < RX_QLEN(dev)) usbnet_bh()
1520 tasklet_schedule (&dev->bh); usbnet_bh()
1522 if (dev->txq.qlen < TX_QLEN (dev)) usbnet_bh()
1523 netif_wake_queue (dev->net); usbnet_bh()
1538 struct usbnet *dev; usbnet_disconnect()
1542 dev = usb_get_intfdata(intf); usbnet_disconnect()
1544 if (!dev) usbnet_disconnect()
1549 netif_info(dev, probe, dev->net, "unregister '%s' usb-%s-%s, %s\n", usbnet_disconnect()
1550 intf->dev.driver->name, usbnet_disconnect()
1552 dev->driver_info->description); usbnet_disconnect()
1554 net = dev->net; usbnet_disconnect()
1557 cancel_work_sync(&dev->kevent); usbnet_disconnect()
1559 usb_scuttle_anchored_urbs(&dev->deferred); usbnet_disconnect()
1561 if (dev->driver_info->unbind) usbnet_disconnect()
1562 dev->driver_info->unbind (dev, intf); usbnet_disconnect()
1564 usb_kill_urb(dev->interrupt); usbnet_disconnect()
1565 usb_free_urb(dev->interrupt); usbnet_disconnect()
1566 kfree(dev->padding_pkt); usbnet_disconnect()
1598 struct usbnet *dev; usbnet_probe()
1605 struct usb_driver *driver = to_usb_driver(udev->dev.driver); usbnet_probe()
1613 pm_runtime_enable(&udev->dev); usbnet_probe()
1616 name = udev->dev.driver->name; usbnet_probe()
1619 dev_dbg (&udev->dev, "blacklisted by %s\n", name); usbnet_probe()
1628 net = alloc_etherdev(sizeof(*dev)); usbnet_probe()
1633 SET_NETDEV_DEV(net, &udev->dev); usbnet_probe()
1635 dev = netdev_priv(net); usbnet_probe()
1636 dev->udev = xdev; usbnet_probe()
1637 dev->intf = udev; usbnet_probe()
1638 dev->driver_info = info; usbnet_probe()
1639 dev->driver_name = name; usbnet_probe()
1640 dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV usbnet_probe()
1642 init_waitqueue_head(&dev->wait); usbnet_probe()
1643 skb_queue_head_init (&dev->rxq); usbnet_probe()
1644 skb_queue_head_init (&dev->txq); usbnet_probe()
1645 skb_queue_head_init (&dev->done); usbnet_probe()
1646 skb_queue_head_init(&dev->rxq_pause); usbnet_probe()
1647 dev->bh.func = usbnet_bh; usbnet_probe()
1648 dev->bh.data = (unsigned long) dev; usbnet_probe()
1649 INIT_WORK (&dev->kevent, usbnet_deferred_kevent); usbnet_probe()
1650 init_usb_anchor(&dev->deferred); usbnet_probe()
1651 dev->delay.function = usbnet_bh; usbnet_probe()
1652 dev->delay.data = (unsigned long) dev; usbnet_probe()
1653 init_timer (&dev->delay); usbnet_probe()
1654 mutex_init (&dev->phy_mutex); usbnet_probe()
1655 mutex_init(&dev->interrupt_mutex); usbnet_probe()
1656 dev->interrupt_count = 0; usbnet_probe()
1658 dev->net = net; usbnet_probe()
1665 dev->hard_mtu = net->mtu + net->hard_header_len; usbnet_probe()
1674 status = info->bind (dev, udev); usbnet_probe()
1681 if ((dev->driver_info->flags & FLAG_ETHER) != 0 && usbnet_probe()
1682 ((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 || usbnet_probe()
1686 if ((dev->driver_info->flags & FLAG_WLAN) != 0) usbnet_probe()
1689 if ((dev->driver_info->flags & FLAG_WWAN) != 0) usbnet_probe()
1693 if ((dev->driver_info->flags & FLAG_NOARP) != 0) usbnet_probe()
1697 if (net->mtu > (dev->hard_mtu - net->hard_header_len)) usbnet_probe()
1698 net->mtu = dev->hard_mtu - net->hard_header_len; usbnet_probe()
1700 status = usbnet_get_endpoints (dev, udev); usbnet_probe()
1702 dev->in = usb_rcvbulkpipe (xdev, info->in); usbnet_probe()
1703 dev->out = usb_sndbulkpipe (xdev, info->out); usbnet_probe()
1712 if (status >= 0 && dev->status) usbnet_probe()
1713 status = init_status (dev, udev); usbnet_probe()
1717 if (!dev->rx_urb_size) usbnet_probe()
1718 dev->rx_urb_size = dev->hard_mtu; usbnet_probe()
1719 dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1); usbnet_probe()
1725 if ((dev->driver_info->flags & FLAG_WLAN) != 0) usbnet_probe()
1727 if ((dev->driver_info->flags & FLAG_WWAN) != 0) usbnet_probe()
1731 usbnet_update_max_qlen(dev); usbnet_probe()
1733 if (dev->can_dma_sg && !(info->flags & FLAG_SEND_ZLP) && usbnet_probe()
1735 dev->padding_pkt = kzalloc(1, GFP_KERNEL); usbnet_probe()
1736 if (!dev->padding_pkt) { usbnet_probe()
1745 netif_info(dev, probe, dev->net, usbnet_probe()
1747 udev->dev.driver->name, usbnet_probe()
1749 dev->driver_info->description, usbnet_probe()
1753 usb_set_intfdata (udev, dev); usbnet_probe()
1757 if (dev->driver_info->flags & FLAG_LINK_INTR) usbnet_probe()
1758 usbnet_link_change(dev, 0, 0); usbnet_probe()
1763 kfree(dev->padding_pkt); usbnet_probe()
1765 usb_free_urb(dev->interrupt); usbnet_probe()
1768 info->unbind (dev, udev); usbnet_probe()
1775 cancel_work_sync(&dev->kevent); usbnet_probe()
1776 del_timer_sync(&dev->delay); usbnet_probe()
1792 struct usbnet *dev = usb_get_intfdata(intf); usbnet_suspend()
1794 if (!dev->suspend_count++) { usbnet_suspend()
1795 spin_lock_irq(&dev->txq.lock); usbnet_suspend()
1797 if (dev->txq.qlen && PMSG_IS_AUTO(message)) { usbnet_suspend()
1798 dev->suspend_count--; usbnet_suspend()
1799 spin_unlock_irq(&dev->txq.lock); usbnet_suspend()
1802 set_bit(EVENT_DEV_ASLEEP, &dev->flags); usbnet_suspend()
1803 spin_unlock_irq(&dev->txq.lock); usbnet_suspend()
1809 netif_device_detach (dev->net); usbnet_suspend()
1810 usbnet_terminate_urbs(dev); usbnet_suspend()
1811 __usbnet_status_stop_force(dev); usbnet_suspend()
1817 netif_device_attach (dev->net); usbnet_suspend()
1825 struct usbnet *dev = usb_get_intfdata(intf); usbnet_resume()
1830 if (!--dev->suspend_count) { usbnet_resume()
1832 __usbnet_status_start_force(dev, GFP_NOIO); usbnet_resume()
1834 spin_lock_irq(&dev->txq.lock); usbnet_resume()
1835 while ((res = usb_get_from_anchor(&dev->deferred))) { usbnet_resume()
1843 usb_autopm_put_interface_async(dev->intf); usbnet_resume()
1845 dev->net->trans_start = jiffies; usbnet_resume()
1846 __skb_queue_tail(&dev->txq, skb); usbnet_resume()
1851 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); usbnet_resume()
1852 spin_unlock_irq(&dev->txq.lock); usbnet_resume()
1854 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { usbnet_resume()
1858 if (netif_device_present(dev->net) && usbnet_resume()
1859 !timer_pending(&dev->delay) && usbnet_resume()
1860 !test_bit(EVENT_RX_HALT, &dev->flags)) usbnet_resume()
1861 rx_alloc_submit(dev, GFP_NOIO); usbnet_resume()
1863 if (!(dev->txq.qlen >= TX_QLEN(dev))) usbnet_resume()
1864 netif_tx_wake_all_queues(dev->net); usbnet_resume()
1865 tasklet_schedule (&dev->bh); usbnet_resume()
1869 if (test_and_clear_bit(EVENT_DEVICE_REPORT_IDLE, &dev->flags)) usbnet_resume()
1881 void usbnet_device_suggests_idle(struct usbnet *dev) usbnet_device_suggests_idle()
1883 if (!test_and_set_bit(EVENT_DEVICE_REPORT_IDLE, &dev->flags)) { usbnet_device_suggests_idle()
1884 dev->intf->needs_remote_wakeup = 1; usbnet_device_suggests_idle()
1885 usb_autopm_put_interface_async(dev->intf); usbnet_device_suggests_idle()
1893 int usbnet_manage_power(struct usbnet *dev, int on) usbnet_manage_power()
1895 dev->intf->needs_remote_wakeup = on; usbnet_manage_power()
1900 void usbnet_link_change(struct usbnet *dev, bool link, bool need_reset) usbnet_link_change()
1904 netif_carrier_on(dev->net); usbnet_link_change()
1906 netif_carrier_off(dev->net); usbnet_link_change()
1909 usbnet_defer_kevent(dev, EVENT_LINK_RESET); usbnet_link_change()
1911 usbnet_defer_kevent(dev, EVENT_LINK_CHANGE);
1916 static int __usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, __usbnet_read_cmd()
1922 netdev_dbg(dev->net, "usbnet_read_cmd cmd=0x%02x reqtype=%02x" __usbnet_read_cmd()
1932 err = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), __usbnet_read_cmd()
1942 static int __usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, __usbnet_write_cmd()
1949 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" __usbnet_write_cmd()
1959 err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), __usbnet_write_cmd()
1990 dev_err(&intf->dev, "skipping garbage byte\n"); cdc_parse_cdc_header()
1995 dev_err(&intf->dev, "skipping garbage\n"); cdc_parse_cdc_header()
2004 dev_err(&intf->dev, "More than one union descriptor, skipping ...\n"); cdc_parse_cdc_header()
2086 dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n", cdc_parse_cdc_header()
2109 int usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, usbnet_read_cmd()
2114 if (usb_autopm_get_interface(dev->intf) < 0) usbnet_read_cmd()
2116 ret = __usbnet_read_cmd(dev, cmd, reqtype, value, index, usbnet_read_cmd()
2118 usb_autopm_put_interface(dev->intf); usbnet_read_cmd()
2127 int usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, usbnet_write_cmd()
2132 if (usb_autopm_get_interface(dev->intf) < 0) usbnet_write_cmd()
2134 ret = __usbnet_write_cmd(dev, cmd, reqtype, value, index, usbnet_write_cmd()
2136 usb_autopm_put_interface(dev->intf); usbnet_write_cmd()
2145 int usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, usbnet_read_cmd_nopm()
2148 return __usbnet_read_cmd(dev, cmd, reqtype, value, index, usbnet_read_cmd_nopm()
2157 int usbnet_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, usbnet_write_cmd_nopm()
2161 return __usbnet_write_cmd(dev, cmd, reqtype, value, index, usbnet_write_cmd_nopm()
2172 dev_dbg(&urb->dev->dev, "%s failed with %d", usbnet_async_cmd_cb()
2183 int usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype, usbnet_write_cmd_async()
2191 netdev_dbg(dev->net, "usbnet_write_cmd cmd=0x%02x reqtype=%02x" usbnet_write_cmd_async()
2197 netdev_err(dev->net, "Error allocating URB in" usbnet_write_cmd_async()
2205 netdev_err(dev->net, "Error allocating buffer" usbnet_write_cmd_async()
2221 usb_fill_control_urb(urb, dev->udev, usbnet_write_cmd_async()
2222 usb_sndctrlpipe(dev->udev, 0), usbnet_write_cmd_async()
2229 netdev_err(dev->net, "Error submitting the control" usbnet_write_cmd_async()
379 struct usbnet *dev = netdev_priv(net); usbnet_change_mtu() local
421 defer_bh(struct usbnet *dev, struct sk_buff *skb, struct sk_buff_head *list, enum skb_state state) defer_bh() argument
452 usbnet_defer_kevent(struct usbnet *dev, int work) usbnet_defer_kevent() argument
468 rx_submit(struct usbnet *dev, struct urb *urb, gfp_t flags) rx_submit() argument
541 rx_process(struct usbnet *dev, struct sk_buff *skb) rx_process() argument
575 struct usbnet *dev = entry->dev; rx_complete() local
663 usbnet_pause_rx(struct usbnet *dev) usbnet_pause_rx() argument
671 usbnet_resume_rx(struct usbnet *dev) usbnet_resume_rx() argument
690 usbnet_purge_paused_rxq(struct usbnet *dev) usbnet_purge_paused_rxq() argument
700 unlink_urbs(struct usbnet *dev, struct sk_buff_head *q) unlink_urbs() argument
748 usbnet_unlink_rx_urbs(struct usbnet *dev) usbnet_unlink_rx_urbs() argument
774 usbnet_terminate_urbs(struct usbnet *dev) usbnet_terminate_urbs() argument
797 struct usbnet *dev = netdev_priv(net); usbnet_stop() local
859 struct usbnet *dev = netdev_priv(net); usbnet_open() local
948 struct usbnet *dev = netdev_priv(net); usbnet_get_settings() local
959 struct usbnet *dev = netdev_priv(net); usbnet_set_settings() local
981 struct usbnet *dev = netdev_priv(net); usbnet_get_link() local
998 struct usbnet *dev = netdev_priv(net); usbnet_nway_reset() local
1009 struct usbnet *dev = netdev_priv(net); usbnet_get_drvinfo() local
1021 struct usbnet *dev = netdev_priv(net); usbnet_get_msglevel() local
1029 struct usbnet *dev = netdev_priv(net); usbnet_set_msglevel() local
1049 __handle_link_change(struct usbnet *dev) __handle_link_change() argument
1075 struct usbnet *dev = netdev_priv(net); usbnet_set_rx_mode() local
1080 __handle_set_rx_mode(struct usbnet *dev) __handle_set_rx_mode() argument
1096 struct usbnet *dev = usbnet_deferred_kevent() local
1207 struct usbnet *dev = entry->dev; tx_complete() local
1255 struct usbnet *dev = netdev_priv(net); usbnet_tx_timeout() local
1306 struct usbnet *dev = netdev_priv(net); usbnet_start_xmit() local
1443 rx_alloc_submit(struct usbnet *dev, gfp_t flags) rx_alloc_submit() argument
1471 struct usbnet *dev = (struct usbnet *) param; usbnet_bh() local
1537 struct usbnet *dev; usbnet_disconnect() local
1597 struct usbnet *dev; usbnet_probe() local
1791 struct usbnet *dev = usb_get_intfdata(intf); usbnet_suspend() local
1824 struct usbnet *dev = usb_get_intfdata(intf); usbnet_resume() local
1880 usbnet_device_suggests_idle(struct usbnet *dev) usbnet_device_suggests_idle() argument
1892 usbnet_manage_power(struct usbnet *dev, int on) usbnet_manage_power() argument
1899 usbnet_link_change(struct usbnet *dev, bool link, bool need_reset) usbnet_link_change() argument
1915 __usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, void *data, u16 size) __usbnet_read_cmd() argument
1941 __usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, const void *data, u16 size) __usbnet_write_cmd() argument
2108 usbnet_read_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, void *data, u16 size) usbnet_read_cmd() argument
2126 usbnet_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, const void *data, u16 size) usbnet_write_cmd() argument
2144 usbnet_read_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, void *data, u16 size) usbnet_read_cmd_nopm() argument
2156 usbnet_write_cmd_nopm(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, const void *data, u16 size) usbnet_write_cmd_nopm() argument
2182 usbnet_write_cmd_async(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, const void *data, u16 size) usbnet_write_cmd_async() argument
H A Dsmsc75xx.c65 struct usbnet *dev; member in struct:smsc75xx_priv
77 struct usbnet *dev; member in struct:usb_context
84 static int __must_check __smsc75xx_read_reg(struct usbnet *dev, u32 index, __smsc75xx_read_reg() argument
91 BUG_ON(!dev); __smsc75xx_read_reg()
98 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN __smsc75xx_read_reg()
102 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", __smsc75xx_read_reg()
111 static int __must_check __smsc75xx_write_reg(struct usbnet *dev, u32 index, __smsc75xx_write_reg() argument
118 BUG_ON(!dev); __smsc75xx_write_reg()
128 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT __smsc75xx_write_reg()
132 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", __smsc75xx_write_reg()
138 static int __must_check smsc75xx_read_reg_nopm(struct usbnet *dev, u32 index, smsc75xx_read_reg_nopm() argument
141 return __smsc75xx_read_reg(dev, index, data, 1); smsc75xx_read_reg_nopm()
144 static int __must_check smsc75xx_write_reg_nopm(struct usbnet *dev, u32 index, smsc75xx_write_reg_nopm() argument
147 return __smsc75xx_write_reg(dev, index, data, 1); smsc75xx_write_reg_nopm()
150 static int __must_check smsc75xx_read_reg(struct usbnet *dev, u32 index, smsc75xx_read_reg() argument
153 return __smsc75xx_read_reg(dev, index, data, 0); smsc75xx_read_reg()
156 static int __must_check smsc75xx_write_reg(struct usbnet *dev, u32 index, smsc75xx_write_reg() argument
159 return __smsc75xx_write_reg(dev, index, data, 0); smsc75xx_write_reg()
164 static __must_check int __smsc75xx_phy_wait_not_busy(struct usbnet *dev, __smsc75xx_phy_wait_not_busy() argument
172 ret = __smsc75xx_read_reg(dev, MII_ACCESS, &val, in_pm); __smsc75xx_phy_wait_not_busy()
174 netdev_warn(dev->net, "Error reading MII_ACCESS\n"); __smsc75xx_phy_wait_not_busy()
188 struct usbnet *dev = netdev_priv(netdev); __smsc75xx_mdio_read() local
192 mutex_lock(&dev->phy_mutex); __smsc75xx_mdio_read()
195 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); __smsc75xx_mdio_read()
197 netdev_warn(dev->net, "MII is busy in smsc75xx_mdio_read\n"); __smsc75xx_mdio_read()
202 phy_id &= dev->mii.phy_id_mask; __smsc75xx_mdio_read()
203 idx &= dev->mii.reg_num_mask; __smsc75xx_mdio_read()
207 ret = __smsc75xx_write_reg(dev, MII_ACCESS, addr, in_pm); __smsc75xx_mdio_read()
209 netdev_warn(dev->net, "Error writing MII_ACCESS\n"); __smsc75xx_mdio_read()
213 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); __smsc75xx_mdio_read()
215 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); __smsc75xx_mdio_read()
219 ret = __smsc75xx_read_reg(dev, MII_DATA, &val, in_pm); __smsc75xx_mdio_read()
221 netdev_warn(dev->net, "Error reading MII_DATA\n"); __smsc75xx_mdio_read()
228 mutex_unlock(&dev->phy_mutex); __smsc75xx_mdio_read()
235 struct usbnet *dev = netdev_priv(netdev); __smsc75xx_mdio_write() local
239 mutex_lock(&dev->phy_mutex); __smsc75xx_mdio_write()
242 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); __smsc75xx_mdio_write()
244 netdev_warn(dev->net, "MII is busy in smsc75xx_mdio_write\n"); __smsc75xx_mdio_write()
249 ret = __smsc75xx_write_reg(dev, MII_DATA, val, in_pm); __smsc75xx_mdio_write()
251 netdev_warn(dev->net, "Error writing MII_DATA\n"); __smsc75xx_mdio_write()
256 phy_id &= dev->mii.phy_id_mask; __smsc75xx_mdio_write()
257 idx &= dev->mii.reg_num_mask; __smsc75xx_mdio_write()
261 ret = __smsc75xx_write_reg(dev, MII_ACCESS, addr, in_pm); __smsc75xx_mdio_write()
263 netdev_warn(dev->net, "Error writing MII_ACCESS\n"); __smsc75xx_mdio_write()
267 ret = __smsc75xx_phy_wait_not_busy(dev, in_pm); __smsc75xx_mdio_write()
269 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); __smsc75xx_mdio_write()
274 mutex_unlock(&dev->phy_mutex); __smsc75xx_mdio_write()
300 static int smsc75xx_wait_eeprom(struct usbnet *dev) smsc75xx_wait_eeprom() argument
307 ret = smsc75xx_read_reg(dev, E2P_CMD, &val); smsc75xx_wait_eeprom()
309 netdev_warn(dev->net, "Error reading E2P_CMD\n"); smsc75xx_wait_eeprom()
319 netdev_warn(dev->net, "EEPROM read operation timeout\n"); smsc75xx_wait_eeprom()
326 static int smsc75xx_eeprom_confirm_not_busy(struct usbnet *dev) smsc75xx_eeprom_confirm_not_busy() argument
333 ret = smsc75xx_read_reg(dev, E2P_CMD, &val); smsc75xx_eeprom_confirm_not_busy()
335 netdev_warn(dev->net, "Error reading E2P_CMD\n"); smsc75xx_eeprom_confirm_not_busy()
345 netdev_warn(dev->net, "EEPROM is busy\n"); smsc75xx_eeprom_confirm_not_busy()
349 static int smsc75xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, smsc75xx_read_eeprom() argument
355 BUG_ON(!dev); smsc75xx_read_eeprom()
358 ret = smsc75xx_eeprom_confirm_not_busy(dev); smsc75xx_read_eeprom()
364 ret = smsc75xx_write_reg(dev, E2P_CMD, val); smsc75xx_read_eeprom()
366 netdev_warn(dev->net, "Error writing E2P_CMD\n"); smsc75xx_read_eeprom()
370 ret = smsc75xx_wait_eeprom(dev); smsc75xx_read_eeprom()
374 ret = smsc75xx_read_reg(dev, E2P_DATA, &val); smsc75xx_read_eeprom()
376 netdev_warn(dev->net, "Error reading E2P_DATA\n"); smsc75xx_read_eeprom()
387 static int smsc75xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, smsc75xx_write_eeprom() argument
393 BUG_ON(!dev); smsc75xx_write_eeprom()
396 ret = smsc75xx_eeprom_confirm_not_busy(dev); smsc75xx_write_eeprom()
402 ret = smsc75xx_write_reg(dev, E2P_CMD, val); smsc75xx_write_eeprom()
404 netdev_warn(dev->net, "Error writing E2P_CMD\n"); smsc75xx_write_eeprom()
408 ret = smsc75xx_wait_eeprom(dev); smsc75xx_write_eeprom()
416 ret = smsc75xx_write_reg(dev, E2P_DATA, val); smsc75xx_write_eeprom()
418 netdev_warn(dev->net, "Error writing E2P_DATA\n"); smsc75xx_write_eeprom()
424 ret = smsc75xx_write_reg(dev, E2P_CMD, val); smsc75xx_write_eeprom()
426 netdev_warn(dev->net, "Error writing E2P_CMD\n"); smsc75xx_write_eeprom()
430 ret = smsc75xx_wait_eeprom(dev); smsc75xx_write_eeprom()
440 static int smsc75xx_dataport_wait_not_busy(struct usbnet *dev) smsc75xx_dataport_wait_not_busy() argument
446 ret = smsc75xx_read_reg(dev, DP_SEL, &dp_sel); smsc75xx_dataport_wait_not_busy()
448 netdev_warn(dev->net, "Error reading DP_SEL\n"); smsc75xx_dataport_wait_not_busy()
458 netdev_warn(dev->net, "smsc75xx_dataport_wait_not_busy timed out\n"); smsc75xx_dataport_wait_not_busy()
463 static int smsc75xx_dataport_write(struct usbnet *dev, u32 ram_select, u32 addr, smsc75xx_dataport_write() argument
466 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_dataport_write()
472 ret = smsc75xx_dataport_wait_not_busy(dev); smsc75xx_dataport_write()
474 netdev_warn(dev->net, "smsc75xx_dataport_write busy on entry\n"); smsc75xx_dataport_write()
478 ret = smsc75xx_read_reg(dev, DP_SEL, &dp_sel); smsc75xx_dataport_write()
480 netdev_warn(dev->net, "Error reading DP_SEL\n"); smsc75xx_dataport_write()
486 ret = smsc75xx_write_reg(dev, DP_SEL, dp_sel); smsc75xx_dataport_write()
488 netdev_warn(dev->net, "Error writing DP_SEL\n"); smsc75xx_dataport_write()
493 ret = smsc75xx_write_reg(dev, DP_ADDR, addr + i); smsc75xx_dataport_write()
495 netdev_warn(dev->net, "Error writing DP_ADDR\n"); smsc75xx_dataport_write()
499 ret = smsc75xx_write_reg(dev, DP_DATA, buf[i]); smsc75xx_dataport_write()
501 netdev_warn(dev->net, "Error writing DP_DATA\n"); smsc75xx_dataport_write()
505 ret = smsc75xx_write_reg(dev, DP_CMD, DP_CMD_WRITE); smsc75xx_dataport_write()
507 netdev_warn(dev->net, "Error writing DP_CMD\n"); smsc75xx_dataport_write()
511 ret = smsc75xx_dataport_wait_not_busy(dev); smsc75xx_dataport_write()
513 netdev_warn(dev->net, "smsc75xx_dataport_write timeout\n"); smsc75xx_dataport_write()
533 struct usbnet *dev = pdata->dev; smsc75xx_deferred_multicast_write() local
536 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", smsc75xx_deferred_multicast_write()
539 smsc75xx_dataport_write(dev, DP_SEL_VHF, DP_SEL_VHF_VLAN_LEN, smsc75xx_deferred_multicast_write()
542 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); smsc75xx_deferred_multicast_write()
544 netdev_warn(dev->net, "Error writing RFE_CRL\n"); smsc75xx_deferred_multicast_write()
549 struct usbnet *dev = netdev_priv(netdev); smsc75xx_set_multicast() local
550 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_set_multicast()
563 if (dev->net->flags & IFF_PROMISC) { smsc75xx_set_multicast()
564 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); smsc75xx_set_multicast()
566 } else if (dev->net->flags & IFF_ALLMULTI) { smsc75xx_set_multicast()
567 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); smsc75xx_set_multicast()
569 } else if (!netdev_mc_empty(dev->net)) { smsc75xx_set_multicast()
572 netif_dbg(dev, drv, dev->net, "receive multicast hash filter\n"); smsc75xx_set_multicast()
582 netif_dbg(dev, drv, dev->net, "receive own packets only\n");
592 static int smsc75xx_update_flowcontrol(struct usbnet *dev, u8 duplex, smsc75xx_update_flowcontrol() argument
610 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", smsc75xx_update_flowcontrol()
614 netif_dbg(dev, link, dev->net, "half duplex\n"); smsc75xx_update_flowcontrol()
617 ret = smsc75xx_write_reg(dev, FLOW, flow); smsc75xx_update_flowcontrol()
619 netdev_warn(dev->net, "Error writing FLOW\n"); smsc75xx_update_flowcontrol()
623 ret = smsc75xx_write_reg(dev, FCT_FLOW, fct_flow); smsc75xx_update_flowcontrol()
625 netdev_warn(dev->net, "Error writing FCT_FLOW\n"); smsc75xx_update_flowcontrol()
632 static int smsc75xx_link_reset(struct usbnet *dev) smsc75xx_link_reset() argument
634 struct mii_if_info *mii = &dev->mii; smsc75xx_link_reset()
640 smsc75xx_mdio_write(dev->net, mii->phy_id, PHY_INT_SRC, smsc75xx_link_reset()
643 ret = smsc75xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL); smsc75xx_link_reset()
645 netdev_warn(dev->net, "Error writing INT_STS\n"); smsc75xx_link_reset()
650 mii_ethtool_gset(&dev->mii, &ecmd); smsc75xx_link_reset()
651 lcladv = smsc75xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); smsc75xx_link_reset()
652 rmtadv = smsc75xx_mdio_read(dev->net, mii->phy_id, MII_LPA); smsc75xx_link_reset()
654 netif_dbg(dev, link, dev->net, "speed: %u duplex: %d lcladv: %04x rmtadv: %04x\n", smsc75xx_link_reset()
657 return smsc75xx_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); smsc75xx_link_reset()
660 static void smsc75xx_status(struct usbnet *dev, struct urb *urb) smsc75xx_status() argument
665 netdev_warn(dev->net, "unexpected urb length %d\n", smsc75xx_status()
673 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); smsc75xx_status()
676 usbnet_defer_kevent(dev, EVENT_LINK_RESET); smsc75xx_status()
678 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", smsc75xx_status()
690 struct usbnet *dev = netdev_priv(netdev); smsc75xx_ethtool_get_eeprom() local
694 return smsc75xx_read_eeprom(dev, ee->offset, ee->len, data); smsc75xx_ethtool_get_eeprom()
700 struct usbnet *dev = netdev_priv(netdev); smsc75xx_ethtool_set_eeprom() local
703 netdev_warn(dev->net, "EEPROM: magic value mismatch: 0x%x\n", smsc75xx_ethtool_set_eeprom()
708 return smsc75xx_write_eeprom(dev, ee->offset, ee->len, data); smsc75xx_ethtool_set_eeprom()
714 struct usbnet *dev = netdev_priv(net); smsc75xx_ethtool_get_wol() local
715 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_ethtool_get_wol()
724 struct usbnet *dev = netdev_priv(net); smsc75xx_ethtool_set_wol() local
725 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_ethtool_set_wol()
730 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); smsc75xx_ethtool_set_wol()
732 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret); smsc75xx_ethtool_set_wol()
754 struct usbnet *dev = netdev_priv(netdev); smsc75xx_ioctl() local
759 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); smsc75xx_ioctl()
762 static void smsc75xx_init_mac_address(struct usbnet *dev) smsc75xx_init_mac_address() argument
765 if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, smsc75xx_init_mac_address()
766 dev->net->dev_addr) == 0) { smsc75xx_init_mac_address()
767 if (is_valid_ether_addr(dev->net->dev_addr)) { smsc75xx_init_mac_address()
769 netif_dbg(dev, ifup, dev->net, smsc75xx_init_mac_address()
776 eth_hw_addr_random(dev->net); smsc75xx_init_mac_address()
777 netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); smsc75xx_init_mac_address()
780 static int smsc75xx_set_mac_address(struct usbnet *dev) smsc75xx_set_mac_address() argument
782 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 | smsc75xx_set_mac_address()
783 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24; smsc75xx_set_mac_address()
784 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8; smsc75xx_set_mac_address()
786 int ret = smsc75xx_write_reg(dev, RX_ADDRH, addr_hi); smsc75xx_set_mac_address()
788 netdev_warn(dev->net, "Failed to write RX_ADDRH: %d\n", ret); smsc75xx_set_mac_address()
792 ret = smsc75xx_write_reg(dev, RX_ADDRL, addr_lo); smsc75xx_set_mac_address()
794 netdev_warn(dev->net, "Failed to write RX_ADDRL: %d\n", ret); smsc75xx_set_mac_address()
799 ret = smsc75xx_write_reg(dev, ADDR_FILTX, addr_hi); smsc75xx_set_mac_address()
801 netdev_warn(dev->net, "Failed to write ADDR_FILTX: %d\n", ret); smsc75xx_set_mac_address()
805 ret = smsc75xx_write_reg(dev, ADDR_FILTX + 4, addr_lo); smsc75xx_set_mac_address()
807 netdev_warn(dev->net, "Failed to write ADDR_FILTX+4: %d\n", ret); smsc75xx_set_mac_address()
812 static int smsc75xx_phy_initialize(struct usbnet *dev) smsc75xx_phy_initialize() argument
817 dev->mii.dev = dev->net; smsc75xx_phy_initialize()
818 dev->mii.mdio_read = smsc75xx_mdio_read; smsc75xx_phy_initialize()
819 dev->mii.mdio_write = smsc75xx_mdio_write; smsc75xx_phy_initialize()
820 dev->mii.phy_id_mask = 0x1f; smsc75xx_phy_initialize()
821 dev->mii.reg_num_mask = 0x1f; smsc75xx_phy_initialize()
822 dev->mii.supports_gmii = 1; smsc75xx_phy_initialize()
823 dev->mii.phy_id = SMSC75XX_INTERNAL_PHY_ID; smsc75xx_phy_initialize()
826 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); smsc75xx_phy_initialize()
830 bmcr = smsc75xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR); smsc75xx_phy_initialize()
832 netdev_warn(dev->net, "Error reading MII_BMCR\n"); smsc75xx_phy_initialize()
839 netdev_warn(dev->net, "timeout on PHY Reset\n"); smsc75xx_phy_initialize()
843 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, smsc75xx_phy_initialize()
846 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, MII_CTRL1000, smsc75xx_phy_initialize()
850 ret = smsc75xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); smsc75xx_phy_initialize()
852 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); smsc75xx_phy_initialize()
856 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_SRC, 0xffff); smsc75xx_phy_initialize()
858 smsc75xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, smsc75xx_phy_initialize()
860 mii_nway_restart(&dev->mii); smsc75xx_phy_initialize()
862 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n"); smsc75xx_phy_initialize()
866 static int smsc75xx_set_rx_max_frame_length(struct usbnet *dev, int size) smsc75xx_set_rx_max_frame_length() argument
872 ret = smsc75xx_read_reg(dev, MAC_RX, &buf); smsc75xx_set_rx_max_frame_length()
874 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); smsc75xx_set_rx_max_frame_length()
882 ret = smsc75xx_write_reg(dev, MAC_RX, buf); smsc75xx_set_rx_max_frame_length()
884 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); smsc75xx_set_rx_max_frame_length()
893 ret = smsc75xx_write_reg(dev, MAC_RX, buf); smsc75xx_set_rx_max_frame_length()
895 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); smsc75xx_set_rx_max_frame_length()
901 ret = smsc75xx_write_reg(dev, MAC_RX, buf); smsc75xx_set_rx_max_frame_length()
903 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); smsc75xx_set_rx_max_frame_length()
913 struct usbnet *dev = netdev_priv(netdev); smsc75xx_change_mtu() local
919 ret = smsc75xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); smsc75xx_change_mtu()
921 netdev_warn(dev->net, "Failed to set mac rx frame length\n"); smsc75xx_change_mtu()
932 struct usbnet *dev = netdev_priv(netdev); smsc75xx_set_features() local
933 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_set_features()
947 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); smsc75xx_set_features()
949 netdev_warn(dev->net, "Error writing RFE_CTL\n"); smsc75xx_set_features()
954 static int smsc75xx_wait_ready(struct usbnet *dev, int in_pm) smsc75xx_wait_ready() argument
962 ret = __smsc75xx_read_reg(dev, PMT_CTL, &buf, in_pm); smsc75xx_wait_ready()
965 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); smsc75xx_wait_ready()
976 netdev_warn(dev->net, "timeout waiting for device ready\n"); smsc75xx_wait_ready()
980 static int smsc75xx_reset(struct usbnet *dev) smsc75xx_reset() argument
982 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_reset()
986 netif_dbg(dev, ifup, dev->net, "entering smsc75xx_reset\n"); smsc75xx_reset()
988 ret = smsc75xx_wait_ready(dev, 0); smsc75xx_reset()
990 netdev_warn(dev->net, "device not ready in smsc75xx_reset\n"); smsc75xx_reset()
994 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
996 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1002 ret = smsc75xx_write_reg(dev, HW_CFG, buf); smsc75xx_reset()
1004 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); smsc75xx_reset()
1011 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
1013 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1020 netdev_warn(dev->net, "timeout on completion of Lite Reset\n"); smsc75xx_reset()
1024 netif_dbg(dev, ifup, dev->net, "Lite reset complete, resetting PHY\n"); smsc75xx_reset()
1026 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); smsc75xx_reset()
1028 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); smsc75xx_reset()
1034 ret = smsc75xx_write_reg(dev, PMT_CTL, buf); smsc75xx_reset()
1036 netdev_warn(dev->net, "Failed to write PMT_CTL: %d\n", ret); smsc75xx_reset()
1043 ret = smsc75xx_read_reg(dev, PMT_CTL, &buf); smsc75xx_reset()
1045 netdev_warn(dev->net, "Failed to read PMT_CTL: %d\n", ret); smsc75xx_reset()
1052 netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); smsc75xx_reset()
1056 netif_dbg(dev, ifup, dev->net, "PHY reset complete\n"); smsc75xx_reset()
1058 ret = smsc75xx_set_mac_address(dev); smsc75xx_reset()
1060 netdev_warn(dev->net, "Failed to set mac address\n"); smsc75xx_reset()
1064 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", smsc75xx_reset()
1065 dev->net->dev_addr); smsc75xx_reset()
1067 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
1069 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1073 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", smsc75xx_reset()
1078 ret = smsc75xx_write_reg(dev, HW_CFG, buf); smsc75xx_reset()
1080 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); smsc75xx_reset()
1084 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
1086 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1090 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG after writing HW_CFG_BIR: 0x%08x\n", smsc75xx_reset()
1095 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; smsc75xx_reset()
1096 } else if (dev->udev->speed == USB_SPEED_HIGH) { smsc75xx_reset()
1098 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; smsc75xx_reset()
1101 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; smsc75xx_reset()
1104 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", smsc75xx_reset()
1105 (ulong)dev->rx_urb_size); smsc75xx_reset()
1107 ret = smsc75xx_write_reg(dev, BURST_CAP, buf); smsc75xx_reset()
1109 netdev_warn(dev->net, "Failed to write BURST_CAP: %d\n", ret); smsc75xx_reset()
1113 ret = smsc75xx_read_reg(dev, BURST_CAP, &buf); smsc75xx_reset()
1115 netdev_warn(dev->net, "Failed to read BURST_CAP: %d\n", ret); smsc75xx_reset()
1119 netif_dbg(dev, ifup, dev->net, smsc75xx_reset()
1122 ret = smsc75xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); smsc75xx_reset()
1124 netdev_warn(dev->net, "Failed to write BULK_IN_DLY: %d\n", ret); smsc75xx_reset()
1128 ret = smsc75xx_read_reg(dev, BULK_IN_DLY, &buf); smsc75xx_reset()
1130 netdev_warn(dev->net, "Failed to read BULK_IN_DLY: %d\n", ret); smsc75xx_reset()
1134 netif_dbg(dev, ifup, dev->net, smsc75xx_reset()
1138 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
1140 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1144 netif_dbg(dev, ifup, dev->net, "HW_CFG: 0x%08x\n", buf); smsc75xx_reset()
1148 ret = smsc75xx_write_reg(dev, HW_CFG, buf); smsc75xx_reset()
1150 netdev_warn(dev->net, "Failed to write HW_CFG: %d\n", ret); smsc75xx_reset()
1154 ret = smsc75xx_read_reg(dev, HW_CFG, &buf); smsc75xx_reset()
1156 netdev_warn(dev->net, "Failed to read HW_CFG: %d\n", ret); smsc75xx_reset()
1160 netif_dbg(dev, ifup, dev->net, "HW_CFG: 0x%08x\n", buf); smsc75xx_reset()
1165 ret = smsc75xx_write_reg(dev, FCT_RX_FIFO_END, buf); smsc75xx_reset()
1167 netdev_warn(dev->net, "Failed to write FCT_RX_FIFO_END: %d\n", ret); smsc75xx_reset()
1171 netif_dbg(dev, ifup, dev->net, "FCT_RX_FIFO_END set to 0x%08x\n", buf); smsc75xx_reset()
1174 ret = smsc75xx_write_reg(dev, FCT_TX_FIFO_END, buf); smsc75xx_reset()
1176 netdev_warn(dev->net, "Failed to write FCT_TX_FIFO_END: %d\n", ret); smsc75xx_reset()
1180 netif_dbg(dev, ifup, dev->net, "FCT_TX_FIFO_END set to 0x%08x\n", buf); smsc75xx_reset()
1182 ret = smsc75xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL); smsc75xx_reset()
1184 netdev_warn(dev->net, "Failed to write INT_STS: %d\n", ret); smsc75xx_reset()
1188 ret = smsc75xx_read_reg(dev, ID_REV, &buf); smsc75xx_reset()
1190 netdev_warn(dev->net, "Failed to read ID_REV: %d\n", ret); smsc75xx_reset()
1194 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", buf); smsc75xx_reset()
1196 ret = smsc75xx_read_reg(dev, E2P_CMD, &buf); smsc75xx_reset()
1198 netdev_warn(dev->net, "Failed to read E2P_CMD: %d\n", ret); smsc75xx_reset()
1204 ret = smsc75xx_read_reg(dev, LED_GPIO_CFG, &buf); smsc75xx_reset()
1206 netdev_warn(dev->net, "Failed to read LED_GPIO_CFG: %d\n", ret); smsc75xx_reset()
1213 ret = smsc75xx_write_reg(dev, LED_GPIO_CFG, buf); smsc75xx_reset()
1215 netdev_warn(dev->net, "Failed to write LED_GPIO_CFG: %d\n", ret); smsc75xx_reset()
1220 ret = smsc75xx_write_reg(dev, FLOW, 0); smsc75xx_reset()
1222 netdev_warn(dev->net, "Failed to write FLOW: %d\n", ret); smsc75xx_reset()
1226 ret = smsc75xx_write_reg(dev, FCT_FLOW, 0); smsc75xx_reset()
1228 netdev_warn(dev->net, "Failed to write FCT_FLOW: %d\n", ret); smsc75xx_reset()
1233 ret = smsc75xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); smsc75xx_reset()
1235 netdev_warn(dev->net, "Failed to read RFE_CTL: %d\n", ret); smsc75xx_reset()
1241 ret = smsc75xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); smsc75xx_reset()
1243 netdev_warn(dev->net, "Failed to write RFE_CTL: %d\n", ret); smsc75xx_reset()
1247 ret = smsc75xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); smsc75xx_reset()
1249 netdev_warn(dev->net, "Failed to read RFE_CTL: %d\n", ret); smsc75xx_reset()
1253 netif_dbg(dev, ifup, dev->net, "RFE_CTL set to 0x%08x\n", smsc75xx_reset()
1257 smsc75xx_set_features(dev->net, dev->net->features); smsc75xx_reset()
1259 smsc75xx_set_multicast(dev->net); smsc75xx_reset()
1261 ret = smsc75xx_phy_initialize(dev); smsc75xx_reset()
1263 netdev_warn(dev->net, "Failed to initialize PHY: %d\n", ret); smsc75xx_reset()
1267 ret = smsc75xx_read_reg(dev, INT_EP_CTL, &buf); smsc75xx_reset()
1269 netdev_warn(dev->net, "Failed to read INT_EP_CTL: %d\n", ret); smsc75xx_reset()
1276 ret = smsc75xx_write_reg(dev, INT_EP_CTL, buf); smsc75xx_reset()
1278 netdev_warn(dev->net, "Failed to write INT_EP_CTL: %d\n", ret); smsc75xx_reset()
1283 ret = smsc75xx_read_reg(dev, MAC_CR, &buf); smsc75xx_reset()
1285 netdev_warn(dev->net, "Failed to read MAC_CR: %d\n", ret); smsc75xx_reset()
1290 ret = smsc75xx_write_reg(dev, MAC_CR, buf); smsc75xx_reset()
1292 netdev_warn(dev->net, "Failed to write MAC_CR: %d\n", ret); smsc75xx_reset()
1296 ret = smsc75xx_read_reg(dev, MAC_TX, &buf); smsc75xx_reset()
1298 netdev_warn(dev->net, "Failed to read MAC_TX: %d\n", ret); smsc75xx_reset()
1304 ret = smsc75xx_write_reg(dev, MAC_TX, buf); smsc75xx_reset()
1306 netdev_warn(dev->net, "Failed to write MAC_TX: %d\n", ret); smsc75xx_reset()
1310 netif_dbg(dev, ifup, dev->net, "MAC_TX set to 0x%08x\n", buf); smsc75xx_reset()
1312 ret = smsc75xx_read_reg(dev, FCT_TX_CTL, &buf); smsc75xx_reset()
1314 netdev_warn(dev->net, "Failed to read FCT_TX_CTL: %d\n", ret); smsc75xx_reset()
1320 ret = smsc75xx_write_reg(dev, FCT_TX_CTL, buf); smsc75xx_reset()
1322 netdev_warn(dev->net, "Failed to write FCT_TX_CTL: %d\n", ret); smsc75xx_reset()
1326 netif_dbg(dev, ifup, dev->net, "FCT_TX_CTL set to 0x%08x\n", buf); smsc75xx_reset()
1328 ret = smsc75xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); smsc75xx_reset()
1330 netdev_warn(dev->net, "Failed to set max rx frame length\n"); smsc75xx_reset()
1334 ret = smsc75xx_read_reg(dev, MAC_RX, &buf); smsc75xx_reset()
1336 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); smsc75xx_reset()
1342 ret = smsc75xx_write_reg(dev, MAC_RX, buf); smsc75xx_reset()
1344 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); smsc75xx_reset()
1348 netif_dbg(dev, ifup, dev->net, "MAC_RX set to 0x%08x\n", buf); smsc75xx_reset()
1350 ret = smsc75xx_read_reg(dev, FCT_RX_CTL, &buf); smsc75xx_reset()
1352 netdev_warn(dev->net, "Failed to read FCT_RX_CTL: %d\n", ret); smsc75xx_reset()
1358 ret = smsc75xx_write_reg(dev, FCT_RX_CTL, buf); smsc75xx_reset()
1360 netdev_warn(dev->net, "Failed to write FCT_RX_CTL: %d\n", ret); smsc75xx_reset()
1364 netif_dbg(dev, ifup, dev->net, "FCT_RX_CTL set to 0x%08x\n", buf); smsc75xx_reset()
1366 netif_dbg(dev, ifup, dev->net, "smsc75xx_reset, return 0\n"); smsc75xx_reset()
1383 static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) smsc75xx_bind() argument
1390 ret = usbnet_get_endpoints(dev, intf); smsc75xx_bind()
1392 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); smsc75xx_bind()
1396 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc75xx_priv), smsc75xx_bind()
1399 pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_bind()
1403 pdata->dev = dev; smsc75xx_bind()
1411 dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; smsc75xx_bind()
1414 dev->net->features |= NETIF_F_RXCSUM; smsc75xx_bind()
1416 dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | smsc75xx_bind()
1419 ret = smsc75xx_wait_ready(dev, 0); smsc75xx_bind()
1421 netdev_warn(dev->net, "device not ready in smsc75xx_bind\n"); smsc75xx_bind()
1425 smsc75xx_init_mac_address(dev); smsc75xx_bind()
1428 ret = smsc75xx_reset(dev); smsc75xx_bind()
1430 netdev_warn(dev->net, "smsc75xx_reset error %d\n", ret); smsc75xx_bind()
1434 dev->net->netdev_ops = &smsc75xx_netdev_ops; smsc75xx_bind()
1435 dev->net->ethtool_ops = &smsc75xx_ethtool_ops; smsc75xx_bind()
1436 dev->net->flags |= IFF_MULTICAST; smsc75xx_bind()
1437 dev->net->hard_header_len += SMSC75XX_TX_OVERHEAD; smsc75xx_bind()
1438 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; smsc75xx_bind()
1442 static void smsc75xx_unbind(struct usbnet *dev, struct usb_interface *intf) smsc75xx_unbind() argument
1444 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_unbind()
1446 netif_dbg(dev, ifdown, dev->net, "free pdata\n"); smsc75xx_unbind()
1449 dev->data[0] = 0; smsc75xx_unbind()
1458 static int smsc75xx_write_wuff(struct usbnet *dev, int filter, u32 wuf_cfg, smsc75xx_write_wuff() argument
1465 ret = smsc75xx_write_reg(dev, cfg_base, wuf_cfg); smsc75xx_write_wuff()
1467 netdev_warn(dev->net, "Error writing WUF_CFGX\n"); smsc75xx_write_wuff()
1471 ret = smsc75xx_write_reg(dev, mask_base, wuf_mask1); smsc75xx_write_wuff()
1473 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); smsc75xx_write_wuff()
1477 ret = smsc75xx_write_reg(dev, mask_base + 4, 0); smsc75xx_write_wuff()
1479 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); smsc75xx_write_wuff()
1483 ret = smsc75xx_write_reg(dev, mask_base + 8, 0); smsc75xx_write_wuff()
1485 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); smsc75xx_write_wuff()
1489 ret = smsc75xx_write_reg(dev, mask_base + 12, 0); smsc75xx_write_wuff()
1491 netdev_warn(dev->net, "Error writing WUF_MASKX\n"); smsc75xx_write_wuff()
1498 static int smsc75xx_enter_suspend0(struct usbnet *dev) smsc75xx_enter_suspend0() argument
1500 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_enter_suspend0()
1504 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_enter_suspend0()
1506 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_enter_suspend0()
1513 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend0()
1515 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend0()
1524 static int smsc75xx_enter_suspend1(struct usbnet *dev) smsc75xx_enter_suspend1() argument
1526 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_enter_suspend1()
1530 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_enter_suspend1()
1532 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_enter_suspend1()
1539 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend1()
1541 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend1()
1549 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend1()
1551 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend1()
1560 static int smsc75xx_enter_suspend2(struct usbnet *dev) smsc75xx_enter_suspend2() argument
1562 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_enter_suspend2()
1566 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_enter_suspend2()
1568 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_enter_suspend2()
1575 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend2()
1577 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend2()
1586 static int smsc75xx_enter_suspend3(struct usbnet *dev) smsc75xx_enter_suspend3() argument
1588 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_enter_suspend3()
1592 ret = smsc75xx_read_reg_nopm(dev, FCT_RX_CTL, &val); smsc75xx_enter_suspend3()
1594 netdev_warn(dev->net, "Error reading FCT_RX_CTL\n"); smsc75xx_enter_suspend3()
1599 netdev_dbg(dev->net, "rx fifo not empty in autosuspend\n"); smsc75xx_enter_suspend3()
1603 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_enter_suspend3()
1605 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_enter_suspend3()
1612 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend3()
1614 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend3()
1622 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_enter_suspend3()
1624 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_enter_suspend3()
1633 static int smsc75xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) smsc75xx_enable_phy_wakeup_interrupts() argument
1635 struct mii_if_info *mii = &dev->mii; smsc75xx_enable_phy_wakeup_interrupts()
1638 netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); smsc75xx_enable_phy_wakeup_interrupts()
1641 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); smsc75xx_enable_phy_wakeup_interrupts()
1643 netdev_warn(dev->net, "Error reading PHY_INT_SRC\n"); smsc75xx_enable_phy_wakeup_interrupts()
1648 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); smsc75xx_enable_phy_wakeup_interrupts()
1650 netdev_warn(dev->net, "Error reading PHY_INT_MASK\n"); smsc75xx_enable_phy_wakeup_interrupts()
1656 smsc75xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret); smsc75xx_enable_phy_wakeup_interrupts()
1661 static int smsc75xx_link_ok_nopm(struct usbnet *dev) smsc75xx_link_ok_nopm() argument
1663 struct mii_if_info *mii = &dev->mii; smsc75xx_link_ok_nopm()
1667 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); smsc75xx_link_ok_nopm()
1669 netdev_warn(dev->net, "Error reading MII_BMSR\n"); smsc75xx_link_ok_nopm()
1673 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); smsc75xx_link_ok_nopm()
1675 netdev_warn(dev->net, "Error reading MII_BMSR\n"); smsc75xx_link_ok_nopm()
1682 static int smsc75xx_autosuspend(struct usbnet *dev, u32 link_up) smsc75xx_autosuspend() argument
1686 if (!netif_running(dev->net)) { smsc75xx_autosuspend()
1688 netdev_dbg(dev->net, "autosuspend entering SUSPEND2\n"); smsc75xx_autosuspend()
1689 return smsc75xx_enter_suspend2(dev); smsc75xx_autosuspend()
1694 netdev_dbg(dev->net, "autosuspend entering SUSPEND1\n"); smsc75xx_autosuspend()
1697 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, smsc75xx_autosuspend()
1700 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc75xx_autosuspend()
1704 netdev_info(dev->net, "entering SUSPEND1 mode\n"); smsc75xx_autosuspend()
1705 return smsc75xx_enter_suspend1(dev); smsc75xx_autosuspend()
1709 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, smsc75xx_autosuspend()
1712 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc75xx_autosuspend()
1716 netdev_dbg(dev->net, "autosuspend entering SUSPEND3\n"); smsc75xx_autosuspend()
1717 return smsc75xx_enter_suspend3(dev); smsc75xx_autosuspend()
1722 struct usbnet *dev = usb_get_intfdata(intf); smsc75xx_suspend() local
1723 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_suspend()
1729 netdev_warn(dev->net, "usbnet_suspend error\n"); smsc75xx_suspend()
1734 netdev_warn(dev->net, "error during last resume\n"); smsc75xx_suspend()
1739 link_up = smsc75xx_link_ok_nopm(dev); smsc75xx_suspend()
1742 ret = smsc75xx_autosuspend(dev, link_up); smsc75xx_suspend()
1752 netdev_info(dev->net, "entering SUSPEND2 mode\n"); smsc75xx_suspend()
1755 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1757 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1763 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1765 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1769 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_suspend()
1771 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_suspend()
1777 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_suspend()
1779 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_suspend()
1783 ret = smsc75xx_enter_suspend2(dev); smsc75xx_suspend()
1788 ret = smsc75xx_enable_phy_wakeup_interrupts(dev, smsc75xx_suspend()
1791 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc75xx_suspend()
1799 struct mii_if_info *mii = &dev->mii; smsc75xx_suspend()
1800 netdev_info(dev->net, "entering SUSPEND1 mode\n"); smsc75xx_suspend()
1803 ret = smsc75xx_mdio_read_nopm(dev->net, mii->phy_id, smsc75xx_suspend()
1806 netdev_warn(dev->net, "Error reading PHY_MODE_CTRL_STS\n"); smsc75xx_suspend()
1812 smsc75xx_mdio_write_nopm(dev->net, mii->phy_id, smsc75xx_suspend()
1816 ret = smsc75xx_enter_suspend1(dev); smsc75xx_suspend()
1826 ret = smsc75xx_write_reg_nopm(dev, WUF_CFGX + i * 4, 0); smsc75xx_suspend()
1828 netdev_warn(dev->net, "Error writing WUF_CFGX\n"); smsc75xx_suspend()
1835 netdev_info(dev->net, "enabling multicast detection\n"); smsc75xx_suspend()
1839 ret = smsc75xx_write_wuff(dev, filter++, val, 0x0007); smsc75xx_suspend()
1841 netdev_warn(dev->net, "Error writing wakeup filter\n"); smsc75xx_suspend()
1848 netdev_info(dev->net, "enabling ARP detection\n"); smsc75xx_suspend()
1852 ret = smsc75xx_write_wuff(dev, filter++, val, 0x0003); smsc75xx_suspend()
1854 netdev_warn(dev->net, "Error writing wakeup filter\n"); smsc75xx_suspend()
1860 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1862 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1868 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1870 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1874 netdev_info(dev->net, "enabling packet match detection\n"); smsc75xx_suspend()
1875 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1877 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1883 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1885 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1889 netdev_info(dev->net, "disabling packet match detection\n"); smsc75xx_suspend()
1890 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1892 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1898 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1900 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1906 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1908 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1914 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1916 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1921 netdev_info(dev->net, "enabling PHY wakeup\n"); smsc75xx_suspend()
1923 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_suspend()
1925 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_suspend()
1933 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_suspend()
1935 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_suspend()
1941 netdev_info(dev->net, "enabling magic packet wakeup\n"); smsc75xx_suspend()
1942 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1944 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1951 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1953 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1959 netdev_info(dev->net, "enabling broadcast detection\n"); smsc75xx_suspend()
1960 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1962 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1968 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1970 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1976 netdev_info(dev->net, "enabling unicast detection\n"); smsc75xx_suspend()
1977 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_suspend()
1979 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_suspend()
1985 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_suspend()
1987 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_suspend()
1993 ret = smsc75xx_read_reg_nopm(dev, MAC_RX, &val); smsc75xx_suspend()
1995 netdev_warn(dev->net, "Failed to read MAC_RX: %d\n", ret); smsc75xx_suspend()
2001 ret = smsc75xx_write_reg_nopm(dev, MAC_RX, val); smsc75xx_suspend()
2003 netdev_warn(dev->net, "Failed to write MAC_RX: %d\n", ret); smsc75xx_suspend()
2008 netdev_info(dev->net, "entering SUSPEND0 mode\n"); smsc75xx_suspend()
2009 ret = smsc75xx_enter_suspend0(dev); smsc75xx_suspend()
2023 struct usbnet *dev = usb_get_intfdata(intf); smsc75xx_resume() local
2024 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); smsc75xx_resume()
2029 netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); smsc75xx_resume()
2036 ret = smsc75xx_read_reg_nopm(dev, WUCSR, &val); smsc75xx_resume()
2038 netdev_warn(dev->net, "Error reading WUCSR\n"); smsc75xx_resume()
2045 ret = smsc75xx_write_reg_nopm(dev, WUCSR, val); smsc75xx_resume()
2047 netdev_warn(dev->net, "Error writing WUCSR\n"); smsc75xx_resume()
2052 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_resume()
2054 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_resume()
2061 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_resume()
2063 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_resume()
2069 netdev_info(dev->net, "resuming from SUSPEND2\n"); smsc75xx_resume()
2071 ret = smsc75xx_read_reg_nopm(dev, PMT_CTL, &val); smsc75xx_resume()
2073 netdev_warn(dev->net, "Error reading PMT_CTL\n"); smsc75xx_resume()
2079 ret = smsc75xx_write_reg_nopm(dev, PMT_CTL, val); smsc75xx_resume()
2081 netdev_warn(dev->net, "Error writing PMT_CTL\n"); smsc75xx_resume()
2086 ret = smsc75xx_wait_ready(dev, 1); smsc75xx_resume()
2088 netdev_warn(dev->net, "device not ready in smsc75xx_resume\n"); smsc75xx_resume()
2095 static void smsc75xx_rx_csum_offload(struct usbnet *dev, struct sk_buff *skb, smsc75xx_rx_csum_offload() argument
2098 if (!(dev->net->features & NETIF_F_RXCSUM) || smsc75xx_rx_csum_offload()
2107 static int smsc75xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) smsc75xx_rx_fixup() argument
2110 if (skb->len < dev->net->hard_header_len) smsc75xx_rx_fixup()
2133 netif_dbg(dev, rx_err, dev->net, smsc75xx_rx_fixup()
2135 dev->net->stats.rx_errors++; smsc75xx_rx_fixup()
2136 dev->net->stats.rx_dropped++; smsc75xx_rx_fixup()
2139 dev->net->stats.rx_crc_errors++; smsc75xx_rx_fixup()
2141 dev->net->stats.rx_frame_errors++; smsc75xx_rx_fixup()
2145 netif_dbg(dev, rx_err, dev->net, smsc75xx_rx_fixup()
2153 smsc75xx_rx_csum_offload(dev, skb, rx_cmd_a, smsc75xx_rx_fixup()
2164 netdev_warn(dev->net, "Error allocating skb\n"); smsc75xx_rx_fixup()
2172 smsc75xx_rx_csum_offload(dev, ax_skb, rx_cmd_a, smsc75xx_rx_fixup()
2178 usbnet_skb_return(dev, ax_skb); smsc75xx_rx_fixup()
2191 static struct sk_buff *smsc75xx_tx_fixup(struct usbnet *dev, smsc75xx_tx_fixup() argument
2230 static int smsc75xx_manage_power(struct usbnet *dev, int on) smsc75xx_manage_power() argument
2232 dev->intf->needs_remote_wakeup = on; smsc75xx_manage_power()
H A Dsmsc95xx.c77 static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, __smsc95xx_read_reg() argument
84 BUG_ON(!dev); __smsc95xx_read_reg()
91 ret = fn(dev, USB_VENDOR_REQUEST_READ_REGISTER, USB_DIR_IN __smsc95xx_read_reg()
95 netdev_warn(dev->net, "Failed to read reg index 0x%08x: %d\n", __smsc95xx_read_reg()
104 static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, __smsc95xx_write_reg() argument
111 BUG_ON(!dev); __smsc95xx_write_reg()
121 ret = fn(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, USB_DIR_OUT __smsc95xx_write_reg()
125 netdev_warn(dev->net, "Failed to write reg index 0x%08x: %d\n", __smsc95xx_write_reg()
131 static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index, smsc95xx_read_reg_nopm() argument
134 return __smsc95xx_read_reg(dev, index, data, 1); smsc95xx_read_reg_nopm()
137 static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index, smsc95xx_write_reg_nopm() argument
140 return __smsc95xx_write_reg(dev, index, data, 1); smsc95xx_write_reg_nopm()
143 static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index, smsc95xx_read_reg() argument
146 return __smsc95xx_read_reg(dev, index, data, 0); smsc95xx_read_reg()
149 static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index, smsc95xx_write_reg() argument
152 return __smsc95xx_write_reg(dev, index, data, 0); smsc95xx_write_reg()
157 static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, __smsc95xx_phy_wait_not_busy() argument
165 ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); __smsc95xx_phy_wait_not_busy()
167 netdev_warn(dev->net, "Error reading MII_ACCESS\n"); __smsc95xx_phy_wait_not_busy()
181 struct usbnet *dev = netdev_priv(netdev); __smsc95xx_mdio_read() local
185 mutex_lock(&dev->phy_mutex); __smsc95xx_mdio_read()
188 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); __smsc95xx_mdio_read()
190 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n"); __smsc95xx_mdio_read()
195 phy_id &= dev->mii.phy_id_mask; __smsc95xx_mdio_read()
196 idx &= dev->mii.reg_num_mask; __smsc95xx_mdio_read()
198 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); __smsc95xx_mdio_read()
200 netdev_warn(dev->net, "Error writing MII_ADDR\n"); __smsc95xx_mdio_read()
204 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); __smsc95xx_mdio_read()
206 netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); __smsc95xx_mdio_read()
210 ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); __smsc95xx_mdio_read()
212 netdev_warn(dev->net, "Error reading MII_DATA\n"); __smsc95xx_mdio_read()
219 mutex_unlock(&dev->phy_mutex); __smsc95xx_mdio_read()
226 struct usbnet *dev = netdev_priv(netdev); __smsc95xx_mdio_write() local
230 mutex_lock(&dev->phy_mutex); __smsc95xx_mdio_write()
233 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); __smsc95xx_mdio_write()
235 netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n"); __smsc95xx_mdio_write()
240 ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); __smsc95xx_mdio_write()
242 netdev_warn(dev->net, "Error writing MII_DATA\n"); __smsc95xx_mdio_write()
247 phy_id &= dev->mii.phy_id_mask; __smsc95xx_mdio_write()
248 idx &= dev->mii.reg_num_mask; __smsc95xx_mdio_write()
250 ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); __smsc95xx_mdio_write()
252 netdev_warn(dev->net, "Error writing MII_ADDR\n"); __smsc95xx_mdio_write()
256 ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); __smsc95xx_mdio_write()
258 netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); __smsc95xx_mdio_write()
263 mutex_unlock(&dev->phy_mutex); __smsc95xx_mdio_write()
289 static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev) smsc95xx_wait_eeprom() argument
296 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); smsc95xx_wait_eeprom()
298 netdev_warn(dev->net, "Error reading E2P_CMD\n"); smsc95xx_wait_eeprom()
308 netdev_warn(dev->net, "EEPROM read operation timeout\n"); smsc95xx_wait_eeprom()
315 static int __must_check smsc95xx_eeprom_confirm_not_busy(struct usbnet *dev) smsc95xx_eeprom_confirm_not_busy() argument
322 ret = smsc95xx_read_reg(dev, E2P_CMD, &val); smsc95xx_eeprom_confirm_not_busy()
324 netdev_warn(dev->net, "Error reading E2P_CMD\n"); smsc95xx_eeprom_confirm_not_busy()
334 netdev_warn(dev->net, "EEPROM is busy\n"); smsc95xx_eeprom_confirm_not_busy()
338 static int smsc95xx_read_eeprom(struct usbnet *dev, u32 offset, u32 length, smsc95xx_read_eeprom() argument
344 BUG_ON(!dev); smsc95xx_read_eeprom()
347 ret = smsc95xx_eeprom_confirm_not_busy(dev); smsc95xx_read_eeprom()
353 ret = smsc95xx_write_reg(dev, E2P_CMD, val); smsc95xx_read_eeprom()
355 netdev_warn(dev->net, "Error writing E2P_CMD\n"); smsc95xx_read_eeprom()
359 ret = smsc95xx_wait_eeprom(dev); smsc95xx_read_eeprom()
363 ret = smsc95xx_read_reg(dev, E2P_DATA, &val); smsc95xx_read_eeprom()
365 netdev_warn(dev->net, "Error reading E2P_DATA\n"); smsc95xx_read_eeprom()
376 static int smsc95xx_write_eeprom(struct usbnet *dev, u32 offset, u32 length, smsc95xx_write_eeprom() argument
382 BUG_ON(!dev); smsc95xx_write_eeprom()
385 ret = smsc95xx_eeprom_confirm_not_busy(dev); smsc95xx_write_eeprom()
391 ret = smsc95xx_write_reg(dev, E2P_CMD, val); smsc95xx_write_eeprom()
393 netdev_warn(dev->net, "Error writing E2P_DATA\n"); smsc95xx_write_eeprom()
397 ret = smsc95xx_wait_eeprom(dev); smsc95xx_write_eeprom()
405 ret = smsc95xx_write_reg(dev, E2P_DATA, val); smsc95xx_write_eeprom()
407 netdev_warn(dev->net, "Error writing E2P_DATA\n"); smsc95xx_write_eeprom()
413 ret = smsc95xx_write_reg(dev, E2P_CMD, val); smsc95xx_write_eeprom()
415 netdev_warn(dev->net, "Error writing E2P_CMD\n"); smsc95xx_write_eeprom()
419 ret = smsc95xx_wait_eeprom(dev); smsc95xx_write_eeprom()
429 static int __must_check smsc95xx_write_reg_async(struct usbnet *dev, u16 index, smsc95xx_write_reg_async() argument
439 ret = usbnet_write_cmd_async(dev, USB_VENDOR_REQUEST_WRITE_REGISTER, smsc95xx_write_reg_async()
444 netdev_warn(dev->net, "Error write async cmd, sts=%d\n", smsc95xx_write_reg_async()
459 struct usbnet *dev = netdev_priv(netdev); smsc95xx_set_multicast() local
460 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_set_multicast()
469 if (dev->net->flags & IFF_PROMISC) { smsc95xx_set_multicast()
470 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled\n"); smsc95xx_set_multicast()
473 } else if (dev->net->flags & IFF_ALLMULTI) { smsc95xx_set_multicast()
474 netif_dbg(dev, drv, dev->net, "receive all multicast enabled\n"); smsc95xx_set_multicast()
477 } else if (!netdev_mc_empty(dev->net)) { smsc95xx_set_multicast()
492 netif_dbg(dev, drv, dev->net, "HASHH=0x%08X, HASHL=0x%08X\n",
495 netif_dbg(dev, drv, dev->net, "receive own packets only\n");
503 ret = smsc95xx_write_reg_async(dev, HASHH, pdata->hash_hi);
505 netdev_warn(dev->net, "failed to initiate async write to HASHH\n");
507 ret = smsc95xx_write_reg_async(dev, HASHL, pdata->hash_lo);
509 netdev_warn(dev->net, "failed to initiate async write to HASHL\n");
511 ret = smsc95xx_write_reg_async(dev, MAC_CR, pdata->mac_cr);
513 netdev_warn(dev->net, "failed to initiate async write to MAC_CR\n");
516 static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex, smsc95xx_phy_update_flowcontrol() argument
521 int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg); smsc95xx_phy_update_flowcontrol()
538 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n", smsc95xx_phy_update_flowcontrol()
542 netif_dbg(dev, link, dev->net, "half duplex\n"); smsc95xx_phy_update_flowcontrol()
547 ret = smsc95xx_write_reg(dev, FLOW, flow); smsc95xx_phy_update_flowcontrol()
551 return smsc95xx_write_reg(dev, AFC_CFG, afc_cfg); smsc95xx_phy_update_flowcontrol()
554 static int smsc95xx_link_reset(struct usbnet *dev) smsc95xx_link_reset() argument
556 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_link_reset()
557 struct mii_if_info *mii = &dev->mii; smsc95xx_link_reset()
564 ret = smsc95xx_mdio_read(dev->net, mii->phy_id, PHY_INT_SRC); smsc95xx_link_reset()
568 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); smsc95xx_link_reset()
573 mii_ethtool_gset(&dev->mii, &ecmd); smsc95xx_link_reset()
574 lcladv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_ADVERTISE); smsc95xx_link_reset()
575 rmtadv = smsc95xx_mdio_read(dev->net, mii->phy_id, MII_LPA); smsc95xx_link_reset()
577 netif_dbg(dev, link, dev->net, smsc95xx_link_reset()
591 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); smsc95xx_link_reset()
595 ret = smsc95xx_phy_update_flowcontrol(dev, ecmd.duplex, lcladv, rmtadv); smsc95xx_link_reset()
597 netdev_warn(dev->net, "Error updating PHY flow control\n"); smsc95xx_link_reset()
602 static void smsc95xx_status(struct usbnet *dev, struct urb *urb) smsc95xx_status() argument
607 netdev_warn(dev->net, "unexpected urb length %d\n", smsc95xx_status()
615 netif_dbg(dev, link, dev->net, "intdata: 0x%08X\n", intdata); smsc95xx_status()
618 usbnet_defer_kevent(dev, EVENT_LINK_RESET); smsc95xx_status()
620 netdev_warn(dev->net, "unexpected interrupt, intdata=0x%08X\n", smsc95xx_status()
628 struct usbnet *dev = netdev_priv(netdev); smsc95xx_set_features() local
632 ret = smsc95xx_read_reg(dev, COE_CR, &read_buf); smsc95xx_set_features()
646 ret = smsc95xx_write_reg(dev, COE_CR, read_buf); smsc95xx_set_features()
650 netif_dbg(dev, hw, dev->net, "COE_CR = 0x%08x\n", read_buf); smsc95xx_set_features()
662 struct usbnet *dev = netdev_priv(netdev); smsc95xx_ethtool_get_eeprom() local
666 return smsc95xx_read_eeprom(dev, ee->offset, ee->len, data); smsc95xx_ethtool_get_eeprom()
672 struct usbnet *dev = netdev_priv(netdev); smsc95xx_ethtool_set_eeprom() local
675 netdev_warn(dev->net, "EEPROM: magic value mismatch, magic = 0x%x\n", smsc95xx_ethtool_set_eeprom()
680 return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data); smsc95xx_ethtool_set_eeprom()
693 struct usbnet *dev = netdev_priv(netdev); smsc95xx_ethtool_getregs() local
698 retval = smsc95xx_read_reg(dev, ID_REV, &regs->version); smsc95xx_ethtool_getregs()
705 retval = smsc95xx_read_reg(dev, i, &data[j]); smsc95xx_ethtool_getregs()
716 struct usbnet *dev = netdev_priv(net); smsc95xx_ethtool_get_wol() local
717 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_ethtool_get_wol()
726 struct usbnet *dev = netdev_priv(net); smsc95xx_ethtool_set_wol() local
727 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_ethtool_set_wol()
732 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts); smsc95xx_ethtool_set_wol()
734 netdev_warn(dev->net, "device_set_wakeup_enable error %d\n", ret); smsc95xx_ethtool_set_wol()
758 struct usbnet *dev = netdev_priv(netdev); smsc95xx_ioctl() local
763 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL); smsc95xx_ioctl()
766 static void smsc95xx_init_mac_address(struct usbnet *dev) smsc95xx_init_mac_address() argument
769 if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, smsc95xx_init_mac_address()
770 dev->net->dev_addr) == 0) { smsc95xx_init_mac_address()
771 if (is_valid_ether_addr(dev->net->dev_addr)) { smsc95xx_init_mac_address()
773 netif_dbg(dev, ifup, dev->net, "MAC address read from EEPROM\n"); smsc95xx_init_mac_address()
779 eth_hw_addr_random(dev->net); smsc95xx_init_mac_address()
780 netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); smsc95xx_init_mac_address()
783 static int smsc95xx_set_mac_address(struct usbnet *dev) smsc95xx_set_mac_address() argument
785 u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 | smsc95xx_set_mac_address()
786 dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24; smsc95xx_set_mac_address()
787 u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8; smsc95xx_set_mac_address()
790 ret = smsc95xx_write_reg(dev, ADDRL, addr_lo); smsc95xx_set_mac_address()
794 return smsc95xx_write_reg(dev, ADDRH, addr_hi); smsc95xx_set_mac_address()
798 static int smsc95xx_start_tx_path(struct usbnet *dev) smsc95xx_start_tx_path() argument
800 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_start_tx_path()
809 ret = smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); smsc95xx_start_tx_path()
814 return smsc95xx_write_reg(dev, TX_CFG, TX_CFG_ON_); smsc95xx_start_tx_path()
818 static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm) smsc95xx_start_rx_path() argument
820 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_start_rx_path()
827 return __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm); smsc95xx_start_rx_path()
830 static int smsc95xx_phy_initialize(struct usbnet *dev) smsc95xx_phy_initialize() argument
835 dev->mii.dev = dev->net; smsc95xx_phy_initialize()
836 dev->mii.mdio_read = smsc95xx_mdio_read; smsc95xx_phy_initialize()
837 dev->mii.mdio_write = smsc95xx_mdio_write; smsc95xx_phy_initialize()
838 dev->mii.phy_id_mask = 0x1f; smsc95xx_phy_initialize()
839 dev->mii.reg_num_mask = 0x1f; smsc95xx_phy_initialize()
840 dev->mii.phy_id = SMSC95XX_INTERNAL_PHY_ID; smsc95xx_phy_initialize()
843 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR, BMCR_RESET); smsc95xx_phy_initialize()
847 bmcr = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, MII_BMCR); smsc95xx_phy_initialize()
852 netdev_warn(dev->net, "timeout on PHY Reset"); smsc95xx_phy_initialize()
856 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE, smsc95xx_phy_initialize()
861 ret = smsc95xx_mdio_read(dev->net, dev->mii.phy_id, PHY_INT_SRC); smsc95xx_phy_initialize()
863 netdev_warn(dev->net, "Failed to read PHY_INT_SRC during init\n"); smsc95xx_phy_initialize()
867 smsc95xx_mdio_write(dev->net, dev->mii.phy_id, PHY_INT_MASK, smsc95xx_phy_initialize()
869 mii_nway_restart(&dev->mii); smsc95xx_phy_initialize()
871 netif_dbg(dev, ifup, dev->net, "phy initialised successfully\n"); smsc95xx_phy_initialize()
875 static int smsc95xx_reset(struct usbnet *dev) smsc95xx_reset() argument
877 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_reset()
881 netif_dbg(dev, ifup, dev->net, "entering smsc95xx_reset\n"); smsc95xx_reset()
883 ret = smsc95xx_write_reg(dev, HW_CFG, HW_CFG_LRST_); smsc95xx_reset()
890 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); smsc95xx_reset()
897 netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n"); smsc95xx_reset()
901 ret = smsc95xx_write_reg(dev, PM_CTRL, PM_CTL_PHY_RST_); smsc95xx_reset()
908 ret = smsc95xx_read_reg(dev, PM_CTRL, &read_buf); smsc95xx_reset()
915 netdev_warn(dev->net, "timeout waiting for PHY Reset\n"); smsc95xx_reset()
919 ret = smsc95xx_set_mac_address(dev); smsc95xx_reset()
923 netif_dbg(dev, ifup, dev->net, "MAC Address: %pM\n", smsc95xx_reset()
924 dev->net->dev_addr); smsc95xx_reset()
926 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); smsc95xx_reset()
930 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG : 0x%08x\n", smsc95xx_reset()
935 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); smsc95xx_reset()
939 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); smsc95xx_reset()
943 netif_dbg(dev, ifup, dev->net, smsc95xx_reset()
949 dev->rx_urb_size = MAX_SINGLE_PACKET_SIZE; smsc95xx_reset()
950 } else if (dev->udev->speed == USB_SPEED_HIGH) { smsc95xx_reset()
952 dev->rx_urb_size = DEFAULT_HS_BURST_CAP_SIZE; smsc95xx_reset()
955 dev->rx_urb_size = DEFAULT_FS_BURST_CAP_SIZE; smsc95xx_reset()
958 netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", smsc95xx_reset()
959 (ulong)dev->rx_urb_size); smsc95xx_reset()
961 ret = smsc95xx_write_reg(dev, BURST_CAP, burst_cap); smsc95xx_reset()
965 ret = smsc95xx_read_reg(dev, BURST_CAP, &read_buf); smsc95xx_reset()
969 netif_dbg(dev, ifup, dev->net, smsc95xx_reset()
973 ret = smsc95xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); smsc95xx_reset()
977 ret = smsc95xx_read_reg(dev, BULK_IN_DLY, &read_buf); smsc95xx_reset()
981 netif_dbg(dev, ifup, dev->net, smsc95xx_reset()
985 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); smsc95xx_reset()
989 netif_dbg(dev, ifup, dev->net, "Read Value from HW_CFG: 0x%08x\n", smsc95xx_reset()
1000 ret = smsc95xx_write_reg(dev, HW_CFG, read_buf); smsc95xx_reset()
1004 ret = smsc95xx_read_reg(dev, HW_CFG, &read_buf); smsc95xx_reset()
1008 netif_dbg(dev, ifup, dev->net, smsc95xx_reset()
1011 ret = smsc95xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); smsc95xx_reset()
1015 ret = smsc95xx_read_reg(dev, ID_REV, &read_buf); smsc95xx_reset()
1018 netif_dbg(dev, ifup, dev->net, "ID_REV = 0x%08x\n", read_buf); smsc95xx_reset()
1023 ret = smsc95xx_write_reg(dev, LED_GPIO_CFG, write_buf); smsc95xx_reset()
1028 ret = smsc95xx_write_reg(dev, FLOW, 0); smsc95xx_reset()
1032 ret = smsc95xx_write_reg(dev, AFC_CFG, AFC_CFG_DEFAULT); smsc95xx_reset()
1037 ret = smsc95xx_read_reg(dev, MAC_CR, &pdata->mac_cr); smsc95xx_reset()
1043 ret = smsc95xx_write_reg(dev, VLAN1, (u32)ETH_P_8021Q); smsc95xx_reset()
1048 ret = smsc95xx_set_features(dev->net, dev->net->features); smsc95xx_reset()
1050 netdev_warn(dev->net, "Failed to set checksum offload features\n"); smsc95xx_reset()
1054 smsc95xx_set_multicast(dev->net); smsc95xx_reset()
1056 ret = smsc95xx_phy_initialize(dev); smsc95xx_reset()
1058 netdev_warn(dev->net, "Failed to init PHY\n"); smsc95xx_reset()
1062 ret = smsc95xx_read_reg(dev, INT_EP_CTL, &read_buf); smsc95xx_reset()
1069 ret = smsc95xx_write_reg(dev, INT_EP_CTL, read_buf); smsc95xx_reset()
1073 ret = smsc95xx_start_tx_path(dev); smsc95xx_reset()
1075 netdev_warn(dev->net, "Failed to start TX path\n"); smsc95xx_reset()
1079 ret = smsc95xx_start_rx_path(dev, 0); smsc95xx_reset()
1081 netdev_warn(dev->net, "Failed to start RX path\n"); smsc95xx_reset()
1085 netif_dbg(dev, ifup, dev->net, "smsc95xx_reset, return 0\n"); smsc95xx_reset()
1102 static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) smsc95xx_bind() argument
1110 ret = usbnet_get_endpoints(dev, intf); smsc95xx_bind()
1112 netdev_warn(dev->net, "usbnet_get_endpoints failed: %d\n", ret); smsc95xx_bind()
1116 dev->data[0] = (unsigned long)kzalloc(sizeof(struct smsc95xx_priv), smsc95xx_bind()
1119 pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_bind()
1126 dev->net->features |= NETIF_F_HW_CSUM; smsc95xx_bind()
1128 dev->net->features |= NETIF_F_RXCSUM; smsc95xx_bind()
1130 dev->net->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM; smsc95xx_bind()
1132 smsc95xx_init_mac_address(dev); smsc95xx_bind()
1135 ret = smsc95xx_reset(dev); smsc95xx_bind()
1138 ret = smsc95xx_read_reg(dev, ID_REV, &val); smsc95xx_bind()
1151 dev->net->netdev_ops = &smsc95xx_netdev_ops; smsc95xx_bind()
1152 dev->net->ethtool_ops = &smsc95xx_ethtool_ops; smsc95xx_bind()
1153 dev->net->flags |= IFF_MULTICAST; smsc95xx_bind()
1154 dev->net->hard_header_len += SMSC95XX_TX_OVERHEAD_CSUM; smsc95xx_bind()
1155 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; smsc95xx_bind()
1159 static void smsc95xx_unbind(struct usbnet *dev, struct usb_interface *intf) smsc95xx_unbind() argument
1161 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_unbind()
1163 netif_dbg(dev, ifdown, dev->net, "free pdata\n"); smsc95xx_unbind()
1166 dev->data[0] = 0; smsc95xx_unbind()
1176 static int smsc95xx_enable_phy_wakeup_interrupts(struct usbnet *dev, u16 mask) smsc95xx_enable_phy_wakeup_interrupts() argument
1178 struct mii_if_info *mii = &dev->mii; smsc95xx_enable_phy_wakeup_interrupts()
1181 netdev_dbg(dev->net, "enabling PHY wakeup interrupts\n"); smsc95xx_enable_phy_wakeup_interrupts()
1184 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_SRC); smsc95xx_enable_phy_wakeup_interrupts()
1189 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_INT_MASK); smsc95xx_enable_phy_wakeup_interrupts()
1195 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_INT_MASK, ret); smsc95xx_enable_phy_wakeup_interrupts()
1200 static int smsc95xx_link_ok_nopm(struct usbnet *dev) smsc95xx_link_ok_nopm() argument
1202 struct mii_if_info *mii = &dev->mii; smsc95xx_link_ok_nopm()
1206 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); smsc95xx_link_ok_nopm()
1210 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, MII_BMSR); smsc95xx_link_ok_nopm()
1217 static int smsc95xx_enter_suspend0(struct usbnet *dev) smsc95xx_enter_suspend0() argument
1219 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_enter_suspend0()
1223 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_enter_suspend0()
1230 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend0()
1242 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend0()
1247 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_enter_suspend0()
1256 static int smsc95xx_enter_suspend1(struct usbnet *dev) smsc95xx_enter_suspend1() argument
1258 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_enter_suspend1()
1259 struct mii_if_info *mii = &dev->mii; smsc95xx_enter_suspend1()
1267 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_EDPD_CONFIG, smsc95xx_enter_suspend1()
1271 ret = smsc95xx_mdio_read_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS); smsc95xx_enter_suspend1()
1277 smsc95xx_mdio_write_nopm(dev->net, mii->phy_id, PHY_MODE_CTRL_STS, ret); smsc95xx_enter_suspend1()
1280 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_enter_suspend1()
1287 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend1()
1295 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend1()
1304 static int smsc95xx_enter_suspend2(struct usbnet *dev) smsc95xx_enter_suspend2() argument
1306 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_enter_suspend2()
1310 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_enter_suspend2()
1317 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend2()
1326 static int smsc95xx_enter_suspend3(struct usbnet *dev) smsc95xx_enter_suspend3() argument
1328 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_enter_suspend3()
1332 ret = smsc95xx_read_reg_nopm(dev, RX_FIFO_INF, &val); smsc95xx_enter_suspend3()
1337 netdev_info(dev->net, "rx fifo not empty in autosuspend\n"); smsc95xx_enter_suspend3()
1341 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_enter_suspend3()
1348 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend3()
1356 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_enter_suspend3()
1365 static int smsc95xx_autosuspend(struct usbnet *dev, u32 link_up) smsc95xx_autosuspend() argument
1367 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_autosuspend()
1370 if (!netif_running(dev->net)) { smsc95xx_autosuspend()
1372 netdev_dbg(dev->net, "autosuspend entering SUSPEND2\n"); smsc95xx_autosuspend()
1373 return smsc95xx_enter_suspend2(dev); smsc95xx_autosuspend()
1382 netdev_warn(dev->net, "EDPD not supported\n"); smsc95xx_autosuspend()
1386 netdev_dbg(dev->net, "autosuspend entering SUSPEND1\n"); smsc95xx_autosuspend()
1389 ret = smsc95xx_enable_phy_wakeup_interrupts(dev, smsc95xx_autosuspend()
1392 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc95xx_autosuspend()
1396 netdev_info(dev->net, "entering SUSPEND1 mode\n"); smsc95xx_autosuspend()
1397 return smsc95xx_enter_suspend1(dev); smsc95xx_autosuspend()
1401 ret = smsc95xx_enable_phy_wakeup_interrupts(dev, smsc95xx_autosuspend()
1404 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc95xx_autosuspend()
1408 netdev_dbg(dev->net, "autosuspend entering SUSPEND3\n"); smsc95xx_autosuspend()
1409 return smsc95xx_enter_suspend3(dev); smsc95xx_autosuspend()
1414 struct usbnet *dev = usb_get_intfdata(intf); smsc95xx_suspend() local
1415 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_suspend()
1421 netdev_warn(dev->net, "usbnet_suspend error\n"); smsc95xx_suspend()
1426 netdev_warn(dev->net, "error during last resume\n"); smsc95xx_suspend()
1431 link_up = smsc95xx_link_ok_nopm(dev); smsc95xx_suspend()
1435 ret = smsc95xx_autosuspend(dev, link_up); smsc95xx_suspend()
1445 netdev_info(dev->net, "entering SUSPEND2 mode\n"); smsc95xx_suspend()
1448 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); smsc95xx_suspend()
1454 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); smsc95xx_suspend()
1458 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_suspend()
1464 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_suspend()
1468 ret = smsc95xx_enter_suspend2(dev); smsc95xx_suspend()
1473 ret = smsc95xx_enable_phy_wakeup_interrupts(dev, smsc95xx_suspend()
1476 netdev_warn(dev->net, "error enabling PHY wakeup ints\n"); smsc95xx_suspend()
1484 netdev_info(dev->net, "entering SUSPEND1 mode\n"); smsc95xx_suspend()
1485 ret = smsc95xx_enter_suspend1(dev); smsc95xx_suspend()
1501 netdev_warn(dev->net, "Unable to allocate filter_mask\n"); smsc95xx_suspend()
1512 netdev_info(dev->net, "enabling broadcast detection\n"); smsc95xx_suspend()
1525 netdev_info(dev->net, "enabling multicast detection\n"); smsc95xx_suspend()
1538 netdev_info(dev->net, "enabling ARP detection\n"); smsc95xx_suspend()
1550 netdev_info(dev->net, "enabling unicast detection\n"); smsc95xx_suspend()
1557 crc[filter/2] |= smsc_crc(dev->net->dev_addr, ETH_ALEN, filter); smsc95xx_suspend()
1562 ret = smsc95xx_write_reg_nopm(dev, WUFF, filter_mask[i]); smsc95xx_suspend()
1571 ret = smsc95xx_write_reg_nopm(dev, WUFF, command[i]); smsc95xx_suspend()
1577 ret = smsc95xx_write_reg_nopm(dev, WUFF, offset[i]); smsc95xx_suspend()
1583 ret = smsc95xx_write_reg_nopm(dev, WUFF, crc[i]); smsc95xx_suspend()
1589 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); smsc95xx_suspend()
1595 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); smsc95xx_suspend()
1602 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); smsc95xx_suspend()
1608 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); smsc95xx_suspend()
1614 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); smsc95xx_suspend()
1619 netdev_info(dev->net, "enabling pattern match wakeup\n"); smsc95xx_suspend()
1622 netdev_info(dev->net, "disabling pattern match wakeup\n"); smsc95xx_suspend()
1627 netdev_info(dev->net, "enabling magic packet wakeup\n"); smsc95xx_suspend()
1630 netdev_info(dev->net, "disabling magic packet wakeup\n"); smsc95xx_suspend()
1634 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); smsc95xx_suspend()
1639 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_suspend()
1649 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_suspend()
1654 smsc95xx_start_rx_path(dev, 1); smsc95xx_suspend()
1657 netdev_info(dev->net, "entering SUSPEND0 mode\n"); smsc95xx_suspend()
1658 ret = smsc95xx_enter_suspend0(dev); smsc95xx_suspend()
1672 struct usbnet *dev = usb_get_intfdata(intf); smsc95xx_resume() local
1678 BUG_ON(!dev); smsc95xx_resume()
1679 pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_resume()
1682 netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); smsc95xx_resume()
1689 ret = smsc95xx_read_reg_nopm(dev, WUCSR, &val); smsc95xx_resume()
1695 ret = smsc95xx_write_reg_nopm(dev, WUCSR, val); smsc95xx_resume()
1700 ret = smsc95xx_read_reg_nopm(dev, PM_CTRL, &val); smsc95xx_resume()
1707 ret = smsc95xx_write_reg_nopm(dev, PM_CTRL, val); smsc95xx_resume()
1714 netdev_warn(dev->net, "usbnet_resume error\n"); smsc95xx_resume()
1721 struct usbnet *dev = usb_get_intfdata(intf); smsc95xx_reset_resume() local
1724 ret = smsc95xx_reset(dev); smsc95xx_reset_resume()
1738 static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) smsc95xx_rx_fixup() argument
1741 if (skb->len < dev->net->hard_header_len) smsc95xx_rx_fixup()
1760 netif_dbg(dev, rx_err, dev->net, smsc95xx_rx_fixup()
1762 dev->net->stats.rx_errors++; smsc95xx_rx_fixup()
1763 dev->net->stats.rx_dropped++; smsc95xx_rx_fixup()
1766 dev->net->stats.rx_crc_errors++; smsc95xx_rx_fixup()
1769 dev->net->stats.rx_frame_errors++; smsc95xx_rx_fixup()
1773 dev->net->stats.rx_length_errors++; smsc95xx_rx_fixup()
1778 netif_dbg(dev, rx_err, dev->net, smsc95xx_rx_fixup()
1785 if (dev->net->features & NETIF_F_RXCSUM) smsc95xx_rx_fixup()
1795 netdev_warn(dev->net, "Error allocating skb\n"); smsc95xx_rx_fixup()
1803 if (dev->net->features & NETIF_F_RXCSUM) smsc95xx_rx_fixup()
1808 usbnet_skb_return(dev, ax_skb); smsc95xx_rx_fixup()
1828 static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, smsc95xx_tx_fixup() argument
1882 static int smsc95xx_manage_power(struct usbnet *dev, int on) smsc95xx_manage_power() argument
1884 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); smsc95xx_manage_power()
1886 dev->intf->needs_remote_wakeup = on; smsc95xx_manage_power()
1892 netdev_info(dev->net, "hardware isn't capable of remote wakeup\n"); smsc95xx_manage_power()
1895 usb_autopm_get_interface_no_resume(dev->intf); smsc95xx_manage_power()
1897 usb_autopm_put_interface(dev->intf); smsc95xx_manage_power()
H A Dlan78xx.c192 struct lan78xx_net *dev; member in struct:lan78xx_priv
216 struct lan78xx_net *dev; member in struct:skb_data
223 struct lan78xx_net *dev; member in struct:usb_context
290 static int lan78xx_read_reg(struct lan78xx_net *dev, u32 index, u32 *data) lan78xx_read_reg() argument
298 ret = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), lan78xx_read_reg()
306 netdev_warn(dev->net, lan78xx_read_reg()
316 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data) lan78xx_write_reg() argument
327 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), lan78xx_write_reg()
332 netdev_warn(dev->net, lan78xx_write_reg()
342 static int lan78xx_read_stats(struct lan78xx_net *dev, lan78xx_read_stats() argument
355 ret = usb_control_msg(dev->udev, lan78xx_read_stats()
356 usb_rcvctrlpipe(dev->udev, 0), lan78xx_read_stats()
372 netdev_warn(dev->net, lan78xx_read_stats()
382 static int lan78xx_phy_wait_not_busy(struct lan78xx_net *dev) lan78xx_phy_wait_not_busy() argument
389 ret = lan78xx_read_reg(dev, MII_ACC, &val); lan78xx_phy_wait_not_busy()
415 static int lan78xx_wait_eeprom(struct lan78xx_net *dev) lan78xx_wait_eeprom() argument
422 ret = lan78xx_read_reg(dev, E2P_CMD, &val); lan78xx_wait_eeprom()
433 netdev_warn(dev->net, "EEPROM read operation timeout"); lan78xx_wait_eeprom()
440 static int lan78xx_eeprom_confirm_not_busy(struct lan78xx_net *dev) lan78xx_eeprom_confirm_not_busy() argument
447 ret = lan78xx_read_reg(dev, E2P_CMD, &val); lan78xx_eeprom_confirm_not_busy()
457 netdev_warn(dev->net, "EEPROM is busy"); lan78xx_eeprom_confirm_not_busy()
461 static int lan78xx_read_raw_eeprom(struct lan78xx_net *dev, u32 offset, lan78xx_read_raw_eeprom() argument
467 ret = lan78xx_eeprom_confirm_not_busy(dev); lan78xx_read_raw_eeprom()
474 ret = lan78xx_write_reg(dev, E2P_CMD, val); lan78xx_read_raw_eeprom()
478 ret = lan78xx_wait_eeprom(dev); lan78xx_read_raw_eeprom()
482 ret = lan78xx_read_reg(dev, E2P_DATA, &val); lan78xx_read_raw_eeprom()
493 static int lan78xx_read_eeprom(struct lan78xx_net *dev, u32 offset, lan78xx_read_eeprom() argument
499 ret = lan78xx_read_raw_eeprom(dev, 0, 1, &sig); lan78xx_read_eeprom()
501 ret = lan78xx_read_raw_eeprom(dev, offset, length, data); lan78xx_read_eeprom()
508 static int lan78xx_write_raw_eeprom(struct lan78xx_net *dev, u32 offset, lan78xx_write_raw_eeprom() argument
514 ret = lan78xx_eeprom_confirm_not_busy(dev); lan78xx_write_raw_eeprom()
520 ret = lan78xx_write_reg(dev, E2P_CMD, val); lan78xx_write_raw_eeprom()
524 ret = lan78xx_wait_eeprom(dev); lan78xx_write_raw_eeprom()
531 ret = lan78xx_write_reg(dev, E2P_DATA, val); lan78xx_write_raw_eeprom()
538 ret = lan78xx_write_reg(dev, E2P_CMD, val); lan78xx_write_raw_eeprom()
542 ret = lan78xx_wait_eeprom(dev); lan78xx_write_raw_eeprom()
552 static int lan78xx_read_raw_otp(struct lan78xx_net *dev, u32 offset, lan78xx_read_raw_otp() argument
560 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); lan78xx_read_raw_otp()
564 ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); lan78xx_read_raw_otp()
569 ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); lan78xx_read_raw_otp()
571 netdev_warn(dev->net, lan78xx_read_raw_otp()
579 ret = lan78xx_write_reg(dev, OTP_ADDR1, lan78xx_read_raw_otp()
581 ret = lan78xx_write_reg(dev, OTP_ADDR2, lan78xx_read_raw_otp()
584 ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); lan78xx_read_raw_otp()
585 ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); lan78xx_read_raw_otp()
590 ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); lan78xx_read_raw_otp()
592 netdev_warn(dev->net, lan78xx_read_raw_otp()
598 ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf); lan78xx_read_raw_otp()
606 static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, lan78xx_read_otp() argument
612 ret = lan78xx_read_raw_otp(dev, 0, 1, &sig); lan78xx_read_otp()
621 ret = lan78xx_read_raw_otp(dev, offset, length, data); lan78xx_read_otp()
627 static int lan78xx_dataport_wait_not_busy(struct lan78xx_net *dev) lan78xx_dataport_wait_not_busy() argument
634 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); lan78xx_dataport_wait_not_busy()
644 netdev_warn(dev->net, "lan78xx_dataport_wait_not_busy timed out"); lan78xx_dataport_wait_not_busy()
649 static int lan78xx_dataport_write(struct lan78xx_net *dev, u32 ram_select, lan78xx_dataport_write() argument
652 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_dataport_write()
656 if (usb_autopm_get_interface(dev->intf) < 0) lan78xx_dataport_write()
661 ret = lan78xx_dataport_wait_not_busy(dev); lan78xx_dataport_write()
665 ret = lan78xx_read_reg(dev, DP_SEL, &dp_sel); lan78xx_dataport_write()
669 ret = lan78xx_write_reg(dev, DP_SEL, dp_sel); lan78xx_dataport_write()
672 ret = lan78xx_write_reg(dev, DP_ADDR, addr + i); lan78xx_dataport_write()
674 ret = lan78xx_write_reg(dev, DP_DATA, buf[i]); lan78xx_dataport_write()
676 ret = lan78xx_write_reg(dev, DP_CMD, DP_CMD_WRITE_); lan78xx_dataport_write()
678 ret = lan78xx_dataport_wait_not_busy(dev); lan78xx_dataport_write()
685 usb_autopm_put_interface(dev->intf); lan78xx_dataport_write()
718 struct lan78xx_net *dev = pdata->dev; lan78xx_deferred_multicast_write() local
722 netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", lan78xx_deferred_multicast_write()
725 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, DP_SEL_VHF_VLAN_LEN, lan78xx_deferred_multicast_write()
729 ret = lan78xx_write_reg(dev, MAF_HI(i), 0); lan78xx_deferred_multicast_write()
730 ret = lan78xx_write_reg(dev, MAF_LO(i), lan78xx_deferred_multicast_write()
732 ret = lan78xx_write_reg(dev, MAF_HI(i), lan78xx_deferred_multicast_write()
736 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); lan78xx_deferred_multicast_write()
741 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_set_multicast() local
742 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_set_multicast()
761 if (dev->net->flags & IFF_PROMISC) { lan78xx_set_multicast()
762 netif_dbg(dev, drv, dev->net, "promiscuous mode enabled"); lan78xx_set_multicast()
765 if (dev->net->flags & IFF_ALLMULTI) { lan78xx_set_multicast()
766 netif_dbg(dev, drv, dev->net, lan78xx_set_multicast()
772 if (netdev_mc_count(dev->net)) { lan78xx_set_multicast()
776 netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); lan78xx_set_multicast()
802 static int lan78xx_update_flowcontrol(struct lan78xx_net *dev, u8 duplex, lan78xx_update_flowcontrol() argument
816 if (dev->udev->speed == USB_SPEED_SUPER) lan78xx_update_flowcontrol()
818 else if (dev->udev->speed == USB_SPEED_HIGH) lan78xx_update_flowcontrol()
821 netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s", lan78xx_update_flowcontrol()
825 ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow); lan78xx_update_flowcontrol()
828 ret = lan78xx_write_reg(dev, FLOW, flow); lan78xx_update_flowcontrol()
833 static int lan78xx_link_reset(struct lan78xx_net *dev) lan78xx_link_reset() argument
835 struct phy_device *phydev = dev->net->phydev; lan78xx_link_reset()
846 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); lan78xx_link_reset()
852 if (!phydev->link && dev->link_on) { lan78xx_link_reset()
853 dev->link_on = false; lan78xx_link_reset()
854 netif_carrier_off(dev->net); lan78xx_link_reset()
857 ret = lan78xx_read_reg(dev, MAC_CR, &buf); lan78xx_link_reset()
861 ret = lan78xx_write_reg(dev, MAC_CR, buf); lan78xx_link_reset()
864 } else if (phydev->link && !dev->link_on) { lan78xx_link_reset()
865 dev->link_on = true; lan78xx_link_reset()
871 if (dev->udev->speed == USB_SPEED_SUPER) { lan78xx_link_reset()
874 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); lan78xx_link_reset()
876 ret = lan78xx_write_reg(dev, USB_CFG1, buf); lan78xx_link_reset()
878 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); lan78xx_link_reset()
880 ret = lan78xx_write_reg(dev, USB_CFG1, buf); lan78xx_link_reset()
883 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); lan78xx_link_reset()
886 ret = lan78xx_write_reg(dev, USB_CFG1, buf); lan78xx_link_reset()
898 netif_dbg(dev, link, dev->net, lan78xx_link_reset()
902 ret = lan78xx_update_flowcontrol(dev, ecmd.duplex, ladv, radv); lan78xx_link_reset()
903 netif_carrier_on(dev->net); lan78xx_link_reset()
914 void lan78xx_defer_kevent(struct lan78xx_net *dev, int work) lan78xx_defer_kevent() argument
916 set_bit(work, &dev->flags); lan78xx_defer_kevent()
917 if (!schedule_delayed_work(&dev->wq, 0)) lan78xx_defer_kevent()
918 netdev_err(dev->net, "kevent %d may have been dropped\n", work); lan78xx_defer_kevent()
921 static void lan78xx_status(struct lan78xx_net *dev, struct urb *urb) lan78xx_status() argument
926 netdev_warn(dev->net, lan78xx_status()
935 netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); lan78xx_status()
936 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); lan78xx_status()
938 netdev_warn(dev->net, lan78xx_status()
950 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_ethtool_get_eeprom() local
954 return lan78xx_read_raw_eeprom(dev, ee->offset, ee->len, data); lan78xx_ethtool_get_eeprom()
960 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_ethtool_set_eeprom() local
967 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); lan78xx_ethtool_set_eeprom()
972 return lan78xx_write_raw_eeprom(dev, ee->offset, ee->len, data); lan78xx_ethtool_set_eeprom()
995 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_get_stats() local
1000 if (usb_autopm_get_interface(dev->intf) < 0) lan78xx_get_stats()
1003 if (lan78xx_read_stats(dev, &lan78xx_stat) > 0) { lan78xx_get_stats()
1009 usb_autopm_put_interface(dev->intf); lan78xx_get_stats()
1015 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_get_wol() local
1018 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_get_wol()
1020 if (usb_autopm_get_interface(dev->intf) < 0) lan78xx_get_wol()
1023 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); lan78xx_get_wol()
1037 usb_autopm_put_interface(dev->intf); lan78xx_get_wol()
1043 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_set_wol() local
1044 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_set_wol()
1047 ret = usb_autopm_get_interface(dev->intf); lan78xx_set_wol()
1065 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts); lan78xx_set_wol()
1069 usb_autopm_put_interface(dev->intf); lan78xx_set_wol()
1076 struct lan78xx_net *dev = netdev_priv(net); lan78xx_get_eee() local
1081 ret = usb_autopm_get_interface(dev->intf); lan78xx_get_eee()
1089 ret = lan78xx_read_reg(dev, MAC_CR, &buf); lan78xx_get_eee()
1096 ret = lan78xx_read_reg(dev, EEE_TX_LPI_REQ_DLY, &buf); lan78xx_get_eee()
1107 usb_autopm_put_interface(dev->intf); lan78xx_get_eee()
1114 struct lan78xx_net *dev = netdev_priv(net); lan78xx_set_eee() local
1118 ret = usb_autopm_get_interface(dev->intf); lan78xx_set_eee()
1123 ret = lan78xx_read_reg(dev, MAC_CR, &buf); lan78xx_set_eee()
1125 ret = lan78xx_write_reg(dev, MAC_CR, buf); lan78xx_set_eee()
1130 ret = lan78xx_write_reg(dev, EEE_TX_LPI_REQ_DLY, buf); lan78xx_set_eee()
1132 ret = lan78xx_read_reg(dev, MAC_CR, &buf); lan78xx_set_eee()
1134 ret = lan78xx_write_reg(dev, MAC_CR, buf); lan78xx_set_eee()
1137 usb_autopm_put_interface(dev->intf); lan78xx_set_eee()
1157 struct lan78xx_net *dev = netdev_priv(net); lan78xx_get_drvinfo() local
1161 usb_make_path(dev->udev, info->bus_info, sizeof(info->bus_info)); lan78xx_get_drvinfo()
1166 struct lan78xx_net *dev = netdev_priv(net); lan78xx_get_msglevel() local
1168 return dev->msg_enable; lan78xx_get_msglevel()
1173 struct lan78xx_net *dev = netdev_priv(net); lan78xx_set_msglevel() local
1175 dev->msg_enable = level; lan78xx_set_msglevel()
1192 struct lan78xx_net *dev = netdev_priv(net); lan78xx_set_mdix_status() local
1224 dev->mdix_ctrl = mdix_ctrl; lan78xx_set_mdix_status()
1229 struct lan78xx_net *dev = netdev_priv(net); lan78xx_get_settings() local
1234 ret = usb_autopm_get_interface(dev->intf); lan78xx_get_settings()
1254 usb_autopm_put_interface(dev->intf); lan78xx_get_settings()
1261 struct lan78xx_net *dev = netdev_priv(net); lan78xx_set_settings() local
1266 ret = usb_autopm_get_interface(dev->intf); lan78xx_set_settings()
1270 if (dev->mdix_ctrl != cmd->eth_tp_mdix_ctrl) { lan78xx_set_settings()
1285 usb_autopm_put_interface(dev->intf); lan78xx_set_settings()
1318 static void lan78xx_init_mac_address(struct lan78xx_net *dev) lan78xx_init_mac_address() argument
1324 ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); lan78xx_init_mac_address()
1325 ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); lan78xx_init_mac_address()
1336 if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, lan78xx_init_mac_address()
1338 (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN, lan78xx_init_mac_address()
1342 netif_dbg(dev, ifup, dev->net, lan78xx_init_mac_address()
1347 netif_dbg(dev, ifup, dev->net, lan78xx_init_mac_address()
1355 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); lan78xx_init_mac_address()
1356 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); lan78xx_init_mac_address()
1360 netif_dbg(dev, ifup, dev->net, lan78xx_init_mac_address()
1365 ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); lan78xx_init_mac_address()
1366 ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); lan78xx_init_mac_address()
1368 ether_addr_copy(dev->net->dev_addr, addr); lan78xx_init_mac_address()
1374 struct lan78xx_net *dev = bus->priv; lan78xx_mdiobus_read() local
1378 ret = usb_autopm_get_interface(dev->intf); lan78xx_mdiobus_read()
1382 mutex_lock(&dev->phy_mutex); lan78xx_mdiobus_read()
1385 ret = lan78xx_phy_wait_not_busy(dev); lan78xx_mdiobus_read()
1391 ret = lan78xx_write_reg(dev, MII_ACC, addr); lan78xx_mdiobus_read()
1393 ret = lan78xx_phy_wait_not_busy(dev); lan78xx_mdiobus_read()
1397 ret = lan78xx_read_reg(dev, MII_DATA, &val); lan78xx_mdiobus_read()
1402 mutex_unlock(&dev->phy_mutex); lan78xx_mdiobus_read()
1403 usb_autopm_put_interface(dev->intf); lan78xx_mdiobus_read()
1410 struct lan78xx_net *dev = bus->priv; lan78xx_mdiobus_write() local
1414 ret = usb_autopm_get_interface(dev->intf); lan78xx_mdiobus_write()
1418 mutex_lock(&dev->phy_mutex); lan78xx_mdiobus_write()
1421 ret = lan78xx_phy_wait_not_busy(dev); lan78xx_mdiobus_write()
1426 ret = lan78xx_write_reg(dev, MII_DATA, val); lan78xx_mdiobus_write()
1430 ret = lan78xx_write_reg(dev, MII_ACC, addr); lan78xx_mdiobus_write()
1432 ret = lan78xx_phy_wait_not_busy(dev); lan78xx_mdiobus_write()
1437 mutex_unlock(&dev->phy_mutex); lan78xx_mdiobus_write()
1438 usb_autopm_put_interface(dev->intf); lan78xx_mdiobus_write()
1442 static int lan78xx_mdio_init(struct lan78xx_net *dev) lan78xx_mdio_init() argument
1447 dev->mdiobus = mdiobus_alloc(); lan78xx_mdio_init()
1448 if (!dev->mdiobus) { lan78xx_mdio_init()
1449 netdev_err(dev->net, "can't allocate MDIO bus\n"); lan78xx_mdio_init()
1453 dev->mdiobus->priv = (void *)dev; lan78xx_mdio_init()
1454 dev->mdiobus->read = lan78xx_mdiobus_read; lan78xx_mdio_init()
1455 dev->mdiobus->write = lan78xx_mdiobus_write; lan78xx_mdio_init()
1456 dev->mdiobus->name = "lan78xx-mdiobus"; lan78xx_mdio_init()
1458 snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d", lan78xx_mdio_init()
1459 dev->udev->bus->busnum, dev->udev->devnum); lan78xx_mdio_init()
1461 dev->mdiobus->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); lan78xx_mdio_init()
1462 if (!dev->mdiobus->irq) { lan78xx_mdio_init()
1469 dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT; lan78xx_mdio_init()
1471 switch (dev->devid & ID_REV_CHIP_ID_MASK_) { lan78xx_mdio_init()
1475 dev->mdiobus->phy_mask = ~(1 << 1); lan78xx_mdio_init()
1479 ret = mdiobus_register(dev->mdiobus); lan78xx_mdio_init()
1481 netdev_err(dev->net, "can't register MDIO bus\n"); lan78xx_mdio_init()
1485 netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id); lan78xx_mdio_init()
1488 kfree(dev->mdiobus->irq); lan78xx_mdio_init()
1490 mdiobus_free(dev->mdiobus); lan78xx_mdio_init()
1494 static void lan78xx_remove_mdio(struct lan78xx_net *dev) lan78xx_remove_mdio() argument
1496 mdiobus_unregister(dev->mdiobus); lan78xx_remove_mdio()
1497 kfree(dev->mdiobus->irq); lan78xx_remove_mdio()
1498 mdiobus_free(dev->mdiobus); lan78xx_remove_mdio()
1506 static int lan78xx_phy_init(struct lan78xx_net *dev) lan78xx_phy_init() argument
1509 struct phy_device *phydev = dev->net->phydev; lan78xx_phy_init()
1511 phydev = phy_find_first(dev->mdiobus); lan78xx_phy_init()
1513 netdev_err(dev->net, "no PHY found\n"); lan78xx_phy_init()
1517 ret = phy_connect_direct(dev->net, phydev, lan78xx_phy_init()
1521 netdev_err(dev->net, "can't attach PHY to %s\n", lan78xx_phy_init()
1522 dev->mdiobus->id); lan78xx_phy_init()
1527 lan78xx_set_mdix_status(dev->net, ETH_TP_MDI_AUTO); lan78xx_phy_init()
1549 netif_dbg(dev, ifup, dev->net, "phy initialised successfully"); lan78xx_phy_init()
1554 static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size) lan78xx_set_rx_max_frame_length() argument
1560 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_set_rx_max_frame_length()
1566 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_set_rx_max_frame_length()
1573 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_set_rx_max_frame_length()
1577 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_set_rx_max_frame_length()
1583 static int unlink_urbs(struct lan78xx_net *dev, struct sk_buff_head *q) unlink_urbs() argument
1618 netdev_dbg(dev->net, "unlink urb err, %d\n", ret);
1630 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_change_mtu() local
1632 int old_hard_mtu = dev->hard_mtu; lan78xx_change_mtu()
1633 int old_rx_urb_size = dev->rx_urb_size; lan78xx_change_mtu()
1642 if ((ll_mtu % dev->maxpacket) == 0) lan78xx_change_mtu()
1645 ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + ETH_HLEN); lan78xx_change_mtu()
1649 dev->hard_mtu = netdev->mtu + netdev->hard_header_len; lan78xx_change_mtu()
1650 if (dev->rx_urb_size == old_hard_mtu) { lan78xx_change_mtu()
1651 dev->rx_urb_size = dev->hard_mtu; lan78xx_change_mtu()
1652 if (dev->rx_urb_size > old_rx_urb_size) { lan78xx_change_mtu()
1653 if (netif_running(dev->net)) { lan78xx_change_mtu()
1654 unlink_urbs(dev, &dev->rxq); lan78xx_change_mtu()
1655 tasklet_schedule(&dev->bh); lan78xx_change_mtu()
1665 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_set_mac_addr() local
1685 ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); lan78xx_set_mac_addr()
1686 ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); lan78xx_set_mac_addr()
1695 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_set_features() local
1696 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_set_features()
1717 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); lan78xx_set_features()
1726 struct lan78xx_net *dev = pdata->dev; lan78xx_deferred_vlan_write() local
1728 lan78xx_dataport_write(dev, DP_SEL_RSEL_VLAN_DA_, 0, lan78xx_deferred_vlan_write()
1735 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_vlan_rx_add_vid() local
1736 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_vlan_rx_add_vid()
1754 struct lan78xx_net *dev = netdev_priv(netdev); lan78xx_vlan_rx_kill_vid() local
1755 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_vlan_rx_kill_vid()
1770 static void lan78xx_init_ltm(struct lan78xx_net *dev) lan78xx_init_ltm() argument
1776 ret = lan78xx_read_reg(dev, USB_CFG1, &buf); lan78xx_init_ltm()
1780 if (lan78xx_read_eeprom(dev, 0x3F, 2, temp) == 0) { lan78xx_init_ltm()
1782 ret = lan78xx_read_raw_eeprom(dev, lan78xx_init_ltm()
1789 } else if (lan78xx_read_otp(dev, 0x3F, 2, temp) == 0) { lan78xx_init_ltm()
1791 ret = lan78xx_read_raw_otp(dev, lan78xx_init_ltm()
1801 lan78xx_write_reg(dev, LTM_BELT_IDLE0, regs[0]); lan78xx_init_ltm()
1802 lan78xx_write_reg(dev, LTM_BELT_IDLE1, regs[1]); lan78xx_init_ltm()
1803 lan78xx_write_reg(dev, LTM_BELT_ACT0, regs[2]); lan78xx_init_ltm()
1804 lan78xx_write_reg(dev, LTM_BELT_ACT1, regs[3]); lan78xx_init_ltm()
1805 lan78xx_write_reg(dev, LTM_INACTIVE0, regs[4]); lan78xx_init_ltm()
1806 lan78xx_write_reg(dev, LTM_INACTIVE1, regs[5]); lan78xx_init_ltm()
1809 static int lan78xx_reset(struct lan78xx_net *dev) lan78xx_reset() argument
1811 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_reset()
1816 ret = lan78xx_read_reg(dev, HW_CFG, &buf); lan78xx_reset()
1818 ret = lan78xx_write_reg(dev, HW_CFG, buf); lan78xx_reset()
1823 ret = lan78xx_read_reg(dev, HW_CFG, &buf); lan78xx_reset()
1825 netdev_warn(dev->net, lan78xx_reset()
1831 lan78xx_init_mac_address(dev); lan78xx_reset()
1834 ret = lan78xx_read_reg(dev, ID_REV, &buf); lan78xx_reset()
1835 dev->devid = buf; lan78xx_reset()
1838 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); lan78xx_reset()
1840 ret = lan78xx_write_reg(dev, USB_CFG0, buf); lan78xx_reset()
1843 lan78xx_init_ltm(dev); lan78xx_reset()
1845 dev->net->hard_header_len += TX_OVERHEAD; lan78xx_reset()
1846 dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; lan78xx_reset()
1848 if (dev->udev->speed == USB_SPEED_SUPER) { lan78xx_reset()
1850 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; lan78xx_reset()
1851 dev->rx_qlen = 4; lan78xx_reset()
1852 dev->tx_qlen = 4; lan78xx_reset()
1853 } else if (dev->udev->speed == USB_SPEED_HIGH) { lan78xx_reset()
1855 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; lan78xx_reset()
1856 dev->rx_qlen = RX_MAX_QUEUE_MEMORY / dev->rx_urb_size; lan78xx_reset()
1857 dev->tx_qlen = RX_MAX_QUEUE_MEMORY / dev->hard_mtu; lan78xx_reset()
1860 dev->rx_urb_size = DEFAULT_BURST_CAP_SIZE; lan78xx_reset()
1861 dev->rx_qlen = 4; lan78xx_reset()
1864 ret = lan78xx_write_reg(dev, BURST_CAP, buf); lan78xx_reset()
1865 ret = lan78xx_write_reg(dev, BULK_IN_DLY, DEFAULT_BULK_IN_DELAY); lan78xx_reset()
1867 ret = lan78xx_read_reg(dev, HW_CFG, &buf); lan78xx_reset()
1869 ret = lan78xx_write_reg(dev, HW_CFG, buf); lan78xx_reset()
1871 ret = lan78xx_read_reg(dev, USB_CFG0, &buf); lan78xx_reset()
1873 ret = lan78xx_write_reg(dev, USB_CFG0, buf); lan78xx_reset()
1877 ret = lan78xx_write_reg(dev, FCT_RX_FIFO_END, buf); lan78xx_reset()
1880 ret = lan78xx_write_reg(dev, FCT_TX_FIFO_END, buf); lan78xx_reset()
1882 ret = lan78xx_write_reg(dev, INT_STS, INT_STS_CLEAR_ALL_); lan78xx_reset()
1883 ret = lan78xx_write_reg(dev, FLOW, 0); lan78xx_reset()
1884 ret = lan78xx_write_reg(dev, FCT_FLOW, 0); lan78xx_reset()
1887 ret = lan78xx_read_reg(dev, RFE_CTL, &pdata->rfe_ctl); lan78xx_reset()
1889 ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); lan78xx_reset()
1892 lan78xx_set_features(dev->net, dev->net->features); lan78xx_reset()
1894 lan78xx_set_multicast(dev->net); lan78xx_reset()
1897 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); lan78xx_reset()
1899 ret = lan78xx_write_reg(dev, PMT_CTL, buf); lan78xx_reset()
1904 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); lan78xx_reset()
1906 netdev_warn(dev->net, "timeout waiting for PHY Reset"); lan78xx_reset()
1911 ret = lan78xx_read_reg(dev, MAC_CR, &buf); lan78xx_reset()
1913 ret = lan78xx_write_reg(dev, MAC_CR, buf); lan78xx_reset()
1916 ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf); lan78xx_reset()
1918 ret = lan78xx_write_reg(dev, INT_EP_CTL, buf); lan78xx_reset()
1920 ret = lan78xx_read_reg(dev, MAC_TX, &buf); lan78xx_reset()
1922 ret = lan78xx_write_reg(dev, MAC_TX, buf); lan78xx_reset()
1924 ret = lan78xx_read_reg(dev, FCT_TX_CTL, &buf); lan78xx_reset()
1926 ret = lan78xx_write_reg(dev, FCT_TX_CTL, buf); lan78xx_reset()
1928 ret = lan78xx_set_rx_max_frame_length(dev, dev->net->mtu + ETH_HLEN); lan78xx_reset()
1930 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_reset()
1932 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_reset()
1934 ret = lan78xx_read_reg(dev, FCT_RX_CTL, &buf); lan78xx_reset()
1936 ret = lan78xx_write_reg(dev, FCT_RX_CTL, buf); lan78xx_reset()
1943 struct lan78xx_net *dev = netdev_priv(net); lan78xx_open() local
1946 ret = usb_autopm_get_interface(dev->intf); lan78xx_open()
1950 ret = lan78xx_reset(dev); lan78xx_open()
1954 ret = lan78xx_phy_init(dev); lan78xx_open()
1959 if (dev->urb_intr) { lan78xx_open()
1960 ret = usb_submit_urb(dev->urb_intr, GFP_KERNEL); lan78xx_open()
1962 netif_err(dev, ifup, dev->net, lan78xx_open()
1968 set_bit(EVENT_DEV_OPEN, &dev->flags); lan78xx_open()
1972 dev->link_on = false; lan78xx_open()
1974 lan78xx_defer_kevent(dev, EVENT_LINK_RESET); lan78xx_open()
1976 usb_autopm_put_interface(dev->intf); lan78xx_open()
1982 static void lan78xx_terminate_urbs(struct lan78xx_net *dev) lan78xx_terminate_urbs() argument
1991 dev->wait = &unlink_wakeup; lan78xx_terminate_urbs()
1992 temp = unlink_urbs(dev, &dev->txq) + unlink_urbs(dev, &dev->rxq); lan78xx_terminate_urbs()
1995 while (!skb_queue_empty(&dev->rxq) && lan78xx_terminate_urbs()
1996 !skb_queue_empty(&dev->txq) && lan78xx_terminate_urbs()
1997 !skb_queue_empty(&dev->done)) { lan78xx_terminate_urbs()
2000 netif_dbg(dev, ifdown, dev->net, lan78xx_terminate_urbs()
2004 dev->wait = NULL; lan78xx_terminate_urbs()
2010 struct lan78xx_net *dev = netdev_priv(net); lan78xx_stop() local
2016 clear_bit(EVENT_DEV_OPEN, &dev->flags); lan78xx_stop()
2019 netif_info(dev, ifdown, dev->net, lan78xx_stop()
2024 lan78xx_terminate_urbs(dev); lan78xx_stop()
2026 usb_kill_urb(dev->urb_intr); lan78xx_stop()
2028 skb_queue_purge(&dev->rxq_pause); lan78xx_stop()
2034 dev->flags = 0; lan78xx_stop()
2035 cancel_delayed_work_sync(&dev->wq); lan78xx_stop()
2036 tasklet_kill(&dev->bh); lan78xx_stop()
2038 usb_autopm_put_interface(dev->intf); lan78xx_stop()
2048 static struct sk_buff *lan78xx_tx_prep(struct lan78xx_net *dev, lan78xx_tx_prep() argument
2096 static enum skb_state defer_bh(struct lan78xx_net *dev, struct sk_buff *skb, defer_bh() argument
2109 spin_lock(&dev->done.lock); defer_bh()
2111 __skb_queue_tail(&dev->done, skb); defer_bh()
2112 if (skb_queue_len(&dev->done) == 1) defer_bh()
2113 tasklet_schedule(&dev->bh); defer_bh()
2114 spin_unlock_irqrestore(&dev->done.lock, flags); defer_bh()
2123 struct lan78xx_net *dev = entry->dev; tx_complete() local
2126 dev->net->stats.tx_packets++; tx_complete()
2127 dev->net->stats.tx_bytes += entry->length; tx_complete()
2129 dev->net->stats.tx_errors++; tx_complete()
2133 lan78xx_defer_kevent(dev, EVENT_TX_HALT); tx_complete()
2144 netif_stop_queue(dev->net); tx_complete()
2147 netif_dbg(dev, tx_err, dev->net, tx_complete()
2153 usb_autopm_put_interface_async(dev->intf); tx_complete()
2155 defer_bh(dev, skb, &dev->txq, tx_done); tx_complete()
2169 struct lan78xx_net *dev = netdev_priv(net); lan78xx_start_xmit() local
2174 skb2 = lan78xx_tx_prep(dev, skb, GFP_ATOMIC); lan78xx_start_xmit()
2178 skb_queue_tail(&dev->txq_pend, skb2); lan78xx_start_xmit()
2180 if (skb_queue_len(&dev->txq_pend) > 10) lan78xx_start_xmit()
2183 netif_dbg(dev, tx_err, dev->net, lan78xx_start_xmit()
2185 dev->net->stats.tx_errors++; lan78xx_start_xmit()
2186 dev->net->stats.tx_dropped++; lan78xx_start_xmit()
2189 tasklet_schedule(&dev->bh); lan78xx_start_xmit()
2194 int lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf) lan78xx_get_endpoints() argument
2241 dev->pipe_in = usb_rcvbulkpipe(dev->udev, lan78xx_get_endpoints()
2244 dev->pipe_out = usb_sndbulkpipe(dev->udev, lan78xx_get_endpoints()
2247 dev->ep_intr = status; lan78xx_get_endpoints()
2252 static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf) lan78xx_bind() argument
2258 ret = lan78xx_get_endpoints(dev, intf); lan78xx_bind()
2260 dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL); lan78xx_bind()
2262 pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_bind()
2264 netdev_warn(dev->net, "Unable to allocate lan78xx_priv"); lan78xx_bind()
2268 pdata->dev = dev; lan78xx_bind()
2280 dev->net->features = 0; lan78xx_bind()
2283 dev->net->features |= NETIF_F_HW_CSUM; lan78xx_bind()
2286 dev->net->features |= NETIF_F_RXCSUM; lan78xx_bind()
2289 dev->net->features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG; lan78xx_bind()
2291 dev->net->hw_features = dev->net->features; lan78xx_bind()
2294 ret = lan78xx_reset(dev); lan78xx_bind()
2296 lan78xx_mdio_init(dev); lan78xx_bind()
2298 dev->net->flags |= IFF_MULTICAST; lan78xx_bind()
2305 static void lan78xx_unbind(struct lan78xx_net *dev, struct usb_interface *intf) lan78xx_unbind() argument
2307 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_unbind()
2309 lan78xx_remove_mdio(dev); lan78xx_unbind()
2312 netif_dbg(dev, ifdown, dev->net, "free pdata"); lan78xx_unbind()
2315 dev->data[0] = 0; lan78xx_unbind()
2319 static void lan78xx_rx_csum_offload(struct lan78xx_net *dev, lan78xx_rx_csum_offload() argument
2323 if (!(dev->net->features & NETIF_F_RXCSUM) || lan78xx_rx_csum_offload()
2332 void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb) lan78xx_skb_return() argument
2336 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { lan78xx_skb_return()
2337 skb_queue_tail(&dev->rxq_pause, skb); lan78xx_skb_return()
2341 skb->protocol = eth_type_trans(skb, dev->net); lan78xx_skb_return()
2342 dev->net->stats.rx_packets++; lan78xx_skb_return()
2343 dev->net->stats.rx_bytes += skb->len; lan78xx_skb_return()
2345 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", lan78xx_skb_return()
2354 netif_dbg(dev, rx_err, dev->net, lan78xx_skb_return()
2358 static int lan78xx_rx(struct lan78xx_net *dev, struct sk_buff *skb) lan78xx_rx() argument
2360 if (skb->len < dev->net->hard_header_len) lan78xx_rx()
2388 netif_dbg(dev, rx_err, dev->net, lan78xx_rx()
2393 lan78xx_rx_csum_offload(dev, skb, lan78xx_rx()
2404 netdev_warn(dev->net, "Error allocating skb"); lan78xx_rx()
2412 lan78xx_rx_csum_offload(dev, skb2, rx_cmd_a, rx_cmd_b); lan78xx_rx()
2417 lan78xx_skb_return(dev, skb2); lan78xx_rx()
2430 static inline void rx_process(struct lan78xx_net *dev, struct sk_buff *skb) rx_process() argument
2432 if (!lan78xx_rx(dev, skb)) { rx_process()
2433 dev->net->stats.rx_errors++; rx_process()
2438 lan78xx_skb_return(dev, skb); rx_process()
2442 netif_dbg(dev, rx_err, dev->net, "drop\n"); rx_process()
2443 dev->net->stats.rx_errors++; rx_process()
2445 skb_queue_tail(&dev->done, skb); rx_process()
2450 static int rx_submit(struct lan78xx_net *dev, struct urb *urb, gfp_t flags) rx_submit() argument
2455 size_t size = dev->rx_urb_size; rx_submit()
2458 skb = netdev_alloc_skb_ip_align(dev->net, size); rx_submit()
2466 entry->dev = dev; rx_submit()
2469 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_in, rx_submit()
2472 spin_lock_irqsave(&dev->rxq.lock, lockflags); rx_submit()
2474 if (netif_device_present(dev->net) && rx_submit()
2475 netif_running(dev->net) && rx_submit()
2476 !test_bit(EVENT_RX_HALT, &dev->flags) && rx_submit()
2477 !test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { rx_submit()
2481 lan78xx_queue_skb(&dev->rxq, skb, rx_start); rx_submit()
2484 lan78xx_defer_kevent(dev, EVENT_RX_HALT); rx_submit()
2487 netif_dbg(dev, ifdown, dev->net, "device gone\n"); rx_submit()
2488 netif_device_detach(dev->net); rx_submit()
2494 netif_dbg(dev, rx_err, dev->net, rx_submit()
2496 tasklet_schedule(&dev->bh); rx_submit()
2499 netif_dbg(dev, ifdown, dev->net, "rx: stopped\n"); rx_submit()
2502 spin_unlock_irqrestore(&dev->rxq.lock, lockflags); rx_submit()
2514 struct lan78xx_net *dev = entry->dev; rx_complete() local
2524 if (skb->len < dev->net->hard_header_len) { rx_complete()
2526 dev->net->stats.rx_errors++; rx_complete()
2527 dev->net->stats.rx_length_errors++; rx_complete()
2528 netif_dbg(dev, rx_err, dev->net, rx_complete()
2531 usb_mark_last_busy(dev->udev); rx_complete()
2534 dev->net->stats.rx_errors++; rx_complete()
2535 lan78xx_defer_kevent(dev, EVENT_RX_HALT); rx_complete()
2539 netif_dbg(dev, ifdown, dev->net, rx_complete()
2548 dev->net->stats.rx_errors++; rx_complete()
2556 dev->net->stats.rx_over_errors++; rx_complete()
2561 dev->net->stats.rx_errors++; rx_complete()
2562 netif_dbg(dev, rx_err, dev->net, "rx status %d\n", urb_status); rx_complete()
2566 state = defer_bh(dev, skb, &dev->rxq, state); rx_complete()
2569 if (netif_running(dev->net) && rx_complete()
2570 !test_bit(EVENT_RX_HALT, &dev->flags) && rx_complete()
2572 rx_submit(dev, urb, GFP_ATOMIC); rx_complete()
2577 netif_dbg(dev, rx_err, dev->net, "no read resubmitted\n"); rx_complete()
2580 static void lan78xx_tx_bh(struct lan78xx_net *dev) lan78xx_tx_bh() argument
2586 struct sk_buff_head *tqp = &dev->txq_pend; lan78xx_tx_bh()
2632 netif_dbg(dev, tx_err, dev->net, "no urb\n"); lan78xx_tx_bh()
2638 entry->dev = dev; lan78xx_tx_bh()
2641 spin_lock_irqsave(&dev->txq.lock, flags); lan78xx_tx_bh()
2642 ret = usb_autopm_get_interface_async(dev->intf); lan78xx_tx_bh()
2644 spin_unlock_irqrestore(&dev->txq.lock, flags); lan78xx_tx_bh()
2648 usb_fill_bulk_urb(urb, dev->udev, dev->pipe_out, lan78xx_tx_bh()
2651 if (length % dev->maxpacket == 0) { lan78xx_tx_bh()
2658 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { lan78xx_tx_bh()
2660 usb_anchor_urb(urb, &dev->deferred); lan78xx_tx_bh()
2662 netif_stop_queue(dev->net); lan78xx_tx_bh()
2664 spin_unlock_irqrestore(&dev->txq.lock, flags); lan78xx_tx_bh()
2665 netdev_dbg(dev->net, "Delaying transmission for resumption\n"); lan78xx_tx_bh()
2673 dev->net->trans_start = jiffies; lan78xx_tx_bh()
2674 lan78xx_queue_skb(&dev->txq, skb, tx_start); lan78xx_tx_bh()
2675 if (skb_queue_len(&dev->txq) >= dev->tx_qlen) lan78xx_tx_bh()
2676 netif_stop_queue(dev->net); lan78xx_tx_bh()
2679 netif_stop_queue(dev->net); lan78xx_tx_bh()
2680 lan78xx_defer_kevent(dev, EVENT_TX_HALT); lan78xx_tx_bh()
2681 usb_autopm_put_interface_async(dev->intf); lan78xx_tx_bh()
2684 usb_autopm_put_interface_async(dev->intf); lan78xx_tx_bh()
2685 netif_dbg(dev, tx_err, dev->net, lan78xx_tx_bh()
2690 spin_unlock_irqrestore(&dev->txq.lock, flags); lan78xx_tx_bh()
2693 netif_dbg(dev, tx_err, dev->net, "drop, code %d\n", ret); lan78xx_tx_bh()
2695 dev->net->stats.tx_dropped++; lan78xx_tx_bh()
2700 netif_dbg(dev, tx_queued, dev->net, lan78xx_tx_bh()
2704 static void lan78xx_rx_bh(struct lan78xx_net *dev) lan78xx_rx_bh() argument
2709 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) { lan78xx_rx_bh()
2711 if (skb_queue_len(&dev->rxq) >= dev->rx_qlen) lan78xx_rx_bh()
2715 if (rx_submit(dev, urb, GFP_ATOMIC) == -ENOLINK) lan78xx_rx_bh()
2719 if (skb_queue_len(&dev->rxq) < dev->rx_qlen) lan78xx_rx_bh()
2720 tasklet_schedule(&dev->bh); lan78xx_rx_bh()
2722 if (skb_queue_len(&dev->txq) < dev->tx_qlen) lan78xx_rx_bh()
2723 netif_wake_queue(dev->net); lan78xx_rx_bh()
2728 struct lan78xx_net *dev = (struct lan78xx_net *)param; lan78xx_bh() local
2732 while ((skb = skb_dequeue(&dev->done))) { lan78xx_bh()
2737 rx_process(dev, skb); lan78xx_bh()
2748 netdev_dbg(dev->net, "skb state %d\n", entry->state); lan78xx_bh()
2753 if (netif_device_present(dev->net) && netif_running(dev->net)) { lan78xx_bh()
2754 if (!skb_queue_empty(&dev->txq_pend)) lan78xx_bh()
2755 lan78xx_tx_bh(dev); lan78xx_bh()
2757 if (!timer_pending(&dev->delay) && lan78xx_bh()
2758 !test_bit(EVENT_RX_HALT, &dev->flags)) lan78xx_bh()
2759 lan78xx_rx_bh(dev); lan78xx_bh()
2766 struct lan78xx_net *dev; lan78xx_delayedwork() local
2768 dev = container_of(work, struct lan78xx_net, wq.work); lan78xx_delayedwork()
2770 if (test_bit(EVENT_TX_HALT, &dev->flags)) { lan78xx_delayedwork()
2771 unlink_urbs(dev, &dev->txq); lan78xx_delayedwork()
2772 status = usb_autopm_get_interface(dev->intf); lan78xx_delayedwork()
2775 status = usb_clear_halt(dev->udev, dev->pipe_out); lan78xx_delayedwork()
2776 usb_autopm_put_interface(dev->intf); lan78xx_delayedwork()
2780 if (netif_msg_tx_err(dev)) lan78xx_delayedwork()
2782 netdev_err(dev->net, lan78xx_delayedwork()
2786 clear_bit(EVENT_TX_HALT, &dev->flags); lan78xx_delayedwork()
2788 netif_wake_queue(dev->net); lan78xx_delayedwork()
2791 if (test_bit(EVENT_RX_HALT, &dev->flags)) { lan78xx_delayedwork()
2792 unlink_urbs(dev, &dev->rxq); lan78xx_delayedwork()
2793 status = usb_autopm_get_interface(dev->intf); lan78xx_delayedwork()
2796 status = usb_clear_halt(dev->udev, dev->pipe_in); lan78xx_delayedwork()
2797 usb_autopm_put_interface(dev->intf); lan78xx_delayedwork()
2801 if (netif_msg_rx_err(dev)) lan78xx_delayedwork()
2803 netdev_err(dev->net, lan78xx_delayedwork()
2807 clear_bit(EVENT_RX_HALT, &dev->flags); lan78xx_delayedwork()
2808 tasklet_schedule(&dev->bh); lan78xx_delayedwork()
2812 if (test_bit(EVENT_LINK_RESET, &dev->flags)) { lan78xx_delayedwork()
2815 clear_bit(EVENT_LINK_RESET, &dev->flags); lan78xx_delayedwork()
2816 status = usb_autopm_get_interface(dev->intf); lan78xx_delayedwork()
2819 if (lan78xx_link_reset(dev) < 0) { lan78xx_delayedwork()
2820 usb_autopm_put_interface(dev->intf); lan78xx_delayedwork()
2822 netdev_info(dev->net, "link reset failed (%d)\n", lan78xx_delayedwork()
2825 usb_autopm_put_interface(dev->intf); lan78xx_delayedwork()
2832 struct lan78xx_net *dev = urb->context; intr_complete() local
2838 lan78xx_status(dev, urb); intr_complete()
2844 netif_dbg(dev, ifdown, dev->net, intr_complete()
2852 netdev_dbg(dev->net, "intr status %d\n", status); intr_complete()
2856 if (!netif_running(dev->net)) intr_complete()
2862 netif_err(dev, timer, dev->net, intr_complete()
2868 struct lan78xx_net *dev; lan78xx_disconnect() local
2872 dev = usb_get_intfdata(intf); lan78xx_disconnect()
2874 if (!dev) lan78xx_disconnect()
2879 net = dev->net; lan78xx_disconnect()
2882 cancel_delayed_work_sync(&dev->wq); lan78xx_disconnect()
2884 usb_scuttle_anchored_urbs(&dev->deferred); lan78xx_disconnect()
2886 lan78xx_unbind(dev, intf); lan78xx_disconnect()
2888 usb_kill_urb(dev->urb_intr); lan78xx_disconnect()
2889 usb_free_urb(dev->urb_intr); lan78xx_disconnect()
2897 struct lan78xx_net *dev = netdev_priv(net); lan78xx_tx_timeout() local
2899 unlink_urbs(dev, &dev->txq); lan78xx_tx_timeout()
2900 tasklet_schedule(&dev->bh); lan78xx_tx_timeout()
2921 struct lan78xx_net *dev; lan78xx_probe() local
2935 dev_err(&intf->dev, "Error: OOM\n"); lan78xx_probe()
2940 SET_NETDEV_DEV(netdev, &intf->dev); lan78xx_probe()
2942 dev = netdev_priv(netdev); lan78xx_probe()
2943 dev->udev = udev; lan78xx_probe()
2944 dev->intf = intf; lan78xx_probe()
2945 dev->net = netdev; lan78xx_probe()
2946 dev->msg_enable = netif_msg_init(msg_level, NETIF_MSG_DRV lan78xx_probe()
2949 skb_queue_head_init(&dev->rxq); lan78xx_probe()
2950 skb_queue_head_init(&dev->txq); lan78xx_probe()
2951 skb_queue_head_init(&dev->done); lan78xx_probe()
2952 skb_queue_head_init(&dev->rxq_pause); lan78xx_probe()
2953 skb_queue_head_init(&dev->txq_pend); lan78xx_probe()
2954 mutex_init(&dev->phy_mutex); lan78xx_probe()
2956 tasklet_init(&dev->bh, lan78xx_bh, (unsigned long)dev); lan78xx_probe()
2957 INIT_DELAYED_WORK(&dev->wq, lan78xx_delayedwork); lan78xx_probe()
2958 init_usb_anchor(&dev->deferred); lan78xx_probe()
2964 ret = lan78xx_bind(dev, intf); lan78xx_probe()
2969 if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) lan78xx_probe()
2970 netdev->mtu = dev->hard_mtu - netdev->hard_header_len; lan78xx_probe()
2972 dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0; lan78xx_probe()
2973 dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1; lan78xx_probe()
2974 dev->ep_intr = (intf->cur_altsetting)->endpoint + 2; lan78xx_probe()
2976 dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE); lan78xx_probe()
2977 dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE); lan78xx_probe()
2979 dev->pipe_intr = usb_rcvintpipe(dev->udev, lan78xx_probe()
2980 dev->ep_intr->desc.bEndpointAddress & lan78xx_probe()
2982 period = dev->ep_intr->desc.bInterval; lan78xx_probe()
2984 maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0); lan78xx_probe()
2987 dev->urb_intr = usb_alloc_urb(0, GFP_KERNEL); lan78xx_probe()
2988 if (!dev->urb_intr) { lan78xx_probe()
2992 usb_fill_int_urb(dev->urb_intr, dev->udev, lan78xx_probe()
2993 dev->pipe_intr, buf, maxp, lan78xx_probe()
2994 intr_complete, dev, period); lan78xx_probe()
2998 dev->maxpacket = usb_maxpacket(dev->udev, dev->pipe_out, 1); lan78xx_probe()
3005 netif_err(dev, probe, netdev, "couldn't register the device\n"); lan78xx_probe()
3009 usb_set_intfdata(intf, dev); lan78xx_probe()
3011 ret = device_set_wakeup_enable(&udev->dev, true); lan78xx_probe()
3016 pm_runtime_set_autosuspend_delay(&udev->dev, lan78xx_probe()
3022 lan78xx_unbind(dev, intf); lan78xx_probe()
3056 static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) lan78xx_set_suspend() argument
3068 ret = lan78xx_read_reg(dev, MAC_TX, &buf); lan78xx_set_suspend()
3070 ret = lan78xx_write_reg(dev, MAC_TX, buf); lan78xx_set_suspend()
3071 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_set_suspend()
3073 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_set_suspend()
3075 ret = lan78xx_write_reg(dev, WUCSR, 0); lan78xx_set_suspend()
3076 ret = lan78xx_write_reg(dev, WUCSR2, 0); lan78xx_set_suspend()
3077 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); lan78xx_set_suspend()
3082 ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); lan78xx_set_suspend()
3087 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); lan78xx_set_suspend()
3116 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), lan78xx_set_suspend()
3122 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); lan78xx_set_suspend()
3123 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); lan78xx_set_suspend()
3124 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); lan78xx_set_suspend()
3125 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); lan78xx_set_suspend()
3130 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), lan78xx_set_suspend()
3136 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); lan78xx_set_suspend()
3137 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); lan78xx_set_suspend()
3138 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); lan78xx_set_suspend()
3139 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); lan78xx_set_suspend()
3160 ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), lan78xx_set_suspend()
3166 ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); lan78xx_set_suspend()
3167 ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); lan78xx_set_suspend()
3168 ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); lan78xx_set_suspend()
3169 ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); lan78xx_set_suspend()
3177 ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr); lan78xx_set_suspend()
3185 ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); lan78xx_set_suspend()
3188 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); lan78xx_set_suspend()
3190 ret = lan78xx_write_reg(dev, PMT_CTL, buf); lan78xx_set_suspend()
3192 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_set_suspend()
3194 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_set_suspend()
3201 struct lan78xx_net *dev = usb_get_intfdata(intf); lan78xx_suspend() local
3202 struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); lan78xx_suspend()
3209 if (!dev->suspend_count++) { lan78xx_suspend()
3210 spin_lock_irq(&dev->txq.lock); lan78xx_suspend()
3212 if ((skb_queue_len(&dev->txq) || lan78xx_suspend()
3213 skb_queue_len(&dev->txq_pend)) && lan78xx_suspend()
3215 spin_unlock_irq(&dev->txq.lock); lan78xx_suspend()
3219 set_bit(EVENT_DEV_ASLEEP, &dev->flags); lan78xx_suspend()
3220 spin_unlock_irq(&dev->txq.lock); lan78xx_suspend()
3224 ret = lan78xx_read_reg(dev, MAC_TX, &buf); lan78xx_suspend()
3226 ret = lan78xx_write_reg(dev, MAC_TX, buf); lan78xx_suspend()
3227 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_suspend()
3229 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_suspend()
3232 netif_device_detach(dev->net); lan78xx_suspend()
3233 lan78xx_terminate_urbs(dev); lan78xx_suspend()
3234 usb_kill_urb(dev->urb_intr); lan78xx_suspend()
3237 netif_device_attach(dev->net); lan78xx_suspend()
3240 if (test_bit(EVENT_DEV_ASLEEP, &dev->flags)) { lan78xx_suspend()
3243 ret = lan78xx_read_reg(dev, MAC_TX, &buf); lan78xx_suspend()
3245 ret = lan78xx_write_reg(dev, MAC_TX, buf); lan78xx_suspend()
3246 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_suspend()
3248 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_suspend()
3250 ret = lan78xx_write_reg(dev, WUCSR, 0); lan78xx_suspend()
3251 ret = lan78xx_write_reg(dev, WUCSR2, 0); lan78xx_suspend()
3252 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); lan78xx_suspend()
3255 ret = lan78xx_read_reg(dev, WUCSR, &buf); lan78xx_suspend()
3260 ret = lan78xx_write_reg(dev, WUCSR, buf); lan78xx_suspend()
3262 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); lan78xx_suspend()
3272 ret = lan78xx_write_reg(dev, PMT_CTL, buf); lan78xx_suspend()
3274 ret = lan78xx_read_reg(dev, PMT_CTL, &buf); lan78xx_suspend()
3278 ret = lan78xx_write_reg(dev, PMT_CTL, buf); lan78xx_suspend()
3280 ret = lan78xx_read_reg(dev, MAC_RX, &buf); lan78xx_suspend()
3282 ret = lan78xx_write_reg(dev, MAC_RX, buf); lan78xx_suspend()
3284 lan78xx_set_suspend(dev, pdata->wol); lan78xx_suspend()
3295 struct lan78xx_net *dev = usb_get_intfdata(intf); lan78xx_resume() local
3301 if (!--dev->suspend_count) { lan78xx_resume()
3303 if (dev->urb_intr && test_bit(EVENT_DEV_OPEN, &dev->flags)) lan78xx_resume()
3304 usb_submit_urb(dev->urb_intr, GFP_NOIO); lan78xx_resume()
3306 spin_lock_irq(&dev->txq.lock); lan78xx_resume()
3307 while ((res = usb_get_from_anchor(&dev->deferred))) { lan78xx_resume()
3313 usb_autopm_put_interface_async(dev->intf); lan78xx_resume()
3315 dev->net->trans_start = jiffies; lan78xx_resume()
3316 lan78xx_queue_skb(&dev->txq, skb, tx_start); lan78xx_resume()
3320 clear_bit(EVENT_DEV_ASLEEP, &dev->flags); lan78xx_resume()
3321 spin_unlock_irq(&dev->txq.lock); lan78xx_resume()
3323 if (test_bit(EVENT_DEV_OPEN, &dev->flags)) { lan78xx_resume()
3324 if (!(skb_queue_len(&dev->txq) >= dev->tx_qlen)) lan78xx_resume()
3325 netif_start_queue(dev->net); lan78xx_resume()
3326 tasklet_schedule(&dev->bh); lan78xx_resume()
3330 ret = lan78xx_write_reg(dev, WUCSR2, 0); lan78xx_resume()
3331 ret = lan78xx_write_reg(dev, WUCSR, 0); lan78xx_resume()
3332 ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); lan78xx_resume()
3334 ret = lan78xx_write_reg(dev, WUCSR2, WUCSR2_NS_RCD_ | lan78xx_resume()
3339 ret = lan78xx_write_reg(dev, WUCSR, WUCSR_EEE_TX_WAKE_ | lan78xx_resume()
3347 ret = lan78xx_read_reg(dev, MAC_TX, &buf); lan78xx_resume()
3349 ret = lan78xx_write_reg(dev, MAC_TX, buf); lan78xx_resume()
3356 struct lan78xx_net *dev = usb_get_intfdata(intf); lan78xx_reset_resume() local
3358 lan78xx_reset(dev); lan78xx_reset_resume()
3360 lan78xx_phy_init(dev); lan78xx_reset_resume()
/linux-4.4.14/drivers/i2c/busses/
H A Di2c-highlander.c44 struct device *dev; member in struct:highlander_i2c_dev
57 static inline void highlander_i2c_irq_enable(struct highlander_i2c_dev *dev) highlander_i2c_irq_enable() argument
59 iowrite16(ioread16(dev->base + SMCR) | SMCR_IEIC, dev->base + SMCR); highlander_i2c_irq_enable()
62 static inline void highlander_i2c_irq_disable(struct highlander_i2c_dev *dev) highlander_i2c_irq_disable() argument
64 iowrite16(ioread16(dev->base + SMCR) & ~SMCR_IEIC, dev->base + SMCR); highlander_i2c_irq_disable()
67 static inline void highlander_i2c_start(struct highlander_i2c_dev *dev) highlander_i2c_start() argument
69 iowrite16(ioread16(dev->base + SMCR) | SMCR_START, dev->base + SMCR); highlander_i2c_start()
72 static inline void highlander_i2c_done(struct highlander_i2c_dev *dev) highlander_i2c_done() argument
74 iowrite16(ioread16(dev->base + SMCR) | SMCR_IRIC, dev->base + SMCR); highlander_i2c_done()
77 static void highlander_i2c_setup(struct highlander_i2c_dev *dev) highlander_i2c_setup() argument
81 smmr = ioread16(dev->base + SMMR); highlander_i2c_setup()
89 iowrite16(smmr, dev->base + SMMR); highlander_i2c_setup()
114 static void highlander_i2c_command(struct highlander_i2c_dev *dev, highlander_i2c_command() argument
123 iowrite16(cmd, dev->base + SMSADR + i); highlander_i2c_command()
124 dev_dbg(dev->dev, "command data[%x] 0x%04x\n", i/2, cmd); highlander_i2c_command()
128 static int highlander_i2c_wait_for_bbsy(struct highlander_i2c_dev *dev) highlander_i2c_wait_for_bbsy() argument
133 while (ioread16(dev->base + SMCR) & SMCR_BBSY) { highlander_i2c_wait_for_bbsy()
135 dev_warn(dev->dev, "timeout waiting for bus ready\n"); highlander_i2c_wait_for_bbsy()
145 static int highlander_i2c_reset(struct highlander_i2c_dev *dev) highlander_i2c_reset() argument
147 iowrite16(ioread16(dev->base + SMCR) | SMCR_RST, dev->base + SMCR); highlander_i2c_reset()
148 return highlander_i2c_wait_for_bbsy(dev); highlander_i2c_reset()
151 static int highlander_i2c_wait_for_ack(struct highlander_i2c_dev *dev) highlander_i2c_wait_for_ack() argument
153 u16 tmp = ioread16(dev->base + SMCR); highlander_i2c_wait_for_ack()
156 dev_warn(dev->dev, "ack abnormality\n"); highlander_i2c_wait_for_ack()
157 return highlander_i2c_reset(dev); highlander_i2c_wait_for_ack()
165 struct highlander_i2c_dev *dev = dev_id; highlander_i2c_irq() local
167 highlander_i2c_done(dev); highlander_i2c_irq()
168 complete(&dev->cmd_complete); highlander_i2c_irq()
173 static void highlander_i2c_poll(struct highlander_i2c_dev *dev) highlander_i2c_poll() argument
180 smcr = ioread16(dev->base + SMCR); highlander_i2c_poll()
197 dev_err(dev->dev, "polling timed out\n"); highlander_i2c_poll()
200 static inline int highlander_i2c_wait_xfer_done(struct highlander_i2c_dev *dev) highlander_i2c_wait_xfer_done() argument
202 if (dev->irq) highlander_i2c_wait_xfer_done()
203 wait_for_completion_timeout(&dev->cmd_complete, highlander_i2c_wait_xfer_done()
207 highlander_i2c_poll(dev); highlander_i2c_wait_xfer_done()
209 return highlander_i2c_wait_for_ack(dev); highlander_i2c_wait_xfer_done()
212 static int highlander_i2c_read(struct highlander_i2c_dev *dev) highlander_i2c_read() argument
217 if (highlander_i2c_wait_for_bbsy(dev)) highlander_i2c_read()
220 highlander_i2c_start(dev); highlander_i2c_read()
222 if (highlander_i2c_wait_xfer_done(dev)) { highlander_i2c_read()
223 dev_err(dev->dev, "Arbitration loss\n"); highlander_i2c_read()
239 if (iic_read_delay && time_before(jiffies, dev->last_read_time + highlander_i2c_read()
241 msleep(jiffies_to_msecs((dev->last_read_time + highlander_i2c_read()
244 cnt = (dev->buf_len + 1) >> 1; highlander_i2c_read()
246 data[i] = ioread16(dev->base + SMTRDR + (i * sizeof(u16))); highlander_i2c_read()
247 dev_dbg(dev->dev, "read data[%x] 0x%04x\n", i, data[i]); highlander_i2c_read()
250 smbus_read_data(data, dev->buf, dev->buf_len); highlander_i2c_read()
252 dev->last_read_time = jiffies; highlander_i2c_read()
257 static int highlander_i2c_write(struct highlander_i2c_dev *dev) highlander_i2c_write() argument
262 smbus_write_data(dev->buf, data, dev->buf_len); highlander_i2c_write()
264 cnt = (dev->buf_len + 1) >> 1; highlander_i2c_write()
266 iowrite16(data[i], dev->base + SMTRDR + (i * sizeof(u16))); highlander_i2c_write()
267 dev_dbg(dev->dev, "write data[%x] 0x%04x\n", i, data[i]); highlander_i2c_write()
270 if (highlander_i2c_wait_for_bbsy(dev)) highlander_i2c_write()
273 highlander_i2c_start(dev); highlander_i2c_write()
275 return highlander_i2c_wait_xfer_done(dev); highlander_i2c_write()
283 struct highlander_i2c_dev *dev = i2c_get_adapdata(adap); highlander_i2c_smbus_xfer() local
286 init_completion(&dev->cmd_complete); highlander_i2c_smbus_xfer()
288 dev_dbg(dev->dev, "addr %04x, command %02x, read_write %d, size %d\n", highlander_i2c_smbus_xfer()
296 dev->buf = &data->byte; highlander_i2c_smbus_xfer()
297 dev->buf_len = 1; highlander_i2c_smbus_xfer()
300 dev->buf = &data->block[1]; highlander_i2c_smbus_xfer()
301 dev->buf_len = data->block[0]; highlander_i2c_smbus_xfer()
304 dev_err(dev->dev, "unsupported command %d\n", size); highlander_i2c_smbus_xfer()
311 tmp = ioread16(dev->base + SMMR); highlander_i2c_smbus_xfer()
314 switch (dev->buf_len) { highlander_i2c_smbus_xfer()
328 dev_err(dev->dev, "unsupported xfer size %d\n", dev->buf_len); highlander_i2c_smbus_xfer()
332 iowrite16(tmp, dev->base + SMMR); highlander_i2c_smbus_xfer()
335 highlander_i2c_done(dev); highlander_i2c_smbus_xfer()
338 iowrite16((addr << 1) | read_write, dev->base + SMSMADR); highlander_i2c_smbus_xfer()
340 highlander_i2c_command(dev, command, dev->buf_len); highlander_i2c_smbus_xfer()
343 return highlander_i2c_read(dev); highlander_i2c_smbus_xfer()
345 return highlander_i2c_write(dev); highlander_i2c_smbus_xfer()
360 struct highlander_i2c_dev *dev; highlander_i2c_probe() local
367 dev_err(&pdev->dev, "no mem resource\n"); highlander_i2c_probe()
371 dev = kzalloc(sizeof(struct highlander_i2c_dev), GFP_KERNEL); highlander_i2c_probe()
372 if (unlikely(!dev)) highlander_i2c_probe()
375 dev->base = ioremap_nocache(res->start, resource_size(res)); highlander_i2c_probe()
376 if (unlikely(!dev->base)) { highlander_i2c_probe()
381 dev->dev = &pdev->dev; highlander_i2c_probe()
382 platform_set_drvdata(pdev, dev); highlander_i2c_probe()
384 dev->irq = platform_get_irq(pdev, 0); highlander_i2c_probe()
386 dev->irq = 0; highlander_i2c_probe()
388 if (dev->irq) { highlander_i2c_probe()
389 ret = request_irq(dev->irq, highlander_i2c_irq, 0, highlander_i2c_probe()
390 pdev->name, dev); highlander_i2c_probe()
394 highlander_i2c_irq_enable(dev); highlander_i2c_probe()
396 dev_notice(&pdev->dev, "no IRQ, using polling mode\n"); highlander_i2c_probe()
397 highlander_i2c_irq_disable(dev); highlander_i2c_probe()
400 dev->last_read_time = jiffies; /* initial read jiffies */ highlander_i2c_probe()
402 highlander_i2c_setup(dev); highlander_i2c_probe()
404 adap = &dev->adapter; highlander_i2c_probe()
405 i2c_set_adapdata(adap, dev); highlander_i2c_probe()
410 adap->dev.parent = &pdev->dev; highlander_i2c_probe()
416 ret = highlander_i2c_reset(dev); highlander_i2c_probe()
418 dev_err(&pdev->dev, "controller didn't come up\n"); highlander_i2c_probe()
424 dev_err(&pdev->dev, "failure adding adapter\n"); highlander_i2c_probe()
431 if (dev->irq) highlander_i2c_probe()
432 free_irq(dev->irq, dev); highlander_i2c_probe()
434 iounmap(dev->base); highlander_i2c_probe()
436 kfree(dev); highlander_i2c_probe()
443 struct highlander_i2c_dev *dev = platform_get_drvdata(pdev); highlander_i2c_remove() local
445 i2c_del_adapter(&dev->adapter); highlander_i2c_remove()
447 if (dev->irq) highlander_i2c_remove()
448 free_irq(dev->irq, dev); highlander_i2c_remove()
450 iounmap(dev->base); highlander_i2c_remove()
451 kfree(dev); highlander_i2c_remove()
H A Di2c-designware-baytrail.c32 static int get_sem(struct device *dev, u32 *sem) get_sem() argument
40 dev_err(dev, "iosf failed to read punit semaphore\n"); get_sem()
49 static void reset_semaphore(struct device *dev) reset_semaphore() argument
55 dev_err(dev, "iosf failed to reset punit semaphore during read\n"); reset_semaphore()
62 dev_err(dev, "iosf failed to reset punit semaphore during write\n"); reset_semaphore()
65 static int baytrail_i2c_acquire(struct dw_i2c_dev *dev) baytrail_i2c_acquire() argument
73 if (!dev || !dev->dev) baytrail_i2c_acquire()
76 if (!dev->release_lock) baytrail_i2c_acquire()
83 dev_err(dev->dev, "iosf punit semaphore request failed\n"); baytrail_i2c_acquire()
91 ret = get_sem(dev->dev, &sem); baytrail_i2c_acquire()
94 dev_dbg(dev->dev, "punit semaphore acquired after %ums\n", baytrail_i2c_acquire()
102 dev_err(dev->dev, "punit semaphore timed out, resetting\n"); baytrail_i2c_acquire()
103 reset_semaphore(dev->dev); baytrail_i2c_acquire()
108 dev_err(dev->dev, "iosf failed to read punit semaphore\n"); baytrail_i2c_acquire()
110 dev_err(dev->dev, "PUNIT SEM: %d\n", sem); baytrail_i2c_acquire()
117 static void baytrail_i2c_release(struct dw_i2c_dev *dev) baytrail_i2c_release() argument
119 if (!dev || !dev->dev) baytrail_i2c_release()
122 if (!dev->acquire_lock) baytrail_i2c_release()
125 reset_semaphore(dev->dev); baytrail_i2c_release()
126 dev_dbg(dev->dev, "punit semaphore held for %ums\n", baytrail_i2c_release()
130 int i2c_dw_eval_lock_support(struct dw_i2c_dev *dev) i2c_dw_eval_lock_support() argument
136 if (!dev || !dev->dev) i2c_dw_eval_lock_support()
139 handle = ACPI_HANDLE(dev->dev); i2c_dw_eval_lock_support()
148 dev_info(dev->dev, "I2C bus managed by PUNIT\n"); i2c_dw_eval_lock_support()
149 dev->acquire_lock = baytrail_i2c_acquire; i2c_dw_eval_lock_support()
150 dev->release_lock = baytrail_i2c_release; i2c_dw_eval_lock_support()
151 dev->pm_runtime_disabled = true; i2c_dw_eval_lock_support()
H A Di2c-designware-core.c168 static u32 dw_readl(struct dw_i2c_dev *dev, int offset) dw_readl() argument
172 if (dev->accessor_flags & ACCESS_16BIT) dw_readl()
173 value = readw_relaxed(dev->base + offset) | dw_readl()
174 (readw_relaxed(dev->base + offset + 2) << 16); dw_readl()
176 value = readl_relaxed(dev->base + offset); dw_readl()
178 if (dev->accessor_flags & ACCESS_SWAP) dw_readl()
184 static void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset) dw_writel() argument
186 if (dev->accessor_flags & ACCESS_SWAP) dw_writel()
189 if (dev->accessor_flags & ACCESS_16BIT) { dw_writel()
190 writew_relaxed((u16)b, dev->base + offset); dw_writel()
191 writew_relaxed((u16)(b >> 16), dev->base + offset + 2); dw_writel()
193 writel_relaxed(b, dev->base + offset); dw_writel()
253 static void __i2c_dw_enable(struct dw_i2c_dev *dev, bool enable) __i2c_dw_enable() argument
258 dw_writel(dev, enable, DW_IC_ENABLE); __i2c_dw_enable()
259 if ((dw_readl(dev, DW_IC_ENABLE_STATUS) & 1) == enable) __i2c_dw_enable()
270 dev_warn(dev->dev, "timeout in %sabling adapter\n", __i2c_dw_enable()
276 * @dev: device private data
282 int i2c_dw_init(struct dw_i2c_dev *dev) i2c_dw_init() argument
290 if (dev->acquire_lock) { i2c_dw_init()
291 ret = dev->acquire_lock(dev); i2c_dw_init()
293 dev_err(dev->dev, "couldn't acquire bus ownership\n"); i2c_dw_init()
298 input_clock_khz = dev->get_clk_rate_khz(dev); i2c_dw_init()
300 reg = dw_readl(dev, DW_IC_COMP_TYPE); i2c_dw_init()
303 dev->accessor_flags |= ACCESS_SWAP; i2c_dw_init()
306 dev->accessor_flags |= ACCESS_16BIT; i2c_dw_init()
308 dev_err(dev->dev, "Unknown Synopsys component type: " i2c_dw_init()
310 if (dev->release_lock) i2c_dw_init()
311 dev->release_lock(dev); i2c_dw_init()
316 __i2c_dw_enable(dev, false); i2c_dw_init()
320 sda_falling_time = dev->sda_falling_time ?: 300; /* ns */ i2c_dw_init()
321 scl_falling_time = dev->scl_falling_time ?: 300; /* ns */ i2c_dw_init()
324 if (dev->ss_hcnt && dev->ss_lcnt) { i2c_dw_init()
325 hcnt = dev->ss_hcnt; i2c_dw_init()
326 lcnt = dev->ss_lcnt; i2c_dw_init()
338 dw_writel(dev, hcnt, DW_IC_SS_SCL_HCNT); i2c_dw_init()
339 dw_writel(dev, lcnt, DW_IC_SS_SCL_LCNT); i2c_dw_init()
340 dev_dbg(dev->dev, "Standard-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt); i2c_dw_init()
343 if (dev->fs_hcnt && dev->fs_lcnt) { i2c_dw_init()
344 hcnt = dev->fs_hcnt; i2c_dw_init()
345 lcnt = dev->fs_lcnt; i2c_dw_init()
357 dw_writel(dev, hcnt, DW_IC_FS_SCL_HCNT); i2c_dw_init()
358 dw_writel(dev, lcnt, DW_IC_FS_SCL_LCNT); i2c_dw_init()
359 dev_dbg(dev->dev, "Fast-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt); i2c_dw_init()
362 if (dev->sda_hold_time) { i2c_dw_init()
363 reg = dw_readl(dev, DW_IC_COMP_VERSION); i2c_dw_init()
365 dw_writel(dev, dev->sda_hold_time, DW_IC_SDA_HOLD); i2c_dw_init()
367 dev_warn(dev->dev, i2c_dw_init()
372 dw_writel(dev, dev->tx_fifo_depth / 2, DW_IC_TX_TL); i2c_dw_init()
373 dw_writel(dev, 0, DW_IC_RX_TL); i2c_dw_init()
376 dw_writel(dev, dev->master_cfg , DW_IC_CON); i2c_dw_init()
378 if (dev->release_lock) i2c_dw_init()
379 dev->release_lock(dev); i2c_dw_init()
387 static int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev) i2c_dw_wait_bus_not_busy() argument
391 while (dw_readl(dev, DW_IC_STATUS) & DW_IC_STATUS_ACTIVITY) { i2c_dw_wait_bus_not_busy()
393 dev_warn(dev->dev, "timeout waiting for bus ready\n"); i2c_dw_wait_bus_not_busy()
403 static void i2c_dw_xfer_init(struct dw_i2c_dev *dev) i2c_dw_xfer_init() argument
405 struct i2c_msg *msgs = dev->msgs; i2c_dw_xfer_init()
409 __i2c_dw_enable(dev, false); i2c_dw_xfer_init()
412 ic_con = dw_readl(dev, DW_IC_CON); i2c_dw_xfer_init()
413 if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) { i2c_dw_xfer_init()
426 dw_writel(dev, ic_con, DW_IC_CON); i2c_dw_xfer_init()
432 dw_writel(dev, msgs[dev->msg_write_idx].addr | ic_tar, DW_IC_TAR); i2c_dw_xfer_init()
435 i2c_dw_disable_int(dev); i2c_dw_xfer_init()
438 __i2c_dw_enable(dev, true); i2c_dw_xfer_init()
441 dw_readl(dev, DW_IC_CLR_INTR); i2c_dw_xfer_init()
442 dw_writel(dev, DW_IC_INTR_DEFAULT_MASK, DW_IC_INTR_MASK); i2c_dw_xfer_init()
452 i2c_dw_xfer_msg(struct dw_i2c_dev *dev) i2c_dw_xfer_msg() argument
454 struct i2c_msg *msgs = dev->msgs; i2c_dw_xfer_msg()
457 u32 addr = msgs[dev->msg_write_idx].addr; i2c_dw_xfer_msg()
458 u32 buf_len = dev->tx_buf_len; i2c_dw_xfer_msg()
459 u8 *buf = dev->tx_buf; i2c_dw_xfer_msg()
464 for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) { i2c_dw_xfer_msg()
470 if (msgs[dev->msg_write_idx].addr != addr) { i2c_dw_xfer_msg()
471 dev_err(dev->dev, i2c_dw_xfer_msg()
473 dev->msg_err = -EINVAL; i2c_dw_xfer_msg()
477 if (msgs[dev->msg_write_idx].len == 0) { i2c_dw_xfer_msg()
478 dev_err(dev->dev, i2c_dw_xfer_msg()
480 dev->msg_err = -EINVAL; i2c_dw_xfer_msg()
484 if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) { i2c_dw_xfer_msg()
486 buf = msgs[dev->msg_write_idx].buf; i2c_dw_xfer_msg()
487 buf_len = msgs[dev->msg_write_idx].len; i2c_dw_xfer_msg()
493 if ((dev->master_cfg & DW_IC_CON_RESTART_EN) && i2c_dw_xfer_msg()
494 (dev->msg_write_idx > 0)) i2c_dw_xfer_msg()
498 tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR); i2c_dw_xfer_msg()
499 rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR); i2c_dw_xfer_msg()
510 if (dev->msg_write_idx == dev->msgs_num - 1 && i2c_dw_xfer_msg()
519 if (msgs[dev->msg_write_idx].flags & I2C_M_RD) { i2c_dw_xfer_msg()
522 if (rx_limit - dev->rx_outstanding <= 0) i2c_dw_xfer_msg()
525 dw_writel(dev, cmd | 0x100, DW_IC_DATA_CMD); i2c_dw_xfer_msg()
527 dev->rx_outstanding++; i2c_dw_xfer_msg()
529 dw_writel(dev, cmd | *buf++, DW_IC_DATA_CMD); i2c_dw_xfer_msg()
533 dev->tx_buf = buf; i2c_dw_xfer_msg()
534 dev->tx_buf_len = buf_len; i2c_dw_xfer_msg()
538 dev->status |= STATUS_WRITE_IN_PROGRESS; i2c_dw_xfer_msg()
541 dev->status &= ~STATUS_WRITE_IN_PROGRESS; i2c_dw_xfer_msg()
548 if (dev->msg_write_idx == dev->msgs_num) i2c_dw_xfer_msg()
551 if (dev->msg_err) i2c_dw_xfer_msg()
554 dw_writel(dev, intr_mask, DW_IC_INTR_MASK); i2c_dw_xfer_msg()
558 i2c_dw_read(struct dw_i2c_dev *dev) i2c_dw_read() argument
560 struct i2c_msg *msgs = dev->msgs; i2c_dw_read()
563 for (; dev->msg_read_idx < dev->msgs_num; dev->msg_read_idx++) { i2c_dw_read()
567 if (!(msgs[dev->msg_read_idx].flags & I2C_M_RD)) i2c_dw_read()
570 if (!(dev->status & STATUS_READ_IN_PROGRESS)) { i2c_dw_read()
571 len = msgs[dev->msg_read_idx].len; i2c_dw_read()
572 buf = msgs[dev->msg_read_idx].buf; i2c_dw_read()
574 len = dev->rx_buf_len; i2c_dw_read()
575 buf = dev->rx_buf; i2c_dw_read()
578 rx_valid = dw_readl(dev, DW_IC_RXFLR); i2c_dw_read()
581 *buf++ = dw_readl(dev, DW_IC_DATA_CMD); i2c_dw_read()
582 dev->rx_outstanding--; i2c_dw_read()
586 dev->status |= STATUS_READ_IN_PROGRESS; i2c_dw_read()
587 dev->rx_buf_len = len; i2c_dw_read()
588 dev->rx_buf = buf; i2c_dw_read()
591 dev->status &= ~STATUS_READ_IN_PROGRESS; i2c_dw_read()
595 static int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev) i2c_dw_handle_tx_abort() argument
597 unsigned long abort_source = dev->abort_source; i2c_dw_handle_tx_abort()
602 dev_dbg(dev->dev, i2c_dw_handle_tx_abort()
608 dev_err(dev->dev, "%s: %s\n", __func__, abort_sources[i]); i2c_dw_handle_tx_abort()
624 struct dw_i2c_dev *dev = i2c_get_adapdata(adap); i2c_dw_xfer() local
627 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num); i2c_dw_xfer()
629 mutex_lock(&dev->lock); i2c_dw_xfer()
630 pm_runtime_get_sync(dev->dev); i2c_dw_xfer()
632 reinit_completion(&dev->cmd_complete); i2c_dw_xfer()
633 dev->msgs = msgs; i2c_dw_xfer()
634 dev->msgs_num = num; i2c_dw_xfer()
635 dev->cmd_err = 0; i2c_dw_xfer()
636 dev->msg_write_idx = 0; i2c_dw_xfer()
637 dev->msg_read_idx = 0; i2c_dw_xfer()
638 dev->msg_err = 0; i2c_dw_xfer()
639 dev->status = STATUS_IDLE; i2c_dw_xfer()
640 dev->abort_source = 0; i2c_dw_xfer()
641 dev->rx_outstanding = 0; i2c_dw_xfer()
643 if (dev->acquire_lock) { i2c_dw_xfer()
644 ret = dev->acquire_lock(dev); i2c_dw_xfer()
646 dev_err(dev->dev, "couldn't acquire bus ownership\n"); i2c_dw_xfer()
651 ret = i2c_dw_wait_bus_not_busy(dev); i2c_dw_xfer()
656 i2c_dw_xfer_init(dev); i2c_dw_xfer()
659 if (!wait_for_completion_timeout(&dev->cmd_complete, HZ)) { i2c_dw_xfer()
660 dev_err(dev->dev, "controller timed out\n"); i2c_dw_xfer()
662 i2c_dw_init(dev); i2c_dw_xfer()
668 * We must disable the adapter before unlocking the &dev->lock mutex i2c_dw_xfer()
674 __i2c_dw_enable(dev, false); i2c_dw_xfer()
676 if (dev->msg_err) { i2c_dw_xfer()
677 ret = dev->msg_err; i2c_dw_xfer()
682 if (likely(!dev->cmd_err)) { i2c_dw_xfer()
688 if (dev->cmd_err == DW_IC_ERR_TX_ABRT) { i2c_dw_xfer()
689 ret = i2c_dw_handle_tx_abort(dev); i2c_dw_xfer()
695 if (dev->release_lock) i2c_dw_xfer()
696 dev->release_lock(dev); i2c_dw_xfer()
699 pm_runtime_mark_last_busy(dev->dev); i2c_dw_xfer()
700 pm_runtime_put_autosuspend(dev->dev); i2c_dw_xfer()
701 mutex_unlock(&dev->lock); i2c_dw_xfer()
708 struct dw_i2c_dev *dev = i2c_get_adapdata(adap); i2c_dw_func() local
709 return dev->functionality; i2c_dw_func()
717 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev) i2c_dw_read_clear_intrbits() argument
733 stat = dw_readl(dev, DW_IC_INTR_STAT); i2c_dw_read_clear_intrbits()
743 dw_readl(dev, DW_IC_CLR_RX_UNDER); i2c_dw_read_clear_intrbits()
745 dw_readl(dev, DW_IC_CLR_RX_OVER); i2c_dw_read_clear_intrbits()
747 dw_readl(dev, DW_IC_CLR_TX_OVER); i2c_dw_read_clear_intrbits()
749 dw_readl(dev, DW_IC_CLR_RD_REQ); i2c_dw_read_clear_intrbits()
755 dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE); i2c_dw_read_clear_intrbits()
756 dw_readl(dev, DW_IC_CLR_TX_ABRT); i2c_dw_read_clear_intrbits()
759 dw_readl(dev, DW_IC_CLR_RX_DONE); i2c_dw_read_clear_intrbits()
761 dw_readl(dev, DW_IC_CLR_ACTIVITY); i2c_dw_read_clear_intrbits()
763 dw_readl(dev, DW_IC_CLR_STOP_DET); i2c_dw_read_clear_intrbits()
765 dw_readl(dev, DW_IC_CLR_START_DET); i2c_dw_read_clear_intrbits()
767 dw_readl(dev, DW_IC_CLR_GEN_CALL); i2c_dw_read_clear_intrbits()
778 struct dw_i2c_dev *dev = dev_id; i2c_dw_isr() local
781 enabled = dw_readl(dev, DW_IC_ENABLE); i2c_dw_isr()
782 stat = dw_readl(dev, DW_IC_RAW_INTR_STAT); i2c_dw_isr()
783 dev_dbg(dev->dev, "%s: enabled=%#x stat=%#x\n", __func__, enabled, stat); i2c_dw_isr()
787 stat = i2c_dw_read_clear_intrbits(dev); i2c_dw_isr()
790 dev->cmd_err |= DW_IC_ERR_TX_ABRT; i2c_dw_isr()
791 dev->status = STATUS_IDLE; i2c_dw_isr()
797 dw_writel(dev, 0, DW_IC_INTR_MASK); i2c_dw_isr()
802 i2c_dw_read(dev); i2c_dw_isr()
805 i2c_dw_xfer_msg(dev); i2c_dw_isr()
814 if ((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err) i2c_dw_isr()
815 complete(&dev->cmd_complete); i2c_dw_isr()
816 else if (unlikely(dev->accessor_flags & ACCESS_INTR_MASK)) { i2c_dw_isr()
818 stat = dw_readl(dev, DW_IC_INTR_MASK); i2c_dw_isr()
819 i2c_dw_disable_int(dev); i2c_dw_isr()
820 dw_writel(dev, stat, DW_IC_INTR_MASK); i2c_dw_isr()
826 void i2c_dw_disable(struct dw_i2c_dev *dev) i2c_dw_disable() argument
829 __i2c_dw_enable(dev, false); i2c_dw_disable()
832 dw_writel(dev, 0, DW_IC_INTR_MASK); i2c_dw_disable()
833 dw_readl(dev, DW_IC_CLR_INTR); i2c_dw_disable()
837 void i2c_dw_disable_int(struct dw_i2c_dev *dev) i2c_dw_disable_int() argument
839 dw_writel(dev, 0, DW_IC_INTR_MASK); i2c_dw_disable_int()
843 u32 i2c_dw_read_comp_param(struct dw_i2c_dev *dev) i2c_dw_read_comp_param() argument
845 return dw_readl(dev, DW_IC_COMP_PARAM_1); i2c_dw_read_comp_param()
849 int i2c_dw_probe(struct dw_i2c_dev *dev) i2c_dw_probe() argument
851 struct i2c_adapter *adap = &dev->adapter; i2c_dw_probe()
854 init_completion(&dev->cmd_complete); i2c_dw_probe()
855 mutex_init(&dev->lock); i2c_dw_probe()
857 r = i2c_dw_init(dev); i2c_dw_probe()
864 adap->dev.parent = dev->dev; i2c_dw_probe()
865 i2c_set_adapdata(adap, dev); i2c_dw_probe()
867 i2c_dw_disable_int(dev); i2c_dw_probe()
868 r = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, IRQF_SHARED, i2c_dw_probe()
869 dev_name(dev->dev), dev); i2c_dw_probe()
871 dev_err(dev->dev, "failure requesting irq %i: %d\n", i2c_dw_probe()
872 dev->irq, r); i2c_dw_probe()
878 dev_err(dev->dev, "failure adding adapter: %d\n", r); i2c_dw_probe()
H A Di2c-davinci.c126 struct device *dev; member in struct:davinci_i2c_dev
175 static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev) i2c_davinci_calc_clk_dividers() argument
177 struct davinci_i2c_platform_data *pdata = dev->pdata; i2c_davinci_calc_clk_dividers()
183 u32 input_clock = clk_get_rate(dev->clk); i2c_davinci_calc_clk_dividers()
184 struct device_node *of_node = dev->dev->of_node; i2c_davinci_calc_clk_dividers()
246 davinci_i2c_write_reg(dev, DAVINCI_I2C_PSC_REG, psc); i2c_davinci_calc_clk_dividers()
247 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh); i2c_davinci_calc_clk_dividers()
248 davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl); i2c_davinci_calc_clk_dividers()
250 dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk); i2c_davinci_calc_clk_dividers()
258 static int i2c_davinci_init(struct davinci_i2c_dev *dev) i2c_davinci_init() argument
260 struct davinci_i2c_platform_data *pdata = dev->pdata; i2c_davinci_init()
263 davinci_i2c_reset_ctrl(dev, 0); i2c_davinci_init()
266 i2c_davinci_calc_clk_dividers(dev); i2c_davinci_init()
271 davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, DAVINCI_I2C_OWN_ADDRESS); i2c_davinci_init()
273 dev_dbg(dev->dev, "PSC = %d\n", i2c_davinci_init()
274 davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG)); i2c_davinci_init()
275 dev_dbg(dev->dev, "CLKL = %d\n", i2c_davinci_init()
276 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKL_REG)); i2c_davinci_init()
277 dev_dbg(dev->dev, "CLKH = %d\n", i2c_davinci_init()
278 davinci_i2c_read_reg(dev, DAVINCI_I2C_CLKH_REG)); i2c_davinci_init()
279 dev_dbg(dev->dev, "bus_freq = %dkHz, bus_delay = %d\n", i2c_davinci_init()
284 davinci_i2c_reset_ctrl(dev, 1); i2c_davinci_init()
287 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, I2C_DAVINCI_INTR_ALL); i2c_davinci_init()
298 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_prepare_recovery() local
301 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, 0); davinci_i2c_prepare_recovery()
304 davinci_i2c_reset_ctrl(dev, 0); davinci_i2c_prepare_recovery()
309 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_unprepare_recovery() local
311 i2c_davinci_init(dev); davinci_i2c_unprepare_recovery()
322 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_set_scl() local
325 davinci_i2c_write_reg(dev, DAVINCI_I2C_DSET_REG, davinci_i2c_set_scl()
328 davinci_i2c_write_reg(dev, DAVINCI_I2C_DCLR_REG, davinci_i2c_set_scl()
334 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_get_scl() local
338 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); davinci_i2c_get_scl()
344 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_get_sda() local
348 val = davinci_i2c_read_reg(dev, DAVINCI_I2C_DIN_REG); davinci_i2c_get_sda()
354 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_scl_prepare_recovery() local
359 davinci_i2c_write_reg(dev, DAVINCI_I2C_DIR_REG, DAVINCI_I2C_DIR_PDIR0); davinci_i2c_scl_prepare_recovery()
362 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, davinci_i2c_scl_prepare_recovery()
368 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); davinci_i2c_scl_unprepare_recovery() local
371 davinci_i2c_write_reg(dev, DAVINCI_I2C_FUNC_REG, 0); davinci_i2c_scl_unprepare_recovery()
388 static int i2c_davinci_wait_bus_not_busy(struct davinci_i2c_dev *dev) i2c_davinci_wait_bus_not_busy() argument
390 unsigned long timeout = jiffies + dev->adapter.timeout; i2c_davinci_wait_bus_not_busy()
393 if (!(davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB)) i2c_davinci_wait_bus_not_busy()
398 dev_warn(dev->dev, "timeout waiting for bus ready\n"); i2c_davinci_wait_bus_not_busy()
399 i2c_recover_bus(&dev->adapter); i2c_davinci_wait_bus_not_busy()
405 if (davinci_i2c_read_reg(dev, DAVINCI_I2C_STR_REG) & DAVINCI_I2C_STR_BB) i2c_davinci_wait_bus_not_busy()
418 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); i2c_davinci_xfer_msg() local
419 struct davinci_i2c_platform_data *pdata = dev->pdata; i2c_davinci_xfer_msg()
425 dev_warn(dev->dev, "transfer to own address aborted\n"); i2c_davinci_xfer_msg()
434 davinci_i2c_write_reg(dev, DAVINCI_I2C_SAR_REG, msg->addr); i2c_davinci_xfer_msg()
436 dev->buf = msg->buf; i2c_davinci_xfer_msg()
437 dev->buf_len = msg->len; i2c_davinci_xfer_msg()
438 dev->stop = stop; i2c_davinci_xfer_msg()
440 davinci_i2c_write_reg(dev, DAVINCI_I2C_CNT_REG, dev->buf_len); i2c_davinci_xfer_msg()
442 reinit_completion(&dev->cmd_complete); i2c_davinci_xfer_msg()
443 dev->cmd_err = 0; i2c_davinci_xfer_msg()
457 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_IMR_REG); i2c_davinci_xfer_msg()
462 davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, w); i2c_davinci_xfer_msg()
464 dev->terminate = 0; i2c_davinci_xfer_msg()
471 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); i2c_davinci_xfer_msg()
480 if ((!(msg->flags & I2C_M_RD)) && dev->buf_len) { i2c_davinci_xfer_msg()
481 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, *dev->buf++); i2c_davinci_xfer_msg()
482 dev->buf_len--; i2c_davinci_xfer_msg()
489 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, flag); i2c_davinci_xfer_msg()
491 time_left = wait_for_completion_timeout(&dev->cmd_complete, i2c_davinci_xfer_msg()
492 dev->adapter.timeout); i2c_davinci_xfer_msg()
494 dev_err(dev->dev, "controller timed out\n"); i2c_davinci_xfer_msg()
496 dev->buf_len = 0; i2c_davinci_xfer_msg()
499 if (dev->buf_len) { i2c_davinci_xfer_msg()
501 * or dev->cmd_err denotes an error. i2c_davinci_xfer_msg()
503 dev_err(dev->dev, "abnormal termination buf_len=%i\n", i2c_davinci_xfer_msg()
504 dev->buf_len); i2c_davinci_xfer_msg()
505 dev->terminate = 1; i2c_davinci_xfer_msg()
507 dev->buf_len = 0; i2c_davinci_xfer_msg()
512 if (likely(!dev->cmd_err)) i2c_davinci_xfer_msg()
516 if (dev->cmd_err & DAVINCI_I2C_STR_AL) { i2c_davinci_xfer_msg()
517 i2c_davinci_init(dev); i2c_davinci_xfer_msg()
521 if (dev->cmd_err & DAVINCI_I2C_STR_NACK) { i2c_davinci_xfer_msg()
524 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); i2c_davinci_xfer_msg()
526 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); i2c_davinci_xfer_msg()
538 struct davinci_i2c_dev *dev = i2c_get_adapdata(adap); i2c_davinci_xfer() local
542 dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num); i2c_davinci_xfer()
544 ret = i2c_davinci_wait_bus_not_busy(dev); i2c_davinci_xfer()
546 dev_warn(dev->dev, "timeout waiting for bus ready\n"); i2c_davinci_xfer()
552 dev_dbg(dev->dev, "%s [%d/%d] ret: %d\n", __func__, i + 1, num, i2c_davinci_xfer()
559 complete(&dev->xfr_complete); i2c_davinci_xfer()
570 static void terminate_read(struct davinci_i2c_dev *dev) terminate_read() argument
572 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); terminate_read()
574 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); terminate_read()
577 davinci_i2c_read_reg(dev, DAVINCI_I2C_DRR_REG); terminate_read()
578 if (!dev->terminate) terminate_read()
579 dev_err(dev->dev, "RDR IRQ while no data requested\n"); terminate_read()
581 static void terminate_write(struct davinci_i2c_dev *dev) terminate_write() argument
583 u16 w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG); terminate_write()
585 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w); terminate_write()
587 if (!dev->terminate) terminate_write()
588 dev_dbg(dev->dev, "TDR IRQ while no data to send\n"); terminate_write()
597 struct davinci_i2c_dev *dev = dev_id; i2c_davinci_isr() local
602 while ((stat = davinci_i2c_read_reg(dev, DAVINCI_I2C_IVR_REG))) { i2c_davinci_isr()
603 dev_dbg(dev->dev, "%s: stat=0x%x\n", __func__, stat); i2c_davinci_isr()
605 dev_warn(dev->dev, "Too much work in one IRQ\n"); i2c_davinci_isr()
612 dev->cmd_err |= DAVINCI_I2C_STR_AL; i2c_davinci_isr()
613 dev->buf_len = 0; i2c_davinci_isr()
614 complete(&dev->cmd_complete); i2c_davinci_isr()
618 dev->cmd_err |= DAVINCI_I2C_STR_NACK; i2c_davinci_isr()
619 dev->buf_len = 0; i2c_davinci_isr()
620 complete(&dev->cmd_complete); i2c_davinci_isr()
624 davinci_i2c_write_reg(dev, i2c_davinci_isr()
626 if (((dev->buf_len == 0) && (dev->stop != 0)) || i2c_davinci_isr()
627 (dev->cmd_err & DAVINCI_I2C_STR_NACK)) { i2c_davinci_isr()
628 w = davinci_i2c_read_reg(dev, i2c_davinci_isr()
631 davinci_i2c_write_reg(dev, i2c_davinci_isr()
634 complete(&dev->cmd_complete); i2c_davinci_isr()
638 if (dev->buf_len) { i2c_davinci_isr()
639 *dev->buf++ = i2c_davinci_isr()
640 davinci_i2c_read_reg(dev, i2c_davinci_isr()
642 dev->buf_len--; i2c_davinci_isr()
643 if (dev->buf_len) i2c_davinci_isr()
646 davinci_i2c_write_reg(dev, i2c_davinci_isr()
651 terminate_read(dev); i2c_davinci_isr()
656 if (dev->buf_len) { i2c_davinci_isr()
657 davinci_i2c_write_reg(dev, DAVINCI_I2C_DXR_REG, i2c_davinci_isr()
658 *dev->buf++); i2c_davinci_isr()
659 dev->buf_len--; i2c_davinci_isr()
660 if (dev->buf_len) i2c_davinci_isr()
663 w = davinci_i2c_read_reg(dev, i2c_davinci_isr()
666 davinci_i2c_write_reg(dev, i2c_davinci_isr()
671 terminate_write(dev); i2c_davinci_isr()
676 davinci_i2c_write_reg(dev, i2c_davinci_isr()
678 complete(&dev->cmd_complete); i2c_davinci_isr()
682 dev_dbg(dev->dev, "Address as slave interrupt\n"); i2c_davinci_isr()
686 dev_warn(dev->dev, "Unrecognized irq stat %d\n", stat); i2c_davinci_isr()
698 struct davinci_i2c_dev *dev; i2c_davinci_cpufreq_transition() local
700 dev = container_of(nb, struct davinci_i2c_dev, freq_transition); i2c_davinci_cpufreq_transition()
702 wait_for_completion(&dev->xfr_complete); i2c_davinci_cpufreq_transition()
703 davinci_i2c_reset_ctrl(dev, 0); i2c_davinci_cpufreq_transition()
705 i2c_davinci_calc_clk_dividers(dev); i2c_davinci_cpufreq_transition()
706 davinci_i2c_reset_ctrl(dev, 1); i2c_davinci_cpufreq_transition()
712 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) i2c_davinci_cpufreq_register() argument
714 dev->freq_transition.notifier_call = i2c_davinci_cpufreq_transition; i2c_davinci_cpufreq_register()
716 return cpufreq_register_notifier(&dev->freq_transition, i2c_davinci_cpufreq_register()
720 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) i2c_davinci_cpufreq_deregister() argument
722 cpufreq_unregister_notifier(&dev->freq_transition, i2c_davinci_cpufreq_deregister()
726 static inline int i2c_davinci_cpufreq_register(struct davinci_i2c_dev *dev) i2c_davinci_cpufreq_register() argument
731 static inline void i2c_davinci_cpufreq_deregister(struct davinci_i2c_dev *dev) i2c_davinci_cpufreq_deregister() argument
750 struct davinci_i2c_dev *dev; davinci_i2c_probe() local
760 dev_err(&pdev->dev, davinci_i2c_probe()
765 dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), davinci_i2c_probe()
767 if (!dev) { davinci_i2c_probe()
768 dev_err(&pdev->dev, "Memory allocation failed\n"); davinci_i2c_probe()
772 init_completion(&dev->cmd_complete); davinci_i2c_probe()
774 init_completion(&dev->xfr_complete); davinci_i2c_probe()
776 dev->dev = &pdev->dev; davinci_i2c_probe()
777 dev->irq = irq; davinci_i2c_probe()
778 dev->pdata = dev_get_platdata(&pdev->dev); davinci_i2c_probe()
779 platform_set_drvdata(pdev, dev); davinci_i2c_probe()
781 if (!dev->pdata && pdev->dev.of_node) { davinci_i2c_probe()
784 dev->pdata = devm_kzalloc(&pdev->dev, davinci_i2c_probe()
786 if (!dev->pdata) davinci_i2c_probe()
789 memcpy(dev->pdata, &davinci_i2c_platform_data_default, davinci_i2c_probe()
791 if (!of_property_read_u32(pdev->dev.of_node, "clock-frequency", davinci_i2c_probe()
793 dev->pdata->bus_freq = prop / 1000; davinci_i2c_probe()
795 dev->pdata->has_pfunc = davinci_i2c_probe()
796 of_property_read_bool(pdev->dev.of_node, davinci_i2c_probe()
798 } else if (!dev->pdata) { davinci_i2c_probe()
799 dev->pdata = &davinci_i2c_platform_data_default; davinci_i2c_probe()
802 dev->clk = devm_clk_get(&pdev->dev, NULL); davinci_i2c_probe()
803 if (IS_ERR(dev->clk)) davinci_i2c_probe()
805 clk_prepare_enable(dev->clk); davinci_i2c_probe()
808 dev->base = devm_ioremap_resource(&pdev->dev, mem); davinci_i2c_probe()
809 if (IS_ERR(dev->base)) { davinci_i2c_probe()
810 r = PTR_ERR(dev->base); davinci_i2c_probe()
814 i2c_davinci_init(dev); davinci_i2c_probe()
816 r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, davinci_i2c_probe()
817 pdev->name, dev); davinci_i2c_probe()
819 dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); davinci_i2c_probe()
823 r = i2c_davinci_cpufreq_register(dev); davinci_i2c_probe()
825 dev_err(&pdev->dev, "failed to register cpufreq\n"); davinci_i2c_probe()
829 adap = &dev->adapter; davinci_i2c_probe()
830 i2c_set_adapdata(adap, dev); davinci_i2c_probe()
835 adap->dev.parent = &pdev->dev; davinci_i2c_probe()
837 adap->dev.of_node = pdev->dev.of_node; davinci_i2c_probe()
839 if (dev->pdata->has_pfunc) davinci_i2c_probe()
841 else if (dev->pdata->scl_pin) { davinci_i2c_probe()
843 adap->bus_recovery_info->scl_gpio = dev->pdata->scl_pin; davinci_i2c_probe()
844 adap->bus_recovery_info->sda_gpio = dev->pdata->sda_pin; davinci_i2c_probe()
850 dev_err(&pdev->dev, "failure adding adapter\n"); davinci_i2c_probe()
857 clk_disable_unprepare(dev->clk); davinci_i2c_probe()
858 dev->clk = NULL; davinci_i2c_probe()
864 struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); davinci_i2c_remove() local
866 i2c_davinci_cpufreq_deregister(dev); davinci_i2c_remove()
868 i2c_del_adapter(&dev->adapter); davinci_i2c_remove()
870 clk_disable_unprepare(dev->clk); davinci_i2c_remove()
871 dev->clk = NULL; davinci_i2c_remove()
873 davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); davinci_i2c_remove()
879 static int davinci_i2c_suspend(struct device *dev) davinci_i2c_suspend() argument
881 struct platform_device *pdev = to_platform_device(dev); davinci_i2c_suspend()
891 static int davinci_i2c_resume(struct device *dev) davinci_i2c_resume() argument
893 struct platform_device *pdev = to_platform_device(dev); davinci_i2c_resume()
H A Di2c-at91.c127 struct device *dev; member in struct:at91_twi_dev
146 static unsigned at91_twi_read(struct at91_twi_dev *dev, unsigned reg) at91_twi_read() argument
148 return readl_relaxed(dev->base + reg); at91_twi_read()
151 static void at91_twi_write(struct at91_twi_dev *dev, unsigned reg, unsigned val) at91_twi_write() argument
153 writel_relaxed(val, dev->base + reg); at91_twi_write()
156 static void at91_disable_twi_interrupts(struct at91_twi_dev *dev) at91_disable_twi_interrupts() argument
158 at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_INT_MASK); at91_disable_twi_interrupts()
161 static void at91_twi_irq_save(struct at91_twi_dev *dev) at91_twi_irq_save() argument
163 dev->imr = at91_twi_read(dev, AT91_TWI_IMR) & AT91_TWI_INT_MASK; at91_twi_irq_save()
164 at91_disable_twi_interrupts(dev); at91_twi_irq_save()
167 static void at91_twi_irq_restore(struct at91_twi_dev *dev) at91_twi_irq_restore() argument
169 at91_twi_write(dev, AT91_TWI_IER, dev->imr); at91_twi_irq_restore()
172 static void at91_init_twi_bus(struct at91_twi_dev *dev) at91_init_twi_bus() argument
174 at91_disable_twi_interrupts(dev); at91_init_twi_bus()
175 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_SWRST); at91_init_twi_bus()
177 if (dev->fifo_size) at91_init_twi_bus()
178 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_FIFOEN); at91_init_twi_bus()
179 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_MSEN); at91_init_twi_bus()
180 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_SVDIS); at91_init_twi_bus()
181 at91_twi_write(dev, AT91_TWI_CWGR, dev->twi_cwgr_reg); at91_init_twi_bus()
188 static void at91_calc_twi_clock(struct at91_twi_dev *dev, int twi_clk) at91_calc_twi_clock() argument
191 struct at91_twi_pdata *pdata = dev->pdata; at91_calc_twi_clock()
195 div = max(0, (int)DIV_ROUND_UP(clk_get_rate(dev->clk), at91_calc_twi_clock()
201 dev_warn(dev->dev, "%d exceeds ckdiv max value which is %d.\n", at91_calc_twi_clock()
207 dev->twi_cwgr_reg = (ckdiv << 16) | (cdiv << 8) | cdiv; at91_calc_twi_clock()
208 dev_dbg(dev->dev, "cdiv %d ckdiv %d\n", cdiv, ckdiv); at91_calc_twi_clock()
211 static void at91_twi_dma_cleanup(struct at91_twi_dev *dev) at91_twi_dma_cleanup() argument
213 struct at91_twi_dma *dma = &dev->dma; at91_twi_dma_cleanup()
215 at91_twi_irq_save(dev); at91_twi_dma_cleanup()
225 dma_unmap_single(dev->dev, sg_dma_address(&dma->sg[0]), at91_twi_dma_cleanup()
226 dev->buf_len, dma->direction); at91_twi_dma_cleanup()
230 at91_twi_irq_restore(dev); at91_twi_dma_cleanup()
233 static void at91_twi_write_next_byte(struct at91_twi_dev *dev) at91_twi_write_next_byte() argument
235 if (!dev->buf_len) at91_twi_write_next_byte()
239 writeb_relaxed(*dev->buf, dev->base + AT91_TWI_THR); at91_twi_write_next_byte()
242 if (--dev->buf_len == 0) at91_twi_write_next_byte()
243 if (!dev->pdata->has_alt_cmd) at91_twi_write_next_byte()
244 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); at91_twi_write_next_byte()
246 dev_dbg(dev->dev, "wrote 0x%x, to go %d\n", *dev->buf, dev->buf_len); at91_twi_write_next_byte()
248 ++dev->buf; at91_twi_write_next_byte()
253 struct at91_twi_dev *dev = (struct at91_twi_dev *)data; at91_twi_write_data_dma_callback() local
255 dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg[0]), at91_twi_write_data_dma_callback()
256 dev->buf_len, DMA_TO_DEVICE); at91_twi_write_data_dma_callback()
265 at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP); at91_twi_write_data_dma_callback()
266 if (!dev->pdata->has_alt_cmd) at91_twi_write_data_dma_callback()
267 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); at91_twi_write_data_dma_callback()
270 static void at91_twi_write_data_dma(struct at91_twi_dev *dev) at91_twi_write_data_dma() argument
274 struct at91_twi_dma *dma = &dev->dma; at91_twi_write_data_dma()
278 if (!dev->buf_len) at91_twi_write_data_dma()
283 at91_twi_irq_save(dev); at91_twi_write_data_dma()
284 dma_addr = dma_map_single(dev->dev, dev->buf, dev->buf_len, at91_twi_write_data_dma()
286 if (dma_mapping_error(dev->dev, dma_addr)) { at91_twi_write_data_dma()
287 dev_err(dev->dev, "dma map failed\n"); at91_twi_write_data_dma()
291 at91_twi_irq_restore(dev); at91_twi_write_data_dma()
293 if (dev->fifo_size) { at91_twi_write_data_dma()
300 part1_len = dev->buf_len & ~0x3; at91_twi_write_data_dma()
307 part2_len = dev->buf_len & 0x3; at91_twi_write_data_dma()
318 fifo_mr = at91_twi_read(dev, AT91_TWI_FMR); at91_twi_write_data_dma()
321 at91_twi_write(dev, AT91_TWI_FMR, fifo_mr); at91_twi_write_data_dma()
323 sg_dma_len(&dma->sg[0]) = dev->buf_len; at91_twi_write_data_dma()
331 dev_err(dev->dev, "dma prep slave sg failed\n"); at91_twi_write_data_dma()
336 txdesc->callback_param = dev; at91_twi_write_data_dma()
345 at91_twi_dma_cleanup(dev); at91_twi_write_data_dma()
348 static void at91_twi_read_next_byte(struct at91_twi_dev *dev) at91_twi_read_next_byte() argument
354 if (!dev->buf_len) { at91_twi_read_next_byte()
355 at91_twi_read(dev, AT91_TWI_RHR); at91_twi_read_next_byte()
360 *dev->buf = readb_relaxed(dev->base + AT91_TWI_RHR); at91_twi_read_next_byte()
361 --dev->buf_len; at91_twi_read_next_byte()
364 if (dev->recv_len_abort) at91_twi_read_next_byte()
368 if (unlikely(dev->msg->flags & I2C_M_RECV_LEN)) { at91_twi_read_next_byte()
370 if (*dev->buf <= I2C_SMBUS_BLOCK_MAX && *dev->buf > 0) { at91_twi_read_next_byte()
371 dev->msg->flags &= ~I2C_M_RECV_LEN; at91_twi_read_next_byte()
372 dev->buf_len += *dev->buf; at91_twi_read_next_byte()
373 dev->msg->len = dev->buf_len + 1; at91_twi_read_next_byte()
374 dev_dbg(dev->dev, "received block length %d\n", at91_twi_read_next_byte()
375 dev->buf_len); at91_twi_read_next_byte()
378 dev->recv_len_abort = true; at91_twi_read_next_byte()
379 dev->buf_len = 1; at91_twi_read_next_byte()
384 if (!dev->pdata->has_alt_cmd && dev->buf_len == 1) at91_twi_read_next_byte()
385 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); at91_twi_read_next_byte()
387 dev_dbg(dev->dev, "read 0x%x, to go %d\n", *dev->buf, dev->buf_len); at91_twi_read_next_byte()
389 ++dev->buf; at91_twi_read_next_byte()
394 struct at91_twi_dev *dev = (struct at91_twi_dev *)data; at91_twi_read_data_dma_callback() local
397 dma_unmap_single(dev->dev, sg_dma_address(&dev->dma.sg[0]), at91_twi_read_data_dma_callback()
398 dev->buf_len, DMA_FROM_DEVICE); at91_twi_read_data_dma_callback()
400 if (!dev->pdata->has_alt_cmd) { at91_twi_read_data_dma_callback()
402 dev->buf += dev->buf_len - 2; at91_twi_read_data_dma_callback()
403 dev->buf_len = 2; at91_twi_read_data_dma_callback()
406 at91_twi_write(dev, AT91_TWI_IER, ier); at91_twi_read_data_dma_callback()
409 static void at91_twi_read_data_dma(struct at91_twi_dev *dev) at91_twi_read_data_dma() argument
413 struct at91_twi_dma *dma = &dev->dma; at91_twi_read_data_dma()
417 buf_len = (dev->pdata->has_alt_cmd) ? dev->buf_len : dev->buf_len - 2; at91_twi_read_data_dma()
421 at91_twi_irq_save(dev); at91_twi_read_data_dma()
422 dma_addr = dma_map_single(dev->dev, dev->buf, buf_len, DMA_FROM_DEVICE); at91_twi_read_data_dma()
423 if (dma_mapping_error(dev->dev, dma_addr)) { at91_twi_read_data_dma()
424 dev_err(dev->dev, "dma map failed\n"); at91_twi_read_data_dma()
428 at91_twi_irq_restore(dev); at91_twi_read_data_dma()
430 if (dev->fifo_size && IS_ALIGNED(buf_len, 4)) { at91_twi_read_data_dma()
437 fifo_mr = at91_twi_read(dev, AT91_TWI_FMR); at91_twi_read_data_dma()
440 at91_twi_write(dev, AT91_TWI_FMR, fifo_mr); at91_twi_read_data_dma()
449 dev_err(dev->dev, "dma prep slave sg failed\n"); at91_twi_read_data_dma()
454 rxdesc->callback_param = dev; at91_twi_read_data_dma()
463 at91_twi_dma_cleanup(dev); at91_twi_read_data_dma()
468 struct at91_twi_dev *dev = dev_id; atmel_twi_interrupt() local
469 const unsigned status = at91_twi_read(dev, AT91_TWI_SR); atmel_twi_interrupt()
470 const unsigned irqstatus = status & at91_twi_read(dev, AT91_TWI_IMR); atmel_twi_interrupt()
491 at91_twi_read_next_byte(dev); atmel_twi_interrupt()
532 at91_disable_twi_interrupts(dev); atmel_twi_interrupt()
533 complete(&dev->cmd_complete); atmel_twi_interrupt()
535 at91_twi_write_next_byte(dev); atmel_twi_interrupt()
539 dev->transfer_status |= status; atmel_twi_interrupt()
544 static int at91_do_twi_transfer(struct at91_twi_dev *dev) at91_do_twi_transfer() argument
548 bool has_unre_flag = dev->pdata->has_unre_flag; at91_do_twi_transfer()
549 bool has_alt_cmd = dev->pdata->has_alt_cmd; at91_do_twi_transfer()
594 dev_dbg(dev->dev, "transfer: %s %d bytes.\n", at91_do_twi_transfer()
595 (dev->msg->flags & I2C_M_RD) ? "read" : "write", dev->buf_len); at91_do_twi_transfer()
597 reinit_completion(&dev->cmd_complete); at91_do_twi_transfer()
598 dev->transfer_status = 0; at91_do_twi_transfer()
601 at91_twi_read(dev, AT91_TWI_SR); at91_do_twi_transfer()
603 if (dev->fifo_size) { at91_do_twi_transfer()
604 unsigned fifo_mr = at91_twi_read(dev, AT91_TWI_FMR); at91_do_twi_transfer()
611 at91_twi_write(dev, AT91_TWI_FMR, fifo_mr); at91_do_twi_transfer()
614 at91_twi_write(dev, AT91_TWI_CR, at91_do_twi_transfer()
618 if (!dev->buf_len) { at91_do_twi_transfer()
619 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_QUICK); at91_do_twi_transfer()
620 at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_TXCOMP); at91_do_twi_transfer()
621 } else if (dev->msg->flags & I2C_M_RD) { at91_do_twi_transfer()
625 if (!has_alt_cmd && dev->buf_len <= 1 && at91_do_twi_transfer()
626 !(dev->msg->flags & I2C_M_RECV_LEN)) at91_do_twi_transfer()
628 at91_twi_write(dev, AT91_TWI_CR, start_flags); at91_do_twi_transfer()
638 if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) { at91_do_twi_transfer()
639 at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK); at91_do_twi_transfer()
640 at91_twi_read_data_dma(dev); at91_do_twi_transfer()
642 at91_twi_write(dev, AT91_TWI_IER, at91_do_twi_transfer()
648 if (dev->use_dma && (dev->buf_len > AT91_I2C_DMA_THRESHOLD)) { at91_do_twi_transfer()
649 at91_twi_write(dev, AT91_TWI_IER, AT91_TWI_NACK); at91_do_twi_transfer()
650 at91_twi_write_data_dma(dev); at91_do_twi_transfer()
652 at91_twi_write_next_byte(dev); at91_do_twi_transfer()
653 at91_twi_write(dev, AT91_TWI_IER, at91_do_twi_transfer()
660 time_left = wait_for_completion_timeout(&dev->cmd_complete, at91_do_twi_transfer()
661 dev->adapter.timeout); at91_do_twi_transfer()
663 dev->transfer_status |= at91_twi_read(dev, AT91_TWI_SR); at91_do_twi_transfer()
664 dev_err(dev->dev, "controller timed out\n"); at91_do_twi_transfer()
665 at91_init_twi_bus(dev); at91_do_twi_transfer()
669 if (dev->transfer_status & AT91_TWI_NACK) { at91_do_twi_transfer()
670 dev_dbg(dev->dev, "received nack\n"); at91_do_twi_transfer()
674 if (dev->transfer_status & AT91_TWI_OVRE) { at91_do_twi_transfer()
675 dev_err(dev->dev, "overrun while reading\n"); at91_do_twi_transfer()
679 if (has_unre_flag && dev->transfer_status & AT91_TWI_UNRE) { at91_do_twi_transfer()
680 dev_err(dev->dev, "underrun while writing\n"); at91_do_twi_transfer()
684 if ((has_alt_cmd || dev->fifo_size) && at91_do_twi_transfer()
685 (dev->transfer_status & AT91_TWI_LOCK)) { at91_do_twi_transfer()
686 dev_err(dev->dev, "tx locked\n"); at91_do_twi_transfer()
690 if (dev->recv_len_abort) { at91_do_twi_transfer()
691 dev_err(dev->dev, "invalid smbus block length recvd\n"); at91_do_twi_transfer()
696 dev_dbg(dev->dev, "transfer complete\n"); at91_do_twi_transfer()
702 at91_twi_dma_cleanup(dev); at91_do_twi_transfer()
704 if ((has_alt_cmd || dev->fifo_size) && at91_do_twi_transfer()
705 (dev->transfer_status & AT91_TWI_LOCK)) { at91_do_twi_transfer()
706 dev_dbg(dev->dev, "unlock tx\n"); at91_do_twi_transfer()
707 at91_twi_write(dev, AT91_TWI_CR, at91_do_twi_transfer()
715 struct at91_twi_dev *dev = i2c_get_adapdata(adap); at91_twi_xfer() local
721 dev_dbg(&adap->dev, "at91_xfer: processing %d messages:\n", num); at91_twi_xfer()
723 ret = pm_runtime_get_sync(dev->dev); at91_twi_xfer()
739 at91_twi_write(dev, AT91_TWI_IADR, internal_address); at91_twi_xfer()
743 if (dev->pdata->has_alt_cmd) { at91_twi_xfer()
745 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_ACMEN); at91_twi_xfer()
746 at91_twi_write(dev, AT91_TWI_ACR, at91_twi_xfer()
751 at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_ACMDIS); at91_twi_xfer()
755 at91_twi_write(dev, AT91_TWI_MMR, at91_twi_xfer()
760 dev->buf_len = m_start->len; at91_twi_xfer()
761 dev->buf = m_start->buf; at91_twi_xfer()
762 dev->msg = m_start; at91_twi_xfer()
763 dev->recv_len_abort = false; at91_twi_xfer()
765 ret = at91_do_twi_transfer(dev); at91_twi_xfer()
769 pm_runtime_mark_last_busy(dev->dev); at91_twi_xfer()
770 pm_runtime_put_autosuspend(dev->dev); at91_twi_xfer()
895 static int at91_twi_configure_dma(struct at91_twi_dev *dev, u32 phy_addr) at91_twi_configure_dma() argument
899 struct at91_twi_dma *dma = &dev->dma; at91_twi_configure_dma()
917 if (dev->fifo_size) at91_twi_configure_dma()
929 dma->chan_tx = dma_request_slave_channel_reason(dev->dev, "tx"); at91_twi_configure_dma()
936 dma->chan_rx = dma_request_slave_channel_reason(dev->dev, "rx"); at91_twi_configure_dma()
945 dev_err(dev->dev, "failed to configure tx channel\n"); at91_twi_configure_dma()
952 dev_err(dev->dev, "failed to configure rx channel\n"); at91_twi_configure_dma()
960 dev->use_dma = true; at91_twi_configure_dma()
962 dev_info(dev->dev, "using %s (tx) and %s (rx) for DMA transfers\n", at91_twi_configure_dma()
969 dev_info(dev->dev, "can't use DMA, error %d\n", ret); at91_twi_configure_dma()
980 if (pdev->dev.of_node) { at91_twi_get_driver_data()
982 match = of_match_node(atmel_twi_dt_ids, pdev->dev.of_node); at91_twi_get_driver_data()
992 struct at91_twi_dev *dev; at91_twi_probe() local
998 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); at91_twi_probe()
999 if (!dev) at91_twi_probe()
1001 init_completion(&dev->cmd_complete); at91_twi_probe()
1002 dev->dev = &pdev->dev; at91_twi_probe()
1009 dev->pdata = at91_twi_get_driver_data(pdev); at91_twi_probe()
1010 if (!dev->pdata) at91_twi_probe()
1013 dev->base = devm_ioremap_resource(&pdev->dev, mem); at91_twi_probe()
1014 if (IS_ERR(dev->base)) at91_twi_probe()
1015 return PTR_ERR(dev->base); at91_twi_probe()
1017 dev->irq = platform_get_irq(pdev, 0); at91_twi_probe()
1018 if (dev->irq < 0) at91_twi_probe()
1019 return dev->irq; at91_twi_probe()
1021 rc = devm_request_irq(&pdev->dev, dev->irq, atmel_twi_interrupt, 0, at91_twi_probe()
1022 dev_name(dev->dev), dev); at91_twi_probe()
1024 dev_err(dev->dev, "Cannot get irq %d: %d\n", dev->irq, rc); at91_twi_probe()
1028 platform_set_drvdata(pdev, dev); at91_twi_probe()
1030 dev->clk = devm_clk_get(dev->dev, NULL); at91_twi_probe()
1031 if (IS_ERR(dev->clk)) { at91_twi_probe()
1032 dev_err(dev->dev, "no clock defined\n"); at91_twi_probe()
1035 clk_prepare_enable(dev->clk); at91_twi_probe()
1037 if (dev->dev->of_node) { at91_twi_probe()
1038 rc = at91_twi_configure_dma(dev, phy_addr); at91_twi_probe()
1043 if (!of_property_read_u32(pdev->dev.of_node, "atmel,fifo-size", at91_twi_probe()
1044 &dev->fifo_size)) { at91_twi_probe()
1045 dev_info(dev->dev, "Using FIFO (%u data)\n", dev->fifo_size); at91_twi_probe()
1048 rc = of_property_read_u32(dev->dev->of_node, "clock-frequency", at91_twi_probe()
1053 at91_calc_twi_clock(dev, bus_clk_rate); at91_twi_probe()
1054 at91_init_twi_bus(dev); at91_twi_probe()
1056 snprintf(dev->adapter.name, sizeof(dev->adapter.name), "AT91"); at91_twi_probe()
1057 i2c_set_adapdata(&dev->adapter, dev); at91_twi_probe()
1058 dev->adapter.owner = THIS_MODULE; at91_twi_probe()
1059 dev->adapter.class = I2C_CLASS_DEPRECATED; at91_twi_probe()
1060 dev->adapter.algo = &at91_twi_algorithm; at91_twi_probe()
1061 dev->adapter.quirks = &at91_twi_quirks; at91_twi_probe()
1062 dev->adapter.dev.parent = dev->dev; at91_twi_probe()
1063 dev->adapter.nr = pdev->id; at91_twi_probe()
1064 dev->adapter.timeout = AT91_I2C_TIMEOUT; at91_twi_probe()
1065 dev->adapter.dev.of_node = pdev->dev.of_node; at91_twi_probe()
1067 pm_runtime_set_autosuspend_delay(dev->dev, AUTOSUSPEND_TIMEOUT); at91_twi_probe()
1068 pm_runtime_use_autosuspend(dev->dev); at91_twi_probe()
1069 pm_runtime_set_active(dev->dev); at91_twi_probe()
1070 pm_runtime_enable(dev->dev); at91_twi_probe()
1072 rc = i2c_add_numbered_adapter(&dev->adapter); at91_twi_probe()
1074 dev_err(dev->dev, "Adapter %s registration failed\n", at91_twi_probe()
1075 dev->adapter.name); at91_twi_probe()
1076 clk_disable_unprepare(dev->clk); at91_twi_probe()
1078 pm_runtime_disable(dev->dev); at91_twi_probe()
1079 pm_runtime_set_suspended(dev->dev); at91_twi_probe()
1084 dev_info(dev->dev, "AT91 i2c bus driver (hw version: %#x).\n", at91_twi_probe()
1085 at91_twi_read(dev, AT91_TWI_VER)); at91_twi_probe()
1091 struct at91_twi_dev *dev = platform_get_drvdata(pdev); at91_twi_remove() local
1093 i2c_del_adapter(&dev->adapter); at91_twi_remove()
1094 clk_disable_unprepare(dev->clk); at91_twi_remove()
1096 pm_runtime_disable(dev->dev); at91_twi_remove()
1097 pm_runtime_set_suspended(dev->dev); at91_twi_remove()
1104 static int at91_twi_runtime_suspend(struct device *dev) at91_twi_runtime_suspend() argument
1106 struct at91_twi_dev *twi_dev = dev_get_drvdata(dev); at91_twi_runtime_suspend()
1110 pinctrl_pm_select_sleep_state(dev); at91_twi_runtime_suspend()
1115 static int at91_twi_runtime_resume(struct device *dev) at91_twi_runtime_resume() argument
1117 struct at91_twi_dev *twi_dev = dev_get_drvdata(dev); at91_twi_runtime_resume()
1119 pinctrl_pm_select_default_state(dev); at91_twi_runtime_resume()
1124 static int at91_twi_suspend_noirq(struct device *dev) at91_twi_suspend_noirq() argument
1126 if (!pm_runtime_status_suspended(dev)) at91_twi_suspend_noirq()
1127 at91_twi_runtime_suspend(dev); at91_twi_suspend_noirq()
1132 static int at91_twi_resume_noirq(struct device *dev) at91_twi_resume_noirq() argument
1136 if (!pm_runtime_status_suspended(dev)) { at91_twi_resume_noirq()
1137 ret = at91_twi_runtime_resume(dev); at91_twi_resume_noirq()
1142 pm_runtime_mark_last_busy(dev); at91_twi_resume_noirq()
1143 pm_request_autosuspend(dev); at91_twi_resume_noirq()
H A Di2c-designware-platdrv.c45 static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev) i2c_dw_get_clk_rate_khz() argument
47 return clk_get_rate(dev->clk)/1000; i2c_dw_get_clk_rate_khz()
71 acpi_handle handle = ACPI_HANDLE(&pdev->dev); dw_i2c_acpi_params()
95 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); dw_i2c_acpi_configure() local
98 dev->adapter.nr = -1; dw_i2c_acpi_configure()
99 dev->tx_fifo_depth = 32; dw_i2c_acpi_configure()
100 dev->rx_fifo_depth = 32; dw_i2c_acpi_configure()
106 dw_i2c_acpi_params(pdev, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, NULL); dw_i2c_acpi_configure()
107 dw_i2c_acpi_params(pdev, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, dw_i2c_acpi_configure()
108 &dev->sda_hold_time); dw_i2c_acpi_configure()
110 id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev); dw_i2c_acpi_configure()
112 dev->accessor_flags |= (u32)id->driver_data; dw_i2c_acpi_configure()
137 struct dw_i2c_dev *dev; dw_i2c_plat_probe() local
148 dev = devm_kzalloc(&pdev->dev, sizeof(struct dw_i2c_dev), GFP_KERNEL); dw_i2c_plat_probe()
149 if (!dev) dw_i2c_plat_probe()
153 dev->base = devm_ioremap_resource(&pdev->dev, mem); dw_i2c_plat_probe()
154 if (IS_ERR(dev->base)) dw_i2c_plat_probe()
155 return PTR_ERR(dev->base); dw_i2c_plat_probe()
157 dev->dev = &pdev->dev; dw_i2c_plat_probe()
158 dev->irq = irq; dw_i2c_plat_probe()
159 platform_set_drvdata(pdev, dev); dw_i2c_plat_probe()
164 if (has_acpi_companion(&pdev->dev)) { dw_i2c_plat_probe()
166 } else if (pdev->dev.of_node) { dw_i2c_plat_probe()
167 of_property_read_u32(pdev->dev.of_node, dw_i2c_plat_probe()
170 of_property_read_u32(pdev->dev.of_node, dw_i2c_plat_probe()
172 &dev->sda_falling_time); dw_i2c_plat_probe()
173 of_property_read_u32(pdev->dev.of_node, dw_i2c_plat_probe()
175 &dev->scl_falling_time); dw_i2c_plat_probe()
177 of_property_read_u32(pdev->dev.of_node, "clock-frequency", dw_i2c_plat_probe()
184 dev_err(&pdev->dev, "Only 100kHz and 400kHz supported"); dw_i2c_plat_probe()
188 pdata = dev_get_platdata(&pdev->dev); dw_i2c_plat_probe()
193 r = i2c_dw_eval_lock_support(dev); dw_i2c_plat_probe()
197 dev->functionality = dw_i2c_plat_probe()
205 dev->master_cfg = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE | dw_i2c_plat_probe()
208 dev->master_cfg = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE | dw_i2c_plat_probe()
211 dev->clk = devm_clk_get(&pdev->dev, NULL); dw_i2c_plat_probe()
212 dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; dw_i2c_plat_probe()
213 if (IS_ERR(dev->clk)) dw_i2c_plat_probe()
214 return PTR_ERR(dev->clk); dw_i2c_plat_probe()
215 clk_prepare_enable(dev->clk); dw_i2c_plat_probe()
217 if (!dev->sda_hold_time && ht) { dw_i2c_plat_probe()
218 u32 ic_clk = dev->get_clk_rate_khz(dev); dw_i2c_plat_probe()
220 dev->sda_hold_time = div_u64((u64)ic_clk * ht + 500000, dw_i2c_plat_probe()
224 if (!dev->tx_fifo_depth) { dw_i2c_plat_probe()
225 u32 param1 = i2c_dw_read_comp_param(dev); dw_i2c_plat_probe()
227 dev->tx_fifo_depth = ((param1 >> 16) & 0xff) + 1; dw_i2c_plat_probe()
228 dev->rx_fifo_depth = ((param1 >> 8) & 0xff) + 1; dw_i2c_plat_probe()
229 dev->adapter.nr = pdev->id; dw_i2c_plat_probe()
232 adap = &dev->adapter; dw_i2c_plat_probe()
235 ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev)); dw_i2c_plat_probe()
236 adap->dev.of_node = pdev->dev.of_node; dw_i2c_plat_probe()
238 if (dev->pm_runtime_disabled) { dw_i2c_plat_probe()
239 pm_runtime_forbid(&pdev->dev); dw_i2c_plat_probe()
241 pm_runtime_set_autosuspend_delay(&pdev->dev, 1000); dw_i2c_plat_probe()
242 pm_runtime_use_autosuspend(&pdev->dev); dw_i2c_plat_probe()
243 pm_runtime_set_active(&pdev->dev); dw_i2c_plat_probe()
244 pm_runtime_enable(&pdev->dev); dw_i2c_plat_probe()
247 r = i2c_dw_probe(dev); dw_i2c_plat_probe()
248 if (r && !dev->pm_runtime_disabled) dw_i2c_plat_probe()
249 pm_runtime_disable(&pdev->dev); dw_i2c_plat_probe()
256 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); dw_i2c_plat_remove() local
258 pm_runtime_get_sync(&pdev->dev); dw_i2c_plat_remove()
260 i2c_del_adapter(&dev->adapter); dw_i2c_plat_remove()
262 i2c_dw_disable(dev); dw_i2c_plat_remove()
264 pm_runtime_dont_use_autosuspend(&pdev->dev); dw_i2c_plat_remove()
265 pm_runtime_put_sync(&pdev->dev); dw_i2c_plat_remove()
266 if (!dev->pm_runtime_disabled) dw_i2c_plat_remove()
267 pm_runtime_disable(&pdev->dev); dw_i2c_plat_remove()
281 static int dw_i2c_plat_prepare(struct device *dev) dw_i2c_plat_prepare() argument
283 return pm_runtime_suspended(dev); dw_i2c_plat_prepare()
286 static void dw_i2c_plat_complete(struct device *dev) dw_i2c_plat_complete() argument
288 if (dev->power.direct_complete) dw_i2c_plat_complete()
289 pm_request_resume(dev); dw_i2c_plat_complete()
297 static int dw_i2c_plat_suspend(struct device *dev) dw_i2c_plat_suspend() argument
299 struct platform_device *pdev = to_platform_device(dev); dw_i2c_plat_suspend()
308 static int dw_i2c_plat_resume(struct device *dev) dw_i2c_plat_resume() argument
310 struct platform_device *pdev = to_platform_device(dev); dw_i2c_plat_resume()
H A Di2c-bcm-kona.c169 static void bcm_kona_i2c_send_cmd_to_ctrl(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_send_cmd_to_ctrl() argument
172 dev_dbg(dev->device, "%s, %d\n", __func__, cmd); bcm_kona_i2c_send_cmd_to_ctrl()
178 dev->base + CS_OFFSET); bcm_kona_i2c_send_cmd_to_ctrl()
185 dev->base + CS_OFFSET); bcm_kona_i2c_send_cmd_to_ctrl()
192 dev->base + CS_OFFSET); bcm_kona_i2c_send_cmd_to_ctrl()
198 dev->base + CS_OFFSET); bcm_kona_i2c_send_cmd_to_ctrl()
202 dev_err(dev->device, "Unknown command %d\n", cmd); bcm_kona_i2c_send_cmd_to_ctrl()
206 static void bcm_kona_i2c_enable_clock(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_enable_clock() argument
208 writel(readl(dev->base + CLKEN_OFFSET) | CLKEN_CLKEN_MASK, bcm_kona_i2c_enable_clock()
209 dev->base + CLKEN_OFFSET); bcm_kona_i2c_enable_clock()
212 static void bcm_kona_i2c_disable_clock(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_disable_clock() argument
214 writel(readl(dev->base + CLKEN_OFFSET) & ~CLKEN_CLKEN_MASK, bcm_kona_i2c_disable_clock()
215 dev->base + CLKEN_OFFSET); bcm_kona_i2c_disable_clock()
220 struct bcm_kona_i2c_dev *dev = devid; bcm_kona_i2c_isr() local
221 uint32_t status = readl(dev->base + ISR_OFFSET); bcm_kona_i2c_isr()
229 dev->base + TXFCR_OFFSET); bcm_kona_i2c_isr()
231 writel(status & ~ISR_RESERVED_MASK, dev->base + ISR_OFFSET); bcm_kona_i2c_isr()
232 complete_all(&dev->done); bcm_kona_i2c_isr()
238 static int bcm_kona_i2c_wait_if_busy(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_wait_if_busy() argument
242 while (readl(dev->base + ISR_OFFSET) & ISR_CMDBUSY_MASK) bcm_kona_i2c_wait_if_busy()
244 dev_err(dev->device, "CMDBUSY timeout\n"); bcm_kona_i2c_wait_if_busy()
252 static int bcm_kona_send_i2c_cmd(struct bcm_kona_i2c_dev *dev, bcm_kona_send_i2c_cmd() argument
259 rc = bcm_kona_i2c_wait_if_busy(dev); bcm_kona_send_i2c_cmd()
264 writel(IER_I2C_INT_EN_MASK, dev->base + IER_OFFSET); bcm_kona_send_i2c_cmd()
267 reinit_completion(&dev->done); bcm_kona_send_i2c_cmd()
270 bcm_kona_i2c_send_cmd_to_ctrl(dev, cmd); bcm_kona_send_i2c_cmd()
273 time_left = wait_for_completion_timeout(&dev->done, time_left); bcm_kona_send_i2c_cmd()
276 writel(0, dev->base + IER_OFFSET); bcm_kona_send_i2c_cmd()
279 dev_err(dev->device, "controller timed out\n"); bcm_kona_send_i2c_cmd()
284 bcm_kona_i2c_send_cmd_to_ctrl(dev, BCM_CMD_NOACTION); bcm_kona_send_i2c_cmd()
290 static int bcm_kona_i2c_read_fifo_single(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_read_fifo_single() argument
297 reinit_completion(&dev->done); bcm_kona_i2c_read_fifo_single()
300 writel(IER_READ_COMPLETE_INT_MASK, dev->base + IER_OFFSET); bcm_kona_i2c_read_fifo_single()
305 dev->base + RXFCR_OFFSET); bcm_kona_i2c_read_fifo_single()
308 time_left = wait_for_completion_timeout(&dev->done, time_left); bcm_kona_i2c_read_fifo_single()
311 writel(0, dev->base + IER_OFFSET); bcm_kona_i2c_read_fifo_single()
314 dev_err(dev->device, "RX FIFO time out\n"); bcm_kona_i2c_read_fifo_single()
320 *buf = readl(dev->base + RXFIFORDOUT_OFFSET); bcm_kona_i2c_read_fifo_single()
326 static int bcm_kona_i2c_read_fifo(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_read_fifo() argument
342 rc = bcm_kona_i2c_read_fifo_single(dev, tmp_buf, bytes_to_read, bcm_kona_i2c_read_fifo()
355 static int bcm_kona_i2c_write_byte(struct bcm_kona_i2c_dev *dev, uint8_t data, bcm_kona_i2c_write_byte() argument
363 rc = bcm_kona_i2c_wait_if_busy(dev); bcm_kona_i2c_write_byte()
368 writel(ISR_SES_DONE_MASK, dev->base + ISR_OFFSET); bcm_kona_i2c_write_byte()
371 writel(IER_I2C_INT_EN_MASK, dev->base + IER_OFFSET); bcm_kona_i2c_write_byte()
374 reinit_completion(&dev->done); bcm_kona_i2c_write_byte()
377 writel(data, dev->base + DAT_OFFSET); bcm_kona_i2c_write_byte()
380 time_left = wait_for_completion_timeout(&dev->done, time_left); bcm_kona_i2c_write_byte()
383 writel(0, dev->base + IER_OFFSET); bcm_kona_i2c_write_byte()
386 dev_dbg(dev->device, "controller timed out\n"); bcm_kona_i2c_write_byte()
390 nak_received = readl(dev->base + CS_OFFSET) & CS_ACK_MASK ? 1 : 0; bcm_kona_i2c_write_byte()
393 dev_dbg(dev->device, "unexpected NAK/ACK\n"); bcm_kona_i2c_write_byte()
401 static int bcm_kona_i2c_write_fifo_single(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_write_fifo_single() argument
409 reinit_completion(&dev->done); bcm_kona_i2c_write_fifo_single()
413 dev->base + IER_OFFSET); bcm_kona_i2c_write_fifo_single()
416 disable_irq(dev->irq); bcm_kona_i2c_write_fifo_single()
420 writel(buf[k], (dev->base + DAT_OFFSET)); bcm_kona_i2c_write_fifo_single()
423 enable_irq(dev->irq); bcm_kona_i2c_write_fifo_single()
427 time_left = wait_for_completion_timeout(&dev->done, time_left); bcm_kona_i2c_write_fifo_single()
428 fifo_status = readl(dev->base + FIFO_STATUS_OFFSET); bcm_kona_i2c_write_fifo_single()
432 writel(0, dev->base + IER_OFFSET); bcm_kona_i2c_write_fifo_single()
435 if (readl(dev->base + CS_OFFSET) & CS_ACK_MASK) { bcm_kona_i2c_write_fifo_single()
436 dev_err(dev->device, "unexpected NAK\n"); bcm_kona_i2c_write_fifo_single()
442 dev_err(dev->device, "completion timed out\n"); bcm_kona_i2c_write_fifo_single()
451 static int bcm_kona_i2c_write_fifo(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_write_fifo() argument
464 rc = bcm_kona_i2c_write_fifo_single(dev, tmp_buf, bcm_kona_i2c_write_fifo()
477 static int bcm_kona_i2c_do_addr(struct bcm_kona_i2c_dev *dev, bcm_kona_i2c_do_addr() argument
485 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0) bcm_kona_i2c_do_addr()
490 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0) bcm_kona_i2c_do_addr()
495 if (bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART) < 0) bcm_kona_i2c_do_addr()
500 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0) bcm_kona_i2c_do_addr()
509 if (bcm_kona_i2c_write_byte(dev, addr, 0) < 0) bcm_kona_i2c_do_addr()
516 static void bcm_kona_i2c_enable_autosense(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_enable_autosense() argument
518 writel(readl(dev->base + CLKEN_OFFSET) & ~CLKEN_AUTOSENSE_OFF_MASK, bcm_kona_i2c_enable_autosense()
519 dev->base + CLKEN_OFFSET); bcm_kona_i2c_enable_autosense()
522 static void bcm_kona_i2c_config_timing(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_config_timing() argument
524 writel(readl(dev->base + HSTIM_OFFSET) & ~HSTIM_HS_MODE_MASK, bcm_kona_i2c_config_timing()
525 dev->base + HSTIM_OFFSET); bcm_kona_i2c_config_timing()
527 writel((dev->std_cfg->prescale << TIM_PRESCALE_SHIFT) | bcm_kona_i2c_config_timing()
528 (dev->std_cfg->time_p << TIM_P_SHIFT) | bcm_kona_i2c_config_timing()
529 (dev->std_cfg->no_div << TIM_NO_DIV_SHIFT) | bcm_kona_i2c_config_timing()
530 (dev->std_cfg->time_div << TIM_DIV_SHIFT), bcm_kona_i2c_config_timing()
531 dev->base + TIM_OFFSET); bcm_kona_i2c_config_timing()
533 writel((dev->std_cfg->time_m << CLKEN_M_SHIFT) | bcm_kona_i2c_config_timing()
534 (dev->std_cfg->time_n << CLKEN_N_SHIFT) | bcm_kona_i2c_config_timing()
536 dev->base + CLKEN_OFFSET); bcm_kona_i2c_config_timing()
539 static void bcm_kona_i2c_config_timing_hs(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_config_timing_hs() argument
541 writel((dev->hs_cfg->prescale << TIM_PRESCALE_SHIFT) | bcm_kona_i2c_config_timing_hs()
542 (dev->hs_cfg->time_p << TIM_P_SHIFT) | bcm_kona_i2c_config_timing_hs()
543 (dev->hs_cfg->no_div << TIM_NO_DIV_SHIFT) | bcm_kona_i2c_config_timing_hs()
544 (dev->hs_cfg->time_div << TIM_DIV_SHIFT), bcm_kona_i2c_config_timing_hs()
545 dev->base + TIM_OFFSET); bcm_kona_i2c_config_timing_hs()
547 writel((dev->hs_cfg->hs_hold << HSTIM_HS_HOLD_SHIFT) | bcm_kona_i2c_config_timing_hs()
548 (dev->hs_cfg->hs_high_phase << HSTIM_HS_HIGH_PHASE_SHIFT) | bcm_kona_i2c_config_timing_hs()
549 (dev->hs_cfg->hs_setup << HSTIM_HS_SETUP_SHIFT), bcm_kona_i2c_config_timing_hs()
550 dev->base + HSTIM_OFFSET); bcm_kona_i2c_config_timing_hs()
552 writel(readl(dev->base + HSTIM_OFFSET) | HSTIM_HS_MODE_MASK, bcm_kona_i2c_config_timing_hs()
553 dev->base + HSTIM_OFFSET); bcm_kona_i2c_config_timing_hs()
556 static int bcm_kona_i2c_switch_to_hs(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_switch_to_hs() argument
561 rc = bcm_kona_i2c_write_byte(dev, MASTERCODE, 1); bcm_kona_i2c_switch_to_hs()
568 rc = clk_set_rate(dev->external_clk, HS_EXT_CLK_FREQ); bcm_kona_i2c_switch_to_hs()
570 dev_err(dev->device, "%s: clk_set_rate returned %d\n", bcm_kona_i2c_switch_to_hs()
576 bcm_kona_i2c_config_timing_hs(dev); bcm_kona_i2c_switch_to_hs()
579 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART); bcm_kona_i2c_switch_to_hs()
581 dev_err(dev->device, "High speed restart command failed\n"); bcm_kona_i2c_switch_to_hs()
586 static int bcm_kona_i2c_switch_to_std(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_switch_to_std() argument
591 bcm_kona_i2c_config_timing(dev); bcm_kona_i2c_switch_to_std()
594 rc = clk_set_rate(dev->external_clk, STD_EXT_CLK_FREQ); bcm_kona_i2c_switch_to_std()
596 dev_err(dev->device, "%s: clk_set_rate returned %d\n", bcm_kona_i2c_switch_to_std()
607 struct bcm_kona_i2c_dev *dev = i2c_get_adapdata(adapter); bcm_kona_i2c_xfer() local
612 rc = clk_prepare_enable(dev->external_clk); bcm_kona_i2c_xfer()
614 dev_err(dev->device, "%s: peri clock enable failed. err %d\n", bcm_kona_i2c_xfer()
620 writel(0, dev->base + PADCTL_OFFSET); bcm_kona_i2c_xfer()
623 bcm_kona_i2c_enable_clock(dev); bcm_kona_i2c_xfer()
626 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_START); bcm_kona_i2c_xfer()
628 dev_err(dev->device, "Start command failed rc = %d\n", rc); bcm_kona_i2c_xfer()
633 if (dev->hs_cfg) { bcm_kona_i2c_xfer()
634 rc = bcm_kona_i2c_switch_to_hs(dev); bcm_kona_i2c_xfer()
645 rc = bcm_kona_send_i2c_cmd(dev, BCM_CMD_RESTART); bcm_kona_i2c_xfer()
647 dev_err(dev->device, bcm_kona_i2c_xfer()
655 rc = bcm_kona_i2c_do_addr(dev, pmsg); bcm_kona_i2c_xfer()
657 dev_err(dev->device, bcm_kona_i2c_xfer()
666 rc = bcm_kona_i2c_read_fifo(dev, pmsg); bcm_kona_i2c_xfer()
668 dev_err(dev->device, "read failure\n"); bcm_kona_i2c_xfer()
672 rc = bcm_kona_i2c_write_fifo(dev, pmsg); bcm_kona_i2c_xfer()
674 dev_err(dev->device, "write failure"); bcm_kona_i2c_xfer()
684 bcm_kona_send_i2c_cmd(dev, BCM_CMD_STOP); bcm_kona_i2c_xfer()
687 if (dev->hs_cfg) { bcm_kona_i2c_xfer()
688 int hs_rc = bcm_kona_i2c_switch_to_std(dev); bcm_kona_i2c_xfer()
696 writel(PADCTL_PAD_OUT_EN_MASK, dev->base + PADCTL_OFFSET); bcm_kona_i2c_xfer()
699 bcm_kona_i2c_disable_clock(dev); bcm_kona_i2c_xfer()
701 clk_disable_unprepare(dev->external_clk); bcm_kona_i2c_xfer()
717 static int bcm_kona_i2c_assign_bus_speed(struct bcm_kona_i2c_dev *dev) bcm_kona_i2c_assign_bus_speed() argument
720 int ret = of_property_read_u32(dev->device->of_node, "clock-frequency", bcm_kona_i2c_assign_bus_speed()
723 dev_err(dev->device, "missing clock-frequency property\n"); bcm_kona_i2c_assign_bus_speed()
729 dev->std_cfg = &std_cfg_table[BCM_SPD_100K]; bcm_kona_i2c_assign_bus_speed()
732 dev->std_cfg = &std_cfg_table[BCM_SPD_400K]; bcm_kona_i2c_assign_bus_speed()
735 dev->std_cfg = &std_cfg_table[BCM_SPD_1MHZ]; bcm_kona_i2c_assign_bus_speed()
739 dev->std_cfg = &std_cfg_table[BCM_SPD_100K]; bcm_kona_i2c_assign_bus_speed()
740 dev->hs_cfg = &hs_cfg_table[BCM_SPD_3P4MHZ]; bcm_kona_i2c_assign_bus_speed()
754 struct bcm_kona_i2c_dev *dev; bcm_kona_i2c_probe() local
759 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); bcm_kona_i2c_probe()
760 if (!dev) bcm_kona_i2c_probe()
763 platform_set_drvdata(pdev, dev); bcm_kona_i2c_probe()
764 dev->device = &pdev->dev; bcm_kona_i2c_probe()
765 init_completion(&dev->done); bcm_kona_i2c_probe()
769 dev->base = devm_ioremap_resource(dev->device, iomem); bcm_kona_i2c_probe()
770 if (IS_ERR(dev->base)) bcm_kona_i2c_probe()
774 dev->external_clk = devm_clk_get(dev->device, NULL); bcm_kona_i2c_probe()
775 if (IS_ERR(dev->external_clk)) { bcm_kona_i2c_probe()
776 dev_err(dev->device, "couldn't get clock\n"); bcm_kona_i2c_probe()
780 rc = clk_set_rate(dev->external_clk, STD_EXT_CLK_FREQ); bcm_kona_i2c_probe()
782 dev_err(dev->device, "%s: clk_set_rate returned %d\n", bcm_kona_i2c_probe()
787 rc = clk_prepare_enable(dev->external_clk); bcm_kona_i2c_probe()
789 dev_err(dev->device, "couldn't enable clock\n"); bcm_kona_i2c_probe()
794 rc = bcm_kona_i2c_assign_bus_speed(dev); bcm_kona_i2c_probe()
799 bcm_kona_i2c_enable_clock(dev); bcm_kona_i2c_probe()
802 bcm_kona_i2c_config_timing(dev); bcm_kona_i2c_probe()
805 writel(0, dev->base + TOUT_OFFSET); bcm_kona_i2c_probe()
808 bcm_kona_i2c_enable_autosense(dev); bcm_kona_i2c_probe()
812 dev->base + TXFCR_OFFSET); bcm_kona_i2c_probe()
815 writel(0, dev->base + IER_OFFSET); bcm_kona_i2c_probe()
824 dev->base + ISR_OFFSET); bcm_kona_i2c_probe()
827 dev->irq = platform_get_irq(pdev, 0); bcm_kona_i2c_probe()
828 if (dev->irq < 0) { bcm_kona_i2c_probe()
829 dev_err(dev->device, "no irq resource\n"); bcm_kona_i2c_probe()
835 rc = devm_request_irq(&pdev->dev, dev->irq, bcm_kona_i2c_isr, bcm_kona_i2c_probe()
836 IRQF_SHARED, pdev->name, dev); bcm_kona_i2c_probe()
838 dev_err(dev->device, "failed to request irq %i\n", dev->irq); bcm_kona_i2c_probe()
843 bcm_kona_i2c_send_cmd_to_ctrl(dev, BCM_CMD_NOACTION); bcm_kona_i2c_probe()
846 writel(PADCTL_PAD_OUT_EN_MASK, dev->base + PADCTL_OFFSET); bcm_kona_i2c_probe()
849 bcm_kona_i2c_disable_clock(dev); bcm_kona_i2c_probe()
852 clk_disable_unprepare(dev->external_clk); bcm_kona_i2c_probe()
855 adap = &dev->adapter; bcm_kona_i2c_probe()
856 i2c_set_adapdata(adap, dev); bcm_kona_i2c_probe()
860 adap->dev.parent = &pdev->dev; bcm_kona_i2c_probe()
861 adap->dev.of_node = pdev->dev.of_node; bcm_kona_i2c_probe()
865 dev_err(dev->device, "failed to add adapter\n"); bcm_kona_i2c_probe()
869 dev_info(dev->device, "device registered successfully\n"); bcm_kona_i2c_probe()
874 bcm_kona_i2c_disable_clock(dev); bcm_kona_i2c_probe()
875 clk_disable_unprepare(dev->external_clk); bcm_kona_i2c_probe()
882 struct bcm_kona_i2c_dev *dev = platform_get_drvdata(pdev); bcm_kona_i2c_remove() local
884 i2c_del_adapter(&dev->adapter); bcm_kona_i2c_remove()
H A Di2c-diolan-u2c.c101 static int diolan_usb_transfer(struct i2c_diolan_u2c *dev) diolan_usb_transfer() argument
107 if (!dev->olen || !dev->ocount) diolan_usb_transfer()
110 ret = usb_bulk_msg(dev->usb_dev, diolan_usb_transfer()
111 usb_sndbulkpipe(dev->usb_dev, dev->ep_out), diolan_usb_transfer()
112 dev->obuffer, dev->olen, &actual, diolan_usb_transfer()
115 for (i = 0; i < dev->ocount; i++) { diolan_usb_transfer()
118 tmpret = usb_bulk_msg(dev->usb_dev, diolan_usb_transfer()
119 usb_rcvbulkpipe(dev->usb_dev, diolan_usb_transfer()
120 dev->ep_in), diolan_usb_transfer()
121 dev->ibuffer, diolan_usb_transfer()
122 sizeof(dev->ibuffer), &actual, diolan_usb_transfer()
133 switch (dev->ibuffer[actual - 1]) { diolan_usb_transfer()
156 dev->olen = 0; diolan_usb_transfer()
157 dev->ocount = 0; diolan_usb_transfer()
161 static int diolan_write_cmd(struct i2c_diolan_u2c *dev, bool flush) diolan_write_cmd() argument
163 if (flush || dev->olen >= DIOLAN_FLUSH_LEN) diolan_write_cmd()
164 return diolan_usb_transfer(dev); diolan_write_cmd()
169 static int diolan_usb_cmd(struct i2c_diolan_u2c *dev, u8 command, bool flush) diolan_usb_cmd() argument
171 dev->obuffer[dev->olen++] = command; diolan_usb_cmd()
172 dev->ocount++; diolan_usb_cmd()
173 return diolan_write_cmd(dev, flush); diolan_usb_cmd()
177 static int diolan_usb_cmd_data(struct i2c_diolan_u2c *dev, u8 command, u8 data, diolan_usb_cmd_data() argument
180 dev->obuffer[dev->olen++] = command; diolan_usb_cmd_data()
181 dev->obuffer[dev->olen++] = data; diolan_usb_cmd_data()
182 dev->ocount++; diolan_usb_cmd_data()
183 return diolan_write_cmd(dev, flush); diolan_usb_cmd_data()
187 static int diolan_usb_cmd_data2(struct i2c_diolan_u2c *dev, u8 command, u8 d1, diolan_usb_cmd_data2() argument
190 dev->obuffer[dev->olen++] = command; diolan_usb_cmd_data2()
191 dev->obuffer[dev->olen++] = d1; diolan_usb_cmd_data2()
192 dev->obuffer[dev->olen++] = d2; diolan_usb_cmd_data2()
193 dev->ocount++; diolan_usb_cmd_data2()
194 return diolan_write_cmd(dev, flush); diolan_usb_cmd_data2()
203 static void diolan_flush_input(struct i2c_diolan_u2c *dev) diolan_flush_input() argument
211 ret = usb_bulk_msg(dev->usb_dev, diolan_flush_input()
212 usb_rcvbulkpipe(dev->usb_dev, dev->ep_in), diolan_flush_input()
213 dev->ibuffer, sizeof(dev->ibuffer), &actual, diolan_flush_input()
219 dev_err(&dev->interface->dev, "Failed to flush input buffer\n"); diolan_flush_input()
222 static int diolan_i2c_start(struct i2c_diolan_u2c *dev) diolan_i2c_start() argument
224 return diolan_usb_cmd(dev, CMD_I2C_START, false); diolan_i2c_start()
227 static int diolan_i2c_repeated_start(struct i2c_diolan_u2c *dev) diolan_i2c_repeated_start() argument
229 return diolan_usb_cmd(dev, CMD_I2C_REPEATED_START, false); diolan_i2c_repeated_start()
232 static int diolan_i2c_stop(struct i2c_diolan_u2c *dev) diolan_i2c_stop() argument
234 return diolan_usb_cmd(dev, CMD_I2C_STOP, true); diolan_i2c_stop()
237 static int diolan_i2c_get_byte_ack(struct i2c_diolan_u2c *dev, bool ack, diolan_i2c_get_byte_ack() argument
242 ret = diolan_usb_cmd_data(dev, CMD_I2C_GET_BYTE_ACK, ack, true); diolan_i2c_get_byte_ack()
244 *byte = dev->ibuffer[0]; diolan_i2c_get_byte_ack()
251 static int diolan_i2c_put_byte_ack(struct i2c_diolan_u2c *dev, u8 byte) diolan_i2c_put_byte_ack() argument
253 return diolan_usb_cmd_data(dev, CMD_I2C_PUT_BYTE_ACK, byte, false); diolan_i2c_put_byte_ack()
256 static int diolan_set_speed(struct i2c_diolan_u2c *dev, u8 speed) diolan_set_speed() argument
258 return diolan_usb_cmd_data(dev, CMD_I2C_SET_SPEED, speed, true); diolan_set_speed()
262 static int diolan_set_clock_synch(struct i2c_diolan_u2c *dev, bool enable) diolan_set_clock_synch() argument
264 return diolan_usb_cmd_data(dev, CMD_I2C_SET_CLK_SYNC, enable, true); diolan_set_clock_synch()
268 static int diolan_set_clock_synch_timeout(struct i2c_diolan_u2c *dev, int ms) diolan_set_clock_synch_timeout() argument
272 return diolan_usb_cmd_data2(dev, CMD_I2C_SET_CLK_SYNC_TO, diolan_set_clock_synch_timeout()
276 static void diolan_fw_version(struct i2c_diolan_u2c *dev) diolan_fw_version() argument
280 ret = diolan_usb_cmd(dev, CMD_GET_FW_VERSION, true); diolan_fw_version()
282 dev_info(&dev->interface->dev, diolan_fw_version()
284 (unsigned int)dev->ibuffer[0], diolan_fw_version()
285 (unsigned int)dev->ibuffer[1]); diolan_fw_version()
288 static void diolan_get_serial(struct i2c_diolan_u2c *dev) diolan_get_serial() argument
293 ret = diolan_usb_cmd(dev, CMD_GET_SERIAL, true); diolan_get_serial()
295 serial = le32_to_cpu(*(u32 *)dev->ibuffer); diolan_get_serial()
296 dev_info(&dev->interface->dev, diolan_get_serial()
301 static int diolan_init(struct i2c_diolan_u2c *dev) diolan_init() argument
318 dev_info(&dev->interface->dev, diolan_init()
320 dev->usb_dev->bus->busnum, dev->usb_dev->devnum, frequency); diolan_init()
322 diolan_flush_input(dev); diolan_init()
323 diolan_fw_version(dev); diolan_init()
324 diolan_get_serial(dev); diolan_init()
327 ret = diolan_set_speed(dev, speed); diolan_init()
332 ret = diolan_set_clock_synch(dev, speed != U2C_I2C_SPEED_FAST); diolan_init()
337 ret = diolan_set_clock_synch_timeout(dev, DIOLAN_SYNC_TIMEOUT); diolan_init()
347 struct i2c_diolan_u2c *dev = i2c_get_adapdata(adapter); diolan_usb_xfer() local
352 ret = diolan_i2c_start(dev); diolan_usb_xfer()
359 ret = diolan_i2c_repeated_start(dev); diolan_usb_xfer()
365 diolan_i2c_put_byte_ack(dev, (pmsg->addr << 1) | 1); diolan_usb_xfer()
379 ret = diolan_i2c_get_byte_ack(dev, ack, &byte); diolan_usb_xfer()
396 ret = diolan_i2c_put_byte_ack(dev, pmsg->addr << 1); diolan_usb_xfer()
400 ret = diolan_i2c_put_byte_ack(dev, diolan_usb_xfer()
409 sret = diolan_i2c_stop(dev); diolan_usb_xfer()
438 static void diolan_u2c_free(struct i2c_diolan_u2c *dev) diolan_u2c_free() argument
440 usb_put_dev(dev->usb_dev); diolan_u2c_free()
441 kfree(dev); diolan_u2c_free()
448 struct i2c_diolan_u2c *dev; diolan_u2c_probe() local
456 dev = kzalloc(sizeof(*dev), GFP_KERNEL); diolan_u2c_probe()
457 if (dev == NULL) { diolan_u2c_probe()
461 dev->ep_out = hostif->endpoint[0].desc.bEndpointAddress; diolan_u2c_probe()
462 dev->ep_in = hostif->endpoint[1].desc.bEndpointAddress; diolan_u2c_probe()
464 dev->usb_dev = usb_get_dev(interface_to_usbdev(interface)); diolan_u2c_probe()
465 dev->interface = interface; diolan_u2c_probe()
468 usb_set_intfdata(interface, dev); diolan_u2c_probe()
471 dev->adapter.owner = THIS_MODULE; diolan_u2c_probe()
472 dev->adapter.class = I2C_CLASS_HWMON; diolan_u2c_probe()
473 dev->adapter.algo = &diolan_usb_algorithm; diolan_u2c_probe()
474 i2c_set_adapdata(&dev->adapter, dev); diolan_u2c_probe()
475 snprintf(dev->adapter.name, sizeof(dev->adapter.name), diolan_u2c_probe()
477 dev->usb_dev->bus->busnum, dev->usb_dev->devnum); diolan_u2c_probe()
479 dev->adapter.dev.parent = &dev->interface->dev; diolan_u2c_probe()
482 ret = diolan_init(dev); diolan_u2c_probe()
484 dev_err(&interface->dev, "failed to initialize adapter\n"); diolan_u2c_probe()
489 ret = i2c_add_adapter(&dev->adapter); diolan_u2c_probe()
491 dev_err(&interface->dev, "failed to add I2C adapter\n"); diolan_u2c_probe()
495 dev_dbg(&interface->dev, "connected " DRIVER_NAME "\n"); diolan_u2c_probe()
501 diolan_u2c_free(dev); diolan_u2c_probe()
508 struct i2c_diolan_u2c *dev = usb_get_intfdata(interface); diolan_u2c_disconnect() local
510 i2c_del_adapter(&dev->adapter); diolan_u2c_disconnect()
512 diolan_u2c_free(dev); diolan_u2c_disconnect()
514 dev_dbg(&interface->dev, "disconnected\n"); diolan_u2c_disconnect()
/linux-4.4.14/drivers/ipack/
H A Dipack.c18 #define to_ipack_dev(device) container_of(device, struct ipack_device, dev)
23 static void ipack_device_release(struct device *dev) ipack_device_release() argument
25 struct ipack_device *device = to_ipack_dev(dev); ipack_device_release()
55 static int ipack_bus_match(struct device *dev, struct device_driver *drv) ipack_bus_match() argument
57 struct ipack_device *idev = to_ipack_dev(dev); ipack_bus_match()
67 struct ipack_device *dev = to_ipack_dev(device); ipack_bus_probe() local
73 return drv->ops->probe(dev); ipack_bus_probe()
78 struct ipack_device *dev = to_ipack_dev(device); ipack_bus_remove() local
84 drv->ops->remove(dev); ipack_bus_remove()
88 static int ipack_uevent(struct device *dev, struct kobj_uevent_env *env) ipack_uevent() argument
92 if (!dev) ipack_uevent()
95 idev = to_ipack_dev(dev); ipack_uevent()
107 field##_show(struct device *dev, struct device_attribute *attr, \
110 struct ipack_device *idev = to_ipack_dev(dev); \
114 static ssize_t id_show(struct device *dev, id_show() argument
118 struct ipack_device *idev = to_ipack_dev(dev); id_show()
145 id_vendor_show(struct device *dev, struct device_attribute *attr, char *buf) id_vendor_show() argument
147 struct ipack_device *idev = to_ipack_dev(dev); id_vendor_show()
159 id_device_show(struct device *dev, struct device_attribute *attr, char *buf) id_device_show() argument
161 struct ipack_device *idev = to_ipack_dev(dev); id_device_show()
172 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, modalias_show() argument
175 struct ipack_device *idev = to_ipack_dev(dev); modalias_show()
234 static int ipack_unregister_bus_member(struct device *dev, void *data) ipack_unregister_bus_member() argument
236 struct ipack_device *idev = to_ipack_dev(dev); ipack_unregister_bus_member()
285 static u8 ipack_calc_crc1(struct ipack_device *dev) ipack_calc_crc1() argument
292 for (i = 0; i < dev->id_avail; i++) { ipack_calc_crc1()
293 c = (i != 11) ? dev->id[i] : 0; ipack_calc_crc1()
300 static u16 ipack_calc_crc2(struct ipack_device *dev) ipack_calc_crc2() argument
307 for (i = 0; i < dev->id_avail; i++) { ipack_calc_crc2()
308 c = ((i != 0x18) && (i != 0x19)) ? dev->id[i] : 0; ipack_calc_crc2()
315 static void ipack_parse_id1(struct ipack_device *dev) ipack_parse_id1() argument
317 u8 *id = dev->id; ipack_parse_id1()
320 dev->id_vendor = id[4]; ipack_parse_id1()
321 dev->id_device = id[5]; ipack_parse_id1()
322 dev->speed_8mhz = 1; ipack_parse_id1()
323 dev->speed_32mhz = (id[7] == 'H'); ipack_parse_id1()
324 crc = ipack_calc_crc1(dev); ipack_parse_id1()
325 dev->id_crc_correct = (crc == id[11]); ipack_parse_id1()
326 if (!dev->id_crc_correct) { ipack_parse_id1()
327 dev_warn(&dev->dev, "ID CRC invalid found 0x%x, expected 0x%x.\n", ipack_parse_id1()
332 static void ipack_parse_id2(struct ipack_device *dev) ipack_parse_id2() argument
334 __be16 *id = (__be16 *) dev->id; ipack_parse_id2()
337 dev->id_vendor = ((be16_to_cpu(id[3]) & 0xff) << 16) ipack_parse_id2()
339 dev->id_device = be16_to_cpu(id[5]); ipack_parse_id2()
341 dev->speed_8mhz = !!(flags & 2); ipack_parse_id2()
342 dev->speed_32mhz = !!(flags & 4); ipack_parse_id2()
343 crc = ipack_calc_crc2(dev); ipack_parse_id2()
344 dev->id_crc_correct = (crc == be16_to_cpu(id[12])); ipack_parse_id2()
345 if (!dev->id_crc_correct) { ipack_parse_id2()
346 dev_warn(&dev->dev, "ID CRC invalid found 0x%x, expected 0x%x.\n", ipack_parse_id2()
351 static int ipack_device_read_id(struct ipack_device *dev) ipack_device_read_id() argument
357 idmem = ioremap(dev->region[IPACK_ID_SPACE].start, ipack_device_read_id()
358 dev->region[IPACK_ID_SPACE].size); ipack_device_read_id()
360 dev_err(&dev->dev, "error mapping memory\n"); ipack_device_read_id()
373 dev->id_format = IPACK_ID_VERSION_1; ipack_device_read_id()
374 dev->id_avail = ioread8(idmem + 0x15); ipack_device_read_id()
375 if ((dev->id_avail < 0x0c) || (dev->id_avail > 0x40)) { ipack_device_read_id()
376 dev_warn(&dev->dev, "invalid id size"); ipack_device_read_id()
377 dev->id_avail = 0x0c; ipack_device_read_id()
385 dev->id_format = IPACK_ID_VERSION_2; ipack_device_read_id()
386 dev->id_avail = ioread16be(idmem + 0x16); ipack_device_read_id()
387 if ((dev->id_avail < 0x1a) || (dev->id_avail > 0x40)) { ipack_device_read_id()
388 dev_warn(&dev->dev, "invalid id size"); ipack_device_read_id()
389 dev->id_avail = 0x1a; ipack_device_read_id()
392 dev->id_format = IPACK_ID_VERSION_INVALID; ipack_device_read_id()
393 dev->id_avail = 0; ipack_device_read_id()
396 if (!dev->id_avail) { ipack_device_read_id()
403 dev->id = kmalloc(dev->id_avail, GFP_KERNEL); ipack_device_read_id()
404 if (!dev->id) { ipack_device_read_id()
405 dev_err(&dev->dev, "dev->id alloc failed.\n"); ipack_device_read_id()
409 for (i = 0; i < dev->id_avail; i++) { ipack_device_read_id()
410 if (dev->id_format == IPACK_ID_VERSION_1) ipack_device_read_id()
411 dev->id[i] = ioread8(idmem + (i << 1) + 1); ipack_device_read_id()
413 dev->id[i] = ioread8(idmem + i); ipack_device_read_id()
417 switch (dev->id_format) { ipack_device_read_id()
419 ipack_parse_id1(dev); ipack_device_read_id()
422 ipack_parse_id2(dev); ipack_device_read_id()
432 int ipack_device_init(struct ipack_device *dev) ipack_device_init() argument
436 dev->dev.bus = &ipack_bus_type; ipack_device_init()
437 dev->dev.release = ipack_device_release; ipack_device_init()
438 dev->dev.parent = dev->bus->parent; ipack_device_init()
439 dev_set_name(&dev->dev, ipack_device_init()
440 "ipack-dev.%u.%u", dev->bus->bus_nr, dev->slot); ipack_device_init()
441 device_initialize(&dev->dev); ipack_device_init()
443 if (dev->bus->ops->set_clockrate(dev, 8)) ipack_device_init()
444 dev_warn(&dev->dev, "failed to switch to 8 MHz operation for reading of device ID.\n"); ipack_device_init()
445 if (dev->bus->ops->reset_timeout(dev)) ipack_device_init()
446 dev_warn(&dev->dev, "failed to reset potential timeout."); ipack_device_init()
448 ret = ipack_device_read_id(dev); ipack_device_init()
450 dev_err(&dev->dev, "error reading device id section.\n"); ipack_device_init()
455 if (dev->speed_32mhz) { ipack_device_init()
456 ret = dev->bus->ops->set_clockrate(dev, 32); ipack_device_init()
458 dev_err(&dev->dev, "failed to switch to 32 MHz operation.\n"); ipack_device_init()
465 int ipack_device_add(struct ipack_device *dev) ipack_device_add() argument
467 return device_add(&dev->dev); ipack_device_add()
471 void ipack_device_del(struct ipack_device *dev) ipack_device_del() argument
473 device_del(&dev->dev); ipack_device_del()
474 ipack_put_device(dev); ipack_device_del()
478 void ipack_get_device(struct ipack_device *dev) ipack_get_device() argument
480 get_device(&dev->dev); ipack_get_device()
484 void ipack_put_device(struct ipack_device *dev) ipack_put_device() argument
486 put_device(&dev->dev); ipack_put_device()
/linux-4.4.14/drivers/nfc/
H A Dnfcsim.c22 #define DEV_ERR(_dev, fmt, args...) nfc_err(&_dev->nfc_dev->dev, \
25 #define DEV_DBG(_dev, fmt, args...) dev_dbg(&_dev->nfc_dev->dev, \
65 static void nfcsim_cleanup_dev(struct nfcsim *dev, u8 shutdown) nfcsim_cleanup_dev() argument
67 DEV_DBG(dev, "shutdown=%d\n", shutdown); nfcsim_cleanup_dev()
69 mutex_lock(&dev->lock); nfcsim_cleanup_dev()
71 dev->polling_mode = NFCSIM_POLL_NONE; nfcsim_cleanup_dev()
72 dev->shutting_down = shutdown; nfcsim_cleanup_dev()
73 dev->cb = NULL; nfcsim_cleanup_dev()
74 dev_kfree_skb(dev->clone_skb); nfcsim_cleanup_dev()
75 dev->clone_skb = NULL; nfcsim_cleanup_dev()
77 mutex_unlock(&dev->lock); nfcsim_cleanup_dev()
79 cancel_delayed_work_sync(&dev->poll_work); nfcsim_cleanup_dev()
80 cancel_delayed_work_sync(&dev->recv_work); nfcsim_cleanup_dev()
83 static int nfcsim_target_found(struct nfcsim *dev) nfcsim_target_found() argument
87 DEV_DBG(dev, "\n"); nfcsim_target_found()
92 nfc_targets_found(dev->nfc_dev, &nfc_tgt, 1); nfcsim_target_found()
99 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_dev_up() local
101 DEV_DBG(dev, "\n"); nfcsim_dev_up()
103 mutex_lock(&dev->lock); nfcsim_dev_up()
105 dev->up = 1; nfcsim_dev_up()
107 mutex_unlock(&dev->lock); nfcsim_dev_up()
114 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_dev_down() local
116 DEV_DBG(dev, "\n"); nfcsim_dev_down()
118 mutex_lock(&dev->lock); nfcsim_dev_down()
120 dev->up = 0; nfcsim_dev_down()
122 mutex_unlock(&dev->lock); nfcsim_dev_down()
132 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_dep_link_up() local
133 struct nfcsim *peer = dev->peer_dev; nfcsim_dep_link_up()
137 DEV_DBG(dev, "target_idx: %d, comm_mode: %d\n", target->idx, comm_mode); nfcsim_dep_link_up()
154 mutex_lock(&dev->lock); nfcsim_dep_link_up()
158 DEV_ERR(dev, "Can't set remote general bytes\n"); nfcsim_dep_link_up()
159 mutex_unlock(&dev->lock); nfcsim_dep_link_up()
166 mutex_unlock(&dev->lock); nfcsim_dep_link_up()
173 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_dep_link_down() local
175 DEV_DBG(dev, "\n"); nfcsim_dep_link_down()
177 nfcsim_cleanup_dev(dev, 0); nfcsim_dep_link_down()
185 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_start_poll() local
188 mutex_lock(&dev->lock); nfcsim_start_poll()
190 if (dev->polling_mode != NFCSIM_POLL_NONE) { nfcsim_start_poll()
191 DEV_ERR(dev, "Already in polling mode\n"); nfcsim_start_poll()
197 dev->polling_mode |= NFCSIM_POLL_INITIATOR; nfcsim_start_poll()
200 dev->polling_mode |= NFCSIM_POLL_TARGET; nfcsim_start_poll()
202 if (dev->polling_mode == NFCSIM_POLL_NONE) { nfcsim_start_poll()
203 DEV_ERR(dev, "Unsupported polling mode\n"); nfcsim_start_poll()
208 dev->initiator = 0; nfcsim_start_poll()
209 dev->curr_polling_mode = NFCSIM_POLL_NONE; nfcsim_start_poll()
211 queue_delayed_work(wq, &dev->poll_work, 0); nfcsim_start_poll()
213 DEV_DBG(dev, "Start polling: im: 0x%X, tm: 0x%X\n", im_protocols, nfcsim_start_poll()
218 mutex_unlock(&dev->lock); nfcsim_start_poll()
225 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_stop_poll() local
227 DEV_DBG(dev, "Stop poll\n"); nfcsim_stop_poll()
229 mutex_lock(&dev->lock); nfcsim_stop_poll()
231 dev->polling_mode = NFCSIM_POLL_NONE; nfcsim_stop_poll()
233 mutex_unlock(&dev->lock); nfcsim_stop_poll()
235 cancel_delayed_work_sync(&dev->poll_work); nfcsim_stop_poll()
241 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_activate_target() local
243 DEV_DBG(dev, "\n"); nfcsim_activate_target()
251 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_deactivate_target() local
253 DEV_DBG(dev, "\n"); nfcsim_deactivate_target()
258 struct nfcsim *dev = container_of(work, struct nfcsim, nfcsim_wq_recv() local
261 mutex_lock(&dev->lock); nfcsim_wq_recv()
263 if (dev->shutting_down || !dev->up || !dev->clone_skb) { nfcsim_wq_recv()
264 dev_kfree_skb(dev->clone_skb); nfcsim_wq_recv()
268 if (dev->initiator) { nfcsim_wq_recv()
269 if (!dev->cb) { nfcsim_wq_recv()
270 DEV_ERR(dev, "Null recv callback\n"); nfcsim_wq_recv()
271 dev_kfree_skb(dev->clone_skb); nfcsim_wq_recv()
275 dev->cb(dev->cb_context, dev->clone_skb, 0); nfcsim_wq_recv()
276 dev->cb = NULL; nfcsim_wq_recv()
278 nfc_tm_data_received(dev->nfc_dev, dev->clone_skb); nfcsim_wq_recv()
282 dev->clone_skb = NULL; nfcsim_wq_recv()
284 mutex_unlock(&dev->lock); nfcsim_wq_recv()
291 struct nfcsim *dev = nfc_get_drvdata(nfc_dev); nfcsim_tx() local
292 struct nfcsim *peer = dev->peer_dev; nfcsim_tx()
295 mutex_lock(&dev->lock); nfcsim_tx()
297 if (dev->shutting_down || !dev->up) { nfcsim_tx()
298 mutex_unlock(&dev->lock); nfcsim_tx()
303 dev->cb = cb; nfcsim_tx()
304 dev->cb_context = cb_context; nfcsim_tx()
306 mutex_unlock(&dev->lock); nfcsim_tx()
313 DEV_ERR(dev, "skb_clone failed\n"); nfcsim_tx()
362 static void nfcsim_set_polling_mode(struct nfcsim *dev) nfcsim_set_polling_mode() argument
364 if (dev->polling_mode == NFCSIM_POLL_NONE) { nfcsim_set_polling_mode()
365 dev->curr_polling_mode = NFCSIM_POLL_NONE; nfcsim_set_polling_mode()
369 if (dev->curr_polling_mode == NFCSIM_POLL_NONE) { nfcsim_set_polling_mode()
370 if (dev->polling_mode & NFCSIM_POLL_INITIATOR) nfcsim_set_polling_mode()
371 dev->curr_polling_mode = NFCSIM_POLL_INITIATOR; nfcsim_set_polling_mode()
373 dev->curr_polling_mode = NFCSIM_POLL_TARGET; nfcsim_set_polling_mode()
378 if (dev->polling_mode == NFCSIM_POLL_DUAL) { nfcsim_set_polling_mode()
379 if (dev->curr_polling_mode == NFCSIM_POLL_TARGET) nfcsim_set_polling_mode()
380 dev->curr_polling_mode = NFCSIM_POLL_INITIATOR; nfcsim_set_polling_mode()
382 dev->curr_polling_mode = NFCSIM_POLL_TARGET; nfcsim_set_polling_mode()
388 struct nfcsim *dev = container_of(work, struct nfcsim, poll_work.work); nfcsim_wq_poll() local
389 struct nfcsim *peer = dev->peer_dev; nfcsim_wq_poll()
394 mutex_lock(&dev->lock); nfcsim_wq_poll()
397 nfcsim_set_polling_mode(dev); nfcsim_wq_poll()
399 if (dev->curr_polling_mode == NFCSIM_POLL_NONE) { nfcsim_wq_poll()
400 DEV_DBG(dev, "Not polling\n"); nfcsim_wq_poll()
404 DEV_DBG(dev, "Polling as %s", nfcsim_wq_poll()
405 dev->curr_polling_mode == NFCSIM_POLL_INITIATOR ? nfcsim_wq_poll()
408 if (dev->curr_polling_mode == NFCSIM_POLL_TARGET) nfcsim_wq_poll()
413 dev->polling_mode = NFCSIM_POLL_NONE; nfcsim_wq_poll()
415 dev->initiator = 1; nfcsim_wq_poll()
417 nfcsim_target_found(dev); nfcsim_wq_poll()
431 queue_delayed_work(wq, &dev->poll_work, msecs_to_jiffies(200)); nfcsim_wq_poll()
435 mutex_unlock(&dev->lock); nfcsim_wq_poll()
440 struct nfcsim *dev; nfcsim_init_dev() local
443 dev = kzalloc(sizeof(*dev), GFP_KERNEL); nfcsim_init_dev()
444 if (dev == NULL) nfcsim_init_dev()
447 mutex_init(&dev->lock); nfcsim_init_dev()
449 INIT_DELAYED_WORK(&dev->recv_work, nfcsim_wq_recv); nfcsim_init_dev()
450 INIT_DELAYED_WORK(&dev->poll_work, nfcsim_wq_poll); nfcsim_init_dev()
452 dev->nfc_dev = nfc_allocate_device(&nfcsim_nfc_ops, nfcsim_init_dev()
455 if (!dev->nfc_dev) nfcsim_init_dev()
458 nfc_set_drvdata(dev->nfc_dev, dev); nfcsim_init_dev()
460 rc = nfc_register_device(dev->nfc_dev); nfcsim_init_dev()
464 return dev; nfcsim_init_dev()
467 nfc_free_device(dev->nfc_dev); nfcsim_init_dev()
470 kfree(dev); nfcsim_init_dev()
475 static void nfcsim_free_device(struct nfcsim *dev) nfcsim_free_device() argument
477 nfc_unregister_device(dev->nfc_dev); nfcsim_free_device()
479 nfc_free_device(dev->nfc_dev); nfcsim_free_device()
481 kfree(dev); nfcsim_free_device()
/linux-4.4.14/drivers/block/rsxx/
H A DMakefile2 rsxx-objs := config.o core.o cregs.o dev.o dma.o
/linux-4.4.14/arch/arm/mach-integrator/
H A Dlm.c17 #define to_lm_device(d) container_of(d, struct lm_device, dev)
20 static int lm_match(struct device *dev, struct device_driver *drv) lm_match() argument
25 static int lm_bus_probe(struct device *dev) lm_bus_probe() argument
27 struct lm_device *lmdev = to_lm_device(dev); lm_bus_probe()
28 struct lm_driver *lmdrv = to_lm_driver(dev->driver); lm_bus_probe()
33 static int lm_bus_remove(struct device *dev) lm_bus_remove() argument
35 struct lm_device *lmdev = to_lm_device(dev); lm_bus_remove()
36 struct lm_driver *lmdrv = to_lm_driver(dev->driver); lm_bus_remove()
70 static void lm_device_release(struct device *dev) lm_device_release() argument
72 struct lm_device *d = to_lm_device(dev); lm_device_release()
77 int lm_device_register(struct lm_device *dev) lm_device_register() argument
81 dev->dev.release = lm_device_release; lm_device_register()
82 dev->dev.bus = &lm_bustype; lm_device_register()
84 ret = dev_set_name(&dev->dev, "lm%d", dev->id); lm_device_register()
87 dev->resource.name = dev_name(&dev->dev); lm_device_register()
89 ret = request_resource(&iomem_resource, &dev->resource); lm_device_register()
91 ret = device_register(&dev->dev); lm_device_register()
93 release_resource(&dev->resource); lm_device_register()
/linux-4.4.14/drivers/vlynq/
H A Dvlynq.c81 static void vlynq_dump_regs(struct vlynq_device *dev) vlynq_dump_regs() argument
86 dev->local, dev->remote); vlynq_dump_regs()
89 i + 1, ((u32 *)dev->local)[i]); vlynq_dump_regs()
91 i + 1, ((u32 *)dev->remote)[i]); vlynq_dump_regs()
109 static int vlynq_linked(struct vlynq_device *dev) vlynq_linked() argument
114 if (readl(&dev->local->status) & VLYNQ_STATUS_LINK) vlynq_linked()
122 static void vlynq_reset(struct vlynq_device *dev) vlynq_reset() argument
124 writel(readl(&dev->local->control) | VLYNQ_CTRL_RESET, vlynq_reset()
125 &dev->local->control); vlynq_reset()
131 writel(readl(&dev->local->control) & ~VLYNQ_CTRL_RESET, vlynq_reset()
132 &dev->local->control); vlynq_reset()
140 struct vlynq_device *dev = irq_data_get_irq_chip_data(d); vlynq_irq_unmask() local
144 BUG_ON(!dev); vlynq_irq_unmask()
145 virq = d->irq - dev->irq_start; vlynq_irq_unmask()
146 val = readl(&dev->remote->int_device[virq >> 2]); vlynq_irq_unmask()
148 writel(val, &dev->remote->int_device[virq >> 2]); vlynq_irq_unmask()
153 struct vlynq_device *dev = irq_data_get_irq_chip_data(d); vlynq_irq_mask() local
157 BUG_ON(!dev); vlynq_irq_mask()
158 virq = d->irq - dev->irq_start; vlynq_irq_mask()
159 val = readl(&dev->remote->int_device[virq >> 2]); vlynq_irq_mask()
161 writel(val, &dev->remote->int_device[virq >> 2]); vlynq_irq_mask()
166 struct vlynq_device *dev = irq_data_get_irq_chip_data(d); vlynq_irq_type() local
170 BUG_ON(!dev); vlynq_irq_type()
171 virq = d->irq - dev->irq_start; vlynq_irq_type()
172 val = readl(&dev->remote->int_device[virq >> 2]); vlynq_irq_type()
191 writel(val, &dev->remote->int_device[virq >> 2]); vlynq_irq_type()
197 struct vlynq_device *dev = irq_data_get_irq_chip_data(d); vlynq_local_ack() local
198 u32 status = readl(&dev->local->status); vlynq_local_ack()
201 dev_name(&dev->dev), status); vlynq_local_ack()
202 writel(status, &dev->local->status); vlynq_local_ack()
207 struct vlynq_device *dev = irq_data_get_irq_chip_data(d); vlynq_remote_ack() local
208 u32 status = readl(&dev->remote->status); vlynq_remote_ack()
211 dev_name(&dev->dev), status); vlynq_remote_ack()
212 writel(status, &dev->remote->status); vlynq_remote_ack()
217 struct vlynq_device *dev = dev_id; vlynq_irq() local
221 status = readl(&dev->local->int_status); vlynq_irq()
222 writel(status, &dev->local->int_status); vlynq_irq()
229 do_IRQ(dev->irq_start + virq); vlynq_irq()
258 static int vlynq_setup_irq(struct vlynq_device *dev) vlynq_setup_irq() argument
263 if (dev->local_irq == dev->remote_irq) { vlynq_setup_irq()
266 dev_name(&dev->dev)); vlynq_setup_irq()
271 writel(readl(&dev->local->status), &dev->local->status); vlynq_setup_irq()
272 writel(readl(&dev->remote->status), &dev->remote->status); vlynq_setup_irq()
275 val = VLYNQ_CTRL_INT_VECTOR(dev->local_irq); vlynq_setup_irq()
278 val |= readl(&dev->local->control); vlynq_setup_irq()
279 writel(VLYNQ_INT_OFFSET, &dev->local->int_ptr); vlynq_setup_irq()
280 writel(val, &dev->local->control); vlynq_setup_irq()
282 val = VLYNQ_CTRL_INT_VECTOR(dev->remote_irq); vlynq_setup_irq()
284 val |= readl(&dev->remote->control); vlynq_setup_irq()
285 writel(VLYNQ_INT_OFFSET, &dev->remote->int_ptr); vlynq_setup_irq()
286 writel(val, &dev->remote->int_ptr); vlynq_setup_irq()
287 writel(val, &dev->remote->control); vlynq_setup_irq()
289 for (i = dev->irq_start; i <= dev->irq_end; i++) { vlynq_setup_irq()
290 virq = i - dev->irq_start; vlynq_setup_irq()
291 if (virq == dev->local_irq) { vlynq_setup_irq()
294 irq_set_chip_data(i, dev); vlynq_setup_irq()
295 } else if (virq == dev->remote_irq) { vlynq_setup_irq()
298 irq_set_chip_data(i, dev); vlynq_setup_irq()
302 irq_set_chip_data(i, dev); vlynq_setup_irq()
303 writel(0, &dev->remote->int_device[virq >> 2]); vlynq_setup_irq()
307 if (request_irq(dev->irq, vlynq_irq, IRQF_SHARED, "vlynq", dev)) { vlynq_setup_irq()
309 dev_name(&dev->dev)); vlynq_setup_irq()
316 static void vlynq_device_release(struct device *dev) vlynq_device_release() argument
318 struct vlynq_device *vdev = to_vlynq_device(dev); vlynq_device_release()
322 static int vlynq_device_match(struct device *dev, vlynq_device_match() argument
325 struct vlynq_device *vdev = to_vlynq_device(dev); vlynq_device_match()
344 static int vlynq_device_probe(struct device *dev) vlynq_device_probe() argument
346 struct vlynq_device *vdev = to_vlynq_device(dev); vlynq_device_probe()
347 struct vlynq_driver *drv = to_vlynq_driver(dev->driver); vlynq_device_probe()
354 put_device(dev); vlynq_device_probe()
358 static int vlynq_device_remove(struct device *dev) vlynq_device_remove() argument
360 struct vlynq_driver *drv = to_vlynq_driver(dev->driver); vlynq_device_remove()
363 drv->remove(to_vlynq_device(dev)); vlynq_device_remove()
390 static int __vlynq_try_remote(struct vlynq_device *dev) __vlynq_try_remote() argument
394 vlynq_reset(dev); __vlynq_try_remote()
395 for (i = dev->dev_id ? vlynq_rdiv2 : vlynq_rdiv8; dev->dev_id ? __vlynq_try_remote()
397 dev->dev_id ? i++ : i--) { __vlynq_try_remote()
399 if (!vlynq_linked(dev)) __vlynq_try_remote()
402 writel((readl(&dev->remote->control) & __vlynq_try_remote()
406 &dev->remote->control); __vlynq_try_remote()
407 writel((readl(&dev->local->control) __vlynq_try_remote()
411 &dev->local->control); __vlynq_try_remote()
413 if (vlynq_linked(dev)) { __vlynq_try_remote()
416 dev_name(&dev->dev), i - vlynq_rdiv1 + 1); __vlynq_try_remote()
417 dev->divisor = i; __vlynq_try_remote()
420 vlynq_reset(dev); __vlynq_try_remote()
434 static int __vlynq_try_local(struct vlynq_device *dev) __vlynq_try_local() argument
438 vlynq_reset(dev); __vlynq_try_local()
440 for (i = dev->dev_id ? vlynq_ldiv2 : vlynq_ldiv8; dev->dev_id ? __vlynq_try_local()
442 dev->dev_id ? i++ : i--) { __vlynq_try_local()
444 writel((readl(&dev->local->control) & __vlynq_try_local()
448 &dev->local->control); __vlynq_try_local()
450 if (vlynq_linked(dev)) { __vlynq_try_local()
453 dev_name(&dev->dev), i - vlynq_ldiv1 + 1); __vlynq_try_local()
454 dev->divisor = i; __vlynq_try_local()
457 vlynq_reset(dev); __vlynq_try_local()
470 static int __vlynq_try_external(struct vlynq_device *dev) __vlynq_try_external() argument
472 vlynq_reset(dev); __vlynq_try_external()
473 if (!vlynq_linked(dev)) __vlynq_try_external()
476 writel((readl(&dev->remote->control) & __vlynq_try_external()
478 &dev->remote->control); __vlynq_try_external()
480 writel((readl(&dev->local->control) & __vlynq_try_external()
482 &dev->local->control); __vlynq_try_external()
484 if (vlynq_linked(dev)) { __vlynq_try_external()
486 dev_name(&dev->dev)); __vlynq_try_external()
487 dev->divisor = vlynq_div_external; __vlynq_try_external()
494 static int __vlynq_enable_device(struct vlynq_device *dev) __vlynq_enable_device() argument
497 struct plat_vlynq_ops *ops = dev->dev.platform_data; __vlynq_enable_device()
499 result = ops->on(dev); __vlynq_enable_device()
503 switch (dev->divisor) { __vlynq_enable_device()
510 if (vlynq_linked(dev) && readl(&dev->remote->control) & __vlynq_enable_device()
512 if (!__vlynq_try_remote(dev) || __vlynq_enable_device()
513 !__vlynq_try_local(dev) || __vlynq_enable_device()
514 !__vlynq_try_external(dev)) __vlynq_enable_device()
517 if (!__vlynq_try_external(dev) || __vlynq_enable_device()
518 !__vlynq_try_local(dev) || __vlynq_enable_device()
519 !__vlynq_try_remote(dev)) __vlynq_enable_device()
532 VLYNQ_CTRL_CLOCK_DIV(dev->divisor - __vlynq_enable_device()
533 vlynq_ldiv1), &dev->local->control); __vlynq_enable_device()
534 writel(0, &dev->remote->control); __vlynq_enable_device()
535 if (vlynq_linked(dev)) { __vlynq_enable_device()
538 dev_name(&dev->dev), __vlynq_enable_device()
539 dev->divisor - vlynq_ldiv1 + 1); __vlynq_enable_device()
551 writel(0, &dev->local->control); __vlynq_enable_device()
553 VLYNQ_CTRL_CLOCK_DIV(dev->divisor - __vlynq_enable_device()
554 vlynq_rdiv1), &dev->remote->control); __vlynq_enable_device()
555 if (vlynq_linked(dev)) { __vlynq_enable_device()
558 dev_name(&dev->dev), __vlynq_enable_device()
559 dev->divisor - vlynq_rdiv1 + 1); __vlynq_enable_device()
565 ops->off(dev); __vlynq_enable_device()
569 int vlynq_enable_device(struct vlynq_device *dev) vlynq_enable_device() argument
571 struct plat_vlynq_ops *ops = dev->dev.platform_data; vlynq_enable_device()
574 result = __vlynq_enable_device(dev); vlynq_enable_device()
578 result = vlynq_setup_irq(dev); vlynq_enable_device()
580 ops->off(dev); vlynq_enable_device()
582 dev->enabled = !result; vlynq_enable_device()
588 void vlynq_disable_device(struct vlynq_device *dev) vlynq_disable_device() argument
590 struct plat_vlynq_ops *ops = dev->dev.platform_data; vlynq_disable_device()
592 dev->enabled = 0; vlynq_disable_device()
593 free_irq(dev->irq, dev); vlynq_disable_device()
594 ops->off(dev); vlynq_disable_device()
598 int vlynq_set_local_mapping(struct vlynq_device *dev, u32 tx_offset, vlynq_set_local_mapping() argument
603 if (!dev->enabled) vlynq_set_local_mapping()
606 writel(tx_offset, &dev->local->tx_offset); vlynq_set_local_mapping()
608 writel(mapping[i].offset, &dev->local->rx_mapping[i].offset); vlynq_set_local_mapping()
609 writel(mapping[i].size, &dev->local->rx_mapping[i].size); vlynq_set_local_mapping()
615 int vlynq_set_remote_mapping(struct vlynq_device *dev, u32 tx_offset, vlynq_set_remote_mapping() argument
620 if (!dev->enabled) vlynq_set_remote_mapping()
623 writel(tx_offset, &dev->remote->tx_offset); vlynq_set_remote_mapping()
625 writel(mapping[i].offset, &dev->remote->rx_mapping[i].offset); vlynq_set_remote_mapping()
626 writel(mapping[i].size, &dev->remote->rx_mapping[i].size); vlynq_set_remote_mapping()
632 int vlynq_set_local_irq(struct vlynq_device *dev, int virq) vlynq_set_local_irq() argument
634 int irq = dev->irq_start + virq; vlynq_set_local_irq()
635 if (dev->enabled) vlynq_set_local_irq()
638 if ((irq < dev->irq_start) || (irq > dev->irq_end)) vlynq_set_local_irq()
641 if (virq == dev->remote_irq) vlynq_set_local_irq()
644 dev->local_irq = virq; vlynq_set_local_irq()
650 int vlynq_set_remote_irq(struct vlynq_device *dev, int virq) vlynq_set_remote_irq() argument
652 int irq = dev->irq_start + virq; vlynq_set_remote_irq()
653 if (dev->enabled) vlynq_set_remote_irq()
656 if ((irq < dev->irq_start) || (irq > dev->irq_end)) vlynq_set_remote_irq()
659 if (virq == dev->local_irq) vlynq_set_remote_irq()
662 dev->remote_irq = virq; vlynq_set_remote_irq()
670 struct vlynq_device *dev; vlynq_probe() local
686 dev = kzalloc(sizeof(*dev), GFP_KERNEL); vlynq_probe()
687 if (!dev) { vlynq_probe()
693 dev->id = pdev->id; vlynq_probe()
694 dev->dev.bus = &vlynq_bus_type; vlynq_probe()
695 dev->dev.parent = &pdev->dev; vlynq_probe()
696 dev_set_name(&dev->dev, "vlynq%d", dev->id); vlynq_probe()
697 dev->dev.platform_data = pdev->dev.platform_data; vlynq_probe()
698 dev->dev.release = vlynq_device_release; vlynq_probe()
700 dev->regs_start = regs_res->start; vlynq_probe()
701 dev->regs_end = regs_res->end; vlynq_probe()
702 dev->mem_start = mem_res->start; vlynq_probe()
703 dev->mem_end = mem_res->end; vlynq_probe()
706 if (!request_mem_region(regs_res->start, len, dev_name(&dev->dev))) { vlynq_probe()
708 dev_name(&dev->dev)); vlynq_probe()
713 dev->local = ioremap(regs_res->start, len); vlynq_probe()
714 if (!dev->local) { vlynq_probe()
716 dev_name(&dev->dev)); vlynq_probe()
721 dev->remote = (struct vlynq_regs *)((void *)dev->local + vlynq_probe()
724 dev->irq = platform_get_irq_byname(pdev, "irq"); vlynq_probe()
725 dev->irq_start = irq_res->start; vlynq_probe()
726 dev->irq_end = irq_res->end; vlynq_probe()
727 dev->local_irq = dev->irq_end - dev->irq_start; vlynq_probe()
728 dev->remote_irq = dev->local_irq - 1; vlynq_probe()
730 if (device_register(&dev->dev)) vlynq_probe()
732 platform_set_drvdata(pdev, dev); vlynq_probe()
735 dev_name(&dev->dev), (void *)dev->regs_start, dev->irq, vlynq_probe()
736 (void *)dev->mem_start); vlynq_probe()
738 dev->dev_id = 0; vlynq_probe()
739 dev->divisor = vlynq_div_auto; vlynq_probe()
740 result = __vlynq_enable_device(dev); vlynq_probe()
742 dev->dev_id = readl(&dev->remote->chip); vlynq_probe()
743 ((struct plat_vlynq_ops *)(dev->dev.platform_data))->off(dev); vlynq_probe()
745 if (dev->dev_id) vlynq_probe()
746 printk(KERN_INFO "Found a VLYNQ device: %08x\n", dev->dev_id); vlynq_probe()
751 iounmap(dev->local); vlynq_probe()
755 kfree(dev); vlynq_probe()
761 struct vlynq_device *dev = platform_get_drvdata(pdev); vlynq_remove() local
763 device_unregister(&dev->dev); vlynq_remove()
764 iounmap(dev->local); vlynq_remove()
765 release_mem_region(dev->regs_start, vlynq_remove()
766 dev->regs_end - dev->regs_start + 1); vlynq_remove()
768 kfree(dev); vlynq_remove()
/linux-4.4.14/drivers/media/radio/
H A Dradio-cadet.c114 static int cadet_getstereo(struct cadet *dev) cadet_getstereo() argument
118 if (!dev->is_fm_band) /* Only FM has stereo capability! */ cadet_getstereo()
121 outb(7, dev->io); /* Select tuner control */ cadet_getstereo()
122 if ((inb(dev->io + 1) & 0x40) == 0) cadet_getstereo()
127 static unsigned cadet_gettune(struct cadet *dev) cadet_gettune() argument
136 outb(7, dev->io); /* Select tuner control */ cadet_gettune()
137 curvol = inb(dev->io + 1); /* Save current volume/mute setting */ cadet_gettune()
138 outb(0x00, dev->io + 1); /* Ensure WRITE-ENABLE is LOW */ cadet_gettune()
139 dev->tunestat = 0xffff; cadet_gettune()
145 fifo = (fifo << 1) | ((inb(dev->io + 1) >> 7) & 0x01); cadet_gettune()
147 outb(0x01, dev->io + 1); cadet_gettune()
148 dev->tunestat &= inb(dev->io + 1); cadet_gettune()
149 outb(0x00, dev->io + 1); cadet_gettune()
156 outb(curvol, dev->io + 1); cadet_gettune()
160 static unsigned cadet_getfreq(struct cadet *dev) cadet_getfreq() argument
168 fifo = cadet_gettune(dev); cadet_getfreq()
173 if (!dev->is_fm_band) /* AM */ cadet_getfreq()
188 static void cadet_settune(struct cadet *dev, unsigned fifo) cadet_settune() argument
193 outb(7, dev->io); /* Select tuner control */ cadet_settune()
200 outb(7, dev->io); /* Select tuner control */ cadet_settune()
201 outb(test, dev->io + 1); /* Initialize for write */ cadet_settune()
204 outb(test, dev->io + 1); cadet_settune()
206 outb(test, dev->io + 1); cadet_settune()
209 outb(test, dev->io + 1); cadet_settune()
213 static void cadet_setfreq(struct cadet *dev, unsigned freq) cadet_setfreq() argument
219 freq = clamp(freq, bands[dev->is_fm_band].rangelow, cadet_setfreq()
220 bands[dev->is_fm_band].rangehigh); cadet_setfreq()
221 dev->curfreq = freq; cadet_setfreq()
226 if (dev->is_fm_band) { /* FM */ cadet_setfreq()
247 outb(7, dev->io); /* Select tuner control */ cadet_setfreq()
248 curvol = inb(dev->io + 1); cadet_setfreq()
254 cadet_settune(dev, fifo | (j << 16)); cadet_setfreq()
256 outb(7, dev->io); /* Select tuner control */ cadet_setfreq()
257 outb(curvol, dev->io + 1); cadet_setfreq()
261 cadet_gettune(dev); cadet_setfreq()
262 if ((dev->tunestat & 0x40) == 0) { /* Tuned */ cadet_setfreq()
263 dev->sigstrength = sigtable[dev->is_fm_band][j]; cadet_setfreq()
267 dev->sigstrength = 0; cadet_setfreq()
269 outb(3, dev->io); cadet_setfreq()
270 outb(inb(dev->io + 1) & 0x7f, dev->io + 1); cadet_setfreq()
273 static bool cadet_has_rds_data(struct cadet *dev) cadet_has_rds_data() argument
277 mutex_lock(&dev->lock); cadet_has_rds_data()
278 result = dev->rdsin != dev->rdsout; cadet_has_rds_data()
279 mutex_unlock(&dev->lock); cadet_has_rds_data()
286 struct cadet *dev = (void *)data; cadet_handler() local
289 if (mutex_trylock(&dev->lock)) { cadet_handler()
290 outb(0x3, dev->io); /* Select RDS Decoder Control */ cadet_handler()
291 if ((inb(dev->io + 1) & 0x20) != 0) cadet_handler()
293 outb(0x80, dev->io); /* Select RDS fifo */ cadet_handler()
295 while ((inb(dev->io) & 0x80) != 0) { cadet_handler()
296 dev->rdsbuf[dev->rdsin] = inb(dev->io + 1); cadet_handler()
297 if (dev->rdsin + 1 != dev->rdsout) cadet_handler()
298 dev->rdsin++; cadet_handler()
300 mutex_unlock(&dev->lock); cadet_handler()
306 if (cadet_has_rds_data(dev)) cadet_handler()
307 wake_up_interruptible(&dev->read_queue); cadet_handler()
312 init_timer(&dev->readtimer); cadet_handler()
313 dev->readtimer.function = cadet_handler; cadet_handler()
314 dev->readtimer.data = data; cadet_handler()
315 dev->readtimer.expires = jiffies + msecs_to_jiffies(50); cadet_handler()
316 add_timer(&dev->readtimer); cadet_handler()
319 static void cadet_start_rds(struct cadet *dev) cadet_start_rds() argument
321 dev->rdsstat = 1; cadet_start_rds()
322 outb(0x80, dev->io); /* Select RDS fifo */ cadet_start_rds()
323 init_timer(&dev->readtimer); cadet_start_rds()
324 dev->readtimer.function = cadet_handler; cadet_start_rds()
325 dev->readtimer.data = (unsigned long)dev; cadet_start_rds()
326 dev->readtimer.expires = jiffies + msecs_to_jiffies(50); cadet_start_rds()
327 add_timer(&dev->readtimer); cadet_start_rds()
332 struct cadet *dev = video_drvdata(file); cadet_read() local
336 mutex_lock(&dev->lock); cadet_read()
337 if (dev->rdsstat == 0) cadet_read()
338 cadet_start_rds(dev); cadet_read()
339 mutex_unlock(&dev->lock); cadet_read()
341 if (!cadet_has_rds_data(dev) && (file->f_flags & O_NONBLOCK)) cadet_read()
343 i = wait_event_interruptible(dev->read_queue, cadet_has_rds_data(dev)); cadet_read()
347 mutex_lock(&dev->lock); cadet_read()
348 while (i < count && dev->rdsin != dev->rdsout) cadet_read()
349 readbuf[i++] = dev->rdsbuf[dev->rdsout++]; cadet_read()
350 mutex_unlock(&dev->lock); cadet_read()
373 struct cadet *dev = video_drvdata(file); vidioc_g_tuner() local
382 if (dev->is_fm_band) { vidioc_g_tuner()
383 v->rxsubchans = cadet_getstereo(dev); vidioc_g_tuner()
384 outb(3, dev->io); vidioc_g_tuner()
385 outb(inb(dev->io + 1) & 0x7f, dev->io + 1); vidioc_g_tuner()
387 outb(3, dev->io); vidioc_g_tuner()
388 if (inb(dev->io + 1) & 0x80) vidioc_g_tuner()
396 v->signal = dev->sigstrength; /* We might need to modify scaling of this */ vidioc_g_tuner()
420 struct cadet *dev = video_drvdata(file); vidioc_g_frequency() local
425 f->frequency = dev->curfreq; vidioc_g_frequency()
433 struct cadet *dev = video_drvdata(file); vidioc_s_frequency() local
437 dev->is_fm_band = vidioc_s_frequency()
439 cadet_setfreq(dev, f->frequency); vidioc_s_frequency()
445 struct cadet *dev = container_of(ctrl->handler, struct cadet, ctrl_handler); cadet_s_ctrl() local
449 outb(7, dev->io); /* Select tuner control */ cadet_s_ctrl()
451 outb(0x00, dev->io + 1); cadet_s_ctrl()
453 outb(0x20, dev->io + 1); cadet_s_ctrl()
461 struct cadet *dev = video_drvdata(file); cadet_open() local
464 mutex_lock(&dev->lock); cadet_open()
469 init_waitqueue_head(&dev->read_queue); cadet_open()
471 mutex_unlock(&dev->lock); cadet_open()
477 struct cadet *dev = video_drvdata(file); cadet_release() local
479 mutex_lock(&dev->lock); cadet_release()
480 if (v4l2_fh_is_singular_file(file) && dev->rdsstat) { cadet_release()
481 del_timer_sync(&dev->readtimer); cadet_release()
482 dev->rdsstat = 0; cadet_release()
485 mutex_unlock(&dev->lock); cadet_release()
491 struct cadet *dev = video_drvdata(file); cadet_poll() local
495 poll_wait(file, &dev->read_queue, wait); cadet_poll()
496 if (dev->rdsstat == 0 && (req_events & (POLLIN | POLLRDNORM))) { cadet_poll()
497 mutex_lock(&dev->lock); cadet_poll()
498 if (dev->rdsstat == 0) cadet_poll()
499 cadet_start_rds(dev); cadet_poll()
500 mutex_unlock(&dev->lock); cadet_poll()
502 if (cadet_has_rds_data(dev)) cadet_poll()
543 static int cadet_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) cadet_pnp_probe() argument
545 if (!dev) cadet_pnp_probe()
551 if (!pnp_port_valid(dev, 0)) cadet_pnp_probe()
554 io = pnp_port_start(dev, 0); cadet_pnp_probe()
572 static void cadet_probe(struct cadet *dev) cadet_probe() argument
578 dev->io = iovals[i]; cadet_probe()
579 if (request_region(dev->io, 2, "cadet-probe")) { cadet_probe()
580 cadet_setfreq(dev, bands[1].rangelow); cadet_probe()
581 if (cadet_getfreq(dev) == bands[1].rangelow) { cadet_probe()
582 release_region(dev->io, 2); cadet_probe()
585 release_region(dev->io, 2); cadet_probe()
588 dev->io = -1; cadet_probe()
598 struct cadet *dev = &cadet_card; cadet_init() local
599 struct v4l2_device *v4l2_dev = &dev->v4l2_dev; cadet_init()
604 mutex_init(&dev->lock); cadet_init()
609 dev->io = io; cadet_init()
612 if (dev->io < 0) cadet_init()
613 cadet_probe(dev); cadet_init()
616 if (dev->io < 0) { cadet_init()
623 if (!request_region(dev->io, 2, "cadet")) cadet_init()
628 release_region(dev->io, 2); cadet_init()
633 hdl = &dev->ctrl_handler; cadet_init()
644 dev->is_fm_band = true; cadet_init()
645 dev->curfreq = bands[dev->is_fm_band].rangelow; cadet_init()
646 cadet_setfreq(dev, dev->curfreq); cadet_init()
647 strlcpy(dev->vdev.name, v4l2_dev->name, sizeof(dev->vdev.name)); cadet_init()
648 dev->vdev.v4l2_dev = v4l2_dev; cadet_init()
649 dev->vdev.fops = &cadet_fops; cadet_init()
650 dev->vdev.ioctl_ops = &cadet_ioctl_ops; cadet_init()
651 dev->vdev.release = video_device_release_empty; cadet_init()
652 dev->vdev.lock = &dev->lock; cadet_init()
653 video_set_drvdata(&dev->vdev, dev); cadet_init()
655 res = video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr); cadet_init()
658 v4l2_info(v4l2_dev, "ADS Cadet Radio Card at 0x%x\n", dev->io); cadet_init()
663 release_region(dev->io, 2); cadet_init()
671 struct cadet *dev = &cadet_card; cadet_exit() local
673 video_unregister_device(&dev->vdev); cadet_exit()
674 v4l2_ctrl_handler_free(&dev->ctrl_handler); cadet_exit()
675 v4l2_device_unregister(&dev->v4l2_dev); cadet_exit()
676 outb(7, dev->io); /* Mute */ cadet_exit()
677 outb(0x00, dev->io + 1); cadet_exit()
678 release_region(dev->io, 2); cadet_exit()
/linux-4.4.14/drivers/net/ethernet/ibm/emac/
H A Dcore.c127 static inline void emac_report_timeout_error(struct emac_instance *dev, emac_report_timeout_error() argument
130 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX | emac_report_timeout_error()
133 DBG(dev, "%s" NL, error); emac_report_timeout_error()
135 printk(KERN_ERR "%s: %s\n", dev->ofdev->dev.of_node->full_name, emac_report_timeout_error()
143 static inline void emac_rx_clk_tx(struct emac_instance *dev) emac_rx_clk_tx() argument
146 if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX)) emac_rx_clk_tx()
148 0, SDR0_MFR_ECS >> dev->cell_index); emac_rx_clk_tx()
152 static inline void emac_rx_clk_default(struct emac_instance *dev) emac_rx_clk_default() argument
155 if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX)) emac_rx_clk_default()
157 SDR0_MFR_ECS >> dev->cell_index, 0); emac_rx_clk_default()
197 static void emac_clean_tx_ring(struct emac_instance *dev);
198 static void __emac_set_multicast_list(struct emac_instance *dev);
216 static inline void emac_tx_enable(struct emac_instance *dev) emac_tx_enable() argument
218 struct emac_regs __iomem *p = dev->emacp; emac_tx_enable()
221 DBG(dev, "tx_enable" NL); emac_tx_enable()
228 static void emac_tx_disable(struct emac_instance *dev) emac_tx_disable() argument
230 struct emac_regs __iomem *p = dev->emacp; emac_tx_disable()
233 DBG(dev, "tx_disable" NL); emac_tx_disable()
237 int n = dev->stop_timeout; emac_tx_disable()
244 emac_report_timeout_error(dev, "TX disable timeout"); emac_tx_disable()
248 static void emac_rx_enable(struct emac_instance *dev) emac_rx_enable() argument
250 struct emac_regs __iomem *p = dev->emacp; emac_rx_enable()
253 if (unlikely(test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags))) emac_rx_enable()
256 DBG(dev, "rx_enable" NL); emac_rx_enable()
262 int n = dev->stop_timeout; emac_rx_enable()
268 emac_report_timeout_error(dev, emac_rx_enable()
277 static void emac_rx_disable(struct emac_instance *dev) emac_rx_disable() argument
279 struct emac_regs __iomem *p = dev->emacp; emac_rx_disable()
282 DBG(dev, "rx_disable" NL); emac_rx_disable()
286 int n = dev->stop_timeout; emac_rx_disable()
293 emac_report_timeout_error(dev, "RX disable timeout"); emac_rx_disable()
297 static inline void emac_netif_stop(struct emac_instance *dev) emac_netif_stop() argument
299 netif_tx_lock_bh(dev->ndev); emac_netif_stop()
300 netif_addr_lock(dev->ndev); emac_netif_stop()
301 dev->no_mcast = 1; emac_netif_stop()
302 netif_addr_unlock(dev->ndev); emac_netif_stop()
303 netif_tx_unlock_bh(dev->ndev); emac_netif_stop()
304 dev->ndev->trans_start = jiffies; /* prevent tx timeout */ emac_netif_stop()
305 mal_poll_disable(dev->mal, &dev->commac); emac_netif_stop()
306 netif_tx_disable(dev->ndev); emac_netif_stop()
309 static inline void emac_netif_start(struct emac_instance *dev) emac_netif_start() argument
311 netif_tx_lock_bh(dev->ndev); emac_netif_start()
312 netif_addr_lock(dev->ndev); emac_netif_start()
313 dev->no_mcast = 0; emac_netif_start()
314 if (dev->mcast_pending && netif_running(dev->ndev)) emac_netif_start()
315 __emac_set_multicast_list(dev); emac_netif_start()
316 netif_addr_unlock(dev->ndev); emac_netif_start()
317 netif_tx_unlock_bh(dev->ndev); emac_netif_start()
319 netif_wake_queue(dev->ndev); emac_netif_start()
326 mal_poll_enable(dev->mal, &dev->commac); emac_netif_start()
329 static inline void emac_rx_disable_async(struct emac_instance *dev) emac_rx_disable_async() argument
331 struct emac_regs __iomem *p = dev->emacp; emac_rx_disable_async()
334 DBG(dev, "rx_disable_async" NL); emac_rx_disable_async()
341 static int emac_reset(struct emac_instance *dev) emac_reset() argument
343 struct emac_regs __iomem *p = dev->emacp; emac_reset()
346 DBG(dev, "reset" NL); emac_reset()
348 if (!dev->reset_failed) { emac_reset()
352 emac_rx_disable(dev); emac_reset()
353 emac_tx_disable(dev); emac_reset()
365 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) { emac_reset()
366 if (dev->phy_address == 0xffffffff && emac_reset()
367 dev->phy_map == 0xffffffff) { emac_reset()
370 0, SDR0_ETH_CFG_ECS << dev->cell_index); emac_reset()
374 SDR0_ETH_CFG_ECS << dev->cell_index, 0); emac_reset()
384 if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX)) { emac_reset()
385 if (dev->phy_address == 0xffffffff && emac_reset()
386 dev->phy_map == 0xffffffff) { emac_reset()
389 SDR0_ETH_CFG_ECS << dev->cell_index, 0); emac_reset()
395 dev->reset_failed = 0; emac_reset()
398 emac_report_timeout_error(dev, "reset timeout"); emac_reset()
399 dev->reset_failed = 1; emac_reset()
404 static void emac_hash_mc(struct emac_instance *dev) emac_hash_mc() argument
406 const int regs = EMAC_XAHT_REGS(dev); emac_hash_mc()
407 u32 *gaht_base = emac_gaht_base(dev); emac_hash_mc()
412 DBG(dev, "hash_mc %d" NL, netdev_mc_count(dev->ndev)); emac_hash_mc()
416 netdev_for_each_mc_addr(ha, dev->ndev) { emac_hash_mc()
418 DBG2(dev, "mc %pM" NL, ha->addr); emac_hash_mc()
420 slot = EMAC_XAHT_CRC_TO_SLOT(dev, emac_hash_mc()
422 reg = EMAC_XAHT_SLOT_TO_REG(dev, slot); emac_hash_mc()
423 mask = EMAC_XAHT_SLOT_TO_MASK(dev, slot); emac_hash_mc()
434 struct emac_instance *dev = netdev_priv(ndev); emac_iff2rmr() local
439 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_iff2rmr()
447 (netdev_mc_count(ndev) > EMAC_XAHT_SLOTS(dev))) emac_iff2rmr()
452 if (emac_has_feature(dev, EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE)) { emac_iff2rmr()
460 static u32 __emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size) __emac_calc_base_mr1() argument
464 DBG2(dev, "__emac_calc_base_mr1" NL); __emac_calc_base_mr1()
472 dev->ndev->name, tx_size); __emac_calc_base_mr1()
484 dev->ndev->name, rx_size); __emac_calc_base_mr1()
490 static u32 __emac4_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size) __emac4_calc_base_mr1() argument
493 EMAC4_MR1_OBCI(dev->opb_bus_freq / 1000000); __emac4_calc_base_mr1()
495 DBG2(dev, "__emac4_calc_base_mr1" NL); __emac4_calc_base_mr1()
509 dev->ndev->name, tx_size); __emac4_calc_base_mr1()
524 dev->ndev->name, rx_size); __emac4_calc_base_mr1()
530 static u32 emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size) emac_calc_base_mr1() argument
532 return emac_has_feature(dev, EMAC_FTR_EMAC4) ? emac_calc_base_mr1()
533 __emac4_calc_base_mr1(dev, tx_size, rx_size) : emac_calc_base_mr1()
534 __emac_calc_base_mr1(dev, tx_size, rx_size); emac_calc_base_mr1()
537 static inline u32 emac_calc_trtr(struct emac_instance *dev, unsigned int size) emac_calc_trtr() argument
539 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_calc_trtr()
545 static inline u32 emac_calc_rwmr(struct emac_instance *dev, emac_calc_rwmr() argument
548 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_calc_rwmr()
554 static int emac_configure(struct emac_instance *dev) emac_configure() argument
556 struct emac_regs __iomem *p = dev->emacp; emac_configure()
557 struct net_device *ndev = dev->ndev; emac_configure()
558 int tx_size, rx_size, link = netif_carrier_ok(dev->ndev); emac_configure()
561 DBG(dev, "configure" NL); emac_configure()
567 } else if (emac_reset(dev) < 0) emac_configure()
570 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) emac_configure()
571 tah_reset(dev->tah_dev); emac_configure()
573 DBG(dev, " link = %d duplex = %d, pause = %d, asym_pause = %d\n", emac_configure()
574 link, dev->phy.duplex, dev->phy.pause, dev->phy.asym_pause); emac_configure()
577 tx_size = dev->tx_fifo_size; emac_configure()
578 rx_size = dev->rx_fifo_size; emac_configure()
585 else if (dev->phy.duplex == DUPLEX_FULL) emac_configure()
589 dev->stop_timeout = STOP_TIMEOUT_10; emac_configure()
590 switch (dev->phy.speed) { emac_configure()
592 if (emac_phy_gpcs(dev->phy.mode)) { emac_configure()
594 (dev->phy.gpcs_address != 0xffffffff) ? emac_configure()
595 dev->phy.gpcs_address : dev->phy.address); emac_configure()
605 tx_size = dev->tx_fifo_size_gige; emac_configure()
606 rx_size = dev->rx_fifo_size_gige; emac_configure()
608 if (dev->ndev->mtu > ETH_DATA_LEN) { emac_configure()
609 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_configure()
613 dev->stop_timeout = STOP_TIMEOUT_1000_JUMBO; emac_configure()
615 dev->stop_timeout = STOP_TIMEOUT_1000; emac_configure()
619 dev->stop_timeout = STOP_TIMEOUT_100; emac_configure()
625 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) emac_configure()
626 rgmii_set_speed(dev->rgmii_dev, dev->rgmii_port, emac_configure()
627 dev->phy.speed); emac_configure()
628 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) emac_configure()
629 zmii_set_speed(dev->zmii_dev, dev->zmii_port, dev->phy.speed); emac_configure()
634 if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x) && emac_configure()
635 dev->phy.duplex == DUPLEX_FULL) { emac_configure()
636 if (dev->phy.pause) emac_configure()
638 else if (dev->phy.asym_pause) emac_configure()
643 mr1 |= emac_calc_base_mr1(dev, tx_size, rx_size); emac_configure()
658 emac_hash_mc(dev); emac_configure()
662 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_configure()
663 r = EMAC4_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1, emac_configure()
664 tx_size / 2 / dev->fifo_entry_size); emac_configure()
666 r = EMAC_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1, emac_configure()
667 tx_size / 2 / dev->fifo_entry_size); emac_configure()
669 out_be32(&p->trtr, emac_calc_trtr(dev, tx_size / 2)); emac_configure()
690 r = emac_calc_rwmr(dev, rx_size / 8 / dev->fifo_entry_size, emac_configure()
691 rx_size / 4 / dev->fifo_entry_size); emac_configure()
701 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_configure()
707 if (emac_phy_gpcs(dev->phy.mode)) { emac_configure()
708 if (dev->phy.gpcs_address != 0xffffffff) emac_configure()
709 emac_mii_reset_gpcs(&dev->phy); emac_configure()
711 emac_mii_reset_phy(&dev->phy); emac_configure()
717 static void emac_reinitialize(struct emac_instance *dev) emac_reinitialize() argument
719 DBG(dev, "reinitialize" NL); emac_reinitialize()
721 emac_netif_stop(dev); emac_reinitialize()
722 if (!emac_configure(dev)) { emac_reinitialize()
723 emac_tx_enable(dev); emac_reinitialize()
724 emac_rx_enable(dev); emac_reinitialize()
726 emac_netif_start(dev); emac_reinitialize()
729 static void emac_full_tx_reset(struct emac_instance *dev) emac_full_tx_reset() argument
731 DBG(dev, "full_tx_reset" NL); emac_full_tx_reset()
733 emac_tx_disable(dev); emac_full_tx_reset()
734 mal_disable_tx_channel(dev->mal, dev->mal_tx_chan); emac_full_tx_reset()
735 emac_clean_tx_ring(dev); emac_full_tx_reset()
736 dev->tx_cnt = dev->tx_slot = dev->ack_slot = 0; emac_full_tx_reset()
738 emac_configure(dev); emac_full_tx_reset()
740 mal_enable_tx_channel(dev->mal, dev->mal_tx_chan); emac_full_tx_reset()
741 emac_tx_enable(dev); emac_full_tx_reset()
742 emac_rx_enable(dev); emac_full_tx_reset()
747 struct emac_instance *dev = container_of(work, struct emac_instance, reset_work); emac_reset_work() local
749 DBG(dev, "reset_work" NL); emac_reset_work()
751 mutex_lock(&dev->link_lock); emac_reset_work()
752 if (dev->opened) { emac_reset_work()
753 emac_netif_stop(dev); emac_reset_work()
754 emac_full_tx_reset(dev); emac_reset_work()
755 emac_netif_start(dev); emac_reset_work()
757 mutex_unlock(&dev->link_lock); emac_reset_work()
762 struct emac_instance *dev = netdev_priv(ndev); emac_tx_timeout() local
764 DBG(dev, "tx_timeout" NL); emac_tx_timeout()
766 schedule_work(&dev->reset_work); emac_tx_timeout()
770 static inline int emac_phy_done(struct emac_instance *dev, u32 stacr) emac_phy_done() argument
774 if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT)) emac_phy_done()
780 static int __emac_mdio_read(struct emac_instance *dev, u8 id, u8 reg) __emac_mdio_read() argument
782 struct emac_regs __iomem *p = dev->emacp; __emac_mdio_read()
786 mutex_lock(&dev->mdio_lock); __emac_mdio_read()
788 DBG2(dev, "mdio_read(%02x,%02x)" NL, id, reg); __emac_mdio_read()
791 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) __emac_mdio_read()
792 zmii_get_mdio(dev->zmii_dev, dev->zmii_port); __emac_mdio_read()
793 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) __emac_mdio_read()
794 rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port); __emac_mdio_read()
798 while (!emac_phy_done(dev, in_be32(&p->stacr))) { __emac_mdio_read()
801 DBG2(dev, " -> timeout wait idle\n"); __emac_mdio_read()
807 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) __emac_mdio_read()
808 r = EMAC4_STACR_BASE(dev->opb_bus_freq); __emac_mdio_read()
810 r = EMAC_STACR_BASE(dev->opb_bus_freq); __emac_mdio_read()
811 if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT)) __emac_mdio_read()
813 if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR)) __emac_mdio_read()
823 while (!emac_phy_done(dev, (r = in_be32(&p->stacr)))) { __emac_mdio_read()
826 DBG2(dev, " -> timeout wait complete\n"); __emac_mdio_read()
832 DBG(dev, "mdio_read(%02x, %02x) failed" NL, id, reg); __emac_mdio_read()
839 DBG2(dev, "mdio_read -> %04x" NL, r); __emac_mdio_read()
842 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) __emac_mdio_read()
843 rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port); __emac_mdio_read()
844 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) __emac_mdio_read()
845 zmii_put_mdio(dev->zmii_dev, dev->zmii_port); __emac_mdio_read()
846 mutex_unlock(&dev->mdio_lock); __emac_mdio_read()
851 static void __emac_mdio_write(struct emac_instance *dev, u8 id, u8 reg, __emac_mdio_write() argument
854 struct emac_regs __iomem *p = dev->emacp; __emac_mdio_write()
858 mutex_lock(&dev->mdio_lock); __emac_mdio_write()
860 DBG2(dev, "mdio_write(%02x,%02x,%04x)" NL, id, reg, val); __emac_mdio_write()
863 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) __emac_mdio_write()
864 zmii_get_mdio(dev->zmii_dev, dev->zmii_port); __emac_mdio_write()
865 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) __emac_mdio_write()
866 rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port); __emac_mdio_write()
870 while (!emac_phy_done(dev, in_be32(&p->stacr))) { __emac_mdio_write()
873 DBG2(dev, " -> timeout wait idle\n"); __emac_mdio_write()
879 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) __emac_mdio_write()
880 r = EMAC4_STACR_BASE(dev->opb_bus_freq); __emac_mdio_write()
882 r = EMAC_STACR_BASE(dev->opb_bus_freq); __emac_mdio_write()
883 if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT)) __emac_mdio_write()
885 if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR)) __emac_mdio_write()
896 while (!emac_phy_done(dev, in_be32(&p->stacr))) { __emac_mdio_write()
899 DBG2(dev, " -> timeout wait complete\n"); __emac_mdio_write()
905 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) __emac_mdio_write()
906 rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port); __emac_mdio_write()
907 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) __emac_mdio_write()
908 zmii_put_mdio(dev->zmii_dev, dev->zmii_port); __emac_mdio_write()
909 mutex_unlock(&dev->mdio_lock); __emac_mdio_write()
914 struct emac_instance *dev = netdev_priv(ndev); emac_mdio_read() local
917 res = __emac_mdio_read((dev->mdio_instance && emac_mdio_read()
918 dev->phy.gpcs_address != id) ? emac_mdio_read()
919 dev->mdio_instance : dev, emac_mdio_read()
926 struct emac_instance *dev = netdev_priv(ndev); emac_mdio_write() local
928 __emac_mdio_write((dev->mdio_instance && emac_mdio_write()
929 dev->phy.gpcs_address != id) ? emac_mdio_write()
930 dev->mdio_instance : dev, emac_mdio_write()
935 static void __emac_set_multicast_list(struct emac_instance *dev) __emac_set_multicast_list() argument
937 struct emac_regs __iomem *p = dev->emacp; __emac_set_multicast_list()
938 u32 rmr = emac_iff2rmr(dev->ndev); __emac_set_multicast_list()
940 DBG(dev, "__multicast %08x" NL, rmr); __emac_set_multicast_list()
959 dev->mcast_pending = 0; __emac_set_multicast_list()
960 emac_rx_disable(dev); __emac_set_multicast_list()
962 emac_hash_mc(dev); __emac_set_multicast_list()
964 emac_rx_enable(dev); __emac_set_multicast_list()
970 struct emac_instance *dev = netdev_priv(ndev); emac_set_multicast_list() local
972 DBG(dev, "multicast" NL); emac_set_multicast_list()
974 BUG_ON(!netif_running(dev->ndev)); emac_set_multicast_list()
976 if (dev->no_mcast) { emac_set_multicast_list()
977 dev->mcast_pending = 1; emac_set_multicast_list()
980 __emac_set_multicast_list(dev); emac_set_multicast_list()
983 static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu) emac_resize_rx_ring() argument
990 mutex_lock(&dev->link_lock); emac_resize_rx_ring()
991 emac_netif_stop(dev); emac_resize_rx_ring()
992 emac_rx_disable(dev); emac_resize_rx_ring()
993 mal_disable_rx_channel(dev->mal, dev->mal_rx_chan); emac_resize_rx_ring()
995 if (dev->rx_sg_skb) { emac_resize_rx_ring()
996 ++dev->estats.rx_dropped_resize; emac_resize_rx_ring()
997 dev_kfree_skb(dev->rx_sg_skb); emac_resize_rx_ring()
998 dev->rx_sg_skb = NULL; emac_resize_rx_ring()
1006 if (dev->rx_desc[i].ctrl & MAL_RX_CTRL_FIRST) emac_resize_rx_ring()
1007 ++dev->estats.rx_dropped_resize; emac_resize_rx_ring()
1009 dev->rx_desc[i].data_len = 0; emac_resize_rx_ring()
1010 dev->rx_desc[i].ctrl = MAL_RX_CTRL_EMPTY | emac_resize_rx_ring()
1015 if (rx_skb_size <= dev->rx_skb_size) emac_resize_rx_ring()
1026 BUG_ON(!dev->rx_skb[i]); emac_resize_rx_ring()
1027 dev_kfree_skb(dev->rx_skb[i]); emac_resize_rx_ring()
1030 dev->rx_desc[i].data_ptr = emac_resize_rx_ring()
1031 dma_map_single(&dev->ofdev->dev, skb->data - 2, rx_sync_size, emac_resize_rx_ring()
1033 dev->rx_skb[i] = skb; emac_resize_rx_ring()
1037 if (emac_has_feature(dev, EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE)) { emac_resize_rx_ring()
1039 (dev->ndev->mtu > ETH_DATA_LEN); emac_resize_rx_ring()
1042 (dev->ndev->mtu > ETH_DATA_LEN); emac_resize_rx_ring()
1047 set_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags); emac_resize_rx_ring()
1049 dev->ndev->mtu = new_mtu; emac_resize_rx_ring()
1050 emac_full_tx_reset(dev); emac_resize_rx_ring()
1053 mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(new_mtu)); emac_resize_rx_ring()
1056 clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags); emac_resize_rx_ring()
1057 dev->rx_slot = 0; emac_resize_rx_ring()
1058 mal_enable_rx_channel(dev->mal, dev->mal_rx_chan); emac_resize_rx_ring()
1059 emac_rx_enable(dev); emac_resize_rx_ring()
1060 emac_netif_start(dev); emac_resize_rx_ring()
1061 mutex_unlock(&dev->link_lock); emac_resize_rx_ring()
1069 struct emac_instance *dev = netdev_priv(ndev); emac_change_mtu() local
1072 if (new_mtu < EMAC_MIN_MTU || new_mtu > dev->max_mtu) emac_change_mtu()
1075 DBG(dev, "change_mtu(%d)" NL, new_mtu); emac_change_mtu()
1080 ret = emac_resize_rx_ring(dev, new_mtu); emac_change_mtu()
1085 dev->rx_skb_size = emac_rx_skb_size(new_mtu); emac_change_mtu()
1086 dev->rx_sync_size = emac_rx_sync_size(new_mtu); emac_change_mtu()
1092 static void emac_clean_tx_ring(struct emac_instance *dev) emac_clean_tx_ring() argument
1097 if (dev->tx_skb[i]) { emac_clean_tx_ring()
1098 dev_kfree_skb(dev->tx_skb[i]); emac_clean_tx_ring()
1099 dev->tx_skb[i] = NULL; emac_clean_tx_ring()
1100 if (dev->tx_desc[i].ctrl & MAL_TX_CTRL_READY) emac_clean_tx_ring()
1101 ++dev->estats.tx_dropped; emac_clean_tx_ring()
1103 dev->tx_desc[i].ctrl = 0; emac_clean_tx_ring()
1104 dev->tx_desc[i].data_ptr = 0; emac_clean_tx_ring()
1108 static void emac_clean_rx_ring(struct emac_instance *dev) emac_clean_rx_ring() argument
1113 if (dev->rx_skb[i]) { emac_clean_rx_ring()
1114 dev->rx_desc[i].ctrl = 0; emac_clean_rx_ring()
1115 dev_kfree_skb(dev->rx_skb[i]); emac_clean_rx_ring()
1116 dev->rx_skb[i] = NULL; emac_clean_rx_ring()
1117 dev->rx_desc[i].data_ptr = 0; emac_clean_rx_ring()
1120 if (dev->rx_sg_skb) { emac_clean_rx_ring()
1121 dev_kfree_skb(dev->rx_sg_skb); emac_clean_rx_ring()
1122 dev->rx_sg_skb = NULL; emac_clean_rx_ring()
1126 static inline int emac_alloc_rx_skb(struct emac_instance *dev, int slot, emac_alloc_rx_skb() argument
1129 struct sk_buff *skb = alloc_skb(dev->rx_skb_size, flags); emac_alloc_rx_skb()
1133 dev->rx_skb[slot] = skb; emac_alloc_rx_skb()
1134 dev->rx_desc[slot].data_len = 0; emac_alloc_rx_skb()
1137 dev->rx_desc[slot].data_ptr = emac_alloc_rx_skb()
1138 dma_map_single(&dev->ofdev->dev, skb->data - 2, dev->rx_sync_size, emac_alloc_rx_skb()
1141 dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY | emac_alloc_rx_skb()
1147 static void emac_print_link_status(struct emac_instance *dev) emac_print_link_status() argument
1149 if (netif_carrier_ok(dev->ndev)) emac_print_link_status()
1151 dev->ndev->name, dev->phy.speed, emac_print_link_status()
1152 dev->phy.duplex == DUPLEX_FULL ? "FDX" : "HDX", emac_print_link_status()
1153 dev->phy.pause ? ", pause enabled" : emac_print_link_status()
1154 dev->phy.asym_pause ? ", asymmetric pause enabled" : ""); emac_print_link_status()
1156 printk(KERN_INFO "%s: link is down\n", dev->ndev->name); emac_print_link_status()
1162 struct emac_instance *dev = netdev_priv(ndev); emac_open() local
1165 DBG(dev, "open" NL); emac_open()
1168 err = request_irq(dev->emac_irq, emac_irq, 0, "EMAC", dev); emac_open()
1171 ndev->name, dev->emac_irq); emac_open()
1177 if (emac_alloc_rx_skb(dev, i, GFP_KERNEL)) { emac_open()
1183 dev->tx_cnt = dev->tx_slot = dev->ack_slot = dev->rx_slot = 0; emac_open()
1184 clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags); emac_open()
1185 dev->rx_sg_skb = NULL; emac_open()
1187 mutex_lock(&dev->link_lock); emac_open()
1188 dev->opened = 1; emac_open()
1192 if (dev->phy.address >= 0) { emac_open()
1194 if (dev->phy.def->ops->poll_link(&dev->phy)) { emac_open()
1195 dev->phy.def->ops->read_link(&dev->phy); emac_open()
1196 emac_rx_clk_default(dev); emac_open()
1197 netif_carrier_on(dev->ndev); emac_open()
1200 emac_rx_clk_tx(dev); emac_open()
1201 netif_carrier_off(dev->ndev); emac_open()
1204 dev->link_polling = 1; emac_open()
1206 schedule_delayed_work(&dev->link_work, link_poll_interval); emac_open()
1207 emac_print_link_status(dev); emac_open()
1209 netif_carrier_on(dev->ndev); emac_open()
1214 emac_configure(dev); emac_open()
1215 mal_poll_add(dev->mal, &dev->commac); emac_open()
1216 mal_enable_tx_channel(dev->mal, dev->mal_tx_chan); emac_open()
1217 mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(ndev->mtu)); emac_open()
1218 mal_enable_rx_channel(dev->mal, dev->mal_rx_chan); emac_open()
1219 emac_tx_enable(dev); emac_open()
1220 emac_rx_enable(dev); emac_open()
1221 emac_netif_start(dev); emac_open()
1223 mutex_unlock(&dev->link_lock); emac_open()
1227 emac_clean_rx_ring(dev); emac_open()
1228 free_irq(dev->emac_irq, dev); emac_open()
1235 static int emac_link_differs(struct emac_instance *dev)
1237 u32 r = in_be32(&dev->emacp->mr1);
1261 return speed != dev->phy.speed || duplex != dev->phy.duplex ||
1262 pause != dev->phy.pause || asym_pause != dev->phy.asym_pause;
1268 struct emac_instance *dev = emac_link_timer() local
1273 mutex_lock(&dev->link_lock); emac_link_timer()
1274 DBG2(dev, "link timer" NL); emac_link_timer()
1276 if (!dev->opened) emac_link_timer()
1279 if (dev->phy.def->ops->poll_link(&dev->phy)) { emac_link_timer()
1280 if (!netif_carrier_ok(dev->ndev)) { emac_link_timer()
1281 emac_rx_clk_default(dev); emac_link_timer()
1283 dev->phy.def->ops->read_link(&dev->phy); emac_link_timer()
1285 netif_carrier_on(dev->ndev); emac_link_timer()
1286 emac_netif_stop(dev); emac_link_timer()
1287 emac_full_tx_reset(dev); emac_link_timer()
1288 emac_netif_start(dev); emac_link_timer()
1289 emac_print_link_status(dev); emac_link_timer()
1293 if (netif_carrier_ok(dev->ndev)) { emac_link_timer()
1294 emac_rx_clk_tx(dev); emac_link_timer()
1295 netif_carrier_off(dev->ndev); emac_link_timer()
1296 netif_tx_disable(dev->ndev); emac_link_timer()
1297 emac_reinitialize(dev); emac_link_timer()
1298 emac_print_link_status(dev); emac_link_timer()
1302 schedule_delayed_work(&dev->link_work, link_poll_interval); emac_link_timer()
1304 mutex_unlock(&dev->link_lock); emac_link_timer()
1307 static void emac_force_link_update(struct emac_instance *dev) emac_force_link_update() argument
1309 netif_carrier_off(dev->ndev); emac_force_link_update()
1311 if (dev->link_polling) { emac_force_link_update()
1312 cancel_delayed_work_sync(&dev->link_work); emac_force_link_update()
1313 if (dev->link_polling) emac_force_link_update()
1314 schedule_delayed_work(&dev->link_work, PHY_POLL_LINK_OFF); emac_force_link_update()
1321 struct emac_instance *dev = netdev_priv(ndev); emac_close() local
1323 DBG(dev, "close" NL); emac_close()
1325 if (dev->phy.address >= 0) { emac_close()
1326 dev->link_polling = 0; emac_close()
1327 cancel_delayed_work_sync(&dev->link_work); emac_close()
1329 mutex_lock(&dev->link_lock); emac_close()
1330 emac_netif_stop(dev); emac_close()
1331 dev->opened = 0; emac_close()
1332 mutex_unlock(&dev->link_lock); emac_close()
1334 emac_rx_disable(dev); emac_close()
1335 emac_tx_disable(dev); emac_close()
1336 mal_disable_rx_channel(dev->mal, dev->mal_rx_chan); emac_close()
1337 mal_disable_tx_channel(dev->mal, dev->mal_tx_chan); emac_close()
1338 mal_poll_del(dev->mal, &dev->commac); emac_close()
1340 emac_clean_tx_ring(dev); emac_close()
1341 emac_clean_rx_ring(dev); emac_close()
1343 free_irq(dev->emac_irq, dev); emac_close()
1350 static inline u16 emac_tx_csum(struct emac_instance *dev, emac_tx_csum() argument
1353 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) && emac_tx_csum()
1355 ++dev->stats.tx_packets_csum; emac_tx_csum()
1361 static inline int emac_xmit_finish(struct emac_instance *dev, int len) emac_xmit_finish() argument
1363 struct emac_regs __iomem *p = dev->emacp; emac_xmit_finish()
1364 struct net_device *ndev = dev->ndev; emac_xmit_finish()
1367 * difference, then we can store the TMR0 value in "dev" emac_xmit_finish()
1370 if (emac_has_feature(dev, EMAC_FTR_EMAC4)) emac_xmit_finish()
1375 if (unlikely(++dev->tx_cnt == NUM_TX_BUFF)) { emac_xmit_finish()
1377 DBG2(dev, "stopped TX queue" NL); emac_xmit_finish()
1381 ++dev->stats.tx_packets; emac_xmit_finish()
1382 dev->stats.tx_bytes += len; emac_xmit_finish()
1390 struct emac_instance *dev = netdev_priv(ndev); emac_start_xmit() local
1395 MAL_TX_CTRL_LAST | emac_tx_csum(dev, skb); emac_start_xmit()
1397 slot = dev->tx_slot++; emac_start_xmit()
1398 if (dev->tx_slot == NUM_TX_BUFF) { emac_start_xmit()
1399 dev->tx_slot = 0; emac_start_xmit()
1403 DBG2(dev, "xmit(%u) %d" NL, len, slot); emac_start_xmit()
1405 dev->tx_skb[slot] = skb; emac_start_xmit()
1406 dev->tx_desc[slot].data_ptr = dma_map_single(&dev->ofdev->dev, emac_start_xmit()
1409 dev->tx_desc[slot].data_len = (u16) len; emac_start_xmit()
1411 dev->tx_desc[slot].ctrl = ctrl; emac_start_xmit()
1413 return emac_xmit_finish(dev, len); emac_start_xmit()
1416 static inline int emac_xmit_split(struct emac_instance *dev, int slot, emac_xmit_split() argument
1431 dev->tx_skb[slot] = NULL; emac_xmit_split()
1432 dev->tx_desc[slot].data_ptr = pd; emac_xmit_split()
1433 dev->tx_desc[slot].data_len = (u16) chunk; emac_xmit_split()
1434 dev->tx_desc[slot].ctrl = ctrl; emac_xmit_split()
1435 ++dev->tx_cnt; emac_xmit_split()
1448 struct emac_instance *dev = netdev_priv(ndev); emac_start_xmit_sg() local
1465 if (unlikely(dev->tx_cnt + nr_frags + mal_tx_chunks(len) > NUM_TX_BUFF)) emac_start_xmit_sg()
1469 emac_tx_csum(dev, skb); emac_start_xmit_sg()
1470 slot = dev->tx_slot; emac_start_xmit_sg()
1473 dev->tx_skb[slot] = NULL; emac_start_xmit_sg()
1475 dev->tx_desc[slot].data_ptr = pd = emac_start_xmit_sg()
1476 dma_map_single(&dev->ofdev->dev, skb->data, len, DMA_TO_DEVICE); emac_start_xmit_sg()
1477 dev->tx_desc[slot].data_len = (u16) chunk; emac_start_xmit_sg()
1480 slot = emac_xmit_split(dev, slot, pd + chunk, len, !nr_frags, emac_start_xmit_sg()
1487 if (unlikely(dev->tx_cnt + mal_tx_chunks(len) >= NUM_TX_BUFF)) emac_start_xmit_sg()
1490 pd = skb_frag_dma_map(&dev->ofdev->dev, frag, 0, len, emac_start_xmit_sg()
1493 slot = emac_xmit_split(dev, slot, pd, len, i == nr_frags - 1, emac_start_xmit_sg()
1497 DBG2(dev, "xmit_sg(%u) %d - %d" NL, skb->len, dev->tx_slot, slot); emac_start_xmit_sg()
1500 dev->tx_skb[slot] = skb; emac_start_xmit_sg()
1503 if (dev->tx_slot == NUM_TX_BUFF - 1) emac_start_xmit_sg()
1506 dev->tx_desc[dev->tx_slot].ctrl = ctrl; emac_start_xmit_sg()
1507 dev->tx_slot = (slot + 1) % NUM_TX_BUFF; emac_start_xmit_sg()
1509 return emac_xmit_finish(dev, skb->len); emac_start_xmit_sg()
1515 while (slot != dev->tx_slot) { emac_start_xmit_sg()
1516 dev->tx_desc[slot].ctrl = 0; emac_start_xmit_sg()
1517 --dev->tx_cnt; emac_start_xmit_sg()
1521 ++dev->estats.tx_undo; emac_start_xmit_sg()
1525 DBG2(dev, "stopped TX queue" NL); emac_start_xmit_sg()
1530 static void emac_parse_tx_error(struct emac_instance *dev, u16 ctrl) emac_parse_tx_error() argument
1532 struct emac_error_stats *st = &dev->estats; emac_parse_tx_error()
1534 DBG(dev, "BD TX error %04x" NL, ctrl); emac_parse_tx_error()
1559 struct emac_instance *dev = param; emac_poll_tx() local
1562 DBG2(dev, "poll_tx, %d %d" NL, dev->tx_cnt, dev->ack_slot); emac_poll_tx()
1564 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) emac_poll_tx()
1569 netif_tx_lock_bh(dev->ndev); emac_poll_tx()
1570 if (dev->tx_cnt) { emac_poll_tx()
1572 int slot = dev->ack_slot, n = 0; emac_poll_tx()
1574 ctrl = dev->tx_desc[slot].ctrl; emac_poll_tx()
1576 struct sk_buff *skb = dev->tx_skb[slot]; emac_poll_tx()
1581 dev->tx_skb[slot] = NULL; emac_poll_tx()
1586 emac_parse_tx_error(dev, ctrl); emac_poll_tx()
1588 if (--dev->tx_cnt) emac_poll_tx()
1592 dev->ack_slot = slot; emac_poll_tx()
1593 if (netif_queue_stopped(dev->ndev) && emac_poll_tx()
1594 dev->tx_cnt < EMAC_TX_WAKEUP_THRESH) emac_poll_tx()
1595 netif_wake_queue(dev->ndev); emac_poll_tx()
1597 DBG2(dev, "tx %d pkts" NL, n); emac_poll_tx()
1600 netif_tx_unlock_bh(dev->ndev); emac_poll_tx()
1603 static inline void emac_recycle_rx_skb(struct emac_instance *dev, int slot, emac_recycle_rx_skb() argument
1606 struct sk_buff *skb = dev->rx_skb[slot]; emac_recycle_rx_skb()
1608 DBG2(dev, "recycle %d %d" NL, slot, len); emac_recycle_rx_skb()
1611 dma_map_single(&dev->ofdev->dev, skb->data - 2, emac_recycle_rx_skb()
1614 dev->rx_desc[slot].data_len = 0; emac_recycle_rx_skb()
1616 dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY | emac_recycle_rx_skb()
1620 static void emac_parse_rx_error(struct emac_instance *dev, u16 ctrl) emac_parse_rx_error() argument
1622 struct emac_error_stats *st = &dev->estats; emac_parse_rx_error()
1624 DBG(dev, "BD RX error %04x" NL, ctrl); emac_parse_rx_error()
1647 static inline void emac_rx_csum(struct emac_instance *dev, emac_rx_csum() argument
1651 if (!ctrl && dev->tah_dev) { emac_rx_csum()
1653 ++dev->stats.rx_packets_csum; emac_rx_csum()
1658 static inline int emac_rx_sg_append(struct emac_instance *dev, int slot) emac_rx_sg_append() argument
1660 if (likely(dev->rx_sg_skb != NULL)) { emac_rx_sg_append()
1661 int len = dev->rx_desc[slot].data_len; emac_rx_sg_append()
1662 int tot_len = dev->rx_sg_skb->len + len; emac_rx_sg_append()
1664 if (unlikely(tot_len + 2 > dev->rx_skb_size)) { emac_rx_sg_append()
1665 ++dev->estats.rx_dropped_mtu; emac_rx_sg_append()
1666 dev_kfree_skb(dev->rx_sg_skb); emac_rx_sg_append()
1667 dev->rx_sg_skb = NULL; emac_rx_sg_append()
1669 memcpy(skb_tail_pointer(dev->rx_sg_skb), emac_rx_sg_append()
1670 dev->rx_skb[slot]->data, len); emac_rx_sg_append()
1671 skb_put(dev->rx_sg_skb, len); emac_rx_sg_append()
1672 emac_recycle_rx_skb(dev, slot, len); emac_rx_sg_append()
1676 emac_recycle_rx_skb(dev, slot, 0); emac_rx_sg_append()
1683 struct emac_instance *dev = param; emac_poll_rx() local
1684 int slot = dev->rx_slot, received = 0; emac_poll_rx()
1686 DBG2(dev, "poll_rx(%d)" NL, budget); emac_poll_rx()
1692 u16 ctrl = dev->rx_desc[slot].ctrl; emac_poll_rx()
1697 skb = dev->rx_skb[slot]; emac_poll_rx()
1699 len = dev->rx_desc[slot].data_len; emac_poll_rx()
1706 emac_parse_rx_error(dev, ctrl); emac_poll_rx()
1707 ++dev->estats.rx_dropped_error; emac_poll_rx()
1708 emac_recycle_rx_skb(dev, slot, 0); emac_poll_rx()
1714 ++dev->estats.rx_dropped_stack; emac_poll_rx()
1715 emac_recycle_rx_skb(dev, slot, len); emac_poll_rx()
1727 emac_recycle_rx_skb(dev, slot, len); emac_poll_rx()
1729 } else if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) emac_poll_rx()
1734 skb->protocol = eth_type_trans(skb, dev->ndev); emac_poll_rx()
1735 emac_rx_csum(dev, skb, ctrl); emac_poll_rx()
1738 ++dev->estats.rx_dropped_stack; emac_poll_rx()
1740 ++dev->stats.rx_packets; emac_poll_rx()
1742 dev->stats.rx_bytes += len; emac_poll_rx()
1749 BUG_ON(dev->rx_sg_skb); emac_poll_rx()
1750 if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) { emac_poll_rx()
1751 DBG(dev, "rx OOM %d" NL, slot); emac_poll_rx()
1752 ++dev->estats.rx_dropped_oom; emac_poll_rx()
1753 emac_recycle_rx_skb(dev, slot, 0); emac_poll_rx()
1755 dev->rx_sg_skb = skb; emac_poll_rx()
1758 } else if (!emac_rx_sg_append(dev, slot) && emac_poll_rx()
1761 skb = dev->rx_sg_skb; emac_poll_rx()
1762 dev->rx_sg_skb = NULL; emac_poll_rx()
1766 emac_parse_rx_error(dev, ctrl); emac_poll_rx()
1767 ++dev->estats.rx_dropped_error; emac_poll_rx()
1775 DBG(dev, "rx OOM %d" NL, slot); emac_poll_rx()
1777 ++dev->estats.rx_dropped_oom; emac_poll_rx()
1778 emac_recycle_rx_skb(dev, slot, 0); emac_poll_rx()
1783 DBG2(dev, "rx %d BDs" NL, received); emac_poll_rx()
1784 dev->rx_slot = slot; emac_poll_rx()
1787 if (unlikely(budget && test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags))) { emac_poll_rx()
1789 if (!(dev->rx_desc[slot].ctrl & MAL_RX_CTRL_EMPTY)) { emac_poll_rx()
1790 DBG2(dev, "rx restart" NL); emac_poll_rx()
1795 if (dev->rx_sg_skb) { emac_poll_rx()
1796 DBG2(dev, "dropping partial rx packet" NL); emac_poll_rx()
1797 ++dev->estats.rx_dropped_error; emac_poll_rx()
1798 dev_kfree_skb(dev->rx_sg_skb); emac_poll_rx()
1799 dev->rx_sg_skb = NULL; emac_poll_rx()
1802 clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags); emac_poll_rx()
1803 mal_enable_rx_channel(dev->mal, dev->mal_rx_chan); emac_poll_rx()
1804 emac_rx_enable(dev); emac_poll_rx()
1805 dev->rx_slot = 0; emac_poll_rx()
1813 struct emac_instance *dev = param; emac_peek_rx() local
1815 return !(dev->rx_desc[dev->rx_slot].ctrl & MAL_RX_CTRL_EMPTY); emac_peek_rx()
1821 struct emac_instance *dev = param; emac_peek_rx_sg() local
1823 int slot = dev->rx_slot; emac_peek_rx_sg()
1825 u16 ctrl = dev->rx_desc[slot].ctrl; emac_peek_rx_sg()
1834 if (unlikely(slot == dev->rx_slot)) emac_peek_rx_sg()
1842 struct emac_instance *dev = param; emac_rxde() local
1844 ++dev->estats.rx_stopped; emac_rxde()
1845 emac_rx_disable_async(dev); emac_rxde()
1851 struct emac_instance *dev = dev_instance; emac_irq() local
1852 struct emac_regs __iomem *p = dev->emacp; emac_irq()
1853 struct emac_error_stats *st = &dev->estats; emac_irq()
1856 spin_lock(&dev->lock); emac_irq()
1861 DBG(dev, "isr = %08x" NL, isr); emac_irq()
1894 spin_unlock(&dev->lock); emac_irq()
1901 struct emac_instance *dev = netdev_priv(ndev); emac_stats() local
1902 struct emac_stats *st = &dev->stats; emac_stats()
1903 struct emac_error_stats *est = &dev->estats; emac_stats()
1904 struct net_device_stats *nst = &dev->nstats; emac_stats()
1907 DBG2(dev, "stats" NL); emac_stats()
1910 spin_lock_irqsave(&dev->lock, flags); emac_stats()
1948 spin_unlock_irqrestore(&dev->lock, flags); emac_stats()
1970 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_settings() local
1972 cmd->supported = dev->phy.features; emac_ethtool_get_settings()
1974 cmd->phy_address = dev->phy.address; emac_ethtool_get_settings()
1976 dev->phy.address >= 0 ? XCVR_EXTERNAL : XCVR_INTERNAL; emac_ethtool_get_settings()
1978 mutex_lock(&dev->link_lock); emac_ethtool_get_settings()
1979 cmd->advertising = dev->phy.advertising; emac_ethtool_get_settings()
1980 cmd->autoneg = dev->phy.autoneg; emac_ethtool_get_settings()
1981 cmd->speed = dev->phy.speed; emac_ethtool_get_settings()
1982 cmd->duplex = dev->phy.duplex; emac_ethtool_get_settings()
1983 mutex_unlock(&dev->link_lock); emac_ethtool_get_settings()
1991 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_set_settings() local
1992 u32 f = dev->phy.features; emac_ethtool_set_settings()
1994 DBG(dev, "set_settings(%d, %d, %d, 0x%08x)" NL, emac_ethtool_set_settings()
1998 if (dev->phy.address < 0) emac_ethtool_set_settings()
2037 mutex_lock(&dev->link_lock); emac_ethtool_set_settings()
2038 dev->phy.def->ops->setup_forced(&dev->phy, cmd->speed, emac_ethtool_set_settings()
2040 mutex_unlock(&dev->link_lock); emac_ethtool_set_settings()
2046 mutex_lock(&dev->link_lock); emac_ethtool_set_settings()
2047 dev->phy.def->ops->setup_aneg(&dev->phy, emac_ethtool_set_settings()
2049 (dev->phy.advertising & emac_ethtool_set_settings()
2052 mutex_unlock(&dev->link_lock); emac_ethtool_set_settings()
2054 emac_force_link_update(dev); emac_ethtool_set_settings()
2069 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_pauseparam() local
2071 mutex_lock(&dev->link_lock); emac_ethtool_get_pauseparam()
2072 if ((dev->phy.features & SUPPORTED_Autoneg) && emac_ethtool_get_pauseparam()
2073 (dev->phy.advertising & (ADVERTISED_Pause | ADVERTISED_Asym_Pause))) emac_ethtool_get_pauseparam()
2076 if (dev->phy.duplex == DUPLEX_FULL) { emac_ethtool_get_pauseparam()
2077 if (dev->phy.pause) emac_ethtool_get_pauseparam()
2079 else if (dev->phy.asym_pause) emac_ethtool_get_pauseparam()
2082 mutex_unlock(&dev->link_lock); emac_ethtool_get_pauseparam()
2085 static int emac_get_regs_len(struct emac_instance *dev) emac_get_regs_len() argument
2093 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_regs_len() local
2097 emac_get_regs_len(dev) + mal_get_regs_len(dev->mal); emac_ethtool_get_regs_len()
2098 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) emac_ethtool_get_regs_len()
2099 size += zmii_get_regs_len(dev->zmii_dev); emac_ethtool_get_regs_len()
2100 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) emac_ethtool_get_regs_len()
2101 size += rgmii_get_regs_len(dev->rgmii_dev); emac_ethtool_get_regs_len()
2102 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) emac_ethtool_get_regs_len()
2103 size += tah_get_regs_len(dev->tah_dev); emac_ethtool_get_regs_len()
2108 static void *emac_dump_regs(struct emac_instance *dev, void *buf) emac_dump_regs() argument
2112 hdr->index = dev->cell_index; emac_dump_regs()
2113 if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) { emac_dump_regs()
2115 } else if (emac_has_feature(dev, EMAC_FTR_EMAC4)) { emac_dump_regs()
2120 memcpy_fromio(hdr + 1, dev->emacp, sizeof(struct emac_regs)); emac_dump_regs()
2127 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_regs() local
2133 buf = mal_dump_regs(dev->mal, buf); emac_ethtool_get_regs()
2134 buf = emac_dump_regs(dev, buf); emac_ethtool_get_regs()
2135 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) { emac_ethtool_get_regs()
2137 buf = zmii_dump_regs(dev->zmii_dev, buf); emac_ethtool_get_regs()
2139 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) { emac_ethtool_get_regs()
2141 buf = rgmii_dump_regs(dev->rgmii_dev, buf); emac_ethtool_get_regs()
2143 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) { emac_ethtool_get_regs()
2145 buf = tah_dump_regs(dev->tah_dev, buf); emac_ethtool_get_regs()
2151 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_nway_reset() local
2154 DBG(dev, "nway_reset" NL); emac_ethtool_nway_reset()
2156 if (dev->phy.address < 0) emac_ethtool_nway_reset()
2159 mutex_lock(&dev->link_lock); emac_ethtool_nway_reset()
2160 if (!dev->phy.autoneg) { emac_ethtool_nway_reset()
2165 dev->phy.def->ops->setup_aneg(&dev->phy, dev->phy.advertising); emac_ethtool_nway_reset()
2167 mutex_unlock(&dev->link_lock); emac_ethtool_nway_reset()
2168 emac_force_link_update(dev); emac_ethtool_nway_reset()
2191 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_ethtool_stats() local
2193 memcpy(tmp_stats, &dev->stats, sizeof(dev->stats)); emac_ethtool_get_ethtool_stats()
2194 tmp_stats += sizeof(dev->stats) / sizeof(u64); emac_ethtool_get_ethtool_stats()
2195 memcpy(tmp_stats, &dev->estats, sizeof(dev->estats)); emac_ethtool_get_ethtool_stats()
2201 struct emac_instance *dev = netdev_priv(ndev); emac_ethtool_get_drvinfo() local
2206 dev->cell_index, dev->ofdev->dev.of_node->full_name); emac_ethtool_get_drvinfo()
2231 struct emac_instance *dev = netdev_priv(ndev); emac_ioctl() local
2234 DBG(dev, "ioctl %08x" NL, cmd); emac_ioctl()
2236 if (dev->phy.address < 0) emac_ioctl()
2241 data->phy_id = dev->phy.address; emac_ioctl()
2244 data->val_out = emac_mdio_read(ndev, dev->phy.address, emac_ioctl()
2249 emac_mdio_write(ndev, dev->phy.address, data->reg_num, emac_ioctl()
2272 static int emac_check_deps(struct emac_instance *dev, emac_check_deps() argument
2286 np = *(dev->blist - 1); emac_check_deps()
2311 static void emac_put_deps(struct emac_instance *dev) emac_put_deps() argument
2313 of_dev_put(dev->mal_dev); emac_put_deps()
2314 of_dev_put(dev->zmii_dev); emac_put_deps()
2315 of_dev_put(dev->rgmii_dev); emac_put_deps()
2316 of_dev_put(dev->mdio_dev); emac_put_deps()
2317 of_dev_put(dev->tah_dev); emac_put_deps()
2333 static int emac_wait_deps(struct emac_instance *dev) emac_wait_deps() argument
2340 deps[EMAC_DEP_MAL_IDX].phandle = dev->mal_ph; emac_wait_deps()
2341 deps[EMAC_DEP_ZMII_IDX].phandle = dev->zmii_ph; emac_wait_deps()
2342 deps[EMAC_DEP_RGMII_IDX].phandle = dev->rgmii_ph; emac_wait_deps()
2343 if (dev->tah_ph) emac_wait_deps()
2344 deps[EMAC_DEP_TAH_IDX].phandle = dev->tah_ph; emac_wait_deps()
2345 if (dev->mdio_ph) emac_wait_deps()
2346 deps[EMAC_DEP_MDIO_IDX].phandle = dev->mdio_ph; emac_wait_deps()
2347 if (dev->blist && dev->blist > emac_boot_list) emac_wait_deps()
2351 emac_check_deps(dev, deps), emac_wait_deps()
2354 err = emac_check_deps(dev, deps) ? 0 : -ENODEV; emac_wait_deps()
2361 dev->mal_dev = deps[EMAC_DEP_MAL_IDX].ofdev; emac_wait_deps()
2362 dev->zmii_dev = deps[EMAC_DEP_ZMII_IDX].ofdev; emac_wait_deps()
2363 dev->rgmii_dev = deps[EMAC_DEP_RGMII_IDX].ofdev; emac_wait_deps()
2364 dev->tah_dev = deps[EMAC_DEP_TAH_IDX].ofdev; emac_wait_deps()
2365 dev->mdio_dev = deps[EMAC_DEP_MDIO_IDX].ofdev; emac_wait_deps()
2386 static int emac_init_phy(struct emac_instance *dev) emac_init_phy() argument
2388 struct device_node *np = dev->ofdev->dev.of_node; emac_init_phy()
2389 struct net_device *ndev = dev->ndev; emac_init_phy()
2393 dev->phy.dev = ndev; emac_init_phy()
2394 dev->phy.mode = dev->phy_mode; emac_init_phy()
2397 * XXX I probably should move these settings to the dev tree emac_init_phy()
2399 if (dev->phy_address == 0xffffffff && dev->phy_map == 0xffffffff) { emac_init_phy()
2400 emac_reset(dev); emac_init_phy()
2403 * XXX I probably should move these settings to the dev tree emac_init_phy()
2405 dev->phy.address = -1; emac_init_phy()
2406 dev->phy.features = SUPPORTED_MII; emac_init_phy()
2407 if (emac_phy_supports_gige(dev->phy_mode)) emac_init_phy()
2408 dev->phy.features |= SUPPORTED_1000baseT_Full; emac_init_phy()
2410 dev->phy.features |= SUPPORTED_100baseT_Full; emac_init_phy()
2411 dev->phy.pause = 1; emac_init_phy()
2417 phy_map = dev->phy_map | busy_phy_map; emac_init_phy()
2419 DBG(dev, "PHY maps %08x %08x" NL, dev->phy_map, busy_phy_map); emac_init_phy()
2421 dev->phy.mdio_read = emac_mdio_read; emac_init_phy()
2422 dev->phy.mdio_write = emac_mdio_write; emac_init_phy()
2426 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX)) emac_init_phy()
2430 emac_rx_clk_tx(dev); emac_init_phy()
2434 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX)) emac_init_phy()
2440 if (emac_phy_gpcs(dev->phy.mode)) { emac_init_phy()
2449 dev->phy.gpcs_address = dev->gpcs_address; emac_init_phy()
2450 if (dev->phy.gpcs_address == 0xffffffff) emac_init_phy()
2451 dev->phy.address = dev->cell_index; emac_init_phy()
2454 emac_configure(dev); emac_init_phy()
2456 if (dev->phy_address != 0xffffffff) emac_init_phy()
2457 phy_map = ~(1 << dev->phy_address); emac_init_phy()
2465 r = emac_mdio_read(dev->ndev, i, MII_BMCR); emac_init_phy()
2468 if (!emac_mii_phy_probe(&dev->phy, i)) emac_init_phy()
2474 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX)) emac_init_phy()
2484 if (dev->phy.def->ops->init) emac_init_phy()
2485 dev->phy.def->ops->init(&dev->phy); emac_init_phy()
2488 dev->phy.def->features &= ~dev->phy_feat_exc; emac_init_phy()
2489 dev->phy.features &= ~dev->phy_feat_exc; emac_init_phy()
2492 if (dev->phy.features & SUPPORTED_Autoneg) { emac_init_phy()
2493 adv = dev->phy.features; emac_init_phy()
2494 if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x)) emac_init_phy()
2497 dev->phy.def->ops->setup_aneg(&dev->phy, adv); emac_init_phy()
2499 u32 f = dev->phy.def->features; emac_init_phy()
2517 dev->phy.def->ops->setup_forced(&dev->phy, speed, fd); emac_init_phy()
2522 static int emac_init_config(struct emac_instance *dev) emac_init_config() argument
2524 struct device_node *np = dev->ofdev->dev.of_node; emac_init_config()
2528 if (emac_read_uint_prop(np, "mal-device", &dev->mal_ph, 1)) emac_init_config()
2530 if (emac_read_uint_prop(np, "mal-tx-channel", &dev->mal_tx_chan, 1)) emac_init_config()
2532 if (emac_read_uint_prop(np, "mal-rx-channel", &dev->mal_rx_chan, 1)) emac_init_config()
2534 if (emac_read_uint_prop(np, "cell-index", &dev->cell_index, 1)) emac_init_config()
2536 if (emac_read_uint_prop(np, "max-frame-size", &dev->max_mtu, 0)) emac_init_config()
2537 dev->max_mtu = 1500; emac_init_config()
2538 if (emac_read_uint_prop(np, "rx-fifo-size", &dev->rx_fifo_size, 0)) emac_init_config()
2539 dev->rx_fifo_size = 2048; emac_init_config()
2540 if (emac_read_uint_prop(np, "tx-fifo-size", &dev->tx_fifo_size, 0)) emac_init_config()
2541 dev->tx_fifo_size = 2048; emac_init_config()
2542 if (emac_read_uint_prop(np, "rx-fifo-size-gige", &dev->rx_fifo_size_gige, 0)) emac_init_config()
2543 dev->rx_fifo_size_gige = dev->rx_fifo_size; emac_init_config()
2544 if (emac_read_uint_prop(np, "tx-fifo-size-gige", &dev->tx_fifo_size_gige, 0)) emac_init_config()
2545 dev->tx_fifo_size_gige = dev->tx_fifo_size; emac_init_config()
2546 if (emac_read_uint_prop(np, "phy-address", &dev->phy_address, 0)) emac_init_config()
2547 dev->phy_address = 0xffffffff; emac_init_config()
2548 if (emac_read_uint_prop(np, "phy-map", &dev->phy_map, 0)) emac_init_config()
2549 dev->phy_map = 0xffffffff; emac_init_config()
2550 if (emac_read_uint_prop(np, "gpcs-address", &dev->gpcs_address, 0)) emac_init_config()
2551 dev->gpcs_address = 0xffffffff; emac_init_config()
2552 if (emac_read_uint_prop(np->parent, "clock-frequency", &dev->opb_bus_freq, 1)) emac_init_config()
2554 if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0)) emac_init_config()
2555 dev->tah_ph = 0; emac_init_config()
2556 if (emac_read_uint_prop(np, "tah-channel", &dev->tah_port, 0)) emac_init_config()
2557 dev->tah_port = 0; emac_init_config()
2558 if (emac_read_uint_prop(np, "mdio-device", &dev->mdio_ph, 0)) emac_init_config()
2559 dev->mdio_ph = 0; emac_init_config()
2560 if (emac_read_uint_prop(np, "zmii-device", &dev->zmii_ph, 0)) emac_init_config()
2561 dev->zmii_ph = 0; emac_init_config()
2562 if (emac_read_uint_prop(np, "zmii-channel", &dev->zmii_port, 0)) emac_init_config()
2563 dev->zmii_port = 0xffffffff; emac_init_config()
2564 if (emac_read_uint_prop(np, "rgmii-device", &dev->rgmii_ph, 0)) emac_init_config()
2565 dev->rgmii_ph = 0; emac_init_config()
2566 if (emac_read_uint_prop(np, "rgmii-channel", &dev->rgmii_port, 0)) emac_init_config()
2567 dev->rgmii_port = 0xffffffff; emac_init_config()
2568 if (emac_read_uint_prop(np, "fifo-entry-size", &dev->fifo_entry_size, 0)) emac_init_config()
2569 dev->fifo_entry_size = 16; emac_init_config()
2570 if (emac_read_uint_prop(np, "mal-burst-size", &dev->mal_burst_size, 0)) emac_init_config()
2571 dev->mal_burst_size = 256; emac_init_config()
2574 dev->phy_mode = of_get_phy_mode(np); emac_init_config()
2575 if (dev->phy_mode < 0) emac_init_config()
2576 dev->phy_mode = PHY_MODE_NA; emac_init_config()
2580 dev->features |= (EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC); emac_init_config()
2583 dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX; emac_init_config()
2586 dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX; emac_init_config()
2588 dev->features |= (EMAC_APM821XX_REQ_JUMBO_FRAME_SIZE | emac_init_config()
2593 dev->features |= EMAC_FTR_EMAC4; emac_init_config()
2595 dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX; emac_init_config()
2599 dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX; emac_init_config()
2602 dev->features |= EMAC_FTR_NO_FLOW_CONTROL_40x; emac_init_config()
2614 dev->features |= EMAC_FTR_STACR_OC_INVERT; emac_init_config()
2616 dev->features |= EMAC_FTR_HAS_NEW_STACR; emac_init_config()
2620 dev->features |= EMAC_FTR_HAS_NEW_STACR | emac_init_config()
2624 if (dev->tah_ph != 0) { emac_init_config()
2626 dev->features |= EMAC_FTR_HAS_TAH; emac_init_config()
2634 if (dev->zmii_ph != 0) { emac_init_config()
2636 dev->features |= EMAC_FTR_HAS_ZMII; emac_init_config()
2644 if (dev->rgmii_ph != 0) { emac_init_config()
2646 dev->features |= EMAC_FTR_HAS_RGMII; emac_init_config()
2661 memcpy(dev->ndev->dev_addr, p, ETH_ALEN); emac_init_config()
2664 if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) { emac_init_config()
2665 dev->xaht_slots_shift = EMAC4SYNC_XAHT_SLOTS_SHIFT; emac_init_config()
2666 dev->xaht_width_shift = EMAC4SYNC_XAHT_WIDTH_SHIFT; emac_init_config()
2668 dev->xaht_slots_shift = EMAC4_XAHT_SLOTS_SHIFT; emac_init_config()
2669 dev->xaht_width_shift = EMAC4_XAHT_WIDTH_SHIFT; emac_init_config()
2672 DBG(dev, "features : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE); emac_init_config()
2673 DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige); emac_init_config()
2674 DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige); emac_init_config()
2675 DBG(dev, "max_mtu : %d\n", dev->max_mtu); emac_init_config()
2676 DBG(dev, "OPB freq : %d\n", dev->opb_bus_freq); emac_init_config()
2710 struct emac_instance *dev; emac_probe() local
2711 struct device_node *np = ofdev->dev.of_node; emac_probe()
2733 dev = netdev_priv(ndev); emac_probe()
2734 dev->ndev = ndev; emac_probe()
2735 dev->ofdev = ofdev; emac_probe()
2736 dev->blist = blist; emac_probe()
2737 SET_NETDEV_DEV(ndev, &ofdev->dev); emac_probe()
2740 mutex_init(&dev->mdio_lock); emac_probe()
2741 mutex_init(&dev->link_lock); emac_probe()
2742 spin_lock_init(&dev->lock); emac_probe()
2743 INIT_WORK(&dev->reset_work, emac_reset_work); emac_probe()
2746 err = emac_init_config(dev); emac_probe()
2751 dev->emac_irq = irq_of_parse_and_map(np, 0); emac_probe()
2752 dev->wol_irq = irq_of_parse_and_map(np, 1); emac_probe()
2753 if (dev->emac_irq == NO_IRQ) { emac_probe()
2757 ndev->irq = dev->emac_irq; emac_probe()
2760 if (of_address_to_resource(np, 0, &dev->rsrc_regs)) { emac_probe()
2766 dev->emacp = ioremap(dev->rsrc_regs.start, emac_probe()
2767 resource_size(&dev->rsrc_regs)); emac_probe()
2768 if (dev->emacp == NULL) { emac_probe()
2776 err = emac_wait_deps(dev); emac_probe()
2784 dev->mal = platform_get_drvdata(dev->mal_dev); emac_probe()
2785 if (dev->mdio_dev != NULL) emac_probe()
2786 dev->mdio_instance = platform_get_drvdata(dev->mdio_dev); emac_probe()
2789 dev->commac.ops = &emac_commac_ops; emac_probe()
2790 dev->commac.dev = dev; emac_probe()
2791 dev->commac.tx_chan_mask = MAL_CHAN_MASK(dev->mal_tx_chan); emac_probe()
2792 dev->commac.rx_chan_mask = MAL_CHAN_MASK(dev->mal_rx_chan); emac_probe()
2793 err = mal_register_commac(dev->mal, &dev->commac); emac_probe()
2796 np->full_name, dev->mal_dev->dev.of_node->full_name); emac_probe()
2799 dev->rx_skb_size = emac_rx_skb_size(ndev->mtu); emac_probe()
2800 dev->rx_sync_size = emac_rx_sync_size(ndev->mtu); emac_probe()
2803 dev->tx_desc = emac_probe()
2804 dev->mal->bd_virt + mal_tx_bd_offset(dev->mal, dev->mal_tx_chan); emac_probe()
2805 dev->rx_desc = emac_probe()
2806 dev->mal->bd_virt + mal_rx_bd_offset(dev->mal, dev->mal_rx_chan); emac_probe()
2808 DBG(dev, "tx_desc %p" NL, dev->tx_desc); emac_probe()
2809 DBG(dev, "rx_desc %p" NL, dev->rx_desc); emac_probe()
2812 memset(dev->tx_desc, 0, NUM_TX_BUFF * sizeof(struct mal_descriptor)); emac_probe()
2813 memset(dev->rx_desc, 0, NUM_RX_BUFF * sizeof(struct mal_descriptor)); emac_probe()
2814 memset(dev->tx_skb, 0, NUM_TX_BUFF * sizeof(struct sk_buff *)); emac_probe()
2815 memset(dev->rx_skb, 0, NUM_RX_BUFF * sizeof(struct sk_buff *)); emac_probe()
2818 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII) && emac_probe()
2819 (err = zmii_attach(dev->zmii_dev, dev->zmii_port, &dev->phy_mode)) != 0) emac_probe()
2823 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII) && emac_probe()
2824 (err = rgmii_attach(dev->rgmii_dev, dev->rgmii_port, dev->phy_mode)) != 0) emac_probe()
2828 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) && emac_probe()
2829 (err = tah_attach(dev->tah_dev, dev->tah_port)) != 0) emac_probe()
2833 dev->phy.speed = SPEED_100; emac_probe()
2834 dev->phy.duplex = DUPLEX_FULL; emac_probe()
2835 dev->phy.autoneg = AUTONEG_DISABLE; emac_probe()
2836 dev->phy.pause = dev->phy.asym_pause = 0; emac_probe()
2837 dev->stop_timeout = STOP_TIMEOUT_100; emac_probe()
2838 INIT_DELAYED_WORK(&dev->link_work, emac_link_timer); emac_probe()
2841 if (emac_has_feature(dev, EMAC_FTR_APM821XX_NO_HALF_DUPLEX)) { emac_probe()
2842 dev->phy_feat_exc = (SUPPORTED_1000baseT_Half | emac_probe()
2848 err = emac_init_phy(dev); emac_probe()
2852 if (dev->tah_dev) { emac_probe()
2857 if (emac_phy_supports_gige(dev->phy_mode)) { emac_probe()
2859 dev->commac.ops = &emac_commac_sg_ops; emac_probe()
2877 platform_set_drvdata(ofdev, dev); emac_probe()
2884 ndev->name, dev->cell_index, np->full_name, ndev->dev_addr); emac_probe()
2886 if (dev->phy_mode == PHY_MODE_SGMII) emac_probe()
2889 if (dev->phy.address >= 0) emac_probe()
2891 dev->phy.def->name, dev->phy.address); emac_probe()
2893 emac_dbg_register(dev); emac_probe()
2901 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) emac_probe()
2902 tah_detach(dev->tah_dev, dev->tah_port); emac_probe()
2904 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) emac_probe()
2905 rgmii_detach(dev->rgmii_dev, dev->rgmii_port); emac_probe()
2907 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) emac_probe()
2908 zmii_detach(dev->zmii_dev, dev->zmii_port); emac_probe()
2910 mal_unregister_commac(dev->mal, &dev->commac); emac_probe()
2912 emac_put_deps(dev); emac_probe()
2914 iounmap(dev->emacp); emac_probe()
2916 if (dev->wol_irq != NO_IRQ) emac_probe()
2917 irq_dispose_mapping(dev->wol_irq); emac_probe()
2918 if (dev->emac_irq != NO_IRQ) emac_probe()
2919 irq_dispose_mapping(dev->emac_irq); emac_probe()
2936 struct emac_instance *dev = platform_get_drvdata(ofdev); emac_remove() local
2938 DBG(dev, "remove" NL); emac_remove()
2940 unregister_netdev(dev->ndev); emac_remove()
2942 cancel_work_sync(&dev->reset_work); emac_remove()
2944 if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) emac_remove()
2945 tah_detach(dev->tah_dev, dev->tah_port); emac_remove()
2946 if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) emac_remove()
2947 rgmii_detach(dev->rgmii_dev, dev->rgmii_port); emac_remove()
2948 if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) emac_remove()
2949 zmii_detach(dev->zmii_dev, dev->zmii_port); emac_remove()
2951 busy_phy_map &= ~(1 << dev->phy.address); emac_remove()
2952 DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map); emac_remove()
2954 mal_unregister_commac(dev->mal, &dev->commac); emac_remove()
2955 emac_put_deps(dev); emac_remove()
2957 emac_dbg_unregister(dev); emac_remove()
2958 iounmap(dev->emacp); emac_remove()
2960 if (dev->wol_irq != NO_IRQ) emac_remove()
2961 irq_dispose_mapping(dev->wol_irq); emac_remove()
2962 if (dev->emac_irq != NO_IRQ) emac_remove()
2963 irq_dispose_mapping(dev->emac_irq); emac_remove()
2965 free_netdev(dev->ndev); emac_remove()
/linux-4.4.14/drivers/infiniband/hw/mthca/
H A Dmthca_eq.c166 static inline u64 async_mask(struct mthca_dev *dev) async_mask() argument
168 return dev->mthca_flags & MTHCA_FLAG_SRQ ? async_mask()
173 static inline void tavor_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) tavor_set_eq_ci() argument
185 dev->kar + MTHCA_EQ_DOORBELL, tavor_set_eq_ci()
186 MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); tavor_set_eq_ci()
189 static inline void arbel_set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) arbel_set_eq_ci() argument
194 dev->eq_regs.arbel.eq_set_ci_base + eq->eqn * 8); arbel_set_eq_ci()
199 static inline void set_eq_ci(struct mthca_dev *dev, struct mthca_eq *eq, u32 ci) set_eq_ci() argument
201 if (mthca_is_memfree(dev)) set_eq_ci()
202 arbel_set_eq_ci(dev, eq, ci); set_eq_ci()
204 tavor_set_eq_ci(dev, eq, ci); set_eq_ci()
207 static inline void tavor_eq_req_not(struct mthca_dev *dev, int eqn) tavor_eq_req_not() argument
210 dev->kar + MTHCA_EQ_DOORBELL, tavor_eq_req_not()
211 MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); tavor_eq_req_not()
214 static inline void arbel_eq_req_not(struct mthca_dev *dev, u32 eqn_mask) arbel_eq_req_not() argument
216 writel(eqn_mask, dev->eq_regs.arbel.eq_arm); arbel_eq_req_not()
219 static inline void disarm_cq(struct mthca_dev *dev, int eqn, int cqn) disarm_cq() argument
221 if (!mthca_is_memfree(dev)) { disarm_cq()
223 dev->kar + MTHCA_EQ_DOORBELL, disarm_cq()
224 MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); disarm_cq()
246 static void port_change(struct mthca_dev *dev, int port, int active) port_change() argument
250 mthca_dbg(dev, "Port change to %s for port %d\n", port_change()
253 record.device = &dev->ib_dev; port_change()
260 static int mthca_eq_int(struct mthca_dev *dev, struct mthca_eq *eq) mthca_eq_int() argument
277 disarm_cq(dev, eq->eqn, disarm_cqn); mthca_eq_int()
278 mthca_cq_completion(dev, disarm_cqn); mthca_eq_int()
282 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
287 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
292 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
297 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
302 mthca_srq_event(dev, be32_to_cpu(eqe->event.srq.srqn) & 0xffffff, mthca_eq_int()
307 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
312 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
317 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
322 mthca_qp_event(dev, be32_to_cpu(eqe->event.qp.qpn) & 0xffffff, mthca_eq_int()
327 mthca_cmd_event(dev, mthca_eq_int()
334 port_change(dev, mthca_eq_int()
340 mthca_warn(dev, "CQ %s on CQN %06x\n", mthca_eq_int()
344 mthca_cq_event(dev, be32_to_cpu(eqe->event.cq_err.cqn), mthca_eq_int()
349 mthca_warn(dev, "EQ overrun on EQN %d\n", eq->eqn); mthca_eq_int()
357 mthca_warn(dev, "Unhandled event %02x(%02x) on EQ %d\n", mthca_eq_int()
379 set_eq_ci(dev, eq, eq->cons_index); mthca_eq_int()
393 struct mthca_dev *dev = dev_ptr; mthca_tavor_interrupt() local
397 if (dev->eq_table.clr_mask) mthca_tavor_interrupt()
398 writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); mthca_tavor_interrupt()
400 ecr = readl(dev->eq_regs.tavor.ecr_base + 4); mthca_tavor_interrupt()
404 writel(ecr, dev->eq_regs.tavor.ecr_base + mthca_tavor_interrupt()
408 if (ecr & dev->eq_table.eq[i].eqn_mask) { mthca_tavor_interrupt()
409 if (mthca_eq_int(dev, &dev->eq_table.eq[i])) mthca_tavor_interrupt()
410 tavor_set_eq_ci(dev, &dev->eq_table.eq[i], mthca_tavor_interrupt()
411 dev->eq_table.eq[i].cons_index); mthca_tavor_interrupt()
412 tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); mthca_tavor_interrupt()
421 struct mthca_dev *dev = eq->dev; mthca_tavor_msi_x_interrupt() local
423 mthca_eq_int(dev, eq); mthca_tavor_msi_x_interrupt()
424 tavor_set_eq_ci(dev, eq, eq->cons_index); mthca_tavor_msi_x_interrupt()
425 tavor_eq_req_not(dev, eq->eqn); mthca_tavor_msi_x_interrupt()
433 struct mthca_dev *dev = dev_ptr; mthca_arbel_interrupt() local
437 if (dev->eq_table.clr_mask) mthca_arbel_interrupt()
438 writel(dev->eq_table.clr_mask, dev->eq_table.clr_int); mthca_arbel_interrupt()
441 if (mthca_eq_int(dev, &dev->eq_table.eq[i])) { mthca_arbel_interrupt()
443 arbel_set_eq_ci(dev, &dev->eq_table.eq[i], mthca_arbel_interrupt()
444 dev->eq_table.eq[i].cons_index); mthca_arbel_interrupt()
447 arbel_eq_req_not(dev, dev->eq_table.arm_mask); mthca_arbel_interrupt()
455 struct mthca_dev *dev = eq->dev; mthca_arbel_msi_x_interrupt() local
457 mthca_eq_int(dev, eq); mthca_arbel_msi_x_interrupt()
458 arbel_set_eq_ci(dev, eq, eq->cons_index); mthca_arbel_msi_x_interrupt()
459 arbel_eq_req_not(dev, eq->eqn_mask); mthca_arbel_msi_x_interrupt()
465 static int mthca_create_eq(struct mthca_dev *dev, mthca_create_eq() argument
478 eq->dev = dev; mthca_create_eq()
494 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); mthca_create_eq()
500 eq->page_list[i].buf = dma_alloc_coherent(&dev->pdev->dev, mthca_create_eq()
514 eq->eqn = mthca_alloc(&dev->eq_table.alloc); mthca_create_eq()
518 err = mthca_mr_alloc_phys(dev, dev->driver_pd.pd_num, mthca_create_eq()
532 if (mthca_is_memfree(dev)) mthca_create_eq()
536 if (mthca_is_memfree(dev)) { mthca_create_eq()
537 eq_context->arbel_pd = cpu_to_be32(dev->driver_pd.pd_num); mthca_create_eq()
539 eq_context->logsize_usrpage |= cpu_to_be32(dev->driver_uar.index); mthca_create_eq()
540 eq_context->tavor_pd = cpu_to_be32(dev->driver_pd.pd_num); mthca_create_eq()
545 err = mthca_SW2HW_EQ(dev, mailbox, eq->eqn); mthca_create_eq()
547 mthca_warn(dev, "SW2HW_EQ returned %d\n", err); mthca_create_eq()
552 mthca_free_mailbox(dev, mailbox); mthca_create_eq()
557 dev->eq_table.arm_mask |= eq->eqn_mask; mthca_create_eq()
559 mthca_dbg(dev, "Allocated EQ %d with %d entries\n", mthca_create_eq()
565 mthca_free_mr(dev, &eq->mr); mthca_create_eq()
568 mthca_free(&dev->eq_table.alloc, eq->eqn); mthca_create_eq()
573 dma_free_coherent(&dev->pdev->dev, PAGE_SIZE, mthca_create_eq()
578 mthca_free_mailbox(dev, mailbox); mthca_create_eq()
588 static void mthca_free_eq(struct mthca_dev *dev, mthca_free_eq() argument
597 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); mthca_free_eq()
601 err = mthca_HW2SW_EQ(dev, mailbox, eq->eqn); mthca_free_eq()
603 mthca_warn(dev, "HW2SW_EQ returned %d\n", err); mthca_free_eq()
605 dev->eq_table.arm_mask &= ~eq->eqn_mask; mthca_free_eq()
608 mthca_dbg(dev, "Dumping EQ context %02x:\n", eq->eqn); mthca_free_eq()
618 mthca_free_mr(dev, &eq->mr); mthca_free_eq()
620 pci_free_consistent(dev->pdev, PAGE_SIZE, mthca_free_eq()
625 mthca_free_mailbox(dev, mailbox); mthca_free_eq()
628 static void mthca_free_irqs(struct mthca_dev *dev) mthca_free_irqs() argument
632 if (dev->eq_table.have_irq) mthca_free_irqs()
633 free_irq(dev->pdev->irq, dev); mthca_free_irqs()
635 if (dev->eq_table.eq[i].have_irq) { mthca_free_irqs()
636 free_irq(dev->eq_table.eq[i].msi_x_vector, mthca_free_irqs()
637 dev->eq_table.eq + i); mthca_free_irqs()
638 dev->eq_table.eq[i].have_irq = 0; mthca_free_irqs()
642 static int mthca_map_reg(struct mthca_dev *dev, mthca_map_reg() argument
646 phys_addr_t base = pci_resource_start(dev->pdev, 0); mthca_map_reg()
655 static int mthca_map_eq_regs(struct mthca_dev *dev) mthca_map_eq_regs() argument
657 if (mthca_is_memfree(dev)) { mthca_map_eq_regs()
665 if (mthca_map_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & mthca_map_eq_regs()
666 dev->fw.arbel.clr_int_base, MTHCA_CLR_INT_SIZE, mthca_map_eq_regs()
667 &dev->clr_base)) { mthca_map_eq_regs()
668 mthca_err(dev, "Couldn't map interrupt clear register, " mthca_map_eq_regs()
677 if (mthca_map_reg(dev, ((pci_resource_len(dev->pdev, 0) - 1) & mthca_map_eq_regs()
678 dev->fw.arbel.eq_arm_base) + 4, 4, mthca_map_eq_regs()
679 &dev->eq_regs.arbel.eq_arm)) { mthca_map_eq_regs()
680 mthca_err(dev, "Couldn't map EQ arm register, aborting.\n"); mthca_map_eq_regs()
681 iounmap(dev->clr_base); mthca_map_eq_regs()
685 if (mthca_map_reg(dev, (pci_resource_len(dev->pdev, 0) - 1) & mthca_map_eq_regs()
686 dev->fw.arbel.eq_set_ci_base, mthca_map_eq_regs()
688 &dev->eq_regs.arbel.eq_set_ci_base)) { mthca_map_eq_regs()
689 mthca_err(dev, "Couldn't map EQ CI register, aborting.\n"); mthca_map_eq_regs()
690 iounmap(dev->eq_regs.arbel.eq_arm); mthca_map_eq_regs()
691 iounmap(dev->clr_base); mthca_map_eq_regs()
695 if (mthca_map_reg(dev, MTHCA_CLR_INT_BASE, MTHCA_CLR_INT_SIZE, mthca_map_eq_regs()
696 &dev->clr_base)) { mthca_map_eq_regs()
697 mthca_err(dev, "Couldn't map interrupt clear register, " mthca_map_eq_regs()
702 if (mthca_map_reg(dev, MTHCA_ECR_BASE, mthca_map_eq_regs()
704 &dev->eq_regs.tavor.ecr_base)) { mthca_map_eq_regs()
705 mthca_err(dev, "Couldn't map ecr register, " mthca_map_eq_regs()
707 iounmap(dev->clr_base); mthca_map_eq_regs()
716 static void mthca_unmap_eq_regs(struct mthca_dev *dev) mthca_unmap_eq_regs() argument
718 if (mthca_is_memfree(dev)) { mthca_unmap_eq_regs()
719 iounmap(dev->eq_regs.arbel.eq_set_ci_base); mthca_unmap_eq_regs()
720 iounmap(dev->eq_regs.arbel.eq_arm); mthca_unmap_eq_regs()
721 iounmap(dev->clr_base); mthca_unmap_eq_regs()
723 iounmap(dev->eq_regs.tavor.ecr_base); mthca_unmap_eq_regs()
724 iounmap(dev->clr_base); mthca_unmap_eq_regs()
728 int mthca_map_eq_icm(struct mthca_dev *dev, u64 icm_virt) mthca_map_eq_icm() argument
738 dev->eq_table.icm_virt = icm_virt; mthca_map_eq_icm()
739 dev->eq_table.icm_page = alloc_page(GFP_HIGHUSER); mthca_map_eq_icm()
740 if (!dev->eq_table.icm_page) mthca_map_eq_icm()
742 dev->eq_table.icm_dma = pci_map_page(dev->pdev, dev->eq_table.icm_page, 0, mthca_map_eq_icm()
744 if (pci_dma_mapping_error(dev->pdev, dev->eq_table.icm_dma)) { mthca_map_eq_icm()
745 __free_page(dev->eq_table.icm_page); mthca_map_eq_icm()
749 ret = mthca_MAP_ICM_page(dev, dev->eq_table.icm_dma, icm_virt); mthca_map_eq_icm()
751 pci_unmap_page(dev->pdev, dev->eq_table.icm_dma, PAGE_SIZE, mthca_map_eq_icm()
753 __free_page(dev->eq_table.icm_page); mthca_map_eq_icm()
759 void mthca_unmap_eq_icm(struct mthca_dev *dev) mthca_unmap_eq_icm() argument
761 mthca_UNMAP_ICM(dev, dev->eq_table.icm_virt, 1); mthca_unmap_eq_icm()
762 pci_unmap_page(dev->pdev, dev->eq_table.icm_dma, PAGE_SIZE, mthca_unmap_eq_icm()
764 __free_page(dev->eq_table.icm_page); mthca_unmap_eq_icm()
767 int mthca_init_eq_table(struct mthca_dev *dev) mthca_init_eq_table() argument
773 err = mthca_alloc_init(&dev->eq_table.alloc, mthca_init_eq_table()
774 dev->limits.num_eqs, mthca_init_eq_table()
775 dev->limits.num_eqs - 1, mthca_init_eq_table()
776 dev->limits.reserved_eqs); mthca_init_eq_table()
780 err = mthca_map_eq_regs(dev); mthca_init_eq_table()
784 if (dev->mthca_flags & MTHCA_FLAG_MSI_X) { mthca_init_eq_table()
785 dev->eq_table.clr_mask = 0; mthca_init_eq_table()
787 dev->eq_table.clr_mask = mthca_init_eq_table()
788 swab32(1 << (dev->eq_table.inta_pin & 31)); mthca_init_eq_table()
789 dev->eq_table.clr_int = dev->clr_base + mthca_init_eq_table()
790 (dev->eq_table.inta_pin < 32 ? 4 : 0); mthca_init_eq_table()
793 dev->eq_table.arm_mask = 0; mthca_init_eq_table()
795 intr = dev->eq_table.inta_pin; mthca_init_eq_table()
797 err = mthca_create_eq(dev, dev->limits.num_cqs + MTHCA_NUM_SPARE_EQE, mthca_init_eq_table()
798 (dev->mthca_flags & MTHCA_FLAG_MSI_X) ? 128 : intr, mthca_init_eq_table()
799 &dev->eq_table.eq[MTHCA_EQ_COMP]); mthca_init_eq_table()
803 err = mthca_create_eq(dev, MTHCA_NUM_ASYNC_EQE + MTHCA_NUM_SPARE_EQE, mthca_init_eq_table()
804 (dev->mthca_flags & MTHCA_FLAG_MSI_X) ? 129 : intr, mthca_init_eq_table()
805 &dev->eq_table.eq[MTHCA_EQ_ASYNC]); mthca_init_eq_table()
809 err = mthca_create_eq(dev, MTHCA_NUM_CMD_EQE + MTHCA_NUM_SPARE_EQE, mthca_init_eq_table()
810 (dev->mthca_flags & MTHCA_FLAG_MSI_X) ? 130 : intr, mthca_init_eq_table()
811 &dev->eq_table.eq[MTHCA_EQ_CMD]); mthca_init_eq_table()
815 if (dev->mthca_flags & MTHCA_FLAG_MSI_X) { mthca_init_eq_table()
823 snprintf(dev->eq_table.eq[i].irq_name, mthca_init_eq_table()
826 pci_name(dev->pdev)); mthca_init_eq_table()
827 err = request_irq(dev->eq_table.eq[i].msi_x_vector, mthca_init_eq_table()
828 mthca_is_memfree(dev) ? mthca_init_eq_table()
831 0, dev->eq_table.eq[i].irq_name, mthca_init_eq_table()
832 dev->eq_table.eq + i); mthca_init_eq_table()
835 dev->eq_table.eq[i].have_irq = 1; mthca_init_eq_table()
838 snprintf(dev->eq_table.eq[0].irq_name, IB_DEVICE_NAME_MAX, mthca_init_eq_table()
839 DRV_NAME "@pci:%s", pci_name(dev->pdev)); mthca_init_eq_table()
840 err = request_irq(dev->pdev->irq, mthca_init_eq_table()
841 mthca_is_memfree(dev) ? mthca_init_eq_table()
844 IRQF_SHARED, dev->eq_table.eq[0].irq_name, dev); mthca_init_eq_table()
847 dev->eq_table.have_irq = 1; mthca_init_eq_table()
850 err = mthca_MAP_EQ(dev, async_mask(dev), mthca_init_eq_table()
851 0, dev->eq_table.eq[MTHCA_EQ_ASYNC].eqn); mthca_init_eq_table()
853 mthca_warn(dev, "MAP_EQ for async EQ %d failed (%d)\n", mthca_init_eq_table()
854 dev->eq_table.eq[MTHCA_EQ_ASYNC].eqn, err); mthca_init_eq_table()
856 err = mthca_MAP_EQ(dev, MTHCA_CMD_EVENT_MASK, mthca_init_eq_table()
857 0, dev->eq_table.eq[MTHCA_EQ_CMD].eqn); mthca_init_eq_table()
859 mthca_warn(dev, "MAP_EQ for cmd EQ %d failed (%d)\n", mthca_init_eq_table()
860 dev->eq_table.eq[MTHCA_EQ_CMD].eqn, err); mthca_init_eq_table()
863 if (mthca_is_memfree(dev)) mthca_init_eq_table()
864 arbel_eq_req_not(dev, dev->eq_table.eq[i].eqn_mask); mthca_init_eq_table()
866 tavor_eq_req_not(dev, dev->eq_table.eq[i].eqn); mthca_init_eq_table()
871 mthca_free_irqs(dev); mthca_init_eq_table()
872 mthca_free_eq(dev, &dev->eq_table.eq[MTHCA_EQ_CMD]); mthca_init_eq_table()
875 mthca_free_eq(dev, &dev->eq_table.eq[MTHCA_EQ_ASYNC]); mthca_init_eq_table()
878 mthca_free_eq(dev, &dev->eq_table.eq[MTHCA_EQ_COMP]); mthca_init_eq_table()
881 mthca_unmap_eq_regs(dev); mthca_init_eq_table()
884 mthca_alloc_cleanup(&dev->eq_table.alloc); mthca_init_eq_table()
888 void mthca_cleanup_eq_table(struct mthca_dev *dev) mthca_cleanup_eq_table() argument
892 mthca_free_irqs(dev); mthca_cleanup_eq_table()
894 mthca_MAP_EQ(dev, async_mask(dev), mthca_cleanup_eq_table()
895 1, dev->eq_table.eq[MTHCA_EQ_ASYNC].eqn); mthca_cleanup_eq_table()
896 mthca_MAP_EQ(dev, MTHCA_CMD_EVENT_MASK, mthca_cleanup_eq_table()
897 1, dev->eq_table.eq[MTHCA_EQ_CMD].eqn); mthca_cleanup_eq_table()
900 mthca_free_eq(dev, &dev->eq_table.eq[i]); mthca_cleanup_eq_table()
902 mthca_unmap_eq_regs(dev); mthca_cleanup_eq_table()
904 mthca_alloc_cleanup(&dev->eq_table.alloc); mthca_cleanup_eq_table()
H A Dmthca_mr.c190 static u32 mthca_alloc_mtt_range(struct mthca_dev *dev, int order, mthca_alloc_mtt_range() argument
198 if (mthca_is_memfree(dev)) mthca_alloc_mtt_range()
199 if (mthca_table_get_range(dev, dev->mr_table.mtt_table, seg, mthca_alloc_mtt_range()
208 static struct mthca_mtt *__mthca_alloc_mtt(struct mthca_dev *dev, int size, __mthca_alloc_mtt() argument
223 for (i = dev->limits.mtt_seg_size / 8; i < size; i <<= 1) __mthca_alloc_mtt()
226 mtt->first_seg = mthca_alloc_mtt_range(dev, mtt->order, buddy); __mthca_alloc_mtt()
235 struct mthca_mtt *mthca_alloc_mtt(struct mthca_dev *dev, int size) mthca_alloc_mtt() argument
237 return __mthca_alloc_mtt(dev, size, &dev->mr_table.mtt_buddy); mthca_alloc_mtt()
240 void mthca_free_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt) mthca_free_mtt() argument
247 mthca_table_put_range(dev, dev->mr_table.mtt_table, mthca_free_mtt()
254 static int __mthca_write_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt, __mthca_write_mtt() argument
262 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); __mthca_write_mtt()
268 mtt_entry[0] = cpu_to_be64(dev->mr_table.mtt_base + __mthca_write_mtt()
269 mtt->first_seg * dev->limits.mtt_seg_size + __mthca_write_mtt()
283 err = mthca_WRITE_MTT(dev, mailbox, (i + 1) & ~1); __mthca_write_mtt()
285 mthca_warn(dev, "WRITE_MTT failed (%d)\n", err); __mthca_write_mtt()
295 mthca_free_mailbox(dev, mailbox); __mthca_write_mtt()
299 int mthca_write_mtt_size(struct mthca_dev *dev) mthca_write_mtt_size() argument
301 if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy || mthca_write_mtt_size()
302 !(dev->mthca_flags & MTHCA_FLAG_FMR)) mthca_write_mtt_size()
312 return mthca_is_memfree(dev) ? (PAGE_SIZE / sizeof (u64)) : 0x7ffffff; mthca_write_mtt_size()
315 static void mthca_tavor_write_mtt_seg(struct mthca_dev *dev, mthca_tavor_write_mtt_seg() argument
322 mtts = dev->mr_table.tavor_fmr.mtt_base + mtt->first_seg * dev->limits.mtt_seg_size + mthca_tavor_write_mtt_seg()
329 static void mthca_arbel_write_mtt_seg(struct mthca_dev *dev, mthca_arbel_write_mtt_seg() argument
341 BUG_ON(s % dev->limits.mtt_seg_size); mthca_arbel_write_mtt_seg()
343 mtts = mthca_table_find(dev->mr_table.mtt_table, mtt->first_seg + mthca_arbel_write_mtt_seg()
344 s / dev->limits.mtt_seg_size, &dma_handle); mthca_arbel_write_mtt_seg()
348 dma_sync_single_for_cpu(&dev->pdev->dev, dma_handle, mthca_arbel_write_mtt_seg()
354 dma_sync_single_for_device(&dev->pdev->dev, dma_handle, mthca_arbel_write_mtt_seg()
358 int mthca_write_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt, mthca_write_mtt() argument
361 int size = mthca_write_mtt_size(dev); mthca_write_mtt()
364 if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy || mthca_write_mtt()
365 !(dev->mthca_flags & MTHCA_FLAG_FMR)) mthca_write_mtt()
366 return __mthca_write_mtt(dev, mtt, start_index, buffer_list, list_len); mthca_write_mtt()
370 if (mthca_is_memfree(dev)) mthca_write_mtt()
371 mthca_arbel_write_mtt_seg(dev, mtt, start_index, mthca_write_mtt()
374 mthca_tavor_write_mtt_seg(dev, mtt, start_index, mthca_write_mtt()
405 static inline u32 hw_index_to_key(struct mthca_dev *dev, u32 ind) hw_index_to_key() argument
407 if (mthca_is_memfree(dev)) hw_index_to_key()
413 static inline u32 key_to_hw_index(struct mthca_dev *dev, u32 key) key_to_hw_index() argument
415 if (mthca_is_memfree(dev)) key_to_hw_index()
421 static inline u32 adjust_key(struct mthca_dev *dev, u32 key) adjust_key() argument
423 if (dev->mthca_flags & MTHCA_FLAG_SINAI_OPT) adjust_key()
429 int mthca_mr_alloc(struct mthca_dev *dev, u32 pd, int buffer_size_shift, mthca_mr_alloc() argument
440 key = mthca_alloc(&dev->mr_table.mpt_alloc); mthca_mr_alloc()
443 key = adjust_key(dev, key); mthca_mr_alloc()
444 mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key); mthca_mr_alloc()
446 if (mthca_is_memfree(dev)) { mthca_mr_alloc()
447 err = mthca_table_get(dev, dev->mr_table.mpt_table, key); mthca_mr_alloc()
452 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); mthca_mr_alloc()
477 cpu_to_be64(dev->mr_table.mtt_base + mthca_mr_alloc()
478 mr->mtt->first_seg * dev->limits.mtt_seg_size); mthca_mr_alloc()
481 mthca_dbg(dev, "Dumping MPT entry %08x:\n", mr->ibmr.lkey); mthca_mr_alloc()
491 err = mthca_SW2HW_MPT(dev, mailbox, mthca_mr_alloc()
492 key & (dev->limits.num_mpts - 1)); mthca_mr_alloc()
494 mthca_warn(dev, "SW2HW_MPT failed (%d)\n", err); mthca_mr_alloc()
498 mthca_free_mailbox(dev, mailbox); mthca_mr_alloc()
502 mthca_free_mailbox(dev, mailbox); mthca_mr_alloc()
505 mthca_table_put(dev, dev->mr_table.mpt_table, key); mthca_mr_alloc()
508 mthca_free(&dev->mr_table.mpt_alloc, key); mthca_mr_alloc()
512 int mthca_mr_alloc_notrans(struct mthca_dev *dev, u32 pd, mthca_mr_alloc_notrans() argument
516 return mthca_mr_alloc(dev, pd, 12, 0, ~0ULL, access, mr); mthca_mr_alloc_notrans()
519 int mthca_mr_alloc_phys(struct mthca_dev *dev, u32 pd, mthca_mr_alloc_phys() argument
526 mr->mtt = mthca_alloc_mtt(dev, list_len); mthca_mr_alloc_phys()
530 err = mthca_write_mtt(dev, mr->mtt, 0, buffer_list, list_len); mthca_mr_alloc_phys()
532 mthca_free_mtt(dev, mr->mtt); mthca_mr_alloc_phys()
536 err = mthca_mr_alloc(dev, pd, buffer_size_shift, iova, mthca_mr_alloc_phys()
539 mthca_free_mtt(dev, mr->mtt); mthca_mr_alloc_phys()
545 static void mthca_free_region(struct mthca_dev *dev, u32 lkey) mthca_free_region() argument
547 mthca_table_put(dev, dev->mr_table.mpt_table, mthca_free_region()
548 key_to_hw_index(dev, lkey)); mthca_free_region()
550 mthca_free(&dev->mr_table.mpt_alloc, key_to_hw_index(dev, lkey)); mthca_free_region()
553 void mthca_free_mr(struct mthca_dev *dev, struct mthca_mr *mr) mthca_free_mr() argument
557 err = mthca_HW2SW_MPT(dev, NULL, mthca_free_mr()
558 key_to_hw_index(dev, mr->ibmr.lkey) & mthca_free_mr()
559 (dev->limits.num_mpts - 1)); mthca_free_mr()
561 mthca_warn(dev, "HW2SW_MPT failed (%d)\n", err); mthca_free_mr()
563 mthca_free_region(dev, mr->ibmr.lkey); mthca_free_mr()
564 mthca_free_mtt(dev, mr->mtt); mthca_free_mr()
567 int mthca_fmr_alloc(struct mthca_dev *dev, u32 pd, mthca_fmr_alloc() argument
582 if (mthca_is_memfree(dev) && mthca_fmr_alloc()
588 key = mthca_alloc(&dev->mr_table.mpt_alloc); mthca_fmr_alloc()
591 key = adjust_key(dev, key); mthca_fmr_alloc()
593 idx = key & (dev->limits.num_mpts - 1); mthca_fmr_alloc()
594 mr->ibmr.rkey = mr->ibmr.lkey = hw_index_to_key(dev, key); mthca_fmr_alloc()
596 if (mthca_is_memfree(dev)) { mthca_fmr_alloc()
597 err = mthca_table_get(dev, dev->mr_table.mpt_table, key); mthca_fmr_alloc()
601 mr->mem.arbel.mpt = mthca_table_find(dev->mr_table.mpt_table, key, NULL); mthca_fmr_alloc()
604 mr->mem.tavor.mpt = dev->mr_table.tavor_fmr.mpt_base + mthca_fmr_alloc()
607 mr->mtt = __mthca_alloc_mtt(dev, list_len, dev->mr_table.fmr_mtt_buddy); mthca_fmr_alloc()
613 mtt_seg = mr->mtt->first_seg * dev->limits.mtt_seg_size; mthca_fmr_alloc()
615 if (mthca_is_memfree(dev)) { mthca_fmr_alloc()
616 mr->mem.arbel.mtts = mthca_table_find(dev->mr_table.mtt_table, mthca_fmr_alloc()
621 mr->mem.tavor.mtts = dev->mr_table.tavor_fmr.mtt_base + mtt_seg; mthca_fmr_alloc()
623 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); mthca_fmr_alloc()
641 mpt_entry->mtt_seg = cpu_to_be64(dev->mr_table.mtt_base + mtt_seg); mthca_fmr_alloc()
644 mthca_dbg(dev, "Dumping MPT entry %08x:\n", mr->ibmr.lkey); mthca_fmr_alloc()
654 err = mthca_SW2HW_MPT(dev, mailbox, mthca_fmr_alloc()
655 key & (dev->limits.num_mpts - 1)); mthca_fmr_alloc()
657 mthca_warn(dev, "SW2HW_MPT failed (%d)\n", err); mthca_fmr_alloc()
661 mthca_free_mailbox(dev, mailbox); mthca_fmr_alloc()
665 mthca_free_mailbox(dev, mailbox); mthca_fmr_alloc()
668 mthca_free_mtt(dev, mr->mtt); mthca_fmr_alloc()
671 mthca_table_put(dev, dev->mr_table.mpt_table, key); mthca_fmr_alloc()
674 mthca_free(&dev->mr_table.mpt_alloc, key); mthca_fmr_alloc()
678 int mthca_free_fmr(struct mthca_dev *dev, struct mthca_fmr *fmr) mthca_free_fmr() argument
683 mthca_free_region(dev, fmr->ibmr.lkey); mthca_free_fmr()
684 mthca_free_mtt(dev, fmr->mtt); mthca_free_fmr()
721 struct mthca_dev *dev = to_mdev(ibfmr->device); mthca_tavor_map_phys_fmr() local
733 key += dev->limits.num_mpts; mthca_tavor_map_phys_fmr()
762 struct mthca_dev *dev = to_mdev(ibfmr->device); mthca_arbel_map_phys_fmr() local
773 if (dev->mthca_flags & MTHCA_FLAG_SINAI_OPT) mthca_arbel_map_phys_fmr()
776 key += dev->limits.num_mpts; mthca_arbel_map_phys_fmr()
783 dma_sync_single_for_cpu(&dev->pdev->dev, fmr->mem.arbel.dma_handle, mthca_arbel_map_phys_fmr()
790 dma_sync_single_for_device(&dev->pdev->dev, fmr->mem.arbel.dma_handle, mthca_arbel_map_phys_fmr()
807 void mthca_tavor_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr) mthca_tavor_fmr_unmap() argument
817 void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr) mthca_arbel_fmr_unmap() argument
827 int mthca_init_mr_table(struct mthca_dev *dev) mthca_init_mr_table() argument
832 err = mthca_alloc_init(&dev->mr_table.mpt_alloc, mthca_init_mr_table()
833 dev->limits.num_mpts, mthca_init_mr_table()
834 ~0, dev->limits.reserved_mrws); mthca_init_mr_table()
838 if (!mthca_is_memfree(dev) && mthca_init_mr_table()
839 (dev->mthca_flags & MTHCA_FLAG_DDR_HIDDEN)) mthca_init_mr_table()
840 dev->limits.fmr_reserved_mtts = 0; mthca_init_mr_table()
842 dev->mthca_flags |= MTHCA_FLAG_FMR; mthca_init_mr_table()
844 if (dev->mthca_flags & MTHCA_FLAG_SINAI_OPT) mthca_init_mr_table()
845 mthca_dbg(dev, "Memory key throughput optimization activated.\n"); mthca_init_mr_table()
847 err = mthca_buddy_init(&dev->mr_table.mtt_buddy, mthca_init_mr_table()
848 fls(dev->limits.num_mtt_segs - 1)); mthca_init_mr_table()
853 dev->mr_table.tavor_fmr.mpt_base = NULL; mthca_init_mr_table()
854 dev->mr_table.tavor_fmr.mtt_base = NULL; mthca_init_mr_table()
856 if (dev->limits.fmr_reserved_mtts) { mthca_init_mr_table()
857 i = fls(dev->limits.fmr_reserved_mtts - 1); mthca_init_mr_table()
860 mthca_warn(dev, "Unable to reserve 2^31 FMR MTTs.\n"); mthca_init_mr_table()
866 mtts = dev->limits.num_mtt_segs; mthca_init_mr_table()
867 mpts = dev->limits.num_mpts; mthca_init_mr_table()
870 if (!mthca_is_memfree(dev) && mthca_init_mr_table()
871 (dev->mthca_flags & MTHCA_FLAG_FMR)) { mthca_init_mr_table()
873 addr = pci_resource_start(dev->pdev, 4) + mthca_init_mr_table()
874 ((pci_resource_len(dev->pdev, 4) - 1) & mthca_init_mr_table()
875 dev->mr_table.mpt_base); mthca_init_mr_table()
877 dev->mr_table.tavor_fmr.mpt_base = mthca_init_mr_table()
880 if (!dev->mr_table.tavor_fmr.mpt_base) { mthca_init_mr_table()
881 mthca_warn(dev, "MPT ioremap for FMR failed.\n"); mthca_init_mr_table()
886 addr = pci_resource_start(dev->pdev, 4) + mthca_init_mr_table()
887 ((pci_resource_len(dev->pdev, 4) - 1) & mthca_init_mr_table()
888 dev->mr_table.mtt_base); mthca_init_mr_table()
890 dev->mr_table.tavor_fmr.mtt_base = mthca_init_mr_table()
891 ioremap(addr, mtts * dev->limits.mtt_seg_size); mthca_init_mr_table()
892 if (!dev->mr_table.tavor_fmr.mtt_base) { mthca_init_mr_table()
893 mthca_warn(dev, "MTT ioremap for FMR failed.\n"); mthca_init_mr_table()
899 if (dev->limits.fmr_reserved_mtts) { mthca_init_mr_table()
900 err = mthca_buddy_init(&dev->mr_table.tavor_fmr.mtt_buddy, fls(mtts - 1)); mthca_init_mr_table()
905 err = mthca_buddy_alloc(&dev->mr_table.mtt_buddy, fls(mtts - 1)); mthca_init_mr_table()
909 dev->mr_table.fmr_mtt_buddy = mthca_init_mr_table()
910 &dev->mr_table.tavor_fmr.mtt_buddy; mthca_init_mr_table()
912 dev->mr_table.fmr_mtt_buddy = &dev->mr_table.mtt_buddy; mthca_init_mr_table()
915 if (dev->limits.reserved_mtts) { mthca_init_mr_table()
916 i = fls(dev->limits.reserved_mtts - 1); mthca_init_mr_table()
918 if (mthca_alloc_mtt_range(dev, i, mthca_init_mr_table()
919 dev->mr_table.fmr_mtt_buddy) == -1) { mthca_init_mr_table()
920 mthca_warn(dev, "MTT table of order %d is too small.\n", mthca_init_mr_table()
921 dev->mr_table.fmr_mtt_buddy->max_order); mthca_init_mr_table()
931 if (dev->limits.fmr_reserved_mtts) mthca_init_mr_table()
932 mthca_buddy_cleanup(&dev->mr_table.tavor_fmr.mtt_buddy); mthca_init_mr_table()
935 if (dev->mr_table.tavor_fmr.mtt_base) mthca_init_mr_table()
936 iounmap(dev->mr_table.tavor_fmr.mtt_base); mthca_init_mr_table()
939 if (dev->mr_table.tavor_fmr.mpt_base) mthca_init_mr_table()
940 iounmap(dev->mr_table.tavor_fmr.mpt_base); mthca_init_mr_table()
943 mthca_buddy_cleanup(&dev->mr_table.mtt_buddy); mthca_init_mr_table()
946 mthca_alloc_cleanup(&dev->mr_table.mpt_alloc); mthca_init_mr_table()
951 void mthca_cleanup_mr_table(struct mthca_dev *dev) mthca_cleanup_mr_table() argument
954 if (dev->limits.fmr_reserved_mtts) mthca_cleanup_mr_table()
955 mthca_buddy_cleanup(&dev->mr_table.tavor_fmr.mtt_buddy); mthca_cleanup_mr_table()
957 mthca_buddy_cleanup(&dev->mr_table.mtt_buddy); mthca_cleanup_mr_table()
959 if (dev->mr_table.tavor_fmr.mtt_base) mthca_cleanup_mr_table()
960 iounmap(dev->mr_table.tavor_fmr.mtt_base); mthca_cleanup_mr_table()
961 if (dev->mr_table.tavor_fmr.mpt_base) mthca_cleanup_mr_table()
962 iounmap(dev->mr_table.tavor_fmr.mpt_base); mthca_cleanup_mr_table()
964 mthca_alloc_cleanup(&dev->mr_table.mpt_alloc); mthca_cleanup_mr_table()
/linux-4.4.14/drivers/media/usb/hackrf/
H A Dhackrf.c120 struct device *dev; member in struct:hackrf_dev
191 static int hackrf_ctrl_msg(struct hackrf_dev *dev, u8 request, u16 value, hackrf_ctrl_msg() argument
204 pipe = usb_sndctrlpipe(dev->udev, 0); hackrf_ctrl_msg()
212 pipe = usb_rcvctrlpipe(dev->udev, 0); hackrf_ctrl_msg()
216 dev_err(dev->dev, "Unknown command %02x\n", request); hackrf_ctrl_msg()
223 memcpy(dev->buf, data, size); hackrf_ctrl_msg()
225 ret = usb_control_msg(dev->udev, pipe, request, requesttype, value, hackrf_ctrl_msg()
226 index, dev->buf, size, 1000); hackrf_ctrl_msg()
227 hackrf_dbg_usb_control_msg(dev->dev, request, requesttype, value, hackrf_ctrl_msg()
228 index, dev->buf, size); hackrf_ctrl_msg()
230 dev_err(dev->dev, "usb_control_msg() failed %d request %02x\n", hackrf_ctrl_msg()
237 memcpy(data, dev->buf, size); hackrf_ctrl_msg()
244 static int hackrf_set_params(struct hackrf_dev *dev) hackrf_set_params() argument
246 struct usb_interface *intf = dev->intf; hackrf_set_params()
250 const bool rx = test_bit(RX_ON, &dev->flags); hackrf_set_params()
251 const bool tx = test_bit(TX_ON, &dev->flags); hackrf_set_params()
274 dev_dbg(&intf->dev, "device is sleeping\n"); hackrf_set_params()
279 if (rx && test_and_clear_bit(RX_ADC_FREQUENCY, &dev->flags)) { hackrf_set_params()
280 dev_dbg(&intf->dev, "RX ADC frequency=%u Hz\n", dev->f_adc); hackrf_set_params()
281 uitmp1 = dev->f_adc; hackrf_set_params()
283 set_bit(TX_DAC_FREQUENCY, &dev->flags); hackrf_set_params()
284 } else if (tx && test_and_clear_bit(TX_DAC_FREQUENCY, &dev->flags)) { hackrf_set_params()
285 dev_dbg(&intf->dev, "TX DAC frequency=%u Hz\n", dev->f_dac); hackrf_set_params()
286 uitmp1 = dev->f_dac; hackrf_set_params()
288 set_bit(RX_ADC_FREQUENCY, &dev->flags); hackrf_set_params()
301 ret = hackrf_ctrl_msg(dev, CMD_SAMPLE_RATE_SET, 0, 0, buf, 8); hackrf_set_params()
307 if (rx && test_and_clear_bit(RX_BANDWIDTH, &dev->flags)) { hackrf_set_params()
308 if (dev->rx_bandwidth_auto->val == true) hackrf_set_params()
309 uitmp = dev->f_adc; hackrf_set_params()
311 uitmp = dev->rx_bandwidth->val; hackrf_set_params()
319 dev->rx_bandwidth->val = uitmp; hackrf_set_params()
320 dev->rx_bandwidth->cur.val = uitmp; hackrf_set_params()
321 dev_dbg(&intf->dev, "RX bandwidth selected=%u\n", uitmp); hackrf_set_params()
322 set_bit(TX_BANDWIDTH, &dev->flags); hackrf_set_params()
323 } else if (tx && test_and_clear_bit(TX_BANDWIDTH, &dev->flags)) { hackrf_set_params()
324 if (dev->tx_bandwidth_auto->val == true) hackrf_set_params()
325 uitmp = dev->f_dac; hackrf_set_params()
327 uitmp = dev->tx_bandwidth->val; hackrf_set_params()
335 dev->tx_bandwidth->val = uitmp; hackrf_set_params()
336 dev->tx_bandwidth->cur.val = uitmp; hackrf_set_params()
337 dev_dbg(&intf->dev, "TX bandwidth selected=%u\n", uitmp); hackrf_set_params()
338 set_bit(RX_BANDWIDTH, &dev->flags); hackrf_set_params()
348 ret = hackrf_ctrl_msg(dev, CMD_BASEBAND_FILTER_BANDWIDTH_SET, hackrf_set_params()
355 if (rx && test_and_clear_bit(RX_RF_FREQUENCY, &dev->flags)) { hackrf_set_params()
356 dev_dbg(&intf->dev, "RX RF frequency=%u Hz\n", dev->f_rx); hackrf_set_params()
357 uitmp1 = dev->f_rx / 1000000; hackrf_set_params()
358 uitmp2 = dev->f_rx % 1000000; hackrf_set_params()
359 set_bit(TX_RF_FREQUENCY, &dev->flags); hackrf_set_params()
360 } else if (tx && test_and_clear_bit(TX_RF_FREQUENCY, &dev->flags)) { hackrf_set_params()
361 dev_dbg(&intf->dev, "TX RF frequency=%u Hz\n", dev->f_tx); hackrf_set_params()
362 uitmp1 = dev->f_tx / 1000000; hackrf_set_params()
363 uitmp2 = dev->f_tx % 1000000; hackrf_set_params()
364 set_bit(RX_RF_FREQUENCY, &dev->flags); hackrf_set_params()
377 ret = hackrf_ctrl_msg(dev, CMD_SET_FREQ, 0, 0, buf, 8); hackrf_set_params()
383 if (rx && test_and_clear_bit(RX_RF_GAIN, &dev->flags)) { hackrf_set_params()
384 dev_dbg(&intf->dev, "RX RF gain val=%d->%d\n", hackrf_set_params()
385 dev->rx_rf_gain->cur.val, dev->rx_rf_gain->val); hackrf_set_params()
387 u8tmp = (dev->rx_rf_gain->val) ? 1 : 0; hackrf_set_params()
388 ret = hackrf_ctrl_msg(dev, CMD_AMP_ENABLE, u8tmp, 0, NULL, 0); hackrf_set_params()
391 set_bit(TX_RF_GAIN, &dev->flags); hackrf_set_params()
395 if (tx && test_and_clear_bit(TX_RF_GAIN, &dev->flags)) { hackrf_set_params()
396 dev_dbg(&intf->dev, "TX RF gain val=%d->%d\n", hackrf_set_params()
397 dev->tx_rf_gain->cur.val, dev->tx_rf_gain->val); hackrf_set_params()
399 u8tmp = (dev->tx_rf_gain->val) ? 1 : 0; hackrf_set_params()
400 ret = hackrf_ctrl_msg(dev, CMD_AMP_ENABLE, u8tmp, 0, NULL, 0); hackrf_set_params()
403 set_bit(RX_RF_GAIN, &dev->flags); hackrf_set_params()
407 if (rx && test_and_clear_bit(RX_LNA_GAIN, &dev->flags)) { hackrf_set_params()
408 dev_dbg(dev->dev, "RX LNA gain val=%d->%d\n", hackrf_set_params()
409 dev->rx_lna_gain->cur.val, dev->rx_lna_gain->val); hackrf_set_params()
411 ret = hackrf_ctrl_msg(dev, CMD_SET_LNA_GAIN, 0, hackrf_set_params()
412 dev->rx_lna_gain->val, &u8tmp, 1); hackrf_set_params()
418 if (rx && test_and_clear_bit(RX_IF_GAIN, &dev->flags)) { hackrf_set_params()
419 dev_dbg(&intf->dev, "IF gain val=%d->%d\n", hackrf_set_params()
420 dev->rx_if_gain->cur.val, dev->rx_if_gain->val); hackrf_set_params()
422 ret = hackrf_ctrl_msg(dev, CMD_SET_VGA_GAIN, 0, hackrf_set_params()
423 dev->rx_if_gain->val, &u8tmp, 1); hackrf_set_params()
429 if (tx && test_and_clear_bit(TX_LNA_GAIN, &dev->flags)) { hackrf_set_params()
430 dev_dbg(&intf->dev, "TX LNA gain val=%d->%d\n", hackrf_set_params()
431 dev->tx_lna_gain->cur.val, dev->tx_lna_gain->val); hackrf_set_params()
433 ret = hackrf_ctrl_msg(dev, CMD_SET_TXVGA_GAIN, 0, hackrf_set_params()
434 dev->tx_lna_gain->val, &u8tmp, 1); hackrf_set_params()
441 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_set_params()
446 static struct hackrf_buffer *hackrf_get_next_buffer(struct hackrf_dev *dev, hackrf_get_next_buffer() argument
452 spin_lock_irqsave(&dev->buffer_list_lock, flags); hackrf_get_next_buffer()
459 spin_unlock_irqrestore(&dev->buffer_list_lock, flags); hackrf_get_next_buffer()
463 static void hackrf_copy_stream(struct hackrf_dev *dev, void *dst, void *src, hackrf_copy_stream() argument
469 if (unlikely(time_is_before_jiffies(dev->jiffies_next))) { hackrf_copy_stream()
472 dev->jiffies_next + msecs_to_jiffies(MSECS)); hackrf_copy_stream()
473 unsigned int samples = dev->sample - dev->sample_measured; hackrf_copy_stream()
475 dev->jiffies_next = jiffies + msecs_to_jiffies(MSECS); hackrf_copy_stream()
476 dev->sample_measured = dev->sample; hackrf_copy_stream()
477 dev_dbg(dev->dev, "slen=%u samples=%u msecs=%u sample rate=%lu\n", hackrf_copy_stream()
483 dev->sample += src_len / 2; hackrf_copy_stream()
492 struct hackrf_dev *dev = urb->context; hackrf_urb_complete_in() local
493 struct usb_interface *intf = dev->intf; hackrf_urb_complete_in()
497 dev_dbg_ratelimited(&intf->dev, "status=%d length=%u/%u\n", urb->status, hackrf_urb_complete_in()
509 dev_err_ratelimited(&intf->dev, "URB failed %d\n", urb->status); hackrf_urb_complete_in()
514 buffer = hackrf_get_next_buffer(dev, &dev->rx_buffer_list); hackrf_urb_complete_in()
516 dev->vb_full++; hackrf_urb_complete_in()
517 dev_notice_ratelimited(&intf->dev, hackrf_urb_complete_in()
519 dev->vb_full); hackrf_urb_complete_in()
525 hackrf_copy_stream(dev, vb2_plane_vaddr(&buffer->vb.vb2_buf, 0), hackrf_urb_complete_in()
528 buffer->vb.sequence = dev->sequence++; hackrf_urb_complete_in()
537 struct hackrf_dev *dev = urb->context; hackrf_urb_complete_out() local
538 struct usb_interface *intf = dev->intf; hackrf_urb_complete_out()
542 dev_dbg_ratelimited(&intf->dev, "status=%d length=%u/%u\n", urb->status, hackrf_urb_complete_out()
554 dev_err_ratelimited(&intf->dev, "URB failed %d\n", urb->status); hackrf_urb_complete_out()
558 buffer = hackrf_get_next_buffer(dev, &dev->tx_buffer_list); hackrf_urb_complete_out()
560 dev->vb_empty++; hackrf_urb_complete_out()
561 dev_notice_ratelimited(&intf->dev, hackrf_urb_complete_out()
563 dev->vb_empty); hackrf_urb_complete_out()
570 hackrf_copy_stream(dev, urb->transfer_buffer, hackrf_urb_complete_out()
573 buffer->vb.sequence = dev->sequence++; hackrf_urb_complete_out()
580 static int hackrf_kill_urbs(struct hackrf_dev *dev) hackrf_kill_urbs() argument
584 for (i = dev->urbs_submitted - 1; i >= 0; i--) { hackrf_kill_urbs()
585 dev_dbg(dev->dev, "kill urb=%d\n", i); hackrf_kill_urbs()
587 usb_kill_urb(dev->urb_list[i]); hackrf_kill_urbs()
589 dev->urbs_submitted = 0; hackrf_kill_urbs()
594 static int hackrf_submit_urbs(struct hackrf_dev *dev) hackrf_submit_urbs() argument
598 for (i = 0; i < dev->urbs_initialized; i++) { hackrf_submit_urbs()
599 dev_dbg(dev->dev, "submit urb=%d\n", i); hackrf_submit_urbs()
600 ret = usb_submit_urb(dev->urb_list[i], GFP_ATOMIC); hackrf_submit_urbs()
602 dev_err(dev->dev, "Could not submit URB no. %d - get them all back\n", hackrf_submit_urbs()
604 hackrf_kill_urbs(dev); hackrf_submit_urbs()
607 dev->urbs_submitted++; hackrf_submit_urbs()
613 static int hackrf_free_stream_bufs(struct hackrf_dev *dev) hackrf_free_stream_bufs() argument
615 if (dev->flags & USB_STATE_URB_BUF) { hackrf_free_stream_bufs()
616 while (dev->buf_num) { hackrf_free_stream_bufs()
617 dev->buf_num--; hackrf_free_stream_bufs()
618 dev_dbg(dev->dev, "free buf=%d\n", dev->buf_num); hackrf_free_stream_bufs()
619 usb_free_coherent(dev->udev, dev->buf_size, hackrf_free_stream_bufs()
620 dev->buf_list[dev->buf_num], hackrf_free_stream_bufs()
621 dev->dma_addr[dev->buf_num]); hackrf_free_stream_bufs()
624 dev->flags &= ~USB_STATE_URB_BUF; hackrf_free_stream_bufs()
629 static int hackrf_alloc_stream_bufs(struct hackrf_dev *dev) hackrf_alloc_stream_bufs() argument
631 dev->buf_num = 0; hackrf_alloc_stream_bufs()
632 dev->buf_size = BULK_BUFFER_SIZE; hackrf_alloc_stream_bufs()
634 dev_dbg(dev->dev, "all in all I will use %u bytes for streaming\n", hackrf_alloc_stream_bufs()
637 for (dev->buf_num = 0; dev->buf_num < MAX_BULK_BUFS; dev->buf_num++) { hackrf_alloc_stream_bufs()
638 dev->buf_list[dev->buf_num] = usb_alloc_coherent(dev->udev, hackrf_alloc_stream_bufs()
640 &dev->dma_addr[dev->buf_num]); hackrf_alloc_stream_bufs()
641 if (!dev->buf_list[dev->buf_num]) { hackrf_alloc_stream_bufs()
642 dev_dbg(dev->dev, "alloc buf=%d failed\n", hackrf_alloc_stream_bufs()
643 dev->buf_num); hackrf_alloc_stream_bufs()
644 hackrf_free_stream_bufs(dev); hackrf_alloc_stream_bufs()
648 dev_dbg(dev->dev, "alloc buf=%d %p (dma %llu)\n", dev->buf_num, hackrf_alloc_stream_bufs()
649 dev->buf_list[dev->buf_num], hackrf_alloc_stream_bufs()
650 (long long)dev->dma_addr[dev->buf_num]); hackrf_alloc_stream_bufs()
651 dev->flags |= USB_STATE_URB_BUF; hackrf_alloc_stream_bufs()
657 static int hackrf_free_urbs(struct hackrf_dev *dev) hackrf_free_urbs() argument
661 hackrf_kill_urbs(dev); hackrf_free_urbs()
663 for (i = dev->urbs_initialized - 1; i >= 0; i--) { hackrf_free_urbs()
664 if (dev->urb_list[i]) { hackrf_free_urbs()
665 dev_dbg(dev->dev, "free urb=%d\n", i); hackrf_free_urbs()
667 usb_free_urb(dev->urb_list[i]); hackrf_free_urbs()
670 dev->urbs_initialized = 0; hackrf_free_urbs()
675 static int hackrf_alloc_urbs(struct hackrf_dev *dev, bool rcv) hackrf_alloc_urbs() argument
682 pipe = usb_rcvbulkpipe(dev->udev, 0x81); hackrf_alloc_urbs()
685 pipe = usb_sndbulkpipe(dev->udev, 0x02); hackrf_alloc_urbs()
691 dev_dbg(dev->dev, "alloc urb=%d\n", i); hackrf_alloc_urbs()
692 dev->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC); hackrf_alloc_urbs()
693 if (!dev->urb_list[i]) { hackrf_alloc_urbs()
694 dev_dbg(dev->dev, "failed\n"); hackrf_alloc_urbs()
696 usb_free_urb(dev->urb_list[j]); hackrf_alloc_urbs()
699 usb_fill_bulk_urb(dev->urb_list[i], hackrf_alloc_urbs()
700 dev->udev, hackrf_alloc_urbs()
702 dev->buf_list[i], hackrf_alloc_urbs()
704 complete, dev); hackrf_alloc_urbs()
706 dev->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP; hackrf_alloc_urbs()
707 dev->urb_list[i]->transfer_dma = dev->dma_addr[i]; hackrf_alloc_urbs()
708 dev->urbs_initialized++; hackrf_alloc_urbs()
718 struct hackrf_dev *dev = container_of(v, struct hackrf_dev, v4l2_dev); hackrf_disconnect() local
720 dev_dbg(dev->dev, "\n"); hackrf_disconnect()
722 mutex_lock(&dev->vb_queue_lock); hackrf_disconnect()
723 mutex_lock(&dev->v4l2_lock); hackrf_disconnect()
725 dev->udev = NULL; hackrf_disconnect()
726 v4l2_device_disconnect(&dev->v4l2_dev); hackrf_disconnect()
727 video_unregister_device(&dev->tx_vdev); hackrf_disconnect()
728 video_unregister_device(&dev->rx_vdev); hackrf_disconnect()
729 mutex_unlock(&dev->v4l2_lock); hackrf_disconnect()
730 mutex_unlock(&dev->vb_queue_lock); hackrf_disconnect()
732 v4l2_device_put(&dev->v4l2_dev); hackrf_disconnect()
739 struct hackrf_dev *dev = vb2_get_drv_priv(vq); hackrf_return_all_buffers() local
740 struct usb_interface *intf = dev->intf; hackrf_return_all_buffers()
745 dev_dbg(&intf->dev, "\n"); hackrf_return_all_buffers()
748 buffer_list = &dev->rx_buffer_list; hackrf_return_all_buffers()
750 buffer_list = &dev->tx_buffer_list; hackrf_return_all_buffers()
752 spin_lock_irqsave(&dev->buffer_list_lock, flags); list_for_each_entry_safe()
754 dev_dbg(&intf->dev, "list_for_each_entry_safe\n"); list_for_each_entry_safe()
758 spin_unlock_irqrestore(&dev->buffer_list_lock, flags);
765 struct hackrf_dev *dev = vb2_get_drv_priv(vq); hackrf_queue_setup() local
767 dev_dbg(dev->dev, "nbuffers=%d\n", *nbuffers); hackrf_queue_setup()
773 sizes[0] = PAGE_ALIGN(dev->buffersize); hackrf_queue_setup()
775 dev_dbg(dev->dev, "nbuffers=%d sizes[0]=%d\n", *nbuffers, sizes[0]); hackrf_queue_setup()
783 struct hackrf_dev *dev = vb2_get_drv_priv(vq); hackrf_buf_queue() local
788 dev_dbg_ratelimited(&dev->intf->dev, "\n"); hackrf_buf_queue()
791 buffer_list = &dev->rx_buffer_list; hackrf_buf_queue()
793 buffer_list = &dev->tx_buffer_list; hackrf_buf_queue()
795 spin_lock_irqsave(&dev->buffer_list_lock, flags); hackrf_buf_queue()
797 spin_unlock_irqrestore(&dev->buffer_list_lock, flags); hackrf_buf_queue()
802 struct hackrf_dev *dev = vb2_get_drv_priv(vq); hackrf_start_streaming() local
803 struct usb_interface *intf = dev->intf; hackrf_start_streaming()
807 dev_dbg(&intf->dev, "count=%i\n", count); hackrf_start_streaming()
809 mutex_lock(&dev->v4l2_lock); hackrf_start_streaming()
813 if (test_bit(TX_ON, &dev->flags)) { hackrf_start_streaming()
819 set_bit(RX_ON, &dev->flags); hackrf_start_streaming()
821 if (test_bit(RX_ON, &dev->flags)) { hackrf_start_streaming()
827 set_bit(TX_ON, &dev->flags); hackrf_start_streaming()
830 dev->sequence = 0; hackrf_start_streaming()
832 ret = hackrf_alloc_stream_bufs(dev); hackrf_start_streaming()
836 ret = hackrf_alloc_urbs(dev, (mode == 1)); hackrf_start_streaming()
840 ret = hackrf_submit_urbs(dev); hackrf_start_streaming()
844 ret = hackrf_set_params(dev); hackrf_start_streaming()
849 ret = hackrf_ctrl_msg(dev, CMD_SET_TRANSCEIVER_MODE, mode, 0, NULL, 0); hackrf_start_streaming()
853 mutex_unlock(&dev->v4l2_lock); hackrf_start_streaming()
857 hackrf_kill_urbs(dev); hackrf_start_streaming()
858 hackrf_free_urbs(dev); hackrf_start_streaming()
859 hackrf_free_stream_bufs(dev); hackrf_start_streaming()
860 clear_bit(RX_ON, &dev->flags); hackrf_start_streaming()
861 clear_bit(TX_ON, &dev->flags); hackrf_start_streaming()
864 mutex_unlock(&dev->v4l2_lock); hackrf_start_streaming()
865 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_start_streaming()
871 struct hackrf_dev *dev = vb2_get_drv_priv(vq); hackrf_stop_streaming() local
872 struct usb_interface *intf = dev->intf; hackrf_stop_streaming()
874 dev_dbg(&intf->dev, "\n"); hackrf_stop_streaming()
876 mutex_lock(&dev->v4l2_lock); hackrf_stop_streaming()
879 hackrf_ctrl_msg(dev, CMD_SET_TRANSCEIVER_MODE, 0, 0, NULL, 0); hackrf_stop_streaming()
881 hackrf_kill_urbs(dev); hackrf_stop_streaming()
882 hackrf_free_urbs(dev); hackrf_stop_streaming()
883 hackrf_free_stream_bufs(dev); hackrf_stop_streaming()
888 clear_bit(RX_ON, &dev->flags); hackrf_stop_streaming()
890 clear_bit(TX_ON, &dev->flags); hackrf_stop_streaming()
892 mutex_unlock(&dev->v4l2_lock); hackrf_stop_streaming()
907 struct hackrf_dev *dev = video_drvdata(file); hackrf_querycap() local
908 struct usb_interface *intf = dev->intf; hackrf_querycap()
911 dev_dbg(&intf->dev, "\n"); hackrf_querycap()
926 strlcpy(cap->card, dev->rx_vdev.name, sizeof(cap->card)); hackrf_querycap()
927 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); hackrf_querycap()
935 struct hackrf_dev *dev = video_drvdata(file); hackrf_s_fmt_sdr() local
940 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", hackrf_s_fmt_sdr()
944 q = &dev->rx_vb2_queue; hackrf_s_fmt_sdr()
946 q = &dev->tx_vb2_queue; hackrf_s_fmt_sdr()
954 dev->pixelformat = formats[i].pixelformat; hackrf_s_fmt_sdr()
955 dev->buffersize = formats[i].buffersize; hackrf_s_fmt_sdr()
961 dev->pixelformat = formats[0].pixelformat; hackrf_s_fmt_sdr()
962 dev->buffersize = formats[0].buffersize; hackrf_s_fmt_sdr()
972 struct hackrf_dev *dev = video_drvdata(file); hackrf_g_fmt_sdr() local
974 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", hackrf_g_fmt_sdr()
975 (char *)&dev->pixelformat); hackrf_g_fmt_sdr()
978 f->fmt.sdr.pixelformat = dev->pixelformat; hackrf_g_fmt_sdr()
979 f->fmt.sdr.buffersize = dev->buffersize; hackrf_g_fmt_sdr()
987 struct hackrf_dev *dev = video_drvdata(file); hackrf_try_fmt_sdr() local
990 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", hackrf_try_fmt_sdr()
1010 struct hackrf_dev *dev = video_drvdata(file); hackrf_enum_fmt_sdr() local
1012 dev_dbg(dev->dev, "index=%d\n", f->index); hackrf_enum_fmt_sdr()
1025 struct hackrf_dev *dev = video_drvdata(file); hackrf_s_tuner() local
1028 dev_dbg(dev->dev, "index=%d\n", v->index); hackrf_s_tuner()
1042 struct hackrf_dev *dev = video_drvdata(file); hackrf_g_tuner() local
1045 dev_dbg(dev->dev, "index=%d\n", v->index); hackrf_g_tuner()
1071 struct hackrf_dev *dev = video_drvdata(file); hackrf_s_modulator() local
1073 dev_dbg(dev->dev, "index=%d\n", a->index); hackrf_s_modulator()
1081 struct hackrf_dev *dev = video_drvdata(file); hackrf_g_modulator() local
1084 dev_dbg(dev->dev, "index=%d\n", a->index); hackrf_g_modulator()
1110 struct hackrf_dev *dev = video_drvdata(file); hackrf_s_frequency() local
1111 struct usb_interface *intf = dev->intf; hackrf_s_frequency()
1116 dev_dbg(&intf->dev, "tuner=%d type=%d frequency=%u\n", hackrf_s_frequency()
1123 dev->f_adc = uitmp; hackrf_s_frequency()
1124 set_bit(RX_ADC_FREQUENCY, &dev->flags); hackrf_s_frequency()
1126 dev->f_dac = uitmp; hackrf_s_frequency()
1127 set_bit(TX_DAC_FREQUENCY, &dev->flags); hackrf_s_frequency()
1133 dev->f_rx = uitmp; hackrf_s_frequency()
1134 set_bit(RX_RF_FREQUENCY, &dev->flags); hackrf_s_frequency()
1136 dev->f_tx = uitmp; hackrf_s_frequency()
1137 set_bit(TX_RF_FREQUENCY, &dev->flags); hackrf_s_frequency()
1144 ret = hackrf_set_params(dev); hackrf_s_frequency()
1150 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_s_frequency()
1157 struct hackrf_dev *dev = video_drvdata(file); hackrf_g_frequency() local
1158 struct usb_interface *intf = dev->intf; hackrf_g_frequency()
1162 dev_dbg(dev->dev, "tuner=%d type=%d\n", f->tuner, f->type); hackrf_g_frequency()
1167 f->frequency = dev->f_adc; hackrf_g_frequency()
1169 f->frequency = dev->f_dac; hackrf_g_frequency()
1173 f->frequency = dev->f_rx; hackrf_g_frequency()
1175 f->frequency = dev->f_tx; hackrf_g_frequency()
1183 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_g_frequency()
1190 struct hackrf_dev *dev = video_drvdata(file); hackrf_enum_freq_bands() local
1193 dev_dbg(dev->dev, "tuner=%d type=%d index=%d\n", hackrf_enum_freq_bands()
1276 struct hackrf_dev *dev = container_of(v, struct hackrf_dev, v4l2_dev); hackrf_video_release() local
1278 dev_dbg(dev->dev, "\n"); hackrf_video_release()
1280 v4l2_ctrl_handler_free(&dev->rx_ctrl_handler); hackrf_video_release()
1281 v4l2_ctrl_handler_free(&dev->tx_ctrl_handler); hackrf_video_release()
1282 v4l2_device_unregister(&dev->v4l2_dev); hackrf_video_release()
1283 kfree(dev); hackrf_video_release()
1288 struct hackrf_dev *dev = container_of(ctrl->handler, hackrf_s_ctrl_rx() local
1290 struct usb_interface *intf = dev->intf; hackrf_s_ctrl_rx()
1296 set_bit(RX_BANDWIDTH, &dev->flags); hackrf_s_ctrl_rx()
1299 set_bit(RX_RF_GAIN, &dev->flags); hackrf_s_ctrl_rx()
1302 set_bit(RX_LNA_GAIN, &dev->flags); hackrf_s_ctrl_rx()
1305 set_bit(RX_IF_GAIN, &dev->flags); hackrf_s_ctrl_rx()
1308 dev_dbg(&intf->dev, "unknown ctrl: id=%d name=%s\n", hackrf_s_ctrl_rx()
1314 ret = hackrf_set_params(dev); hackrf_s_ctrl_rx()
1320 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_s_ctrl_rx()
1326 struct hackrf_dev *dev = container_of(ctrl->handler, hackrf_s_ctrl_tx() local
1328 struct usb_interface *intf = dev->intf; hackrf_s_ctrl_tx()
1334 set_bit(TX_BANDWIDTH, &dev->flags); hackrf_s_ctrl_tx()
1337 set_bit(TX_LNA_GAIN, &dev->flags); hackrf_s_ctrl_tx()
1340 set_bit(TX_RF_GAIN, &dev->flags); hackrf_s_ctrl_tx()
1343 dev_dbg(&intf->dev, "unknown ctrl: id=%d name=%s\n", hackrf_s_ctrl_tx()
1349 ret = hackrf_set_params(dev); hackrf_s_ctrl_tx()
1355 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_s_ctrl_tx()
1370 struct hackrf_dev *dev; hackrf_probe() local
1374 dev = kzalloc(sizeof(*dev), GFP_KERNEL); hackrf_probe()
1375 if (!dev) { hackrf_probe()
1380 mutex_init(&dev->v4l2_lock); hackrf_probe()
1381 mutex_init(&dev->vb_queue_lock); hackrf_probe()
1382 spin_lock_init(&dev->buffer_list_lock); hackrf_probe()
1383 INIT_LIST_HEAD(&dev->rx_buffer_list); hackrf_probe()
1384 INIT_LIST_HEAD(&dev->tx_buffer_list); hackrf_probe()
1385 dev->intf = intf; hackrf_probe()
1386 dev->dev = &intf->dev; hackrf_probe()
1387 dev->udev = interface_to_usbdev(intf); hackrf_probe()
1388 dev->pixelformat = formats[0].pixelformat; hackrf_probe()
1389 dev->buffersize = formats[0].buffersize; hackrf_probe()
1390 dev->f_adc = bands_adc_dac[0].rangelow; hackrf_probe()
1391 dev->f_dac = bands_adc_dac[0].rangelow; hackrf_probe()
1392 dev->f_rx = bands_rx_tx[0].rangelow; hackrf_probe()
1393 dev->f_tx = bands_rx_tx[0].rangelow; hackrf_probe()
1394 set_bit(RX_ADC_FREQUENCY, &dev->flags); hackrf_probe()
1395 set_bit(TX_DAC_FREQUENCY, &dev->flags); hackrf_probe()
1396 set_bit(RX_RF_FREQUENCY, &dev->flags); hackrf_probe()
1397 set_bit(TX_RF_FREQUENCY, &dev->flags); hackrf_probe()
1400 ret = hackrf_ctrl_msg(dev, CMD_BOARD_ID_READ, 0, 0, &u8tmp, 1); hackrf_probe()
1402 ret = hackrf_ctrl_msg(dev, CMD_VERSION_STRING_READ, 0, 0, hackrf_probe()
1405 dev_err(dev->dev, "Could not detect board\n"); hackrf_probe()
1410 dev_info(dev->dev, "Board ID: %02x\n", u8tmp); hackrf_probe()
1411 dev_info(dev->dev, "Firmware version: %s\n", buf); hackrf_probe()
1414 dev->rx_vb2_queue.type = V4L2_BUF_TYPE_SDR_CAPTURE; hackrf_probe()
1415 dev->rx_vb2_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | hackrf_probe()
1417 dev->rx_vb2_queue.ops = &hackrf_vb2_ops; hackrf_probe()
1418 dev->rx_vb2_queue.mem_ops = &vb2_vmalloc_memops; hackrf_probe()
1419 dev->rx_vb2_queue.drv_priv = dev; hackrf_probe()
1420 dev->rx_vb2_queue.buf_struct_size = sizeof(struct hackrf_buffer); hackrf_probe()
1421 dev->rx_vb2_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; hackrf_probe()
1422 ret = vb2_queue_init(&dev->rx_vb2_queue); hackrf_probe()
1424 dev_err(dev->dev, "Could not initialize rx vb2 queue\n"); hackrf_probe()
1429 dev->tx_vb2_queue.type = V4L2_BUF_TYPE_SDR_OUTPUT; hackrf_probe()
1430 dev->tx_vb2_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | hackrf_probe()
1432 dev->tx_vb2_queue.ops = &hackrf_vb2_ops; hackrf_probe()
1433 dev->tx_vb2_queue.mem_ops = &vb2_vmalloc_memops; hackrf_probe()
1434 dev->tx_vb2_queue.drv_priv = dev; hackrf_probe()
1435 dev->tx_vb2_queue.buf_struct_size = sizeof(struct hackrf_buffer); hackrf_probe()
1436 dev->tx_vb2_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; hackrf_probe()
1437 ret = vb2_queue_init(&dev->tx_vb2_queue); hackrf_probe()
1439 dev_err(dev->dev, "Could not initialize tx vb2 queue\n"); hackrf_probe()
1444 v4l2_ctrl_handler_init(&dev->rx_ctrl_handler, 5); hackrf_probe()
1445 dev->rx_bandwidth_auto = v4l2_ctrl_new_std(&dev->rx_ctrl_handler, hackrf_probe()
1448 dev->rx_bandwidth = v4l2_ctrl_new_std(&dev->rx_ctrl_handler, hackrf_probe()
1451 v4l2_ctrl_auto_cluster(2, &dev->rx_bandwidth_auto, 0, false); hackrf_probe()
1452 dev->rx_rf_gain = v4l2_ctrl_new_std(&dev->rx_ctrl_handler, hackrf_probe()
1454 dev->rx_lna_gain = v4l2_ctrl_new_std(&dev->rx_ctrl_handler, hackrf_probe()
1456 dev->rx_if_gain = v4l2_ctrl_new_std(&dev->rx_ctrl_handler, hackrf_probe()
1458 if (dev->rx_ctrl_handler.error) { hackrf_probe()
1459 ret = dev->rx_ctrl_handler.error; hackrf_probe()
1460 dev_err(dev->dev, "Could not initialize controls\n"); hackrf_probe()
1463 v4l2_ctrl_grab(dev->rx_rf_gain, !hackrf_enable_rf_gain_ctrl); hackrf_probe()
1464 v4l2_ctrl_handler_setup(&dev->rx_ctrl_handler); hackrf_probe()
1467 v4l2_ctrl_handler_init(&dev->tx_ctrl_handler, 4); hackrf_probe()
1468 dev->tx_bandwidth_auto = v4l2_ctrl_new_std(&dev->tx_ctrl_handler, hackrf_probe()
1471 dev->tx_bandwidth = v4l2_ctrl_new_std(&dev->tx_ctrl_handler, hackrf_probe()
1474 v4l2_ctrl_auto_cluster(2, &dev->tx_bandwidth_auto, 0, false); hackrf_probe()
1475 dev->tx_lna_gain = v4l2_ctrl_new_std(&dev->tx_ctrl_handler, hackrf_probe()
1477 dev->tx_rf_gain = v4l2_ctrl_new_std(&dev->tx_ctrl_handler, hackrf_probe()
1479 if (dev->tx_ctrl_handler.error) { hackrf_probe()
1480 ret = dev->tx_ctrl_handler.error; hackrf_probe()
1481 dev_err(dev->dev, "Could not initialize controls\n"); hackrf_probe()
1484 v4l2_ctrl_grab(dev->tx_rf_gain, !hackrf_enable_rf_gain_ctrl); hackrf_probe()
1485 v4l2_ctrl_handler_setup(&dev->tx_ctrl_handler); hackrf_probe()
1488 dev->v4l2_dev.release = hackrf_video_release; hackrf_probe()
1489 ret = v4l2_device_register(&intf->dev, &dev->v4l2_dev); hackrf_probe()
1491 dev_err(dev->dev, "Failed to register v4l2-device (%d)\n", ret); hackrf_probe()
1496 dev->rx_vdev = hackrf_template; hackrf_probe()
1497 dev->rx_vdev.queue = &dev->rx_vb2_queue; hackrf_probe()
1498 dev->rx_vdev.queue->lock = &dev->vb_queue_lock; hackrf_probe()
1499 dev->rx_vdev.v4l2_dev = &dev->v4l2_dev; hackrf_probe()
1500 dev->rx_vdev.ctrl_handler = &dev->rx_ctrl_handler; hackrf_probe()
1501 dev->rx_vdev.lock = &dev->v4l2_lock; hackrf_probe()
1502 dev->rx_vdev.vfl_dir = VFL_DIR_RX; hackrf_probe()
1503 video_set_drvdata(&dev->rx_vdev, dev); hackrf_probe()
1504 ret = video_register_device(&dev->rx_vdev, VFL_TYPE_SDR, -1); hackrf_probe()
1506 dev_err(dev->dev, hackrf_probe()
1510 dev_info(dev->dev, "Registered as %s\n", hackrf_probe()
1511 video_device_node_name(&dev->rx_vdev)); hackrf_probe()
1514 dev->tx_vdev = hackrf_template; hackrf_probe()
1515 dev->tx_vdev.queue = &dev->tx_vb2_queue; hackrf_probe()
1516 dev->tx_vdev.queue->lock = &dev->vb_queue_lock; hackrf_probe()
1517 dev->tx_vdev.v4l2_dev = &dev->v4l2_dev; hackrf_probe()
1518 dev->tx_vdev.ctrl_handler = &dev->tx_ctrl_handler; hackrf_probe()
1519 dev->tx_vdev.lock = &dev->v4l2_lock; hackrf_probe()
1520 dev->tx_vdev.vfl_dir = VFL_DIR_TX; hackrf_probe()
1521 video_set_drvdata(&dev->tx_vdev, dev); hackrf_probe()
1522 ret = video_register_device(&dev->tx_vdev, VFL_TYPE_SDR, -1); hackrf_probe()
1524 dev_err(dev->dev, hackrf_probe()
1528 dev_info(dev->dev, "Registered as %s\n", hackrf_probe()
1529 video_device_node_name(&dev->tx_vdev)); hackrf_probe()
1531 dev_notice(dev->dev, "SDR API is still slightly experimental and functionality changes may follow\n"); hackrf_probe()
1534 video_unregister_device(&dev->rx_vdev); hackrf_probe()
1536 v4l2_device_unregister(&dev->v4l2_dev); hackrf_probe()
1538 v4l2_ctrl_handler_free(&dev->tx_ctrl_handler); hackrf_probe()
1540 v4l2_ctrl_handler_free(&dev->rx_ctrl_handler); hackrf_probe()
1542 kfree(dev); hackrf_probe()
1544 dev_dbg(&intf->dev, "failed=%d\n", ret); hackrf_probe()
/linux-4.4.14/drivers/media/dvb-frontends/
H A Drtl2832_sdr.c167 static int rtl2832_sdr_wr_regs(struct rtl2832_sdr_dev *dev, u16 reg, rtl2832_sdr_wr_regs() argument
170 struct platform_device *pdev = dev->pdev; rtl2832_sdr_wr_regs()
171 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_wr_regs()
179 static int rtl2832_sdr_rd_regs(struct rtl2832_sdr_dev *dev, u16 reg, u8 *val,
182 struct platform_device *pdev = dev->pdev;
183 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data;
191 static int rtl2832_sdr_wr_reg(struct rtl2832_sdr_dev *dev, u16 reg, u8 val) rtl2832_sdr_wr_reg() argument
193 return rtl2832_sdr_wr_regs(dev, reg, &val, 1); rtl2832_sdr_wr_reg()
197 static int rtl2832_sdr_wr_reg_mask(struct rtl2832_sdr_dev *dev, u16 reg, rtl2832_sdr_wr_reg_mask() argument
200 struct platform_device *pdev = dev->pdev; rtl2832_sdr_wr_reg_mask()
201 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_wr_reg_mask()
209 struct rtl2832_sdr_dev *dev) rtl2832_sdr_get_next_fill_buf()
214 spin_lock_irqsave(&dev->queued_bufs_lock, flags); rtl2832_sdr_get_next_fill_buf()
215 if (list_empty(&dev->queued_bufs)) rtl2832_sdr_get_next_fill_buf()
218 buf = list_entry(dev->queued_bufs.next, rtl2832_sdr_get_next_fill_buf()
222 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); rtl2832_sdr_get_next_fill_buf()
226 static unsigned int rtl2832_sdr_convert_stream(struct rtl2832_sdr_dev *dev, rtl2832_sdr_convert_stream() argument
229 struct platform_device *pdev = dev->pdev; rtl2832_sdr_convert_stream()
232 if (dev->pixelformat == V4L2_SDR_FMT_CU8) { rtl2832_sdr_convert_stream()
236 } else if (dev->pixelformat == V4L2_SDR_FMT_CU16LE) { rtl2832_sdr_convert_stream()
249 if (unlikely(time_is_before_jiffies(dev->jiffies_next))) { rtl2832_sdr_convert_stream()
252 dev->jiffies_next + msecs_to_jiffies(MSECS)); rtl2832_sdr_convert_stream()
253 unsigned int samples = dev->sample - dev->sample_measured; rtl2832_sdr_convert_stream()
255 dev->jiffies_next = jiffies + msecs_to_jiffies(MSECS); rtl2832_sdr_convert_stream()
256 dev->sample_measured = dev->sample; rtl2832_sdr_convert_stream()
257 dev_dbg(&pdev->dev, rtl2832_sdr_convert_stream()
263 dev->sample += src_len / 2; rtl2832_sdr_convert_stream()
274 struct rtl2832_sdr_dev *dev = urb->context; rtl2832_sdr_urb_complete() local
275 struct platform_device *pdev = dev->pdev; rtl2832_sdr_urb_complete()
278 dev_dbg_ratelimited(&pdev->dev, "status=%d length=%d/%d errors=%d\n", rtl2832_sdr_urb_complete()
291 dev_err_ratelimited(&pdev->dev, "urb failed=%d\n", urb->status); rtl2832_sdr_urb_complete()
299 fbuf = rtl2832_sdr_get_next_fill_buf(dev); rtl2832_sdr_urb_complete()
301 dev->vb_full++; rtl2832_sdr_urb_complete()
302 dev_notice_ratelimited(&pdev->dev, rtl2832_sdr_urb_complete()
304 dev->vb_full); rtl2832_sdr_urb_complete()
310 len = rtl2832_sdr_convert_stream(dev, ptr, urb->transfer_buffer, rtl2832_sdr_urb_complete()
314 fbuf->vb.sequence = dev->sequence++; rtl2832_sdr_urb_complete()
321 static int rtl2832_sdr_kill_urbs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_kill_urbs() argument
323 struct platform_device *pdev = dev->pdev; rtl2832_sdr_kill_urbs()
326 for (i = dev->urbs_submitted - 1; i >= 0; i--) { rtl2832_sdr_kill_urbs()
327 dev_dbg(&pdev->dev, "kill urb=%d\n", i); rtl2832_sdr_kill_urbs()
329 usb_kill_urb(dev->urb_list[i]); rtl2832_sdr_kill_urbs()
331 dev->urbs_submitted = 0; rtl2832_sdr_kill_urbs()
336 static int rtl2832_sdr_submit_urbs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_submit_urbs() argument
338 struct platform_device *pdev = dev->pdev; rtl2832_sdr_submit_urbs()
341 for (i = 0; i < dev->urbs_initialized; i++) { rtl2832_sdr_submit_urbs()
342 dev_dbg(&pdev->dev, "submit urb=%d\n", i); rtl2832_sdr_submit_urbs()
343 ret = usb_submit_urb(dev->urb_list[i], GFP_ATOMIC); rtl2832_sdr_submit_urbs()
345 dev_err(&pdev->dev, rtl2832_sdr_submit_urbs()
348 rtl2832_sdr_kill_urbs(dev); rtl2832_sdr_submit_urbs()
351 dev->urbs_submitted++; rtl2832_sdr_submit_urbs()
357 static int rtl2832_sdr_free_stream_bufs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_free_stream_bufs() argument
359 struct platform_device *pdev = dev->pdev; rtl2832_sdr_free_stream_bufs()
361 if (test_bit(URB_BUF, &dev->flags)) { rtl2832_sdr_free_stream_bufs()
362 while (dev->buf_num) { rtl2832_sdr_free_stream_bufs()
363 dev->buf_num--; rtl2832_sdr_free_stream_bufs()
364 dev_dbg(&pdev->dev, "free buf=%d\n", dev->buf_num); rtl2832_sdr_free_stream_bufs()
365 usb_free_coherent(dev->udev, dev->buf_size, rtl2832_sdr_free_stream_bufs()
366 dev->buf_list[dev->buf_num], rtl2832_sdr_free_stream_bufs()
367 dev->dma_addr[dev->buf_num]); rtl2832_sdr_free_stream_bufs()
370 clear_bit(URB_BUF, &dev->flags); rtl2832_sdr_free_stream_bufs()
375 static int rtl2832_sdr_alloc_stream_bufs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_alloc_stream_bufs() argument
377 struct platform_device *pdev = dev->pdev; rtl2832_sdr_alloc_stream_bufs()
379 dev->buf_num = 0; rtl2832_sdr_alloc_stream_bufs()
380 dev->buf_size = BULK_BUFFER_SIZE; rtl2832_sdr_alloc_stream_bufs()
382 dev_dbg(&pdev->dev, "all in all I will use %u bytes for streaming\n", rtl2832_sdr_alloc_stream_bufs()
385 for (dev->buf_num = 0; dev->buf_num < MAX_BULK_BUFS; dev->buf_num++) { rtl2832_sdr_alloc_stream_bufs()
386 dev->buf_list[dev->buf_num] = usb_alloc_coherent(dev->udev, rtl2832_sdr_alloc_stream_bufs()
388 &dev->dma_addr[dev->buf_num]); rtl2832_sdr_alloc_stream_bufs()
389 if (!dev->buf_list[dev->buf_num]) { rtl2832_sdr_alloc_stream_bufs()
390 dev_dbg(&pdev->dev, "alloc buf=%d failed\n", rtl2832_sdr_alloc_stream_bufs()
391 dev->buf_num); rtl2832_sdr_alloc_stream_bufs()
392 rtl2832_sdr_free_stream_bufs(dev); rtl2832_sdr_alloc_stream_bufs()
396 dev_dbg(&pdev->dev, "alloc buf=%d %p (dma %llu)\n", rtl2832_sdr_alloc_stream_bufs()
397 dev->buf_num, dev->buf_list[dev->buf_num], rtl2832_sdr_alloc_stream_bufs()
398 (long long)dev->dma_addr[dev->buf_num]); rtl2832_sdr_alloc_stream_bufs()
399 set_bit(URB_BUF, &dev->flags); rtl2832_sdr_alloc_stream_bufs()
405 static int rtl2832_sdr_free_urbs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_free_urbs() argument
407 struct platform_device *pdev = dev->pdev; rtl2832_sdr_free_urbs()
410 rtl2832_sdr_kill_urbs(dev); rtl2832_sdr_free_urbs()
412 for (i = dev->urbs_initialized - 1; i >= 0; i--) { rtl2832_sdr_free_urbs()
413 if (dev->urb_list[i]) { rtl2832_sdr_free_urbs()
414 dev_dbg(&pdev->dev, "free urb=%d\n", i); rtl2832_sdr_free_urbs()
416 usb_free_urb(dev->urb_list[i]); rtl2832_sdr_free_urbs()
419 dev->urbs_initialized = 0; rtl2832_sdr_free_urbs()
424 static int rtl2832_sdr_alloc_urbs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_alloc_urbs() argument
426 struct platform_device *pdev = dev->pdev; rtl2832_sdr_alloc_urbs()
431 dev_dbg(&pdev->dev, "alloc urb=%d\n", i); rtl2832_sdr_alloc_urbs()
432 dev->urb_list[i] = usb_alloc_urb(0, GFP_ATOMIC); rtl2832_sdr_alloc_urbs()
433 if (!dev->urb_list[i]) { rtl2832_sdr_alloc_urbs()
434 dev_dbg(&pdev->dev, "failed\n"); rtl2832_sdr_alloc_urbs()
436 usb_free_urb(dev->urb_list[j]); rtl2832_sdr_alloc_urbs()
439 usb_fill_bulk_urb(dev->urb_list[i], rtl2832_sdr_alloc_urbs()
440 dev->udev, rtl2832_sdr_alloc_urbs()
441 usb_rcvbulkpipe(dev->udev, 0x81), rtl2832_sdr_alloc_urbs()
442 dev->buf_list[i], rtl2832_sdr_alloc_urbs()
444 rtl2832_sdr_urb_complete, dev); rtl2832_sdr_alloc_urbs()
446 dev->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP; rtl2832_sdr_alloc_urbs()
447 dev->urb_list[i]->transfer_dma = dev->dma_addr[i]; rtl2832_sdr_alloc_urbs()
448 dev->urbs_initialized++; rtl2832_sdr_alloc_urbs()
455 static void rtl2832_sdr_cleanup_queued_bufs(struct rtl2832_sdr_dev *dev) rtl2832_sdr_cleanup_queued_bufs() argument
457 struct platform_device *pdev = dev->pdev; rtl2832_sdr_cleanup_queued_bufs()
460 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_cleanup_queued_bufs()
462 spin_lock_irqsave(&dev->queued_bufs_lock, flags); rtl2832_sdr_cleanup_queued_bufs()
463 while (!list_empty(&dev->queued_bufs)) { rtl2832_sdr_cleanup_queued_bufs()
466 buf = list_entry(dev->queued_bufs.next, rtl2832_sdr_cleanup_queued_bufs()
471 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); rtl2832_sdr_cleanup_queued_bufs()
477 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_querycap() local
478 struct platform_device *pdev = dev->pdev; rtl2832_sdr_querycap()
480 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_querycap()
483 strlcpy(cap->card, dev->vdev.name, sizeof(cap->card)); rtl2832_sdr_querycap()
484 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); rtl2832_sdr_querycap()
496 struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq); rtl2832_sdr_queue_setup() local
497 struct platform_device *pdev = dev->pdev; rtl2832_sdr_queue_setup()
499 dev_dbg(&pdev->dev, "nbuffers=%d\n", *nbuffers); rtl2832_sdr_queue_setup()
505 sizes[0] = PAGE_ALIGN(dev->buffersize); rtl2832_sdr_queue_setup()
506 dev_dbg(&pdev->dev, "nbuffers=%d sizes[0]=%d\n", *nbuffers, sizes[0]); rtl2832_sdr_queue_setup()
512 struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vb->vb2_queue); rtl2832_sdr_buf_prepare() local
515 if (!dev->udev) rtl2832_sdr_buf_prepare()
524 struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vb->vb2_queue); rtl2832_sdr_buf_queue() local
530 if (!dev->udev) { rtl2832_sdr_buf_queue()
535 spin_lock_irqsave(&dev->queued_bufs_lock, flags); rtl2832_sdr_buf_queue()
536 list_add_tail(&buf->list, &dev->queued_bufs); rtl2832_sdr_buf_queue()
537 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); rtl2832_sdr_buf_queue()
540 static int rtl2832_sdr_set_adc(struct rtl2832_sdr_dev *dev) rtl2832_sdr_set_adc() argument
542 struct platform_device *pdev = dev->pdev; rtl2832_sdr_set_adc()
543 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_set_adc()
551 dev_dbg(&pdev->dev, "f_adc=%u\n", dev->f_adc); rtl2832_sdr_set_adc()
553 if (!test_bit(POWER_ON, &dev->flags)) rtl2832_sdr_set_adc()
556 if (dev->f_adc == 0) rtl2832_sdr_set_adc()
559 f_sr = dev->f_adc; rtl2832_sdr_set_adc()
561 ret = rtl2832_sdr_wr_regs(dev, 0x13e, "\x00\x00", 2); rtl2832_sdr_set_adc()
565 ret = rtl2832_sdr_wr_regs(dev, 0x115, "\x00\x00\x00\x00", 4); rtl2832_sdr_set_adc()
585 dev_dbg(&pdev->dev, "f_if=%u if_ctl=%08x\n", f_if, u32tmp); rtl2832_sdr_set_adc()
591 ret = rtl2832_sdr_wr_regs(dev, 0x119, buf, 3); rtl2832_sdr_set_adc()
605 ret = rtl2832_sdr_wr_reg(dev, 0x1b1, u8tmp1); rtl2832_sdr_set_adc()
609 ret = rtl2832_sdr_wr_reg(dev, 0x008, u8tmp2); rtl2832_sdr_set_adc()
613 ret = rtl2832_sdr_wr_reg(dev, 0x006, 0x80); rtl2832_sdr_set_adc()
624 ret = rtl2832_sdr_wr_regs(dev, 0x19f, buf, 4); rtl2832_sdr_set_adc()
629 ret = rtl2832_sdr_wr_regs(dev, 0x11c, rtl2832_sdr_set_adc()
635 ret = rtl2832_sdr_wr_regs(dev, 0x017, "\x11\x10", 2); rtl2832_sdr_set_adc()
640 ret = rtl2832_sdr_wr_regs(dev, 0x019, "\x05", 1); rtl2832_sdr_set_adc()
644 ret = rtl2832_sdr_wr_regs(dev, 0x01a, "\x1b\x16\x0d\x06\x01\xff", 6); rtl2832_sdr_set_adc()
649 ret = rtl2832_sdr_wr_regs(dev, 0x192, "\x00\xf0\x0f", 3); rtl2832_sdr_set_adc()
654 ret = rtl2832_sdr_wr_regs(dev, 0x061, "\x60", 1); rtl2832_sdr_set_adc()
661 ret = rtl2832_sdr_wr_regs(dev, 0x112, "\x5a", 1); rtl2832_sdr_set_adc()
662 ret = rtl2832_sdr_wr_regs(dev, 0x102, "\x40", 1); rtl2832_sdr_set_adc()
663 ret = rtl2832_sdr_wr_regs(dev, 0x103, "\x5a", 1); rtl2832_sdr_set_adc()
664 ret = rtl2832_sdr_wr_regs(dev, 0x1c7, "\x30", 1); rtl2832_sdr_set_adc()
665 ret = rtl2832_sdr_wr_regs(dev, 0x104, "\xd0", 1); rtl2832_sdr_set_adc()
666 ret = rtl2832_sdr_wr_regs(dev, 0x105, "\xbe", 1); rtl2832_sdr_set_adc()
667 ret = rtl2832_sdr_wr_regs(dev, 0x1c8, "\x18", 1); rtl2832_sdr_set_adc()
668 ret = rtl2832_sdr_wr_regs(dev, 0x106, "\x35", 1); rtl2832_sdr_set_adc()
669 ret = rtl2832_sdr_wr_regs(dev, 0x1c9, "\x21", 1); rtl2832_sdr_set_adc()
670 ret = rtl2832_sdr_wr_regs(dev, 0x1ca, "\x21", 1); rtl2832_sdr_set_adc()
671 ret = rtl2832_sdr_wr_regs(dev, 0x1cb, "\x00", 1); rtl2832_sdr_set_adc()
672 ret = rtl2832_sdr_wr_regs(dev, 0x107, "\x40", 1); rtl2832_sdr_set_adc()
673 ret = rtl2832_sdr_wr_regs(dev, 0x1cd, "\x10", 1); rtl2832_sdr_set_adc()
674 ret = rtl2832_sdr_wr_regs(dev, 0x1ce, "\x10", 1); rtl2832_sdr_set_adc()
675 ret = rtl2832_sdr_wr_regs(dev, 0x108, "\x80", 1); rtl2832_sdr_set_adc()
676 ret = rtl2832_sdr_wr_regs(dev, 0x109, "\x7f", 1); rtl2832_sdr_set_adc()
677 ret = rtl2832_sdr_wr_regs(dev, 0x10a, "\x80", 1); rtl2832_sdr_set_adc()
678 ret = rtl2832_sdr_wr_regs(dev, 0x10b, "\x7f", 1); rtl2832_sdr_set_adc()
679 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
680 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
681 ret = rtl2832_sdr_wr_regs(dev, 0x011, "\xd4", 1); rtl2832_sdr_set_adc()
682 ret = rtl2832_sdr_wr_regs(dev, 0x1e5, "\xf0", 1); rtl2832_sdr_set_adc()
683 ret = rtl2832_sdr_wr_regs(dev, 0x1d9, "\x00", 1); rtl2832_sdr_set_adc()
684 ret = rtl2832_sdr_wr_regs(dev, 0x1db, "\x00", 1); rtl2832_sdr_set_adc()
685 ret = rtl2832_sdr_wr_regs(dev, 0x1dd, "\x14", 1); rtl2832_sdr_set_adc()
686 ret = rtl2832_sdr_wr_regs(dev, 0x1de, "\xec", 1); rtl2832_sdr_set_adc()
687 ret = rtl2832_sdr_wr_regs(dev, 0x1d8, "\x0c", 1); rtl2832_sdr_set_adc()
688 ret = rtl2832_sdr_wr_regs(dev, 0x1e6, "\x02", 1); rtl2832_sdr_set_adc()
689 ret = rtl2832_sdr_wr_regs(dev, 0x1d7, "\x09", 1); rtl2832_sdr_set_adc()
690 ret = rtl2832_sdr_wr_regs(dev, 0x00d, "\x83", 1); rtl2832_sdr_set_adc()
691 ret = rtl2832_sdr_wr_regs(dev, 0x010, "\x49", 1); rtl2832_sdr_set_adc()
692 ret = rtl2832_sdr_wr_regs(dev, 0x00d, "\x87", 1); rtl2832_sdr_set_adc()
693 ret = rtl2832_sdr_wr_regs(dev, 0x00d, "\x85", 1); rtl2832_sdr_set_adc()
694 ret = rtl2832_sdr_wr_regs(dev, 0x013, "\x02", 1); rtl2832_sdr_set_adc()
698 ret = rtl2832_sdr_wr_regs(dev, 0x112, "\x5a", 1); rtl2832_sdr_set_adc()
699 ret = rtl2832_sdr_wr_regs(dev, 0x102, "\x40", 1); rtl2832_sdr_set_adc()
700 ret = rtl2832_sdr_wr_regs(dev, 0x103, "\x5a", 1); rtl2832_sdr_set_adc()
701 ret = rtl2832_sdr_wr_regs(dev, 0x1c7, "\x2c", 1); rtl2832_sdr_set_adc()
702 ret = rtl2832_sdr_wr_regs(dev, 0x104, "\xcc", 1); rtl2832_sdr_set_adc()
703 ret = rtl2832_sdr_wr_regs(dev, 0x105, "\xbe", 1); rtl2832_sdr_set_adc()
704 ret = rtl2832_sdr_wr_regs(dev, 0x1c8, "\x16", 1); rtl2832_sdr_set_adc()
705 ret = rtl2832_sdr_wr_regs(dev, 0x106, "\x35", 1); rtl2832_sdr_set_adc()
706 ret = rtl2832_sdr_wr_regs(dev, 0x1c9, "\x21", 1); rtl2832_sdr_set_adc()
707 ret = rtl2832_sdr_wr_regs(dev, 0x1ca, "\x21", 1); rtl2832_sdr_set_adc()
708 ret = rtl2832_sdr_wr_regs(dev, 0x1cb, "\x00", 1); rtl2832_sdr_set_adc()
709 ret = rtl2832_sdr_wr_regs(dev, 0x107, "\x40", 1); rtl2832_sdr_set_adc()
710 ret = rtl2832_sdr_wr_regs(dev, 0x1cd, "\x10", 1); rtl2832_sdr_set_adc()
711 ret = rtl2832_sdr_wr_regs(dev, 0x1ce, "\x10", 1); rtl2832_sdr_set_adc()
712 ret = rtl2832_sdr_wr_regs(dev, 0x108, "\x80", 1); rtl2832_sdr_set_adc()
713 ret = rtl2832_sdr_wr_regs(dev, 0x109, "\x7f", 1); rtl2832_sdr_set_adc()
714 ret = rtl2832_sdr_wr_regs(dev, 0x10a, "\x80", 1); rtl2832_sdr_set_adc()
715 ret = rtl2832_sdr_wr_regs(dev, 0x10b, "\x7f", 1); rtl2832_sdr_set_adc()
716 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
717 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
718 ret = rtl2832_sdr_wr_regs(dev, 0x011, "\xe9\xbf", 2); rtl2832_sdr_set_adc()
719 ret = rtl2832_sdr_wr_regs(dev, 0x1e5, "\xf0", 1); rtl2832_sdr_set_adc()
720 ret = rtl2832_sdr_wr_regs(dev, 0x1d9, "\x00", 1); rtl2832_sdr_set_adc()
721 ret = rtl2832_sdr_wr_regs(dev, 0x1db, "\x00", 1); rtl2832_sdr_set_adc()
722 ret = rtl2832_sdr_wr_regs(dev, 0x1dd, "\x11", 1); rtl2832_sdr_set_adc()
723 ret = rtl2832_sdr_wr_regs(dev, 0x1de, "\xef", 1); rtl2832_sdr_set_adc()
724 ret = rtl2832_sdr_wr_regs(dev, 0x1d8, "\x0c", 1); rtl2832_sdr_set_adc()
725 ret = rtl2832_sdr_wr_regs(dev, 0x1e6, "\x02", 1); rtl2832_sdr_set_adc()
726 ret = rtl2832_sdr_wr_regs(dev, 0x1d7, "\x09", 1); rtl2832_sdr_set_adc()
730 ret = rtl2832_sdr_wr_regs(dev, 0x112, "\x5a", 1); rtl2832_sdr_set_adc()
731 ret = rtl2832_sdr_wr_regs(dev, 0x102, "\x40", 1); rtl2832_sdr_set_adc()
732 ret = rtl2832_sdr_wr_regs(dev, 0x115, "\x01", 1); rtl2832_sdr_set_adc()
733 ret = rtl2832_sdr_wr_regs(dev, 0x103, "\x80", 1); rtl2832_sdr_set_adc()
734 ret = rtl2832_sdr_wr_regs(dev, 0x1c7, "\x24", 1); rtl2832_sdr_set_adc()
735 ret = rtl2832_sdr_wr_regs(dev, 0x104, "\xcc", 1); rtl2832_sdr_set_adc()
736 ret = rtl2832_sdr_wr_regs(dev, 0x105, "\xbe", 1); rtl2832_sdr_set_adc()
737 ret = rtl2832_sdr_wr_regs(dev, 0x1c8, "\x14", 1); rtl2832_sdr_set_adc()
738 ret = rtl2832_sdr_wr_regs(dev, 0x106, "\x35", 1); rtl2832_sdr_set_adc()
739 ret = rtl2832_sdr_wr_regs(dev, 0x1c9, "\x21", 1); rtl2832_sdr_set_adc()
740 ret = rtl2832_sdr_wr_regs(dev, 0x1ca, "\x21", 1); rtl2832_sdr_set_adc()
741 ret = rtl2832_sdr_wr_regs(dev, 0x1cb, "\x00", 1); rtl2832_sdr_set_adc()
742 ret = rtl2832_sdr_wr_regs(dev, 0x107, "\x40", 1); rtl2832_sdr_set_adc()
743 ret = rtl2832_sdr_wr_regs(dev, 0x1cd, "\x10", 1); rtl2832_sdr_set_adc()
744 ret = rtl2832_sdr_wr_regs(dev, 0x1ce, "\x10", 1); rtl2832_sdr_set_adc()
745 ret = rtl2832_sdr_wr_regs(dev, 0x108, "\x80", 1); rtl2832_sdr_set_adc()
746 ret = rtl2832_sdr_wr_regs(dev, 0x109, "\x7f", 1); rtl2832_sdr_set_adc()
747 ret = rtl2832_sdr_wr_regs(dev, 0x10a, "\x80", 1); rtl2832_sdr_set_adc()
748 ret = rtl2832_sdr_wr_regs(dev, 0x10b, "\x7f", 1); rtl2832_sdr_set_adc()
749 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
750 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
751 ret = rtl2832_sdr_wr_regs(dev, 0x011, "\xf4", 1); rtl2832_sdr_set_adc()
754 ret = rtl2832_sdr_wr_regs(dev, 0x112, "\x39", 1); rtl2832_sdr_set_adc()
755 ret = rtl2832_sdr_wr_regs(dev, 0x102, "\x40", 1); rtl2832_sdr_set_adc()
756 ret = rtl2832_sdr_wr_regs(dev, 0x103, "\x5a", 1); rtl2832_sdr_set_adc()
757 ret = rtl2832_sdr_wr_regs(dev, 0x1c7, "\x2c", 1); rtl2832_sdr_set_adc()
758 ret = rtl2832_sdr_wr_regs(dev, 0x104, "\xcc", 1); rtl2832_sdr_set_adc()
759 ret = rtl2832_sdr_wr_regs(dev, 0x105, "\xbe", 1); rtl2832_sdr_set_adc()
760 ret = rtl2832_sdr_wr_regs(dev, 0x1c8, "\x16", 1); rtl2832_sdr_set_adc()
761 ret = rtl2832_sdr_wr_regs(dev, 0x106, "\x35", 1); rtl2832_sdr_set_adc()
762 ret = rtl2832_sdr_wr_regs(dev, 0x1c9, "\x21", 1); rtl2832_sdr_set_adc()
763 ret = rtl2832_sdr_wr_regs(dev, 0x1ca, "\x21", 1); rtl2832_sdr_set_adc()
764 ret = rtl2832_sdr_wr_regs(dev, 0x1cb, "\x00", 1); rtl2832_sdr_set_adc()
765 ret = rtl2832_sdr_wr_regs(dev, 0x107, "\x40", 1); rtl2832_sdr_set_adc()
766 ret = rtl2832_sdr_wr_regs(dev, 0x1cd, "\x10", 1); rtl2832_sdr_set_adc()
767 ret = rtl2832_sdr_wr_regs(dev, 0x1ce, "\x10", 1); rtl2832_sdr_set_adc()
768 ret = rtl2832_sdr_wr_regs(dev, 0x108, "\x80", 1); rtl2832_sdr_set_adc()
769 ret = rtl2832_sdr_wr_regs(dev, 0x109, "\x7f", 1); rtl2832_sdr_set_adc()
770 ret = rtl2832_sdr_wr_regs(dev, 0x10a, "\x9c", 1); rtl2832_sdr_set_adc()
771 ret = rtl2832_sdr_wr_regs(dev, 0x10b, "\x7f", 1); rtl2832_sdr_set_adc()
772 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
773 ret = rtl2832_sdr_wr_regs(dev, 0x00e, "\xfc", 1); rtl2832_sdr_set_adc()
774 ret = rtl2832_sdr_wr_regs(dev, 0x011, "\xe9\xf4", 2); rtl2832_sdr_set_adc()
777 dev_notice(&pdev->dev, "Unsupported tuner\n"); rtl2832_sdr_set_adc()
781 ret = rtl2832_sdr_wr_reg_mask(dev, 0x101, 0x04, 0x04); rtl2832_sdr_set_adc()
785 ret = rtl2832_sdr_wr_reg_mask(dev, 0x101, 0x00, 0x04); rtl2832_sdr_set_adc()
792 static void rtl2832_sdr_unset_adc(struct rtl2832_sdr_dev *dev) rtl2832_sdr_unset_adc() argument
794 struct platform_device *pdev = dev->pdev; rtl2832_sdr_unset_adc()
797 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_unset_adc()
800 ret = rtl2832_sdr_wr_regs(dev, 0x061, "\xe0", 1); rtl2832_sdr_unset_adc()
805 ret = rtl2832_sdr_wr_regs(dev, 0x019, "\x20", 1); rtl2832_sdr_unset_adc()
809 ret = rtl2832_sdr_wr_regs(dev, 0x017, "\x11\x10", 2); rtl2832_sdr_unset_adc()
814 ret = rtl2832_sdr_wr_regs(dev, 0x192, "\x00\x0f\xff", 3); rtl2832_sdr_unset_adc()
818 ret = rtl2832_sdr_wr_regs(dev, 0x13e, "\x40\x00", 2); rtl2832_sdr_unset_adc()
822 ret = rtl2832_sdr_wr_regs(dev, 0x115, "\x06\x3f\xce\xcc", 4); rtl2832_sdr_unset_adc()
829 static int rtl2832_sdr_set_tuner_freq(struct rtl2832_sdr_dev *dev) rtl2832_sdr_set_tuner_freq() argument
831 struct platform_device *pdev = dev->pdev; rtl2832_sdr_set_tuner_freq()
832 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_set_tuner_freq()
841 if (dev->f_tuner == 0) rtl2832_sdr_set_tuner_freq()
847 bandwidth_auto = v4l2_ctrl_find(&dev->hdl, rtl2832_sdr_set_tuner_freq()
849 bandwidth = v4l2_ctrl_find(&dev->hdl, V4L2_CID_RF_TUNER_BANDWIDTH); rtl2832_sdr_set_tuner_freq()
851 c->bandwidth_hz = dev->f_adc; rtl2832_sdr_set_tuner_freq()
852 v4l2_ctrl_s_ctrl(bandwidth, dev->f_adc); rtl2832_sdr_set_tuner_freq()
857 c->frequency = dev->f_tuner; rtl2832_sdr_set_tuner_freq()
860 dev_dbg(&pdev->dev, "frequency=%u bandwidth=%d\n", rtl2832_sdr_set_tuner_freq()
863 if (!test_bit(POWER_ON, &dev->flags)) rtl2832_sdr_set_tuner_freq()
866 if (!V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, s_frequency)) { rtl2832_sdr_set_tuner_freq()
874 static int rtl2832_sdr_set_tuner(struct rtl2832_sdr_dev *dev) rtl2832_sdr_set_tuner() argument
876 struct platform_device *pdev = dev->pdev; rtl2832_sdr_set_tuner()
877 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_set_tuner()
880 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_set_tuner()
888 static void rtl2832_sdr_unset_tuner(struct rtl2832_sdr_dev *dev) rtl2832_sdr_unset_tuner() argument
890 struct platform_device *pdev = dev->pdev; rtl2832_sdr_unset_tuner()
891 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_unset_tuner()
894 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_unset_tuner()
904 struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq); rtl2832_sdr_start_streaming() local
905 struct platform_device *pdev = dev->pdev; rtl2832_sdr_start_streaming()
906 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_start_streaming()
910 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_start_streaming()
912 if (!dev->udev) rtl2832_sdr_start_streaming()
915 if (mutex_lock_interruptible(&dev->v4l2_lock)) rtl2832_sdr_start_streaming()
925 set_bit(POWER_ON, &dev->flags); rtl2832_sdr_start_streaming()
928 if (V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, core, s_power)) rtl2832_sdr_start_streaming()
929 ret = v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 1); rtl2832_sdr_start_streaming()
931 ret = rtl2832_sdr_set_tuner(dev); rtl2832_sdr_start_streaming()
935 ret = rtl2832_sdr_set_tuner_freq(dev); rtl2832_sdr_start_streaming()
939 ret = rtl2832_sdr_set_adc(dev); rtl2832_sdr_start_streaming()
943 ret = rtl2832_sdr_alloc_stream_bufs(dev); rtl2832_sdr_start_streaming()
947 ret = rtl2832_sdr_alloc_urbs(dev); rtl2832_sdr_start_streaming()
951 dev->sequence = 0; rtl2832_sdr_start_streaming()
953 ret = rtl2832_sdr_submit_urbs(dev); rtl2832_sdr_start_streaming()
958 mutex_unlock(&dev->v4l2_lock); rtl2832_sdr_start_streaming()
965 struct rtl2832_sdr_dev *dev = vb2_get_drv_priv(vq); rtl2832_sdr_stop_streaming() local
966 struct platform_device *pdev = dev->pdev; rtl2832_sdr_stop_streaming()
967 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_stop_streaming()
970 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_stop_streaming()
972 mutex_lock(&dev->v4l2_lock); rtl2832_sdr_stop_streaming()
974 rtl2832_sdr_kill_urbs(dev); rtl2832_sdr_stop_streaming()
975 rtl2832_sdr_free_urbs(dev); rtl2832_sdr_stop_streaming()
976 rtl2832_sdr_free_stream_bufs(dev); rtl2832_sdr_stop_streaming()
977 rtl2832_sdr_cleanup_queued_bufs(dev); rtl2832_sdr_stop_streaming()
978 rtl2832_sdr_unset_adc(dev); rtl2832_sdr_stop_streaming()
981 if (V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, core, s_power)) rtl2832_sdr_stop_streaming()
982 v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 0); rtl2832_sdr_stop_streaming()
984 rtl2832_sdr_unset_tuner(dev); rtl2832_sdr_stop_streaming()
986 clear_bit(POWER_ON, &dev->flags); rtl2832_sdr_stop_streaming()
995 mutex_unlock(&dev->v4l2_lock); rtl2832_sdr_stop_streaming()
1011 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_g_tuner() local
1012 struct platform_device *pdev = dev->pdev; rtl2832_sdr_g_tuner()
1015 dev_dbg(&pdev->dev, "index=%d type=%d\n", v->index, v->type); rtl2832_sdr_g_tuner()
1025 V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, g_tuner)) { rtl2832_sdr_g_tuner()
1026 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, g_tuner, v); rtl2832_sdr_g_tuner()
1043 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_s_tuner() local
1044 struct platform_device *pdev = dev->pdev; rtl2832_sdr_s_tuner()
1047 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_s_tuner()
1052 V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, s_tuner)) { rtl2832_sdr_s_tuner()
1053 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, s_tuner, v); rtl2832_sdr_s_tuner()
1065 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_enum_freq_bands() local
1066 struct platform_device *pdev = dev->pdev; rtl2832_sdr_enum_freq_bands()
1069 dev_dbg(&pdev->dev, "tuner=%d type=%d index=%d\n", rtl2832_sdr_enum_freq_bands()
1079 V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, enum_freq_bands)) { rtl2832_sdr_enum_freq_bands()
1080 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, enum_freq_bands, band); rtl2832_sdr_enum_freq_bands()
1096 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_g_frequency() local
1097 struct platform_device *pdev = dev->pdev; rtl2832_sdr_g_frequency()
1100 dev_dbg(&pdev->dev, "tuner=%d type=%d\n", f->tuner, f->type); rtl2832_sdr_g_frequency()
1103 f->frequency = dev->f_adc; rtl2832_sdr_g_frequency()
1107 V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, g_frequency)) { rtl2832_sdr_g_frequency()
1109 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, g_frequency, f); rtl2832_sdr_g_frequency()
1111 f->frequency = dev->f_tuner; rtl2832_sdr_g_frequency()
1123 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_s_frequency() local
1124 struct platform_device *pdev = dev->pdev; rtl2832_sdr_s_frequency()
1127 dev_dbg(&pdev->dev, "tuner=%d type=%d frequency=%u\n", rtl2832_sdr_s_frequency()
1142 dev->f_adc = clamp_t(unsigned int, f->frequency, rtl2832_sdr_s_frequency()
1146 dev_dbg(&pdev->dev, "ADC frequency=%u Hz\n", dev->f_adc); rtl2832_sdr_s_frequency()
1147 ret = rtl2832_sdr_set_adc(dev); rtl2832_sdr_s_frequency()
1149 V4L2_SUBDEV_HAS_OP(dev->v4l2_subdev, tuner, s_frequency)) { rtl2832_sdr_s_frequency()
1150 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, s_frequency, f); rtl2832_sdr_s_frequency()
1152 dev->f_tuner = clamp_t(unsigned int, f->frequency, rtl2832_sdr_s_frequency()
1155 dev_dbg(&pdev->dev, "RF frequency=%u Hz\n", f->frequency); rtl2832_sdr_s_frequency()
1157 ret = rtl2832_sdr_set_tuner_freq(dev); rtl2832_sdr_s_frequency()
1167 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_enum_fmt_sdr_cap() local
1168 struct platform_device *pdev = dev->pdev; rtl2832_sdr_enum_fmt_sdr_cap()
1170 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_enum_fmt_sdr_cap()
1172 if (f->index >= dev->num_formats) rtl2832_sdr_enum_fmt_sdr_cap()
1184 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_g_fmt_sdr_cap() local
1185 struct platform_device *pdev = dev->pdev; rtl2832_sdr_g_fmt_sdr_cap()
1187 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_g_fmt_sdr_cap()
1189 f->fmt.sdr.pixelformat = dev->pixelformat; rtl2832_sdr_g_fmt_sdr_cap()
1190 f->fmt.sdr.buffersize = dev->buffersize; rtl2832_sdr_g_fmt_sdr_cap()
1200 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_s_fmt_sdr_cap() local
1201 struct platform_device *pdev = dev->pdev; rtl2832_sdr_s_fmt_sdr_cap()
1202 struct vb2_queue *q = &dev->vb_queue; rtl2832_sdr_s_fmt_sdr_cap()
1205 dev_dbg(&pdev->dev, "pixelformat fourcc %4.4s\n", rtl2832_sdr_s_fmt_sdr_cap()
1212 for (i = 0; i < dev->num_formats; i++) { rtl2832_sdr_s_fmt_sdr_cap()
1214 dev->pixelformat = formats[i].pixelformat; rtl2832_sdr_s_fmt_sdr_cap()
1215 dev->buffersize = formats[i].buffersize; rtl2832_sdr_s_fmt_sdr_cap()
1221 dev->pixelformat = formats[0].pixelformat; rtl2832_sdr_s_fmt_sdr_cap()
1222 dev->buffersize = formats[0].buffersize; rtl2832_sdr_s_fmt_sdr_cap()
1232 struct rtl2832_sdr_dev *dev = video_drvdata(file); rtl2832_sdr_try_fmt_sdr_cap() local
1233 struct platform_device *pdev = dev->pdev; rtl2832_sdr_try_fmt_sdr_cap()
1236 dev_dbg(&pdev->dev, "pixelformat fourcc %4.4s\n", rtl2832_sdr_try_fmt_sdr_cap()
1240 for (i = 0; i < dev->num_formats; i++) { rtl2832_sdr_try_fmt_sdr_cap()
1302 struct rtl2832_sdr_dev *dev = rtl2832_sdr_s_ctrl() local
1305 struct platform_device *pdev = dev->pdev; rtl2832_sdr_s_ctrl()
1306 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_s_ctrl()
1311 dev_dbg(&pdev->dev, "id=%d name=%s val=%d min=%lld max=%lld step=%lld\n", rtl2832_sdr_s_ctrl()
1319 if (dev->bandwidth_auto->val) { rtl2832_sdr_s_ctrl()
1321 s32 val = dev->f_adc + div_u64(dev->bandwidth->step, 2); rtl2832_sdr_s_ctrl()
1324 val = clamp_t(s32, val, dev->bandwidth->minimum, rtl2832_sdr_s_ctrl()
1325 dev->bandwidth->maximum); rtl2832_sdr_s_ctrl()
1326 offset = val - dev->bandwidth->minimum; rtl2832_sdr_s_ctrl()
1327 offset = dev->bandwidth->step * rtl2832_sdr_s_ctrl()
1328 div_u64(offset, dev->bandwidth->step); rtl2832_sdr_s_ctrl()
1329 dev->bandwidth->val = dev->bandwidth->minimum + offset; rtl2832_sdr_s_ctrl()
1331 c->bandwidth_hz = dev->bandwidth->val; rtl2832_sdr_s_ctrl()
1333 if (!test_bit(POWER_ON, &dev->flags)) rtl2832_sdr_s_ctrl()
1354 struct rtl2832_sdr_dev *dev = rtl2832_sdr_video_release() local
1356 struct platform_device *pdev = dev->pdev; rtl2832_sdr_video_release()
1358 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_video_release()
1360 v4l2_ctrl_handler_free(&dev->hdl); rtl2832_sdr_video_release()
1361 v4l2_device_unregister(&dev->v4l2_dev); rtl2832_sdr_video_release()
1362 kfree(dev); rtl2832_sdr_video_release()
1368 struct rtl2832_sdr_dev *dev; rtl2832_sdr_probe() local
1369 struct rtl2832_sdr_platform_data *pdata = pdev->dev.platform_data; rtl2832_sdr_probe()
1374 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_probe()
1377 dev_err(&pdev->dev, "Cannot proceed without platform data\n"); rtl2832_sdr_probe()
1381 if (!pdev->dev.parent->driver) { rtl2832_sdr_probe()
1382 dev_dbg(&pdev->dev, "No parent device\n"); rtl2832_sdr_probe()
1387 if (!try_module_get(pdev->dev.parent->driver->owner)) { rtl2832_sdr_probe()
1388 dev_err(&pdev->dev, "Refcount fail"); rtl2832_sdr_probe()
1392 dev = kzalloc(sizeof(*dev), GFP_KERNEL); rtl2832_sdr_probe()
1393 if (dev == NULL) { rtl2832_sdr_probe()
1400 dev->v4l2_subdev = pdata->v4l2_subdev; rtl2832_sdr_probe()
1401 dev->pdev = pdev; rtl2832_sdr_probe()
1402 dev->udev = pdata->dvb_usb_device->udev; rtl2832_sdr_probe()
1403 dev->f_adc = bands_adc[0].rangelow; rtl2832_sdr_probe()
1404 dev->f_tuner = bands_fm[0].rangelow; rtl2832_sdr_probe()
1405 dev->pixelformat = formats[0].pixelformat; rtl2832_sdr_probe()
1406 dev->buffersize = formats[0].buffersize; rtl2832_sdr_probe()
1407 dev->num_formats = NUM_FORMATS; rtl2832_sdr_probe()
1409 dev->num_formats -= 1; rtl2832_sdr_probe()
1411 mutex_init(&dev->v4l2_lock); rtl2832_sdr_probe()
1412 mutex_init(&dev->vb_queue_lock); rtl2832_sdr_probe()
1413 spin_lock_init(&dev->queued_bufs_lock); rtl2832_sdr_probe()
1414 INIT_LIST_HEAD(&dev->queued_bufs); rtl2832_sdr_probe()
1417 dev->vb_queue.type = V4L2_BUF_TYPE_SDR_CAPTURE; rtl2832_sdr_probe()
1418 dev->vb_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; rtl2832_sdr_probe()
1419 dev->vb_queue.drv_priv = dev; rtl2832_sdr_probe()
1420 dev->vb_queue.buf_struct_size = sizeof(struct rtl2832_sdr_frame_buf); rtl2832_sdr_probe()
1421 dev->vb_queue.ops = &rtl2832_sdr_vb2_ops; rtl2832_sdr_probe()
1422 dev->vb_queue.mem_ops = &vb2_vmalloc_memops; rtl2832_sdr_probe()
1423 dev->vb_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; rtl2832_sdr_probe()
1424 ret = vb2_queue_init(&dev->vb_queue); rtl2832_sdr_probe()
1426 dev_err(&pdev->dev, "Could not initialize vb2 queue\n"); rtl2832_sdr_probe()
1433 v4l2_ctrl_handler_init(&dev->hdl, 9); rtl2832_sdr_probe()
1435 v4l2_ctrl_add_handler(&dev->hdl, subdev->ctrl_handler, NULL); rtl2832_sdr_probe()
1439 v4l2_ctrl_handler_init(&dev->hdl, 2); rtl2832_sdr_probe()
1440 dev->bandwidth_auto = v4l2_ctrl_new_std(&dev->hdl, ops, rtl2832_sdr_probe()
1443 dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, ops, rtl2832_sdr_probe()
1446 v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false); rtl2832_sdr_probe()
1450 v4l2_ctrl_handler_init(&dev->hdl, 2); rtl2832_sdr_probe()
1451 dev->bandwidth_auto = v4l2_ctrl_new_std(&dev->hdl, ops, rtl2832_sdr_probe()
1454 dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, ops, rtl2832_sdr_probe()
1458 v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false); rtl2832_sdr_probe()
1461 v4l2_ctrl_handler_init(&dev->hdl, 2); rtl2832_sdr_probe()
1463 v4l2_ctrl_add_handler(&dev->hdl, subdev->ctrl_handler, rtl2832_sdr_probe()
1467 v4l2_ctrl_handler_init(&dev->hdl, 0); rtl2832_sdr_probe()
1468 dev_err(&pdev->dev, "Unsupported tuner\n"); rtl2832_sdr_probe()
1471 if (dev->hdl.error) { rtl2832_sdr_probe()
1472 ret = dev->hdl.error; rtl2832_sdr_probe()
1473 dev_err(&pdev->dev, "Could not initialize controls\n"); rtl2832_sdr_probe()
1478 dev->vdev = rtl2832_sdr_template; rtl2832_sdr_probe()
1479 dev->vdev.queue = &dev->vb_queue; rtl2832_sdr_probe()
1480 dev->vdev.queue->lock = &dev->vb_queue_lock; rtl2832_sdr_probe()
1481 video_set_drvdata(&dev->vdev, dev); rtl2832_sdr_probe()
1484 dev->v4l2_dev.release = rtl2832_sdr_video_release; rtl2832_sdr_probe()
1485 ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev); rtl2832_sdr_probe()
1487 dev_err(&pdev->dev, "Failed to register v4l2-device %d\n", ret); rtl2832_sdr_probe()
1491 dev->v4l2_dev.ctrl_handler = &dev->hdl; rtl2832_sdr_probe()
1492 dev->vdev.v4l2_dev = &dev->v4l2_dev; rtl2832_sdr_probe()
1493 dev->vdev.lock = &dev->v4l2_lock; rtl2832_sdr_probe()
1494 dev->vdev.vfl_dir = VFL_DIR_RX; rtl2832_sdr_probe()
1496 ret = video_register_device(&dev->vdev, VFL_TYPE_SDR, -1); rtl2832_sdr_probe()
1498 dev_err(&pdev->dev, "Failed to register as video device %d\n", rtl2832_sdr_probe()
1502 dev_info(&pdev->dev, "Registered as %s\n", rtl2832_sdr_probe()
1503 video_device_node_name(&dev->vdev)); rtl2832_sdr_probe()
1504 dev_info(&pdev->dev, "Realtek RTL2832 SDR attached\n"); rtl2832_sdr_probe()
1505 dev_notice(&pdev->dev, rtl2832_sdr_probe()
1507 platform_set_drvdata(pdev, dev); rtl2832_sdr_probe()
1510 v4l2_device_unregister(&dev->v4l2_dev); rtl2832_sdr_probe()
1512 v4l2_ctrl_handler_free(&dev->hdl); rtl2832_sdr_probe()
1514 kfree(dev); rtl2832_sdr_probe()
1516 module_put(pdev->dev.parent->driver->owner); rtl2832_sdr_probe()
1523 struct rtl2832_sdr_dev *dev = platform_get_drvdata(pdev); rtl2832_sdr_remove() local
1525 dev_dbg(&pdev->dev, "\n"); rtl2832_sdr_remove()
1527 mutex_lock(&dev->vb_queue_lock); rtl2832_sdr_remove()
1528 mutex_lock(&dev->v4l2_lock); rtl2832_sdr_remove()
1530 dev->udev = NULL; rtl2832_sdr_remove()
1531 v4l2_device_disconnect(&dev->v4l2_dev); rtl2832_sdr_remove()
1532 video_unregister_device(&dev->vdev); rtl2832_sdr_remove()
1533 mutex_unlock(&dev->v4l2_lock); rtl2832_sdr_remove()
1534 mutex_unlock(&dev->vb_queue_lock); rtl2832_sdr_remove()
1535 v4l2_device_put(&dev->v4l2_dev); rtl2832_sdr_remove()
1536 module_put(pdev->dev.parent->driver->owner); rtl2832_sdr_remove()
208 rtl2832_sdr_get_next_fill_buf( struct rtl2832_sdr_dev *dev) rtl2832_sdr_get_next_fill_buf() argument
/linux-4.4.14/drivers/virtio/
H A Dvirtio.c14 struct virtio_device *dev = dev_to_virtio(_d); device_show() local
15 return sprintf(buf, "0x%04x\n", dev->id.device); device_show()
22 struct virtio_device *dev = dev_to_virtio(_d); vendor_show() local
23 return sprintf(buf, "0x%04x\n", dev->id.vendor); vendor_show()
30 struct virtio_device *dev = dev_to_virtio(_d); status_show() local
31 return sprintf(buf, "0x%08x\n", dev->config->get_status(dev)); status_show()
38 struct virtio_device *dev = dev_to_virtio(_d); modalias_show() local
40 dev->id.device, dev->id.vendor); modalias_show()
47 struct virtio_device *dev = dev_to_virtio(_d); features_show() local
53 for (i = 0; i < sizeof(dev->features)*8; i++) features_show()
55 __virtio_test_bit(dev, i) ? '1' : '0'); features_show()
71 static inline int virtio_id_match(const struct virtio_device *dev, virtio_id_match() argument
74 if (id->device != dev->id.device && id->device != VIRTIO_DEV_ANY_ID) virtio_id_match()
77 return id->vendor == VIRTIO_DEV_ANY_ID || id->vendor == dev->id.vendor; virtio_id_match()
85 struct virtio_device *dev = dev_to_virtio(_dv); virtio_dev_match() local
90 if (virtio_id_match(dev, &ids[i])) virtio_dev_match()
97 struct virtio_device *dev = dev_to_virtio(_dv); virtio_uevent() local
100 dev->id.device, dev->id.vendor); virtio_uevent()
103 static void add_status(struct virtio_device *dev, unsigned status) add_status() argument
105 dev->config->set_status(dev, dev->config->get_status(dev) | status); add_status()
112 struct virtio_driver *drv = drv_to_virtio(vdev->dev.driver); virtio_check_driver_offered_feature()
128 static void __virtio_config_changed(struct virtio_device *dev) __virtio_config_changed() argument
130 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); __virtio_config_changed()
132 if (!dev->config_enabled) __virtio_config_changed()
133 dev->config_change_pending = true; __virtio_config_changed()
135 drv->config_changed(dev); __virtio_config_changed()
138 void virtio_config_changed(struct virtio_device *dev) virtio_config_changed() argument
142 spin_lock_irqsave(&dev->config_lock, flags); virtio_config_changed()
143 __virtio_config_changed(dev); virtio_config_changed()
144 spin_unlock_irqrestore(&dev->config_lock, flags); virtio_config_changed()
148 static void virtio_config_disable(struct virtio_device *dev) virtio_config_disable() argument
150 spin_lock_irq(&dev->config_lock); virtio_config_disable()
151 dev->config_enabled = false; virtio_config_disable()
152 spin_unlock_irq(&dev->config_lock); virtio_config_disable()
155 static void virtio_config_enable(struct virtio_device *dev) virtio_config_enable() argument
157 spin_lock_irq(&dev->config_lock); virtio_config_enable()
158 dev->config_enabled = true; virtio_config_enable()
159 if (dev->config_change_pending) virtio_config_enable()
160 __virtio_config_changed(dev); virtio_config_enable()
161 dev->config_change_pending = false; virtio_config_enable()
162 spin_unlock_irq(&dev->config_lock); virtio_config_enable()
165 static int virtio_finalize_features(struct virtio_device *dev) virtio_finalize_features() argument
167 int ret = dev->config->finalize_features(dev); virtio_finalize_features()
173 if (!virtio_has_feature(dev, VIRTIO_F_VERSION_1)) virtio_finalize_features()
176 add_status(dev, VIRTIO_CONFIG_S_FEATURES_OK); virtio_finalize_features()
177 status = dev->config->get_status(dev); virtio_finalize_features()
179 dev_err(&dev->dev, "virtio: device refuses features: %x\n", virtio_finalize_features()
189 struct virtio_device *dev = dev_to_virtio(_d); virtio_dev_probe() local
190 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); virtio_dev_probe()
196 add_status(dev, VIRTIO_CONFIG_S_DRIVER); virtio_dev_probe()
199 device_features = dev->config->get_features(dev); virtio_dev_probe()
222 dev->features = driver_features & device_features; virtio_dev_probe()
224 dev->features = driver_features_legacy & device_features; virtio_dev_probe()
229 __virtio_set_bit(dev, i); virtio_dev_probe()
231 err = virtio_finalize_features(dev); virtio_dev_probe()
235 err = drv->probe(dev); virtio_dev_probe()
240 if (!(dev->config->get_status(dev) & VIRTIO_CONFIG_S_DRIVER_OK)) virtio_dev_probe()
241 virtio_device_ready(dev); virtio_dev_probe()
244 drv->scan(dev); virtio_dev_probe()
246 virtio_config_enable(dev); virtio_dev_probe()
250 add_status(dev, VIRTIO_CONFIG_S_FAILED); virtio_dev_probe()
257 struct virtio_device *dev = dev_to_virtio(_d); virtio_dev_remove() local
258 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); virtio_dev_remove()
260 virtio_config_disable(dev); virtio_dev_remove()
262 drv->remove(dev); virtio_dev_remove()
265 WARN_ON_ONCE(dev->config->get_status(dev)); virtio_dev_remove()
268 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); virtio_dev_remove()
296 int register_virtio_device(struct virtio_device *dev) register_virtio_device() argument
300 dev->dev.bus = &virtio_bus; register_virtio_device()
307 dev->index = err; register_virtio_device()
308 dev_set_name(&dev->dev, "virtio%u", dev->index); register_virtio_device()
310 spin_lock_init(&dev->config_lock); register_virtio_device()
311 dev->config_enabled = false; register_virtio_device()
312 dev->config_change_pending = false; register_virtio_device()
316 dev->config->reset(dev); register_virtio_device()
319 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); register_virtio_device()
321 INIT_LIST_HEAD(&dev->vqs); register_virtio_device()
325 err = device_register(&dev->dev); register_virtio_device()
328 add_status(dev, VIRTIO_CONFIG_S_FAILED); register_virtio_device()
333 void unregister_virtio_device(struct virtio_device *dev) unregister_virtio_device() argument
335 int index = dev->index; /* save for after device release */ unregister_virtio_device()
337 device_unregister(&dev->dev); unregister_virtio_device()
343 int virtio_device_freeze(struct virtio_device *dev) virtio_device_freeze() argument
345 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); virtio_device_freeze()
347 virtio_config_disable(dev); virtio_device_freeze()
349 dev->failed = dev->config->get_status(dev) & VIRTIO_CONFIG_S_FAILED; virtio_device_freeze()
352 return drv->freeze(dev); virtio_device_freeze()
358 int virtio_device_restore(struct virtio_device *dev) virtio_device_restore() argument
360 struct virtio_driver *drv = drv_to_virtio(dev->dev.driver); virtio_device_restore()
365 dev->config->reset(dev); virtio_device_restore()
368 add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE); virtio_device_restore()
372 if (dev->failed) virtio_device_restore()
373 add_status(dev, VIRTIO_CONFIG_S_FAILED); virtio_device_restore()
379 add_status(dev, VIRTIO_CONFIG_S_DRIVER); virtio_device_restore()
381 ret = virtio_finalize_features(dev); virtio_device_restore()
386 ret = drv->restore(dev); virtio_device_restore()
392 add_status(dev, VIRTIO_CONFIG_S_DRIVER_OK); virtio_device_restore()
394 virtio_config_enable(dev); virtio_device_restore()
399 add_status(dev, VIRTIO_CONFIG_S_FAILED); virtio_device_restore()
/linux-4.4.14/drivers/w1/
H A Dw1_int.c45 struct w1_master *dev; w1_alloc_dev() local
51 dev = kzalloc(sizeof(struct w1_master) + sizeof(struct w1_bus_master), GFP_KERNEL); w1_alloc_dev()
52 if (!dev) { w1_alloc_dev()
59 dev->bus_master = (struct w1_bus_master *)(dev + 1); w1_alloc_dev()
61 dev->owner = THIS_MODULE; w1_alloc_dev()
62 dev->max_slave_count = slave_count; w1_alloc_dev()
63 dev->slave_count = 0; w1_alloc_dev()
64 dev->attempts = 0; w1_alloc_dev()
65 dev->initialized = 0; w1_alloc_dev()
66 dev->id = id; w1_alloc_dev()
67 dev->slave_ttl = slave_ttl; w1_alloc_dev()
68 dev->search_count = w1_search_count; w1_alloc_dev()
69 dev->enable_pullup = w1_enable_pullup; w1_alloc_dev()
74 atomic_set(&dev->refcnt, 2); w1_alloc_dev()
76 INIT_LIST_HEAD(&dev->slist); w1_alloc_dev()
77 INIT_LIST_HEAD(&dev->async_list); w1_alloc_dev()
78 mutex_init(&dev->mutex); w1_alloc_dev()
79 mutex_init(&dev->bus_mutex); w1_alloc_dev()
80 mutex_init(&dev->list_mutex); w1_alloc_dev()
82 memcpy(&dev->dev, device, sizeof(struct device)); w1_alloc_dev()
83 dev_set_name(&dev->dev, "w1_bus_master%u", dev->id); w1_alloc_dev()
84 snprintf(dev->name, sizeof(dev->name), "w1_bus_master%u", dev->id); w1_alloc_dev()
85 dev->dev.init_name = dev->name; w1_alloc_dev()
87 dev->driver = driver; w1_alloc_dev()
89 dev->seq = 1; w1_alloc_dev()
91 err = device_register(&dev->dev); w1_alloc_dev()
94 put_device(&dev->dev); w1_alloc_dev()
95 dev = NULL; w1_alloc_dev()
98 return dev; w1_alloc_dev()
101 static void w1_free_dev(struct w1_master *dev) w1_free_dev() argument
103 device_unregister(&dev->dev); w1_free_dev()
112 struct w1_master *dev, *entry; w1_add_master_device() local
140 dev = w1_alloc_dev(id, w1_max_slave_count, w1_max_slave_ttl, w1_add_master_device()
142 if (!dev) { w1_add_master_device()
147 retval = w1_create_master_attributes(dev); w1_add_master_device()
153 memcpy(dev->bus_master, master, sizeof(struct w1_bus_master)); w1_add_master_device()
155 dev->initialized = 1; w1_add_master_device()
157 dev->thread = kthread_run(&w1_process, dev, "%s", dev->name); w1_add_master_device()
158 if (IS_ERR(dev->thread)) { w1_add_master_device()
159 retval = PTR_ERR(dev->thread); w1_add_master_device()
160 dev_err(&dev->dev, w1_add_master_device()
167 list_add(&dev->w1_master_entry, &w1_masters); w1_add_master_device()
171 msg.id.mst.id = dev->id; w1_add_master_device()
173 w1_netlink_send(dev, &msg); w1_add_master_device()
179 set_bit(W1_ABORT_SEARCH, &dev->flags); w1_add_master_device()
180 kthread_stop(dev->thread); w1_add_master_device()
183 w1_destroy_master_attributes(dev); w1_add_master_device()
185 w1_free_dev(dev); w1_add_master_device()
190 void __w1_remove_master_device(struct w1_master *dev) __w1_remove_master_device() argument
196 list_del(&dev->w1_master_entry); __w1_remove_master_device()
199 set_bit(W1_ABORT_SEARCH, &dev->flags); __w1_remove_master_device()
200 kthread_stop(dev->thread); __w1_remove_master_device()
202 mutex_lock(&dev->mutex); __w1_remove_master_device()
203 mutex_lock(&dev->list_mutex); __w1_remove_master_device()
204 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { __w1_remove_master_device()
205 mutex_unlock(&dev->list_mutex); __w1_remove_master_device()
207 mutex_lock(&dev->list_mutex); __w1_remove_master_device()
209 w1_destroy_master_attributes(dev); __w1_remove_master_device()
210 mutex_unlock(&dev->list_mutex); __w1_remove_master_device()
211 mutex_unlock(&dev->mutex); __w1_remove_master_device()
212 atomic_dec(&dev->refcnt); __w1_remove_master_device()
214 while (atomic_read(&dev->refcnt)) { __w1_remove_master_device()
215 dev_info(&dev->dev, "Waiting for %s to become free: refcnt=%d.\n", __w1_remove_master_device()
216 dev->name, atomic_read(&dev->refcnt)); __w1_remove_master_device()
220 mutex_lock(&dev->list_mutex); __w1_remove_master_device()
221 w1_process_callbacks(dev); __w1_remove_master_device()
222 mutex_unlock(&dev->list_mutex); __w1_remove_master_device()
224 mutex_lock(&dev->list_mutex); __w1_remove_master_device()
225 w1_process_callbacks(dev); __w1_remove_master_device()
226 mutex_unlock(&dev->list_mutex); __w1_remove_master_device()
229 msg.id.mst.id = dev->id; __w1_remove_master_device()
231 w1_netlink_send(dev, &msg); __w1_remove_master_device()
233 w1_free_dev(dev); __w1_remove_master_device()
242 struct w1_master *dev, *found = NULL; w1_remove_master_device() local
244 list_for_each_entry(dev, &w1_masters, w1_master_entry) { w1_remove_master_device()
245 if (!dev->initialized) w1_remove_master_device()
248 if (dev->bus_master->data == bm->data) { w1_remove_master_device()
249 found = dev; w1_remove_master_device()
/linux-4.4.14/drivers/media/usb/cx231xx/
H A Dcx231xx-avcore.c58 static int verve_write_byte(struct cx231xx *dev, u8 saddr, u8 data) verve_write_byte() argument
60 return cx231xx_write_i2c_data(dev, VERVE_I2C_ADDRESS, verve_write_byte()
64 static int verve_read_byte(struct cx231xx *dev, u8 saddr, u8 *data) verve_read_byte() argument
69 status = cx231xx_read_i2c_data(dev, VERVE_I2C_ADDRESS, verve_read_byte()
74 void initGPIO(struct cx231xx *dev) initGPIO() argument
82 cx231xx_send_gpio_cmd(dev, _gpio_direction, (u8 *)&value, 4, 0, 0); initGPIO()
84 verve_read_byte(dev, 0x07, &val); initGPIO()
85 dev_dbg(dev->dev, "verve_read_byte address0x07=0x%x\n", val); initGPIO()
86 verve_write_byte(dev, 0x07, 0xF4); initGPIO()
87 verve_read_byte(dev, 0x07, &val); initGPIO()
88 dev_dbg(dev->dev, "verve_read_byte address0x07=0x%x\n", val); initGPIO()
90 cx231xx_capture_start(dev, 1, Vbi); initGPIO()
92 cx231xx_mode_register(dev, EP_MODE_SET, 0x0500FE00); initGPIO()
93 cx231xx_mode_register(dev, GBULK_BIT_EN, 0xFFFDFFFF); initGPIO()
96 void uninitGPIO(struct cx231xx *dev) uninitGPIO() argument
100 cx231xx_capture_start(dev, 0, Vbi); uninitGPIO()
101 verve_write_byte(dev, 0x07, 0x14); uninitGPIO()
102 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, uninitGPIO()
110 static int afe_write_byte(struct cx231xx *dev, u16 saddr, u8 data) afe_write_byte() argument
112 return cx231xx_write_i2c_data(dev, AFE_DEVICE_ADDRESS, afe_write_byte()
116 static int afe_read_byte(struct cx231xx *dev, u16 saddr, u8 *data) afe_read_byte() argument
121 status = cx231xx_read_i2c_data(dev, AFE_DEVICE_ADDRESS, afe_read_byte()
127 int cx231xx_afe_init_super_block(struct cx231xx *dev, u32 ref_count) cx231xx_afe_init_super_block() argument
136 status = afe_write_byte(dev, SUP_BLK_TUNE2, temp); cx231xx_afe_init_super_block()
140 status = afe_read_byte(dev, SUP_BLK_TUNE2, &afe_power_status); cx231xx_afe_init_super_block()
146 status = afe_write_byte(dev, SUP_BLK_TUNE1, temp); cx231xx_afe_init_super_block()
150 status = afe_write_byte(dev, SUP_BLK_PLL2, 0x0f); cx231xx_afe_init_super_block()
156 status = afe_write_byte(dev, SUP_BLK_PWRDN, 0x18); cx231xx_afe_init_super_block()
158 dev_dbg(dev->dev, cx231xx_afe_init_super_block()
164 status = afe_read_byte(dev, SUP_BLK_PWRDN, &afe_power_status); cx231xx_afe_init_super_block()
167 dev_dbg(dev->dev, cx231xx_afe_init_super_block()
174 dev_dbg(dev->dev, cx231xx_afe_init_super_block()
186 status = afe_write_byte(dev, SUP_BLK_TUNE3, 0x40); cx231xx_afe_init_super_block()
193 status = afe_write_byte(dev, SUP_BLK_TUNE3, 0x00); cx231xx_afe_init_super_block()
198 int cx231xx_afe_init_channels(struct cx231xx *dev) cx231xx_afe_init_channels() argument
203 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, 0x00); cx231xx_afe_init_channels()
204 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, 0x00); cx231xx_afe_init_channels()
205 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, 0x00); cx231xx_afe_init_channels()
208 status = afe_write_byte(dev, ADC_COM_QUANT, 0x02); cx231xx_afe_init_channels()
211 status = afe_write_byte(dev, ADC_FB_FRCRST_CH1, 0x17); cx231xx_afe_init_channels()
212 status = afe_write_byte(dev, ADC_FB_FRCRST_CH2, 0x17); cx231xx_afe_init_channels()
213 status = afe_write_byte(dev, ADC_FB_FRCRST_CH3, 0x17); cx231xx_afe_init_channels()
216 status = afe_write_byte(dev, ADC_CAL_ATEST_CH1, 0x10); cx231xx_afe_init_channels()
217 status = afe_write_byte(dev, ADC_CAL_ATEST_CH2, 0x10); cx231xx_afe_init_channels()
218 status = afe_write_byte(dev, ADC_CAL_ATEST_CH3, 0x10); cx231xx_afe_init_channels()
222 status = afe_write_byte(dev, ADC_FB_FRCRST_CH1, 0x07); cx231xx_afe_init_channels()
223 status = afe_write_byte(dev, ADC_FB_FRCRST_CH2, 0x07); cx231xx_afe_init_channels()
224 status = afe_write_byte(dev, ADC_FB_FRCRST_CH3, 0x07); cx231xx_afe_init_channels()
227 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH1, 0xf0); cx231xx_afe_init_channels()
228 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH2, 0xf0); cx231xx_afe_init_channels()
229 status = afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH3, 0xf0); cx231xx_afe_init_channels()
232 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8, cx231xx_afe_init_channels()
234 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8, cx231xx_afe_init_channels()
236 status = cx231xx_reg_mask_write(dev, AFE_DEVICE_ADDRESS, 8, cx231xx_afe_init_channels()
240 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH1, 0x03); cx231xx_afe_init_channels()
241 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH2, 0x03); cx231xx_afe_init_channels()
242 status = afe_write_byte(dev, ADC_DCSERVO_DEM_CH3, 0x03); cx231xx_afe_init_channels()
247 int cx231xx_afe_setup_AFE_for_baseband(struct cx231xx *dev) cx231xx_afe_setup_AFE_for_baseband() argument
252 status = afe_read_byte(dev, ADC_PWRDN_CLAMP_CH2, &c_value); cx231xx_afe_setup_AFE_for_baseband()
254 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, c_value); cx231xx_afe_setup_AFE_for_baseband()
268 int cx231xx_afe_set_input_mux(struct cx231xx *dev, u32 input_mux) cx231xx_afe_set_input_mux() argument
277 status = afe_read_byte(dev, ADC_INPUT_CH1, &value); cx231xx_afe_set_input_mux()
281 status = afe_write_byte(dev, ADC_INPUT_CH1, value); cx231xx_afe_set_input_mux()
285 status = afe_read_byte(dev, ADC_INPUT_CH2, &value); cx231xx_afe_set_input_mux()
289 status = afe_write_byte(dev, ADC_INPUT_CH2, value); cx231xx_afe_set_input_mux()
295 status = afe_read_byte(dev, ADC_INPUT_CH3, &value); cx231xx_afe_set_input_mux()
299 status = afe_write_byte(dev, ADC_INPUT_CH3, value); cx231xx_afe_set_input_mux()
305 int cx231xx_afe_set_mode(struct cx231xx *dev, enum AFE_MODE mode) cx231xx_afe_set_mode() argument
316 cx231xx_Setup_AFE_for_LowIF(dev); cx231xx_afe_set_mode()
319 status = cx231xx_afe_setup_AFE_for_baseband(dev); cx231xx_afe_set_mode()
332 if ((mode != dev->afe_mode) && cx231xx_afe_set_mode()
333 (dev->video_input == CX231XX_VMUX_TELEVISION)) cx231xx_afe_set_mode()
334 status = cx231xx_afe_adjust_ref_count(dev, cx231xx_afe_set_mode()
337 dev->afe_mode = mode; cx231xx_afe_set_mode()
342 int cx231xx_afe_update_power_control(struct cx231xx *dev, cx231xx_afe_update_power_control() argument
348 switch (dev->model) { cx231xx_afe_update_power_control()
366 status = afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
369 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
375 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
377 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
379 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
382 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
384 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
386 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
389 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
394 status |= afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
399 status = afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
402 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
408 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
410 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
412 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
415 dev_dbg(dev->dev, "Invalid AV mode input\n"); cx231xx_afe_update_power_control()
423 status = afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
426 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
432 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
434 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
436 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
439 status = afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
441 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
443 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
446 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
451 status |= afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
456 status = afe_write_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
459 status |= afe_read_byte(dev, SUP_BLK_PWRDN, cx231xx_afe_update_power_control()
465 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH1, cx231xx_afe_update_power_control()
467 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH2, cx231xx_afe_update_power_control()
469 status |= afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, cx231xx_afe_update_power_control()
472 dev_dbg(dev->dev, "Invalid AV mode input\n"); cx231xx_afe_update_power_control()
480 int cx231xx_afe_adjust_ref_count(struct cx231xx *dev, u32 video_input) cx231xx_afe_adjust_ref_count() argument
486 dev->video_input = video_input; cx231xx_afe_adjust_ref_count()
489 status = afe_read_byte(dev, ADC_INPUT_CH3, &input_mode); cx231xx_afe_adjust_ref_count()
490 status = afe_read_byte(dev, ADC_NTF_PRECLMP_EN_CH3, cx231xx_afe_adjust_ref_count()
493 status = afe_read_byte(dev, ADC_INPUT_CH1, &input_mode); cx231xx_afe_adjust_ref_count()
494 status = afe_read_byte(dev, ADC_NTF_PRECLMP_EN_CH1, cx231xx_afe_adjust_ref_count()
502 dev->afe_ref_count = 0x23C; cx231xx_afe_adjust_ref_count()
505 dev->afe_ref_count = 0x24C; cx231xx_afe_adjust_ref_count()
508 dev->afe_ref_count = 0x258; cx231xx_afe_adjust_ref_count()
511 dev->afe_ref_count = 0x260; cx231xx_afe_adjust_ref_count()
517 status = cx231xx_afe_init_super_block(dev, dev->afe_ref_count); cx231xx_afe_adjust_ref_count()
525 static int vid_blk_write_byte(struct cx231xx *dev, u16 saddr, u8 data) vid_blk_write_byte() argument
527 return cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS, vid_blk_write_byte()
531 static int vid_blk_read_byte(struct cx231xx *dev, u16 saddr, u8 *data) vid_blk_read_byte() argument
536 status = cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS, vid_blk_read_byte()
542 static int vid_blk_write_word(struct cx231xx *dev, u16 saddr, u32 data) vid_blk_write_word() argument
544 return cx231xx_write_i2c_data(dev, VID_BLK_I2C_ADDRESS, vid_blk_write_word()
548 static int vid_blk_read_word(struct cx231xx *dev, u16 saddr, u32 *data) vid_blk_read_word() argument
550 return cx231xx_read_i2c_data(dev, VID_BLK_I2C_ADDRESS, vid_blk_read_word()
553 int cx231xx_check_fw(struct cx231xx *dev) cx231xx_check_fw() argument
557 status = vid_blk_read_byte(dev, DL_CTL_ADDRESS_LOW, &temp); cx231xx_check_fw()
565 int cx231xx_set_video_input_mux(struct cx231xx *dev, u8 input) cx231xx_set_video_input_mux() argument
572 if ((dev->current_pcb_config.type == USB_BUS_POWER) && cx231xx_set_video_input_mux()
573 (dev->power_mode != POLARIS_AVMODE_ENXTERNAL_AV)) { cx231xx_set_video_input_mux()
575 status = cx231xx_set_power_mode(dev, cx231xx_set_video_input_mux()
578 dev_err(dev->dev, cx231xx_set_video_input_mux()
584 status = cx231xx_set_decoder_video_input(dev, cx231xx_set_video_input_mux()
590 if ((dev->current_pcb_config.type == USB_BUS_POWER) && cx231xx_set_video_input_mux()
591 (dev->power_mode != POLARIS_AVMODE_ANALOGT_TV)) { cx231xx_set_video_input_mux()
593 status = cx231xx_set_power_mode(dev, cx231xx_set_video_input_mux()
596 dev_err(dev->dev, cx231xx_set_video_input_mux()
602 if (dev->tuner_type == TUNER_NXP_TDA18271) cx231xx_set_video_input_mux()
603 status = cx231xx_set_decoder_video_input(dev, cx231xx_set_video_input_mux()
607 status = cx231xx_set_decoder_video_input(dev, cx231xx_set_video_input_mux()
613 dev_err(dev->dev, "%s: Unknown Input %d !\n", cx231xx_set_video_input_mux()
619 dev->video_input = input; cx231xx_set_video_input_mux()
624 int cx231xx_set_decoder_video_input(struct cx231xx *dev, cx231xx_set_decoder_video_input() argument
630 if (pin_type != dev->video_input) { cx231xx_set_decoder_video_input()
631 status = cx231xx_afe_adjust_ref_count(dev, pin_type); cx231xx_set_decoder_video_input()
633 dev_err(dev->dev, cx231xx_set_decoder_video_input()
641 status = cx231xx_afe_set_input_mux(dev, input); cx231xx_set_decoder_video_input()
643 dev_err(dev->dev, cx231xx_set_decoder_video_input()
651 status = vid_blk_read_word(dev, AFE_CTRL, &value); cx231xx_set_decoder_video_input()
659 status = vid_blk_write_word(dev, AFE_CTRL, value); cx231xx_set_decoder_video_input()
661 status = vid_blk_read_word(dev, OUT_CTRL1, &value); cx231xx_set_decoder_video_input()
663 status = vid_blk_write_word(dev, OUT_CTRL1, value); cx231xx_set_decoder_video_input()
666 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
670 dev->board.output_mode); cx231xx_set_decoder_video_input()
673 status = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND); cx231xx_set_decoder_video_input()
675 dev_err(dev->dev, cx231xx_set_decoder_video_input()
682 status = vid_blk_read_word(dev, DFE_CTRL1, &value); cx231xx_set_decoder_video_input()
691 status = vid_blk_write_word(dev, DFE_CTRL1, value); cx231xx_set_decoder_video_input()
694 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
700 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
708 status = vid_blk_read_word(dev, AFE_CTRL, &value); cx231xx_set_decoder_video_input()
715 status = vid_blk_write_word(dev, AFE_CTRL, value); cx231xx_set_decoder_video_input()
718 status = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND); cx231xx_set_decoder_video_input()
720 dev_err(dev->dev, cx231xx_set_decoder_video_input()
727 status = vid_blk_read_word(dev, DFE_CTRL1, &value); cx231xx_set_decoder_video_input()
736 status = vid_blk_write_word(dev, DFE_CTRL1, value); cx231xx_set_decoder_video_input()
739 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
745 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
752 status = vid_blk_read_word(dev, AFE_CTRL, &value); cx231xx_set_decoder_video_input()
760 status = vid_blk_write_word(dev, AFE_CTRL, value); cx231xx_set_decoder_video_input()
762 status = cx231xx_afe_set_mode(dev, AFE_MODE_BASEBAND); cx231xx_set_decoder_video_input()
768 if (dev->board.tuner_type == TUNER_XC5000) { cx231xx_set_decoder_video_input()
771 status = vid_blk_read_word(dev, AFE_CTRL, &value); cx231xx_set_decoder_video_input()
779 status = vid_blk_write_word(dev, AFE_CTRL, value); cx231xx_set_decoder_video_input()
781 status = vid_blk_read_word(dev, OUT_CTRL1, &value); cx231xx_set_decoder_video_input()
783 status = vid_blk_write_word(dev, OUT_CTRL1, value); cx231xx_set_decoder_video_input()
786 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
789 dev->board.output_mode); cx231xx_set_decoder_video_input()
792 status = cx231xx_dif_set_standard(dev, cx231xx_set_decoder_video_input()
795 dev_err(dev->dev, cx231xx_set_decoder_video_input()
802 status = vid_blk_read_word(dev, DFE_CTRL1, &value); cx231xx_set_decoder_video_input()
811 status = vid_blk_write_word(dev, DFE_CTRL1, value); cx231xx_set_decoder_video_input()
814 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
820 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
829 status = cx231xx_dif_set_standard(dev, dev->norm); cx231xx_set_decoder_video_input()
831 dev_err(dev->dev, cx231xx_set_decoder_video_input()
838 status = vid_blk_read_word(dev, DIF_MISC_CTRL, &value); cx231xx_set_decoder_video_input()
844 status = vid_blk_write_word(dev, DIF_MISC_CTRL, value); cx231xx_set_decoder_video_input()
847 status = vid_blk_read_word(dev, DFE_CTRL1, &value); cx231xx_set_decoder_video_input()
857 status = vid_blk_write_word(dev, DFE_CTRL1, value); cx231xx_set_decoder_video_input()
866 status = vid_blk_write_word(dev, DFE_CTRL1, value); cx231xx_set_decoder_video_input()
869 status = vid_blk_read_word(dev, PIN_CTRL, &value); cx231xx_set_decoder_video_input()
873 status = vid_blk_write_word(dev, PIN_CTRL, value); cx231xx_set_decoder_video_input()
876 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
879 dev->board.output_mode); cx231xx_set_decoder_video_input()
882 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
888 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
899 status = vid_blk_read_word(dev, AFE_CTRL, &value); cx231xx_set_decoder_video_input()
907 status = vid_blk_write_word(dev, AFE_CTRL, value); cx231xx_set_decoder_video_input()
909 if (dev->tuner_type == TUNER_NXP_TDA18271) { cx231xx_set_decoder_video_input()
910 status = vid_blk_read_word(dev, PIN_CTRL, cx231xx_set_decoder_video_input()
912 status = vid_blk_write_word(dev, PIN_CTRL, cx231xx_set_decoder_video_input()
923 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_decoder_video_input()
928 status = vid_blk_read_word(dev, OUT_CTRL1, &value); cx231xx_set_decoder_video_input()
931 status = vid_blk_write_word(dev, OUT_CTRL1, value); cx231xx_set_decoder_video_input()
937 void cx231xx_enable656(struct cx231xx *dev) cx231xx_enable656() argument
942 vid_blk_write_byte(dev, TS1_PIN_CTL0, 0xFF); cx231xx_enable656()
946 vid_blk_read_byte(dev, TS1_PIN_CTL1, &temp); cx231xx_enable656()
949 vid_blk_write_byte(dev, TS1_PIN_CTL1, temp); cx231xx_enable656()
953 void cx231xx_disable656(struct cx231xx *dev) cx231xx_disable656() argument
957 vid_blk_write_byte(dev, TS1_PIN_CTL0, 0x00); cx231xx_disable656()
959 vid_blk_read_byte(dev, TS1_PIN_CTL1, &temp); cx231xx_disable656()
962 vid_blk_write_byte(dev, TS1_PIN_CTL1, temp); cx231xx_disable656()
971 int cx231xx_do_mode_ctrl_overrides(struct cx231xx *dev) cx231xx_do_mode_ctrl_overrides() argument
975 dev_dbg(dev->dev, "%s: 0x%x\n", cx231xx_do_mode_ctrl_overrides()
976 __func__, (unsigned int)dev->norm); cx231xx_do_mode_ctrl_overrides()
979 status = vid_blk_write_word(dev, DFE_CTRL3, 0xCD3F0280); cx231xx_do_mode_ctrl_overrides()
981 if (dev->norm & (V4L2_STD_NTSC | V4L2_STD_PAL_M)) { cx231xx_do_mode_ctrl_overrides()
982 dev_dbg(dev->dev, "%s: NTSC\n", __func__); cx231xx_do_mode_ctrl_overrides()
986 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
990 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
995 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1001 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1008 } else if (dev->norm & V4L2_STD_SECAM) { cx231xx_do_mode_ctrl_overrides()
1009 dev_dbg(dev->dev, "%s: SECAM\n", __func__); cx231xx_do_mode_ctrl_overrides()
1010 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1014 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1021 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1029 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1036 dev_dbg(dev->dev, "%s: PAL\n", __func__); cx231xx_do_mode_ctrl_overrides()
1037 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1041 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1048 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1056 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_do_mode_ctrl_overrides()
1068 int cx231xx_unmute_audio(struct cx231xx *dev) cx231xx_unmute_audio() argument
1070 return vid_blk_write_byte(dev, PATH1_VOL_CTL, 0x24); cx231xx_unmute_audio()
1074 static int stopAudioFirmware(struct cx231xx *dev) stopAudioFirmware() argument
1076 return vid_blk_write_byte(dev, DL_CTL_CONTROL, 0x03); stopAudioFirmware()
1079 static int restartAudioFirmware(struct cx231xx *dev) restartAudioFirmware() argument
1081 return vid_blk_write_byte(dev, DL_CTL_CONTROL, 0x13); restartAudioFirmware()
1084 int cx231xx_set_audio_input(struct cx231xx *dev, u8 input) cx231xx_set_audio_input() argument
1094 status = cx231xx_i2s_blk_set_audio_input(dev, input); cx231xx_set_audio_input()
1101 status = cx231xx_set_audio_decoder_input(dev, ainput); cx231xx_set_audio_input()
1106 int cx231xx_set_audio_decoder_input(struct cx231xx *dev, cx231xx_set_audio_decoder_input() argument
1115 status = vid_blk_read_byte(dev, GENERAL_CTL, &gen_ctrl); cx231xx_set_audio_decoder_input()
1117 status = vid_blk_write_byte(dev, GENERAL_CTL, gen_ctrl); cx231xx_set_audio_decoder_input()
1124 status = vid_blk_write_word(dev, AUD_IO_CTRL, value); cx231xx_set_audio_decoder_input()
1129 status = vid_blk_read_word(dev, AC97_CTL, &dwval); cx231xx_set_audio_decoder_input()
1131 status = vid_blk_write_word(dev, AC97_CTL, cx231xx_set_audio_decoder_input()
1135 status = vid_blk_write_word(dev, BAND_OUT_SEL, cx231xx_set_audio_decoder_input()
1142 status = vid_blk_write_word(dev, DL_CTL, 0x3000001); cx231xx_set_audio_decoder_input()
1143 status = vid_blk_write_word(dev, PATH1_CTL1, 0x00063073); cx231xx_set_audio_decoder_input()
1146 status = vid_blk_read_word(dev, PATH1_VOL_CTL, &dwval); cx231xx_set_audio_decoder_input()
1147 status = vid_blk_write_word(dev, PATH1_VOL_CTL, cx231xx_set_audio_decoder_input()
1151 status = vid_blk_read_word(dev, PATH1_SC_CTL, &dwval); cx231xx_set_audio_decoder_input()
1152 status = vid_blk_write_word(dev, PATH1_SC_CTL, cx231xx_set_audio_decoder_input()
1158 status = stopAudioFirmware(dev); cx231xx_set_audio_decoder_input()
1160 status = vid_blk_write_word(dev, BAND_OUT_SEL, cx231xx_set_audio_decoder_input()
1176 status = vid_blk_write_word(dev, AUD_IO_CTRL, cx231xx_set_audio_decoder_input()
1183 status = vid_blk_write_word(dev, PATH1_CTL1, 0x1F063870); cx231xx_set_audio_decoder_input()
1186 status = vid_blk_write_word(dev, PATH1_CTL1, 0x00063870); cx231xx_set_audio_decoder_input()
1188 status = restartAudioFirmware(dev); cx231xx_set_audio_decoder_input()
1190 switch (dev->board.tuner_type) { cx231xx_set_audio_decoder_input()
1193 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_audio_decoder_input()
1201 status = cx231xx_read_modify_write_i2c_dword(dev, cx231xx_set_audio_decoder_input()
1211 dev_info(dev->dev, cx231xx_set_audio_decoder_input()
1225 status = vid_blk_write_word(dev, PATH1_CTL1, 0x1F011012); cx231xx_set_audio_decoder_input()
1230 status = vid_blk_read_byte(dev, GENERAL_CTL, &gen_ctrl); cx231xx_set_audio_decoder_input()
1232 status = vid_blk_write_byte(dev, GENERAL_CTL, gen_ctrl); cx231xx_set_audio_decoder_input()
1240 int cx231xx_init_ctrl_pin_status(struct cx231xx *dev) cx231xx_init_ctrl_pin_status() argument
1245 status = vid_blk_read_word(dev, PIN_CTRL, &value); cx231xx_init_ctrl_pin_status()
1246 value |= (~dev->board.ctl_pin_status_mask); cx231xx_init_ctrl_pin_status()
1247 status = vid_blk_write_word(dev, PIN_CTRL, value); cx231xx_init_ctrl_pin_status()
1252 int cx231xx_set_agc_analog_digital_mux_select(struct cx231xx *dev, cx231xx_set_agc_analog_digital_mux_select() argument
1258 status = cx231xx_set_gpio_direction(dev, cx231xx_set_agc_analog_digital_mux_select()
1259 dev->board. cx231xx_set_agc_analog_digital_mux_select()
1263 status = cx231xx_set_gpio_value(dev, cx231xx_set_agc_analog_digital_mux_select()
1264 dev->board.agc_analog_digital_select_gpio, cx231xx_set_agc_analog_digital_mux_select()
1270 int cx231xx_enable_i2c_port_3(struct cx231xx *dev, bool is_port_3) cx231xx_enable_i2c_port_3() argument
1277 * Should this code check dev->port_3_switch_enabled first cx231xx_enable_i2c_port_3()
1279 * If yes, the flag dev->port_3_switch_enabled must be initialized cx231xx_enable_i2c_port_3()
1283 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, cx231xx_enable_i2c_port_3()
1299 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_enable_i2c_port_3()
1304 dev->port_3_switch_enabled = is_port_3; cx231xx_enable_i2c_port_3()
1311 void update_HH_register_after_set_DIF(struct cx231xx *dev) update_HH_register_after_set_DIF() argument
1317 vid_blk_write_word(dev, PIN_CTRL, 0xA0FFF82F); update_HH_register_after_set_DIF()
1318 vid_blk_write_word(dev, DIF_MISC_CTRL, 0x0A203F11); update_HH_register_after_set_DIF()
1319 vid_blk_write_word(dev, DIF_SRC_PHASE_INC, 0x1BEFBF06); update_HH_register_after_set_DIF()
1321 status = vid_blk_read_word(dev, AFE_CTRL_C2HH_SRC_CTRL, &value); update_HH_register_after_set_DIF()
1322 vid_blk_write_word(dev, AFE_CTRL_C2HH_SRC_CTRL, 0x4485D390); update_HH_register_after_set_DIF()
1323 status = vid_blk_read_word(dev, AFE_CTRL_C2HH_SRC_CTRL, &value); update_HH_register_after_set_DIF()
1327 void cx231xx_dump_HH_reg(struct cx231xx *dev) cx231xx_dump_HH_reg() argument
1333 vid_blk_write_word(dev, 0x104, value); cx231xx_dump_HH_reg()
1336 vid_blk_read_word(dev, i, &value); cx231xx_dump_HH_reg()
1337 dev_dbg(dev->dev, "reg0x%x=0x%x\n", i, value); cx231xx_dump_HH_reg()
1342 vid_blk_read_word(dev, i, &value); cx231xx_dump_HH_reg()
1343 dev_dbg(dev->dev, "reg0x%x=0x%x\n", i, value); cx231xx_dump_HH_reg()
1348 vid_blk_read_word(dev, i, &value); cx231xx_dump_HH_reg()
1349 dev_dbg(dev->dev, "reg0x%x=0x%x\n", i, value); cx231xx_dump_HH_reg()
1353 vid_blk_read_word(dev, AFE_CTRL_C2HH_SRC_CTRL, &value); cx231xx_dump_HH_reg()
1354 dev_dbg(dev->dev, "AFE_CTRL_C2HH_SRC_CTRL=0x%x\n", value); cx231xx_dump_HH_reg()
1355 vid_blk_write_word(dev, AFE_CTRL_C2HH_SRC_CTRL, 0x4485D390); cx231xx_dump_HH_reg()
1356 vid_blk_read_word(dev, AFE_CTRL_C2HH_SRC_CTRL, &value); cx231xx_dump_HH_reg()
1357 dev_dbg(dev->dev, "AFE_CTRL_C2HH_SRC_CTRL=0x%x\n", value); cx231xx_dump_HH_reg()
1361 static void cx231xx_dump_SC_reg(struct cx231xx *dev)
1364 dev_dbg(dev->dev, "%s!\n", __func__);
1366 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, BOARD_CFG_STAT,
1368 dev_dbg(dev->dev,
1371 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, TS_MODE_REG,
1373 dev_dbg(dev->dev,
1376 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, TS1_CFG_REG,
1378 dev_dbg(dev->dev,
1381 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, TS1_LENGTH_REG,
1383 dev_dbg(dev->dev,
1387 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, TS2_CFG_REG,
1389 dev_dbg(dev->dev,
1392 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, TS2_LENGTH_REG,
1394 dev_dbg(dev->dev,
1397 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, EP_MODE_SET,
1399 dev_dbg(dev->dev,
1402 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_PTN1,
1404 dev_dbg(dev->dev,
1408 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_PTN2,
1410 dev_dbg(dev->dev,
1413 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_PTN3,
1415 dev_dbg(dev->dev,
1418 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_MASK0,
1420 dev_dbg(dev->dev,
1423 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_MASK1,
1425 dev_dbg(dev->dev,
1429 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_PWR_MASK2,
1431 dev_dbg(dev->dev,
1434 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_GAIN,
1436 dev_dbg(dev->dev,
1439 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_CAR_REG,
1441 dev_dbg(dev->dev,
1444 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_OT_CFG1,
1446 dev_dbg(dev->dev,
1450 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, CIR_OT_CFG2,
1452 dev_dbg(dev->dev,
1455 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN,
1457 dev_dbg(dev->dev,
1463 void cx231xx_Setup_AFE_for_LowIF(struct cx231xx *dev) cx231xx_Setup_AFE_for_LowIF() argument
1468 afe_read_byte(dev, ADC_STATUS2_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1470 afe_write_byte(dev, ADC_STATUS2_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1472 afe_read_byte(dev, ADC_STATUS2_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1474 afe_write_byte(dev, ADC_STATUS2_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1486 afe_read_byte(dev, ADC_NTF_PRECLMP_EN_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1488 afe_write_byte(dev, ADC_NTF_PRECLMP_EN_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1490 afe_read_byte(dev, ADC_INPUT_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1492 afe_write_byte(dev, ADC_INPUT_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1494 afe_read_byte(dev, ADC_FB_FRCRST_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1496 afe_write_byte(dev, ADC_FB_FRCRST_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1498 afe_read_byte(dev, ADC_DCSERVO_DEM_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1500 afe_write_byte(dev, ADC_DCSERVO_DEM_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1502 afe_read_byte(dev, ADC_CTRL_DAC1_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1504 afe_write_byte(dev, ADC_CTRL_DAC1_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1506 afe_read_byte(dev, ADC_CTRL_DAC23_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1508 afe_write_byte(dev, ADC_CTRL_DAC23_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1510 afe_read_byte(dev, ADC_CTRL_DAC23_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1512 afe_write_byte(dev, ADC_CTRL_DAC23_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1514 afe_read_byte(dev, ADC_PWRDN_CLAMP_CH3, &value); cx231xx_Setup_AFE_for_LowIF()
1516 afe_write_byte(dev, ADC_PWRDN_CLAMP_CH3, value); cx231xx_Setup_AFE_for_LowIF()
1519 void cx231xx_set_Colibri_For_LowIF(struct cx231xx *dev, u32 if_freq, cx231xx_set_Colibri_For_LowIF() argument
1527 dev_dbg(dev->dev, "Enter cx231xx_set_Colibri_For_LowIF()\n"); cx231xx_set_Colibri_For_LowIF()
1532 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_Colibri_For_LowIF()
1536 cx231xx_afe_set_mode(dev, AFE_MODE_LOW_IF); cx231xx_set_Colibri_For_LowIF()
1539 standard = dev->norm; cx231xx_set_Colibri_For_LowIF()
1540 cx231xx_dif_configure_C2HH_for_low_IF(dev, dev->active_mode, cx231xx_set_Colibri_For_LowIF()
1547 dev_dbg(dev->dev, "colibri_carrier_offset=%d, standard=0x%x\n", cx231xx_set_Colibri_For_LowIF()
1551 cx231xx_set_DIF_bandpass(dev, (if_freq+colibri_carrier_offset), cx231xx_set_Colibri_For_LowIF()
1573 void cx231xx_set_DIF_bandpass(struct cx231xx *dev, u32 if_freq, cx231xx_set_DIF_bandpass() argument
1581 dev_dbg(dev->dev, "if_freq=%d;spectral_invert=0x%x;mode=0x%x\n", cx231xx_set_DIF_bandpass()
1587 vid_blk_write_word(dev, DIF_PLL_FREQ_WORD, pll_freq_word); cx231xx_set_DIF_bandpass()
1596 vid_blk_write_word(dev, DIF_PLL_FREQ_WORD, pll_freq_word); cx231xx_set_DIF_bandpass()
1601 vid_blk_read_word(dev, DIF_MISC_CTRL, cx231xx_set_DIF_bandpass()
1604 vid_blk_write_word(dev, DIF_MISC_CTRL, cx231xx_set_DIF_bandpass()
1609 vid_blk_read_word(dev, DIF_MISC_CTRL, cx231xx_set_DIF_bandpass()
1612 vid_blk_write_word(dev, DIF_MISC_CTRL, cx231xx_set_DIF_bandpass()
1625 dev_dbg(dev->dev, "Enter IF=%zu\n", ARRAY_SIZE(Dif_set_array)); cx231xx_set_DIF_bandpass()
1628 vid_blk_write_word(dev, cx231xx_set_DIF_bandpass()
1637 int cx231xx_dif_configure_C2HH_for_low_IF(struct cx231xx *dev, u32 mode, cx231xx_dif_configure_C2HH_for_low_IF() argument
1646 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1650 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1654 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1658 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1664 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1668 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1673 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1677 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1681 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1689 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1693 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1698 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1702 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1709 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1713 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1718 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1722 status = cx231xx_reg_mask_write(dev, cx231xx_dif_configure_C2HH_for_low_IF()
1731 int cx231xx_dif_set_standard(struct cx231xx *dev, u32 standard) cx231xx_dif_set_standard() argument
1737 dev_dbg(dev->dev, "%s: setStandard to %x\n", __func__, standard); cx231xx_dif_set_standard()
1739 status = vid_blk_read_word(dev, DIF_MISC_CTRL, &dif_misc_ctrl_value); cx231xx_dif_set_standard()
1741 dev->norm = standard; cx231xx_dif_set_standard()
1743 switch (dev->model) { cx231xx_dif_set_standard()
1763 status = cx231xx_dif_configure_C2HH_for_low_IF(dev, dev->active_mode, cx231xx_dif_set_standard()
1769 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC, 0xDF7DF83); cx231xx_dif_set_standard()
1770 status = vid_blk_read_word(dev, DIF_MISC_CTRL, cx231xx_dif_set_standard()
1773 status = vid_blk_write_word(dev, DIF_MISC_CTRL, cx231xx_dif_set_standard()
1776 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1778 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1780 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1782 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1784 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1786 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1788 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1790 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1792 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1795 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1798 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1801 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1804 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1806 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1809 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1812 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1815 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1821 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1823 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1825 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1827 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1829 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1831 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1833 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1835 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1837 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1840 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1843 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1846 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1849 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1851 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1854 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1857 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1860 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1867 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0xFF01FF0C); cx231xx_dif_set_standard()
1868 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xbd038c85); cx231xx_dif_set_standard()
1869 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1db4640a); cx231xx_dif_set_standard()
1870 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800); cx231xx_dif_set_standard()
1871 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C1380); cx231xx_dif_set_standard()
1872 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT, cx231xx_dif_set_standard()
1874 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT, cx231xx_dif_set_standard()
1876 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL, cx231xx_dif_set_standard()
1878 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE, cx231xx_dif_set_standard()
1880 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL, 0x012c405d); cx231xx_dif_set_standard()
1881 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL, cx231xx_dif_set_standard()
1883 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC, cx231xx_dif_set_standard()
1885 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL, cx231xx_dif_set_standard()
1887 status = vid_blk_write_word(dev, DIF_SOFT_RST_CTRL_REVB, cx231xx_dif_set_standard()
1894 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0xFF01FF0C); cx231xx_dif_set_standard()
1895 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xbd038c85); cx231xx_dif_set_standard()
1896 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1db4640a); cx231xx_dif_set_standard()
1897 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800); cx231xx_dif_set_standard()
1898 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C1380); cx231xx_dif_set_standard()
1899 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT, cx231xx_dif_set_standard()
1901 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT, cx231xx_dif_set_standard()
1903 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL, cx231xx_dif_set_standard()
1905 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE, cx231xx_dif_set_standard()
1907 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL, cx231xx_dif_set_standard()
1909 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL, cx231xx_dif_set_standard()
1911 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC, cx231xx_dif_set_standard()
1913 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL, cx231xx_dif_set_standard()
1915 status = vid_blk_write_word(dev, DIF_SOFT_RST_CTRL_REVB, cx231xx_dif_set_standard()
1924 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1926 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1928 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1930 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1932 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1934 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1936 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1938 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1940 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1943 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1946 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1949 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1951 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1954 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1957 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1960 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1962 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1971 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1973 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1975 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1977 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1979 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1981 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1983 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1985 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1987 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1990 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1993 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1996 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
1998 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2001 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2004 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2007 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2009 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2027 status = vid_blk_write_word(dev, DIF_PLL_CTRL, 0x6503BC0C); cx231xx_dif_set_standard()
2028 status = vid_blk_write_word(dev, DIF_PLL_CTRL1, 0xBD038C85); cx231xx_dif_set_standard()
2029 status = vid_blk_write_word(dev, DIF_PLL_CTRL2, 0x1DB4640A); cx231xx_dif_set_standard()
2030 status = vid_blk_write_word(dev, DIF_PLL_CTRL3, 0x00008800); cx231xx_dif_set_standard()
2031 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, 0x444C0380); cx231xx_dif_set_standard()
2032 status = vid_blk_write_word(dev, DIF_AGC_IF_INT_CURRENT, cx231xx_dif_set_standard()
2034 status = vid_blk_write_word(dev, DIF_AGC_RF_CURRENT, cx231xx_dif_set_standard()
2036 status = vid_blk_write_word(dev, DIF_VIDEO_AGC_CTRL, cx231xx_dif_set_standard()
2038 status = vid_blk_write_word(dev, DIF_VID_AUD_OVERRIDE, cx231xx_dif_set_standard()
2040 status = vid_blk_write_word(dev, DIF_AV_SEP_CTRL, 0x01296e1f); cx231xx_dif_set_standard()
2042 status = vid_blk_write_word(dev, DIF_COMP_FLT_CTRL, cx231xx_dif_set_standard()
2044 status = vid_blk_write_word(dev, DIF_SRC_PHASE_INC, cx231xx_dif_set_standard()
2046 status = vid_blk_write_word(dev, DIF_SRC_GAIN_CONTROL, cx231xx_dif_set_standard()
2049 status = vid_blk_write_word(dev, DIF_AGC_CTRL_IF, 0xC2262600); cx231xx_dif_set_standard()
2050 status = vid_blk_write_word(dev, DIF_AGC_CTRL_INT, cx231xx_dif_set_standard()
2052 status = vid_blk_write_word(dev, DIF_AGC_CTRL_RF, 0xC2262600); cx231xx_dif_set_standard()
2059 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2061 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2063 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2065 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2067 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2069 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2071 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2073 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2075 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2078 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2081 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2084 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2087 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2089 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2092 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2095 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2098 status = cx231xx_reg_mask_write(dev, VID_BLK_I2C_ADDRESS, 32, cx231xx_dif_set_standard()
2112 if (dev->active_mode == V4L2_TUNER_RADIO) cx231xx_dif_set_standard()
2116 status = vid_blk_write_word(dev, DIF_MISC_CTRL, dif_misc_ctrl_value); cx231xx_dif_set_standard()
2121 int cx231xx_tuner_pre_channel_change(struct cx231xx *dev) cx231xx_tuner_pre_channel_change() argument
2127 status = vid_blk_read_word(dev, DIF_AGC_IF_REF, &dwval); cx231xx_tuner_pre_channel_change()
2131 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, dwval); cx231xx_tuner_pre_channel_change()
2136 int cx231xx_tuner_post_channel_change(struct cx231xx *dev) cx231xx_tuner_post_channel_change() argument
2140 dev_dbg(dev->dev, "%s: dev->tuner_type =0%d\n", cx231xx_tuner_post_channel_change()
2141 __func__, dev->tuner_type); cx231xx_tuner_post_channel_change()
2144 status = vid_blk_read_word(dev, DIF_AGC_IF_REF, &dwval); cx231xx_tuner_post_channel_change()
2147 if (dev->norm & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_B | cx231xx_tuner_post_channel_change()
2149 if (dev->tuner_type == TUNER_NXP_TDA18271) { cx231xx_tuner_post_channel_change()
2155 if (dev->tuner_type == TUNER_NXP_TDA18271) { cx231xx_tuner_post_channel_change()
2162 status = vid_blk_write_word(dev, DIF_AGC_IF_REF, dwval); cx231xx_tuner_post_channel_change()
2170 int cx231xx_i2s_blk_initialize(struct cx231xx *dev) cx231xx_i2s_blk_initialize() argument
2175 status = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_initialize()
2179 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_initialize()
2182 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_initialize()
2188 int cx231xx_i2s_blk_update_power_control(struct cx231xx *dev, cx231xx_i2s_blk_update_power_control() argument
2195 status = cx231xx_read_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_update_power_control()
2198 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_update_power_control()
2201 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_update_power_control()
2209 int cx231xx_i2s_blk_set_audio_input(struct cx231xx *dev, u8 audio_input) cx231xx_i2s_blk_set_audio_input() argument
2215 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_set_audio_input()
2217 status = cx231xx_write_i2c_data(dev, I2S_BLK_DEVICE_ADDRESS, cx231xx_i2s_blk_set_audio_input()
2225 dev->ctl_ainput = audio_input; cx231xx_i2s_blk_set_audio_input()
2233 int cx231xx_set_power_mode(struct cx231xx *dev, enum AV_MODE mode) cx231xx_set_power_mode() argument
2239 if (dev->power_mode != mode) cx231xx_set_power_mode()
2240 dev->power_mode = mode; cx231xx_set_power_mode()
2242 dev_dbg(dev->dev, "%s: mode = %d, No Change req.\n", cx231xx_set_power_mode()
2247 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, value, cx231xx_set_power_mode()
2264 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2274 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, PWR_CTL_EN, cx231xx_set_power_mode()
2283 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2287 dev->xc_fw_load_done = 0; cx231xx_set_power_mode()
2297 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2307 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2318 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2328 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2339 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2344 if (dev->board.tuner_type != TUNER_ABSENT) { cx231xx_set_power_mode()
2346 if (dev->board.tuner_gpio) cx231xx_set_power_mode()
2347 cx231xx_gpio_set(dev, dev->board.tuner_gpio); cx231xx_set_power_mode()
2349 if (dev->cx231xx_reset_analog_tuner) cx231xx_set_power_mode()
2350 dev->cx231xx_reset_analog_tuner(dev); cx231xx_set_power_mode()
2362 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2372 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2382 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2393 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2403 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2408 if (dev->board.tuner_type != TUNER_ABSENT) { cx231xx_set_power_mode()
2410 if (dev->board.tuner_gpio) cx231xx_set_power_mode()
2411 cx231xx_gpio_set(dev, dev->board.tuner_gpio); cx231xx_set_power_mode()
2413 if (dev->cx231xx_reset_analog_tuner) cx231xx_set_power_mode()
2414 dev->cx231xx_reset_analog_tuner(dev); cx231xx_set_power_mode()
2432 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_set_power_mode()
2438 status = cx231xx_afe_update_power_control(dev, mode); cx231xx_set_power_mode()
2441 status = cx231xx_i2s_blk_update_power_control(dev, mode); cx231xx_set_power_mode()
2443 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, value, cx231xx_set_power_mode()
2449 int cx231xx_power_suspend(struct cx231xx *dev) cx231xx_power_suspend() argument
2455 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, cx231xx_power_suspend()
2467 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, PWR_CTL_EN, cx231xx_power_suspend()
2476 int cx231xx_start_stream(struct cx231xx *dev, u32 ep_mask) cx231xx_start_stream() argument
2482 dev_dbg(dev->dev, "%s: ep_mask = %x\n", __func__, ep_mask); cx231xx_start_stream()
2483 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, EP_MODE_SET, cx231xx_start_stream()
2495 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, EP_MODE_SET, cx231xx_start_stream()
2501 int cx231xx_stop_stream(struct cx231xx *dev, u32 ep_mask) cx231xx_stop_stream() argument
2507 dev_dbg(dev->dev, "%s: ep_mask = %x\n", __func__, ep_mask); cx231xx_stop_stream()
2509 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, EP_MODE_SET, value, 4); cx231xx_stop_stream()
2520 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, EP_MODE_SET, cx231xx_stop_stream()
2526 int cx231xx_initialize_stream_xfer(struct cx231xx *dev, u32 media_type) cx231xx_initialize_stream_xfer() argument
2532 if (dev->udev->speed == USB_SPEED_HIGH) { cx231xx_initialize_stream_xfer()
2535 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2538 cx231xx_mode_register(dev, TS_MODE_REG, 0x9300); cx231xx_initialize_stream_xfer()
2542 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2544 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x300); cx231xx_initialize_stream_xfer()
2548 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2551 cx231xx_mode_register(dev, TS_MODE_REG, 0x1300); cx231xx_initialize_stream_xfer()
2555 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2557 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x100); cx231xx_initialize_stream_xfer()
2561 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2564 if (dev->board.has_417) { cx231xx_initialize_stream_xfer()
2565 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2570 status = cx231xx_mode_register(dev, cx231xx_initialize_stream_xfer()
2577 status = cx231xx_write_ctrl_reg(dev, cx231xx_initialize_stream_xfer()
2585 status = cx231xx_write_ctrl_reg(dev, cx231xx_initialize_stream_xfer()
2589 dev_dbg(dev->dev, "%s: BDA\n", __func__); cx231xx_initialize_stream_xfer()
2590 status = cx231xx_mode_register(dev, cx231xx_initialize_stream_xfer()
2592 status = cx231xx_mode_register(dev, cx231xx_initialize_stream_xfer()
2598 dev_dbg(dev->dev, cx231xx_initialize_stream_xfer()
2601 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x100); cx231xx_initialize_stream_xfer()
2602 status = cx231xx_mode_register(dev, TS1_CFG_REG, 0x400); cx231xx_initialize_stream_xfer()
2606 status = cx231xx_mode_register(dev, TS_MODE_REG, 0x101); cx231xx_initialize_stream_xfer()
2612 int cx231xx_capture_start(struct cx231xx *dev, int start, u8 media_type) cx231xx_capture_start() argument
2619 pcb_config = (struct pcb_config *)&dev->current_pcb_config; cx231xx_capture_start()
2646 rc = cx231xx_initialize_stream_xfer(dev, media_type); cx231xx_capture_start()
2653 rc = cx231xx_start_stream(dev, ep_mask); cx231xx_capture_start()
2657 rc = cx231xx_stop_stream(dev, ep_mask); cx231xx_capture_start()
2667 static int cx231xx_set_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u32 gpio_val) cx231xx_set_gpio_bit() argument
2672 status = cx231xx_send_gpio_cmd(dev, gpio_bit, (u8 *)&gpio_val, 4, 0, 0); cx231xx_set_gpio_bit()
2677 static int cx231xx_get_gpio_bit(struct cx231xx *dev, u32 gpio_bit, u32 *gpio_val) cx231xx_get_gpio_bit() argument
2682 status = cx231xx_send_gpio_cmd(dev, gpio_bit, (u8 *)&tmp, 4, 0, 1); cx231xx_get_gpio_bit()
2699 int cx231xx_set_gpio_direction(struct cx231xx *dev, cx231xx_set_gpio_direction() argument
2711 value = dev->gpio_dir & (~(1 << pin_number)); /* clear */ cx231xx_set_gpio_direction()
2713 value = dev->gpio_dir | (1 << pin_number); cx231xx_set_gpio_direction()
2715 status = cx231xx_set_gpio_bit(dev, value, dev->gpio_val); cx231xx_set_gpio_direction()
2718 dev->gpio_dir = value; cx231xx_set_gpio_direction()
2734 int cx231xx_set_gpio_value(struct cx231xx *dev, int pin_number, int pin_value) cx231xx_set_gpio_value() argument
2744 if ((dev->gpio_dir & (1 << pin_number)) == 0x00) { cx231xx_set_gpio_value()
2746 value = dev->gpio_dir | (1 << pin_number); cx231xx_set_gpio_value()
2747 dev->gpio_dir = value; cx231xx_set_gpio_value()
2748 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_set_gpio_value()
2749 dev->gpio_val); cx231xx_set_gpio_value()
2754 value = dev->gpio_val & (~(1 << pin_number)); cx231xx_set_gpio_value()
2756 value = dev->gpio_val | (1 << pin_number); cx231xx_set_gpio_value()
2759 dev->gpio_val = value; cx231xx_set_gpio_value()
2762 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_set_gpio_value()
2770 int cx231xx_gpio_i2c_start(struct cx231xx *dev) cx231xx_gpio_i2c_start() argument
2775 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_start()
2776 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_start()
2777 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_start()
2778 dev->gpio_val |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_start()
2780 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_start()
2785 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_start()
2786 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_start()
2788 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_start()
2793 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_start()
2794 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_start()
2796 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_start()
2803 int cx231xx_gpio_i2c_end(struct cx231xx *dev) cx231xx_gpio_i2c_end() argument
2808 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_end()
2809 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_end()
2811 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_end()
2812 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_end()
2814 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_end()
2819 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_end()
2820 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_end()
2822 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_end()
2828 dev->gpio_dir &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_end()
2829 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_end()
2832 cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_end()
2839 int cx231xx_gpio_i2c_write_byte(struct cx231xx *dev, u8 data) cx231xx_gpio_i2c_write_byte() argument
2845 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_byte()
2846 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_write_byte()
2851 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_byte()
2852 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_write_byte()
2853 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2854 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2857 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_byte()
2858 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2859 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2862 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_byte()
2863 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2864 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2867 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_byte()
2868 dev->gpio_val |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_write_byte()
2869 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2870 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2873 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_byte()
2874 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2875 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2878 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_byte()
2879 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_write_byte()
2880 dev->gpio_val); cx231xx_gpio_i2c_write_byte()
2886 int cx231xx_gpio_i2c_read_byte(struct cx231xx *dev, u8 *buf) cx231xx_gpio_i2c_read_byte() argument
2897 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_read_byte()
2898 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_read_byte()
2899 dev->gpio_val); cx231xx_gpio_i2c_read_byte()
2902 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_read_byte()
2903 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_read_byte()
2904 dev->gpio_val); cx231xx_gpio_i2c_read_byte()
2907 gpio_logic_value = dev->gpio_val; cx231xx_gpio_i2c_read_byte()
2908 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_read_byte()
2909 &dev->gpio_val); cx231xx_gpio_i2c_read_byte()
2910 if ((dev->gpio_val & (1 << dev->board.tuner_sda_gpio)) != 0) cx231xx_gpio_i2c_read_byte()
2913 dev->gpio_val = gpio_logic_value; cx231xx_gpio_i2c_read_byte()
2919 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_read_byte()
2920 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_read_byte()
2928 int cx231xx_gpio_i2c_read_ack(struct cx231xx *dev) cx231xx_gpio_i2c_read_ack() argument
2937 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_read_ack()
2938 dev->gpio_dir &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_read_ack()
2940 gpio_logic_value = dev->gpio_val; cx231xx_gpio_i2c_read_ack()
2941 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_read_ack()
2945 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir, cx231xx_gpio_i2c_read_ack()
2946 &dev->gpio_val); cx231xx_gpio_i2c_read_ack()
2948 } while (((dev->gpio_val & cx231xx_gpio_i2c_read_ack()
2949 (1 << dev->board.tuner_scl_gpio)) == 0) && cx231xx_gpio_i2c_read_ack()
2953 dev_dbg(dev->dev, cx231xx_gpio_i2c_read_ack()
2962 status = cx231xx_get_gpio_bit(dev, dev->gpio_dir, &dev->gpio_val); cx231xx_gpio_i2c_read_ack()
2964 if ((dev->gpio_val & 1 << dev->board.tuner_sda_gpio) == 0) { cx231xx_gpio_i2c_read_ack()
2965 dev->gpio_val = gpio_logic_value; cx231xx_gpio_i2c_read_ack()
2966 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_read_ack()
2969 dev->gpio_val = gpio_logic_value; cx231xx_gpio_i2c_read_ack()
2970 dev->gpio_val |= (1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_read_ack()
2975 dev->gpio_val = gpio_logic_value; cx231xx_gpio_i2c_read_ack()
2976 dev->gpio_dir |= (1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_read_ack()
2977 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_read_ack()
2978 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_read_ack()
2983 int cx231xx_gpio_i2c_write_ack(struct cx231xx *dev) cx231xx_gpio_i2c_write_ack() argument
2988 dev->gpio_dir |= 1 << dev->board.tuner_sda_gpio; cx231xx_gpio_i2c_write_ack()
2989 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_ack()
2992 dev->gpio_val &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_write_ack()
2993 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_ack()
2994 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_ack()
2997 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_ack()
2998 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_ack()
3001 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_ack()
3002 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_ack()
3005 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_write_ack()
3006 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_ack()
3011 int cx231xx_gpio_i2c_write_nak(struct cx231xx *dev) cx231xx_gpio_i2c_write_nak() argument
3016 dev->gpio_dir |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_nak()
3017 dev->gpio_dir &= ~(1 << dev->board.tuner_sda_gpio); cx231xx_gpio_i2c_write_nak()
3018 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_nak()
3021 dev->gpio_val &= ~(1 << dev->board.tuner_scl_gpio); cx231xx_gpio_i2c_write_nak()
3022 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_nak()
3025 dev->gpio_val |= 1 << dev->board.tuner_scl_gpio; cx231xx_gpio_i2c_write_nak()
3026 status = cx231xx_set_gpio_bit(dev, dev->gpio_dir, dev->gpio_val); cx231xx_gpio_i2c_write_nak()
3037 int cx231xx_gpio_i2c_read(struct cx231xx *dev, u8 dev_addr, u8 *buf, u8 len) cx231xx_gpio_i2c_read() argument
3043 mutex_lock(&dev->gpio_i2c_lock); cx231xx_gpio_i2c_read()
3046 status = cx231xx_gpio_i2c_start(dev); cx231xx_gpio_i2c_read()
3049 status = cx231xx_gpio_i2c_write_byte(dev, (dev_addr << 1) + 1); cx231xx_gpio_i2c_read()
3052 status = cx231xx_gpio_i2c_read_ack(dev); cx231xx_gpio_i2c_read()
3058 status = cx231xx_gpio_i2c_read_byte(dev, &buf[i]); cx231xx_gpio_i2c_read()
3062 status = cx231xx_gpio_i2c_write_ack(dev); cx231xx_gpio_i2c_read()
3067 status = cx231xx_gpio_i2c_write_nak(dev); cx231xx_gpio_i2c_read()
3070 status = cx231xx_gpio_i2c_end(dev); cx231xx_gpio_i2c_read()
3073 mutex_unlock(&dev->gpio_i2c_lock); cx231xx_gpio_i2c_read()
3081 int cx231xx_gpio_i2c_write(struct cx231xx *dev, u8 dev_addr, u8 *buf, u8 len) cx231xx_gpio_i2c_write() argument
3086 mutex_lock(&dev->gpio_i2c_lock); cx231xx_gpio_i2c_write()
3089 cx231xx_gpio_i2c_start(dev); cx231xx_gpio_i2c_write()
3092 cx231xx_gpio_i2c_write_byte(dev, dev_addr << 1); cx231xx_gpio_i2c_write()
3095 cx231xx_gpio_i2c_read_ack(dev); cx231xx_gpio_i2c_write()
3099 cx231xx_gpio_i2c_write_byte(dev, buf[i]); cx231xx_gpio_i2c_write()
3102 cx231xx_gpio_i2c_read_ack(dev); cx231xx_gpio_i2c_write()
3106 cx231xx_gpio_i2c_end(dev); cx231xx_gpio_i2c_write()
3109 mutex_unlock(&dev->gpio_i2c_lock); cx231xx_gpio_i2c_write()
H A Dcx231xx-cards.c923 struct cx231xx *dev = ptr; cx231xx_tuner_callback() local
925 if (dev->tuner_type == TUNER_XC5000) { cx231xx_tuner_callback()
927 dev_dbg(dev->dev, cx231xx_tuner_callback()
929 command, dev->tuner_type); cx231xx_tuner_callback()
930 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, cx231xx_tuner_callback()
933 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, cx231xx_tuner_callback()
936 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, cx231xx_tuner_callback()
940 } else if (dev->tuner_type == TUNER_NXP_TDA18271) { cx231xx_tuner_callback()
943 if (dev->model == CX231XX_BOARD_PV_PLAYTV_USB_HYBRID) cx231xx_tuner_callback()
944 rc = cx231xx_set_agc_analog_digital_mux_select(dev, arg); cx231xx_tuner_callback()
955 static void cx231xx_reset_out(struct cx231xx *dev) cx231xx_reset_out() argument
957 cx231xx_set_gpio_value(dev, CX23417_RESET, 1); cx231xx_reset_out()
959 cx231xx_set_gpio_value(dev, CX23417_RESET, 0); cx231xx_reset_out()
961 cx231xx_set_gpio_value(dev, CX23417_RESET, 1); cx231xx_reset_out()
964 static void cx231xx_enable_OSC(struct cx231xx *dev) cx231xx_enable_OSC() argument
966 cx231xx_set_gpio_value(dev, CX23417_OSC_EN, 1); cx231xx_enable_OSC()
969 static void cx231xx_sleep_s5h1432(struct cx231xx *dev) cx231xx_sleep_s5h1432() argument
971 cx231xx_set_gpio_value(dev, SLEEP_S5H1432, 0); cx231xx_sleep_s5h1432()
974 static inline void cx231xx_set_model(struct cx231xx *dev) cx231xx_set_model() argument
976 dev->board = cx231xx_boards[dev->model]; cx231xx_set_model()
979 /* Since cx231xx_pre_card_setup() requires a proper dev->model,
982 void cx231xx_pre_card_setup(struct cx231xx *dev) cx231xx_pre_card_setup() argument
984 dev_info(dev->dev, "Identified as %s (card=%d)\n", cx231xx_pre_card_setup()
985 dev->board.name, dev->model); cx231xx_pre_card_setup()
988 if (dev->board.tuner_gpio) { cx231xx_pre_card_setup()
989 cx231xx_set_gpio_direction(dev, dev->board.tuner_gpio->bit, 1); cx231xx_pre_card_setup()
990 cx231xx_set_gpio_value(dev, dev->board.tuner_gpio->bit, 1); cx231xx_pre_card_setup()
992 if (dev->board.tuner_sif_gpio >= 0) cx231xx_pre_card_setup()
993 cx231xx_set_gpio_direction(dev, dev->board.tuner_sif_gpio, 1); cx231xx_pre_card_setup()
998 cx231xx_set_mode(dev, CX231XX_ANALOG_MODE); cx231xx_pre_card_setup()
1001 /* cx231xx_set_mode(dev, CX231XX_SUSPEND); */ cx231xx_pre_card_setup()
1005 static void cx231xx_config_tuner(struct cx231xx *dev) cx231xx_config_tuner() argument
1010 if (dev->tuner_type == TUNER_ABSENT) cx231xx_config_tuner()
1014 tun_setup.type = dev->tuner_type; cx231xx_config_tuner()
1015 tun_setup.addr = dev->tuner_addr; cx231xx_config_tuner()
1018 tuner_call(dev, tuner, s_type_addr, &tun_setup); cx231xx_config_tuner()
1028 .tuner = dev->tuner_type, cx231xx_config_tuner()
1031 tuner_call(dev, tuner, s_config, &cfg); cx231xx_config_tuner()
1038 dev->ctl_freq = f.frequency; cx231xx_config_tuner()
1039 call_all(dev, tuner, s_frequency, &f); cx231xx_config_tuner()
1043 static int read_eeprom(struct cx231xx *dev, struct i2c_client *client, read_eeprom() argument
1058 dev_err(dev->dev, "Can't read eeprom\n"); read_eeprom()
1068 dev_err(dev->dev, "Can't read eeprom\n"); read_eeprom()
1076 dev_dbg(dev->dev, "i2c eeprom %02x: %*ph\n", read_eeprom()
1082 void cx231xx_card_setup(struct cx231xx *dev) cx231xx_card_setup() argument
1085 cx231xx_set_model(dev); cx231xx_card_setup()
1087 dev->tuner_type = cx231xx_boards[dev->model].tuner_type; cx231xx_card_setup()
1088 if (cx231xx_boards[dev->model].tuner_addr) cx231xx_card_setup()
1089 dev->tuner_addr = cx231xx_boards[dev->model].tuner_addr; cx231xx_card_setup()
1092 if (dev->board.decoder == CX231XX_AVDECODER) { cx231xx_card_setup()
1093 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, cx231xx_card_setup()
1094 cx231xx_get_i2c_adap(dev, I2C_0), cx231xx_card_setup()
1096 if (dev->sd_cx25840 == NULL) cx231xx_card_setup()
1097 dev_err(dev->dev, cx231xx_card_setup()
1099 cx25840_call(dev, core, load_fw); cx231xx_card_setup()
1104 if (dev->board.tuner_type != TUNER_ABSENT) { cx231xx_card_setup()
1105 struct i2c_adapter *tuner_i2c = cx231xx_get_i2c_adap(dev, cx231xx_card_setup()
1106 dev->board.tuner_i2c_master); cx231xx_card_setup()
1107 dev->sd_tuner = v4l2_i2c_new_subdev(&dev->v4l2_dev, cx231xx_card_setup()
1110 dev->tuner_addr, NULL); cx231xx_card_setup()
1111 if (dev->sd_tuner == NULL) cx231xx_card_setup()
1112 dev_err(dev->dev, cx231xx_card_setup()
1115 cx231xx_config_tuner(dev); cx231xx_card_setup()
1118 switch (dev->model) { cx231xx_card_setup()
1131 dev_err(dev->dev, cx231xx_card_setup()
1135 e->client.adapter = cx231xx_get_i2c_adap(dev, I2C_1_MUX_1); cx231xx_card_setup()
1138 read_eeprom(dev, &e->client, e->eeprom, sizeof(e->eeprom)); cx231xx_card_setup()
1152 int cx231xx_config(struct cx231xx *dev) cx231xx_config() argument
1163 void cx231xx_config_i2c(struct cx231xx *dev) cx231xx_config_i2c() argument
1165 /* u32 input = INPUT(dev->video_input)->vmux; */ cx231xx_config_i2c()
1167 call_all(dev, video, s_stream, 1); cx231xx_config_i2c()
1170 static void cx231xx_unregister_media_device(struct cx231xx *dev) cx231xx_unregister_media_device() argument
1173 if (dev->media_dev) { cx231xx_unregister_media_device()
1174 media_device_unregister(dev->media_dev); cx231xx_unregister_media_device()
1175 kfree(dev->media_dev); cx231xx_unregister_media_device()
1176 dev->media_dev = NULL; cx231xx_unregister_media_device()
1186 void cx231xx_release_resources(struct cx231xx *dev) cx231xx_release_resources() argument
1188 cx231xx_unregister_media_device(dev); cx231xx_release_resources()
1190 cx231xx_release_analog_resources(dev); cx231xx_release_resources()
1192 cx231xx_remove_from_devlist(dev); cx231xx_release_resources()
1194 cx231xx_ir_exit(dev); cx231xx_release_resources()
1197 cx231xx_dev_uninit(dev); cx231xx_release_resources()
1200 v4l2_device_unregister(&dev->v4l2_dev); cx231xx_release_resources()
1202 usb_put_dev(dev->udev); cx231xx_release_resources()
1205 clear_bit(dev->devno, &cx231xx_devused); cx231xx_release_resources()
1208 static void cx231xx_media_device_register(struct cx231xx *dev, cx231xx_media_device_register() argument
1219 mdev->dev = dev->dev; cx231xx_media_device_register()
1220 strlcpy(mdev->model, dev->board.name, sizeof(mdev->model)); cx231xx_media_device_register()
1229 dev_err(dev->dev, cx231xx_media_device_register()
1236 dev->media_dev = mdev; cx231xx_media_device_register()
1240 static void cx231xx_create_media_graph(struct cx231xx *dev) cx231xx_create_media_graph() argument
1243 struct media_device *mdev = dev->media_dev; cx231xx_create_media_graph()
1269 media_entity_create_link(decoder, 1, &dev->vdev.entity, 0,
1271 media_entity_create_link(decoder, 2, &dev->vbi_dev.entity, 0,
1280 static int cx231xx_init_dev(struct cx231xx *dev, struct usb_device *udev, cx231xx_init_dev() argument
1286 dev->udev = udev; cx231xx_init_dev()
1287 mutex_init(&dev->lock); cx231xx_init_dev()
1288 mutex_init(&dev->ctrl_urb_lock); cx231xx_init_dev()
1289 mutex_init(&dev->gpio_i2c_lock); cx231xx_init_dev()
1290 mutex_init(&dev->i2c_lock); cx231xx_init_dev()
1292 spin_lock_init(&dev->video_mode.slock); cx231xx_init_dev()
1293 spin_lock_init(&dev->vbi_mode.slock); cx231xx_init_dev()
1294 spin_lock_init(&dev->sliced_cc_mode.slock); cx231xx_init_dev()
1296 init_waitqueue_head(&dev->open); cx231xx_init_dev()
1297 init_waitqueue_head(&dev->wait_frame); cx231xx_init_dev()
1298 init_waitqueue_head(&dev->wait_stream); cx231xx_init_dev()
1300 dev->cx231xx_read_ctrl_reg = cx231xx_read_ctrl_reg; cx231xx_init_dev()
1301 dev->cx231xx_write_ctrl_reg = cx231xx_write_ctrl_reg; cx231xx_init_dev()
1302 dev->cx231xx_send_usb_command = cx231xx_send_usb_command; cx231xx_init_dev()
1303 dev->cx231xx_gpio_i2c_read = cx231xx_gpio_i2c_read; cx231xx_init_dev()
1304 dev->cx231xx_gpio_i2c_write = cx231xx_gpio_i2c_write; cx231xx_init_dev()
1307 retval = initialize_cx231xx(dev); cx231xx_init_dev()
1309 dev_err(dev->dev, "Failed to read PCB config\n"); cx231xx_init_dev()
1315 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER || cx231xx_init_dev()
1316 dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2) { cx231xx_init_dev()
1317 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 3); cx231xx_init_dev()
1318 cx231xx_set_alt_setting(dev, INDEX_VANC, 1); cx231xx_init_dev()
1321 cx231xx_pre_card_setup(dev); cx231xx_init_dev()
1323 retval = cx231xx_config(dev); cx231xx_init_dev()
1325 dev_err(dev->dev, "error configuring device\n"); cx231xx_init_dev()
1330 dev->norm = dev->board.norm; cx231xx_init_dev()
1333 retval = cx231xx_dev_init(dev); cx231xx_init_dev()
1335 dev_err(dev->dev, cx231xx_init_dev()
1342 cx231xx_card_setup(dev); cx231xx_init_dev()
1345 cx231xx_config_i2c(dev); cx231xx_init_dev()
1347 maxw = norm_maxw(dev); cx231xx_init_dev()
1348 maxh = norm_maxh(dev); cx231xx_init_dev()
1351 dev->width = maxw; cx231xx_init_dev()
1352 dev->height = maxh; cx231xx_init_dev()
1353 dev->interlaced = 0; cx231xx_init_dev()
1354 dev->video_input = 0; cx231xx_init_dev()
1356 retval = cx231xx_config(dev); cx231xx_init_dev()
1358 dev_err(dev->dev, "%s: cx231xx_config - errCode [%d]!\n", cx231xx_init_dev()
1364 INIT_LIST_HEAD(&dev->video_mode.vidq.active); cx231xx_init_dev()
1365 INIT_LIST_HEAD(&dev->video_mode.vidq.queued); cx231xx_init_dev()
1368 INIT_LIST_HEAD(&dev->vbi_mode.vidq.active); cx231xx_init_dev()
1369 INIT_LIST_HEAD(&dev->vbi_mode.vidq.queued); cx231xx_init_dev()
1372 cx231xx_add_into_devlist(dev); cx231xx_init_dev()
1374 if (dev->board.has_417) { cx231xx_init_dev()
1375 dev_info(dev->dev, "attach 417 %d\n", dev->model); cx231xx_init_dev()
1376 if (cx231xx_417_register(dev) < 0) { cx231xx_init_dev()
1377 dev_err(dev->dev, cx231xx_init_dev()
1383 retval = cx231xx_register_analog_devices(dev); cx231xx_init_dev()
1387 cx231xx_ir_init(dev); cx231xx_init_dev()
1389 cx231xx_init_extension(dev); cx231xx_init_dev()
1393 cx231xx_unregister_media_device(dev); cx231xx_init_dev()
1394 cx231xx_release_analog_resources(dev); cx231xx_init_dev()
1395 cx231xx_remove_from_devlist(dev); cx231xx_init_dev()
1397 cx231xx_dev_uninit(dev); cx231xx_init_dev()
1404 struct cx231xx *dev = container_of(work, request_module_async() local
1407 if (dev->has_alsa_audio) request_module_async()
1410 if (dev->board.has_dvb) request_module_async()
1415 static void request_modules(struct cx231xx *dev) request_modules() argument
1417 INIT_WORK(&dev->request_module_wk, request_module_async); request_modules()
1418 schedule_work(&dev->request_module_wk); request_modules()
1421 static void flush_request_modules(struct cx231xx *dev) flush_request_modules() argument
1423 flush_work(&dev->request_module_wk); flush_request_modules()
1426 #define request_modules(dev)
1427 #define flush_request_modules(dev)
1430 static int cx231xx_init_v4l2(struct cx231xx *dev, cx231xx_init_v4l2() argument
1441 idx = dev->current_pcb_config.hs_config_info[0].interface_info.video_index + 1; cx231xx_init_v4l2()
1442 if (idx >= dev->max_iad_interface_count) { cx231xx_init_v4l2()
1443 dev_err(dev->dev, cx231xx_init_v4l2()
1450 dev->video_mode.end_point_addr = uif->altsetting[0].endpoint[isoc_pipe].desc.bEndpointAddress; cx231xx_init_v4l2()
1451 dev->video_mode.num_alt = uif->num_altsetting; cx231xx_init_v4l2()
1453 dev_info(dev->dev, cx231xx_init_v4l2()
1455 dev->video_mode.end_point_addr, cx231xx_init_v4l2()
1456 dev->video_mode.num_alt); cx231xx_init_v4l2()
1458 dev->video_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, dev->video_mode.num_alt, GFP_KERNEL); cx231xx_init_v4l2()
1459 if (dev->video_mode.alt_max_pkt_size == NULL) cx231xx_init_v4l2()
1462 for (i = 0; i < dev->video_mode.num_alt; i++) { cx231xx_init_v4l2()
1464 dev->video_mode.alt_max_pkt_size[i] = (tmp & 0x07ff) * (((tmp & 0x1800) >> 11) + 1); cx231xx_init_v4l2()
1465 dev_dbg(dev->dev, cx231xx_init_v4l2()
1467 dev->video_mode.alt_max_pkt_size[i]); cx231xx_init_v4l2()
1472 idx = dev->current_pcb_config.hs_config_info[0].interface_info.vanc_index + 1; cx231xx_init_v4l2()
1473 if (idx >= dev->max_iad_interface_count) { cx231xx_init_v4l2()
1474 dev_err(dev->dev, cx231xx_init_v4l2()
1480 dev->vbi_mode.end_point_addr = cx231xx_init_v4l2()
1484 dev->vbi_mode.num_alt = uif->num_altsetting; cx231xx_init_v4l2()
1485 dev_info(dev->dev, cx231xx_init_v4l2()
1487 dev->vbi_mode.end_point_addr, cx231xx_init_v4l2()
1488 dev->vbi_mode.num_alt); cx231xx_init_v4l2()
1491 dev->vbi_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, dev->vbi_mode.num_alt, GFP_KERNEL); cx231xx_init_v4l2()
1492 if (dev->vbi_mode.alt_max_pkt_size == NULL) cx231xx_init_v4l2()
1495 for (i = 0; i < dev->vbi_mode.num_alt; i++) { cx231xx_init_v4l2()
1499 dev->vbi_mode.alt_max_pkt_size[i] = cx231xx_init_v4l2()
1501 dev_dbg(dev->dev, cx231xx_init_v4l2()
1503 dev->vbi_mode.alt_max_pkt_size[i]); cx231xx_init_v4l2()
1509 idx = dev->current_pcb_config.hs_config_info[0].interface_info.hanc_index + 1; cx231xx_init_v4l2()
1510 if (idx >= dev->max_iad_interface_count) { cx231xx_init_v4l2()
1511 dev_err(dev->dev, cx231xx_init_v4l2()
1517 dev->sliced_cc_mode.end_point_addr = cx231xx_init_v4l2()
1521 dev->sliced_cc_mode.num_alt = uif->num_altsetting; cx231xx_init_v4l2()
1522 dev_info(dev->dev, cx231xx_init_v4l2()
1524 dev->sliced_cc_mode.end_point_addr, cx231xx_init_v4l2()
1525 dev->sliced_cc_mode.num_alt); cx231xx_init_v4l2()
1526 dev->sliced_cc_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, dev->sliced_cc_mode.num_alt, GFP_KERNEL); cx231xx_init_v4l2()
1527 if (dev->sliced_cc_mode.alt_max_pkt_size == NULL) cx231xx_init_v4l2()
1530 for (i = 0; i < dev->sliced_cc_mode.num_alt; i++) { cx231xx_init_v4l2()
1533 dev->sliced_cc_mode.alt_max_pkt_size[i] = cx231xx_init_v4l2()
1535 dev_dbg(dev->dev, cx231xx_init_v4l2()
1537 dev->sliced_cc_mode.alt_max_pkt_size[i]); cx231xx_init_v4l2()
1551 struct device *d = &interface->dev; cx231xx_usb_probe()
1553 struct cx231xx *dev = NULL; cx231xx_usb_probe() local
1585 dev = devm_kzalloc(&udev->dev, sizeof(*dev), GFP_KERNEL); cx231xx_usb_probe()
1586 if (dev == NULL) { cx231xx_usb_probe()
1591 snprintf(dev->name, 29, "cx231xx #%d", nr); cx231xx_usb_probe()
1592 dev->devno = nr; cx231xx_usb_probe()
1593 dev->model = id->driver_info; cx231xx_usb_probe()
1594 dev->video_mode.alt = -1; cx231xx_usb_probe()
1595 dev->dev = d; cx231xx_usb_probe()
1597 cx231xx_set_model(dev); cx231xx_usb_probe()
1599 dev->interface_count++; cx231xx_usb_probe()
1601 dev->gpio_dir = 0; cx231xx_usb_probe()
1602 dev->gpio_val = 0; cx231xx_usb_probe()
1603 dev->xc_fw_load_done = 0; cx231xx_usb_probe()
1604 dev->has_alsa_audio = 1; cx231xx_usb_probe()
1605 dev->power_mode = -1; cx231xx_usb_probe()
1606 atomic_set(&dev->devlist_count, 0); cx231xx_usb_probe()
1609 dev->vbi_or_sliced_cc_mode = 0; cx231xx_usb_probe()
1612 dev->max_iad_interface_count = udev->config->desc.bNumInterfaces; cx231xx_usb_probe()
1617 dev->mode_tv = 0; cx231xx_usb_probe()
1619 dev->USE_ISO = transfer_mode; cx231xx_usb_probe()
1643 dev->max_iad_interface_count); cx231xx_usb_probe()
1646 dev->interface_count++; cx231xx_usb_probe()
1649 nr = dev->devno; cx231xx_usb_probe()
1661 usb_set_intfdata(interface, dev); cx231xx_usb_probe()
1664 cx231xx_media_device_register(dev, udev); cx231xx_usb_probe()
1668 dev->v4l2_dev.mdev = dev->media_dev; cx231xx_usb_probe()
1670 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); cx231xx_usb_probe()
1677 retval = cx231xx_init_dev(dev, udev, nr); cx231xx_usb_probe()
1681 retval = cx231xx_init_v4l2(dev, udev, interface, isoc_pipe); cx231xx_usb_probe()
1685 if (dev->current_pcb_config.ts1_source != 0xff) { cx231xx_usb_probe()
1687 idx = dev->current_pcb_config.hs_config_info[0].interface_info.ts1_index + 1; cx231xx_usb_probe()
1688 if (idx >= dev->max_iad_interface_count) { cx231xx_usb_probe()
1696 dev->ts1_mode.end_point_addr = cx231xx_usb_probe()
1700 dev->ts1_mode.num_alt = uif->num_altsetting; cx231xx_usb_probe()
1703 dev->ts1_mode.end_point_addr, cx231xx_usb_probe()
1704 dev->ts1_mode.num_alt); cx231xx_usb_probe()
1706 dev->ts1_mode.alt_max_pkt_size = devm_kmalloc_array(&udev->dev, 32, dev->ts1_mode.num_alt, GFP_KERNEL); cx231xx_usb_probe()
1707 if (dev->ts1_mode.alt_max_pkt_size == NULL) { cx231xx_usb_probe()
1712 for (i = 0; i < dev->ts1_mode.num_alt; i++) { cx231xx_usb_probe()
1716 dev->ts1_mode.alt_max_pkt_size[i] = cx231xx_usb_probe()
1719 i, dev->ts1_mode.alt_max_pkt_size[i]); cx231xx_usb_probe()
1723 if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) { cx231xx_usb_probe()
1724 cx231xx_enable_OSC(dev); cx231xx_usb_probe()
1725 cx231xx_reset_out(dev); cx231xx_usb_probe()
1726 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 3); cx231xx_usb_probe()
1729 if (dev->model == CX231XX_BOARD_CNXT_RDE_253S) cx231xx_usb_probe()
1730 cx231xx_sleep_s5h1432(dev); cx231xx_usb_probe()
1733 request_modules(dev); cx231xx_usb_probe()
1735 cx231xx_create_media_graph(dev); cx231xx_usb_probe()
1740 cx231xx_close_extension(dev); cx231xx_usb_probe()
1741 cx231xx_ir_exit(dev); cx231xx_usb_probe()
1742 cx231xx_release_analog_resources(dev); cx231xx_usb_probe()
1743 cx231xx_417_unregister(dev); cx231xx_usb_probe()
1744 cx231xx_remove_from_devlist(dev); cx231xx_usb_probe()
1745 cx231xx_dev_uninit(dev); cx231xx_usb_probe()
1747 v4l2_device_unregister(&dev->v4l2_dev); cx231xx_usb_probe()
1763 struct cx231xx *dev; cx231xx_usb_disconnect() local
1765 dev = usb_get_intfdata(interface); cx231xx_usb_disconnect()
1768 if (!dev) cx231xx_usb_disconnect()
1771 if (!dev->udev) cx231xx_usb_disconnect()
1774 dev->state |= DEV_DISCONNECTED; cx231xx_usb_disconnect()
1776 flush_request_modules(dev); cx231xx_usb_disconnect()
1780 mutex_lock(&dev->lock); cx231xx_usb_disconnect()
1782 wake_up_interruptible_all(&dev->open); cx231xx_usb_disconnect()
1784 if (dev->users) { cx231xx_usb_disconnect()
1785 dev_warn(dev->dev, cx231xx_usb_disconnect()
1787 video_device_node_name(&dev->vdev)); cx231xx_usb_disconnect()
1790 cx231xx_ir_exit(dev); cx231xx_usb_disconnect()
1792 if (dev->USE_ISO) cx231xx_usb_disconnect()
1793 cx231xx_uninit_isoc(dev); cx231xx_usb_disconnect()
1795 cx231xx_uninit_bulk(dev); cx231xx_usb_disconnect()
1796 wake_up_interruptible(&dev->wait_frame); cx231xx_usb_disconnect()
1797 wake_up_interruptible(&dev->wait_stream); cx231xx_usb_disconnect()
1801 cx231xx_close_extension(dev); cx231xx_usb_disconnect()
1803 mutex_unlock(&dev->lock); cx231xx_usb_disconnect()
1805 if (!dev->users) cx231xx_usb_disconnect()
1806 cx231xx_release_resources(dev); cx231xx_usb_disconnect()
H A Dcx231xx-core.c43 dev->name, __func__ , ##arg); } while (0)
56 dev->name, __func__ , ##arg); } while (0)
70 void cx231xx_remove_from_devlist(struct cx231xx *dev) cx231xx_remove_from_devlist() argument
72 if (dev == NULL) cx231xx_remove_from_devlist()
74 if (dev->udev == NULL) cx231xx_remove_from_devlist()
77 if (atomic_read(&dev->devlist_count) > 0) { cx231xx_remove_from_devlist()
79 list_del(&dev->devlist); cx231xx_remove_from_devlist()
80 atomic_dec(&dev->devlist_count); cx231xx_remove_from_devlist()
85 void cx231xx_add_into_devlist(struct cx231xx *dev) cx231xx_add_into_devlist() argument
88 list_add_tail(&dev->devlist, &cx231xx_devlist); cx231xx_add_into_devlist()
89 atomic_inc(&dev->devlist_count); cx231xx_add_into_devlist()
97 struct cx231xx *dev = NULL; cx231xx_register_extension() local
101 list_for_each_entry(dev, &cx231xx_devlist, devlist) { cx231xx_register_extension()
102 ops->init(dev); cx231xx_register_extension()
103 dev_info(dev->dev, "%s initialized\n", ops->name); cx231xx_register_extension()
112 struct cx231xx *dev = NULL; cx231xx_unregister_extension() local
115 list_for_each_entry(dev, &cx231xx_devlist, devlist) { cx231xx_unregister_extension()
116 ops->fini(dev); cx231xx_unregister_extension()
117 dev_info(dev->dev, "%s removed\n", ops->name); cx231xx_unregister_extension()
125 void cx231xx_init_extension(struct cx231xx *dev) cx231xx_init_extension() argument
133 ops->init(dev); cx231xx_init_extension()
139 void cx231xx_close_extension(struct cx231xx *dev) cx231xx_close_extension() argument
147 ops->fini(dev); cx231xx_close_extension()
160 struct cx231xx *dev = i2c_bus->dev; cx231xx_send_usb_command() local
168 if (dev->state & DEV_DISCONNECTED) cx231xx_send_usb_command()
221 status = cx231xx_send_vendor_cmd(dev, &ven_req); cx231xx_send_usb_command()
222 if (status < 0 && !dev->i2c_scan_running) { cx231xx_send_usb_command()
223 dev_err(dev->dev, "%s: failed with status -%d\n", cx231xx_send_usb_command()
233 * for all operations (dev->urb_buf), to avoid using stacked buffers, as
237 static int __usb_control_msg(struct cx231xx *dev, unsigned int pipe, __usb_control_msg() argument
246 dev->name, __usb_control_msg()
263 mutex_lock(&dev->ctrl_urb_lock); __usb_control_msg()
265 memcpy(dev->urb_buf, data, size); __usb_control_msg()
266 rc = usb_control_msg(dev->udev, pipe, request, requesttype, value, __usb_control_msg()
267 index, dev->urb_buf, size, timeout); __usb_control_msg()
269 memcpy(data, dev->urb_buf, size); __usb_control_msg()
270 mutex_unlock(&dev->ctrl_urb_lock); __usb_control_msg()
295 int cx231xx_read_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg, cx231xx_read_ctrl_reg() argument
300 int pipe = usb_rcvctrlpipe(dev->udev, 0); cx231xx_read_ctrl_reg()
302 if (dev->state & DEV_DISCONNECTED) cx231xx_read_ctrl_reg()
328 ret = __usb_control_msg(dev, pipe, req, cx231xx_read_ctrl_reg()
334 int cx231xx_send_vendor_cmd(struct cx231xx *dev, cx231xx_send_vendor_cmd() argument
342 if (dev->state & DEV_DISCONNECTED) cx231xx_send_vendor_cmd()
349 pipe = usb_rcvctrlpipe(dev->udev, 0); cx231xx_send_vendor_cmd()
351 pipe = usb_sndctrlpipe(dev->udev, 0); cx231xx_send_vendor_cmd()
369 ret = __usb_control_msg(dev, pipe, ven_req->bRequest, cx231xx_send_vendor_cmd()
379 ret = __usb_control_msg(dev, pipe, cx231xx_send_vendor_cmd()
390 ret = __usb_control_msg(dev, pipe, ven_req->bRequest, cx231xx_send_vendor_cmd()
395 ret = __usb_control_msg(dev, pipe, ven_req->bRequest, cx231xx_send_vendor_cmd()
408 int cx231xx_write_ctrl_reg(struct cx231xx *dev, u8 req, u16 reg, char *buf, cx231xx_write_ctrl_reg() argument
413 int pipe = usb_sndctrlpipe(dev->udev, 0); cx231xx_write_ctrl_reg()
415 if (dev->state & DEV_DISCONNECTED) cx231xx_write_ctrl_reg()
456 ret = __usb_control_msg(dev, pipe, req, cx231xx_write_ctrl_reg()
467 int cx231xx_set_video_alternate(struct cx231xx *dev) cx231xx_set_video_alternate() argument
469 int errCode, prev_alt = dev->video_mode.alt; cx231xx_set_video_alternate()
470 unsigned int min_pkt_size = dev->width * 2 + 4; cx231xx_set_video_alternate()
477 if (dev->width * 2 * dev->height > 720 * 240 * 2) cx231xx_set_video_alternate()
480 if (dev->width > 360) { cx231xx_set_video_alternate()
482 dev->video_mode.alt = 3; cx231xx_set_video_alternate()
483 } else if (dev->width > 180) { cx231xx_set_video_alternate()
485 dev->video_mode.alt = 2; cx231xx_set_video_alternate()
486 } else if (dev->width > 0) { cx231xx_set_video_alternate()
488 dev->video_mode.alt = 1; cx231xx_set_video_alternate()
491 dev->video_mode.alt = 0; cx231xx_set_video_alternate()
494 if (dev->USE_ISO == 0) cx231xx_set_video_alternate()
495 dev->video_mode.alt = 0; cx231xx_set_video_alternate()
497 cx231xx_coredbg("dev->video_mode.alt= %d\n", dev->video_mode.alt); cx231xx_set_video_alternate()
501 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_video_alternate()
504 if (dev->video_mode.alt != prev_alt) { cx231xx_set_video_alternate()
506 min_pkt_size, dev->video_mode.alt); cx231xx_set_video_alternate()
508 if (dev->video_mode.alt_max_pkt_size != NULL) cx231xx_set_video_alternate()
509 dev->video_mode.max_pkt_size = cx231xx_set_video_alternate()
510 dev->video_mode.alt_max_pkt_size[dev->video_mode.alt]; cx231xx_set_video_alternate()
512 dev->video_mode.alt, cx231xx_set_video_alternate()
513 dev->video_mode.max_pkt_size); cx231xx_set_video_alternate()
515 usb_set_interface(dev->udev, usb_interface_index, cx231xx_set_video_alternate()
516 dev->video_mode.alt); cx231xx_set_video_alternate()
518 dev_err(dev->dev, cx231xx_set_video_alternate()
520 dev->video_mode.alt, errCode); cx231xx_set_video_alternate()
527 int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt) cx231xx_set_alt_setting() argument
536 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
538 dev->ts1_mode.alt = alt; cx231xx_set_alt_setting()
539 if (dev->ts1_mode.alt_max_pkt_size != NULL) cx231xx_set_alt_setting()
540 max_pkt_size = dev->ts1_mode.max_pkt_size = cx231xx_set_alt_setting()
541 dev->ts1_mode.alt_max_pkt_size[dev->ts1_mode.alt]; cx231xx_set_alt_setting()
545 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
550 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
552 dev->adev.alt = alt; cx231xx_set_alt_setting()
553 if (dev->adev.alt_max_pkt_size != NULL) cx231xx_set_alt_setting()
554 max_pkt_size = dev->adev.max_pkt_size = cx231xx_set_alt_setting()
555 dev->adev.alt_max_pkt_size[dev->adev.alt]; cx231xx_set_alt_setting()
559 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
561 dev->video_mode.alt = alt; cx231xx_set_alt_setting()
562 if (dev->video_mode.alt_max_pkt_size != NULL) cx231xx_set_alt_setting()
563 max_pkt_size = dev->video_mode.max_pkt_size = cx231xx_set_alt_setting()
564 dev->video_mode.alt_max_pkt_size[dev->video_mode. cx231xx_set_alt_setting()
568 if (dev->board.no_alt_vanc) cx231xx_set_alt_setting()
571 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
573 dev->vbi_mode.alt = alt; cx231xx_set_alt_setting()
574 if (dev->vbi_mode.alt_max_pkt_size != NULL) cx231xx_set_alt_setting()
575 max_pkt_size = dev->vbi_mode.max_pkt_size = cx231xx_set_alt_setting()
576 dev->vbi_mode.alt_max_pkt_size[dev->vbi_mode.alt]; cx231xx_set_alt_setting()
580 dev->current_pcb_config.hs_config_info[0].interface_info. cx231xx_set_alt_setting()
582 dev->sliced_cc_mode.alt = alt; cx231xx_set_alt_setting()
583 if (dev->sliced_cc_mode.alt_max_pkt_size != NULL) cx231xx_set_alt_setting()
584 max_pkt_size = dev->sliced_cc_mode.max_pkt_size = cx231xx_set_alt_setting()
585 dev->sliced_cc_mode.alt_max_pkt_size[dev-> cx231xx_set_alt_setting()
594 dev_err(dev->dev, cx231xx_set_alt_setting()
599 if (dev->board.no_alt_vanc) cx231xx_set_alt_setting()
608 status = usb_set_interface(dev->udev, usb_interface_index, alt); cx231xx_set_alt_setting()
610 dev_err(dev->dev, cx231xx_set_alt_setting()
621 int cx231xx_gpio_set(struct cx231xx *dev, struct cx231xx_reg_seq *gpio) cx231xx_gpio_set() argument
630 rc = cx231xx_set_gpio_value(dev, gpio->bit, gpio->val); cx231xx_gpio_set()
642 int cx231xx_demod_reset(struct cx231xx *dev) cx231xx_demod_reset() argument
648 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, cx231xx_demod_reset()
657 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_demod_reset()
662 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_demod_reset()
667 status = cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_demod_reset()
671 status = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, PWR_CTL_EN, cx231xx_demod_reset()
680 int is_fw_load(struct cx231xx *dev) is_fw_load() argument
682 return cx231xx_check_fw(dev); is_fw_load()
686 int cx231xx_set_mode(struct cx231xx *dev, enum cx231xx_mode set_mode) cx231xx_set_mode() argument
690 if (dev->mode == set_mode) cx231xx_set_mode()
695 dev->mode = set_mode; cx231xx_set_mode()
699 if (dev->mode != CX231XX_SUSPEND) cx231xx_set_mode()
702 dev->mode = set_mode; cx231xx_set_mode()
704 if (dev->mode == CX231XX_DIGITAL_MODE)/* Set Digital power mode */ { cx231xx_set_mode()
706 switch (dev->model) { cx231xx_set_mode()
711 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0); cx231xx_set_mode()
715 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 1); cx231xx_set_mode()
719 errCode = cx231xx_set_power_mode(dev, cx231xx_set_mode()
727 switch (dev->model) { cx231xx_set_mode()
732 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 1); cx231xx_set_mode()
741 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0); cx231xx_set_mode()
752 int cx231xx_ep5_bulkout(struct cx231xx *dev, u8 *firmware, u16 size) cx231xx_ep5_bulkout() argument
763 ret = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 5), cx231xx_ep5_bulkout()
767 dev_err(dev->dev, cx231xx_ep5_bulkout()
789 struct cx231xx *dev = container_of(vmode, struct cx231xx, video_mode); cx231xx_isoc_irq_callback() local
806 spin_lock(&dev->video_mode.slock); cx231xx_isoc_irq_callback()
807 dev->video_mode.isoc_ctl.isoc_copy(dev, urb); cx231xx_isoc_irq_callback()
808 spin_unlock(&dev->video_mode.slock); cx231xx_isoc_irq_callback()
834 struct cx231xx *dev = container_of(vmode, struct cx231xx, video_mode); cx231xx_bulk_irq_callback() local
850 spin_lock(&dev->video_mode.slock); cx231xx_bulk_irq_callback()
851 dev->video_mode.bulk_ctl.bulk_copy(dev, urb); cx231xx_bulk_irq_callback()
852 spin_unlock(&dev->video_mode.slock); cx231xx_bulk_irq_callback()
864 void cx231xx_uninit_isoc(struct cx231xx *dev) cx231xx_uninit_isoc() argument
866 struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; cx231xx_uninit_isoc()
872 dev->video_mode.isoc_ctl.nfields = -1; cx231xx_uninit_isoc()
873 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) { cx231xx_uninit_isoc()
874 urb = dev->video_mode.isoc_ctl.urb[i]; cx231xx_uninit_isoc()
881 if (dev->video_mode.isoc_ctl.transfer_buffer[i]) { cx231xx_uninit_isoc()
882 usb_free_coherent(dev->udev, cx231xx_uninit_isoc()
884 dev->video_mode.isoc_ctl. cx231xx_uninit_isoc()
889 dev->video_mode.isoc_ctl.urb[i] = NULL; cx231xx_uninit_isoc()
891 dev->video_mode.isoc_ctl.transfer_buffer[i] = NULL; cx231xx_uninit_isoc()
894 kfree(dev->video_mode.isoc_ctl.urb); cx231xx_uninit_isoc()
895 kfree(dev->video_mode.isoc_ctl.transfer_buffer); cx231xx_uninit_isoc()
898 dev->video_mode.isoc_ctl.urb = NULL; cx231xx_uninit_isoc()
899 dev->video_mode.isoc_ctl.transfer_buffer = NULL; cx231xx_uninit_isoc()
900 dev->video_mode.isoc_ctl.num_bufs = 0; cx231xx_uninit_isoc()
903 if (dev->mode_tv == 0) cx231xx_uninit_isoc()
904 cx231xx_capture_start(dev, 0, Raw_Video); cx231xx_uninit_isoc()
906 cx231xx_capture_start(dev, 0, TS1_serial_mode); cx231xx_uninit_isoc()
915 void cx231xx_uninit_bulk(struct cx231xx *dev) cx231xx_uninit_bulk() argument
922 dev->video_mode.bulk_ctl.nfields = -1; cx231xx_uninit_bulk()
923 for (i = 0; i < dev->video_mode.bulk_ctl.num_bufs; i++) { cx231xx_uninit_bulk()
924 urb = dev->video_mode.bulk_ctl.urb[i]; cx231xx_uninit_bulk()
931 if (dev->video_mode.bulk_ctl.transfer_buffer[i]) { cx231xx_uninit_bulk()
932 usb_free_coherent(dev->udev, cx231xx_uninit_bulk()
934 dev->video_mode.isoc_ctl. cx231xx_uninit_bulk()
939 dev->video_mode.bulk_ctl.urb[i] = NULL; cx231xx_uninit_bulk()
941 dev->video_mode.bulk_ctl.transfer_buffer[i] = NULL; cx231xx_uninit_bulk()
944 kfree(dev->video_mode.bulk_ctl.urb); cx231xx_uninit_bulk()
945 kfree(dev->video_mode.bulk_ctl.transfer_buffer); cx231xx_uninit_bulk()
947 dev->video_mode.bulk_ctl.urb = NULL; cx231xx_uninit_bulk()
948 dev->video_mode.bulk_ctl.transfer_buffer = NULL; cx231xx_uninit_bulk()
949 dev->video_mode.bulk_ctl.num_bufs = 0; cx231xx_uninit_bulk()
951 if (dev->mode_tv == 0) cx231xx_uninit_bulk()
952 cx231xx_capture_start(dev, 0, Raw_Video); cx231xx_uninit_bulk()
954 cx231xx_capture_start(dev, 0, TS1_serial_mode); cx231xx_uninit_bulk()
963 int cx231xx_init_isoc(struct cx231xx *dev, int max_packets, cx231xx_init_isoc() argument
965 int (*isoc_copy) (struct cx231xx *dev, struct urb *urb)) cx231xx_init_isoc()
967 struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; cx231xx_init_isoc()
975 cx231xx_uninit_isoc(dev); cx231xx_init_isoc()
981 dev->video_mode.isoc_ctl.isoc_copy = isoc_copy; cx231xx_init_isoc()
982 dev->video_mode.isoc_ctl.num_bufs = num_bufs; cx231xx_init_isoc()
988 dma_q->lines_per_field = dev->height / 2; cx231xx_init_isoc()
989 dma_q->bytes_left_in_line = dev->width << 1; cx231xx_init_isoc()
1002 dev->video_mode.isoc_ctl.urb = cx231xx_init_isoc()
1004 if (!dev->video_mode.isoc_ctl.urb) { cx231xx_init_isoc()
1005 dev_err(dev->dev, cx231xx_init_isoc()
1010 dev->video_mode.isoc_ctl.transfer_buffer = cx231xx_init_isoc()
1012 if (!dev->video_mode.isoc_ctl.transfer_buffer) { cx231xx_init_isoc()
1013 dev_err(dev->dev, cx231xx_init_isoc()
1015 kfree(dev->video_mode.isoc_ctl.urb); cx231xx_init_isoc()
1019 dev->video_mode.isoc_ctl.max_pkt_size = max_pkt_size; cx231xx_init_isoc()
1020 dev->video_mode.isoc_ctl.buf = NULL; cx231xx_init_isoc()
1022 sb_size = max_packets * dev->video_mode.isoc_ctl.max_pkt_size; cx231xx_init_isoc()
1024 if (dev->mode_tv == 1) cx231xx_init_isoc()
1025 dev->video_mode.end_point_addr = 0x81; cx231xx_init_isoc()
1027 dev->video_mode.end_point_addr = 0x84; cx231xx_init_isoc()
1031 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) { cx231xx_init_isoc()
1034 dev_err(dev->dev, cx231xx_init_isoc()
1036 cx231xx_uninit_isoc(dev); cx231xx_init_isoc()
1039 dev->video_mode.isoc_ctl.urb[i] = urb; cx231xx_init_isoc()
1041 dev->video_mode.isoc_ctl.transfer_buffer[i] = cx231xx_init_isoc()
1042 usb_alloc_coherent(dev->udev, sb_size, GFP_KERNEL, cx231xx_init_isoc()
1044 if (!dev->video_mode.isoc_ctl.transfer_buffer[i]) { cx231xx_init_isoc()
1045 dev_err(dev->dev, cx231xx_init_isoc()
1049 cx231xx_uninit_isoc(dev); cx231xx_init_isoc()
1052 memset(dev->video_mode.isoc_ctl.transfer_buffer[i], 0, sb_size); cx231xx_init_isoc()
1055 usb_rcvisocpipe(dev->udev, dev->video_mode.end_point_addr); cx231xx_init_isoc()
1057 usb_fill_int_urb(urb, dev->udev, pipe, cx231xx_init_isoc()
1058 dev->video_mode.isoc_ctl.transfer_buffer[i], cx231xx_init_isoc()
1068 dev->video_mode.isoc_ctl.max_pkt_size; cx231xx_init_isoc()
1069 k += dev->video_mode.isoc_ctl.max_pkt_size; cx231xx_init_isoc()
1076 for (i = 0; i < dev->video_mode.isoc_ctl.num_bufs; i++) { cx231xx_init_isoc()
1077 rc = usb_submit_urb(dev->video_mode.isoc_ctl.urb[i], cx231xx_init_isoc()
1080 dev_err(dev->dev, cx231xx_init_isoc()
1083 cx231xx_uninit_isoc(dev); cx231xx_init_isoc()
1088 if (dev->mode_tv == 0) cx231xx_init_isoc()
1089 cx231xx_capture_start(dev, 1, Raw_Video); cx231xx_init_isoc()
1091 cx231xx_capture_start(dev, 1, TS1_serial_mode); cx231xx_init_isoc()
1100 int cx231xx_init_bulk(struct cx231xx *dev, int max_packets, cx231xx_init_bulk() argument
1102 int (*bulk_copy) (struct cx231xx *dev, struct urb *urb)) cx231xx_init_bulk()
1104 struct cx231xx_dmaqueue *dma_q = &dev->video_mode.vidq; cx231xx_init_bulk()
1110 dev->video_input = dev->video_input > 2 ? 2 : dev->video_input; cx231xx_init_bulk()
1112 cx231xx_coredbg("Setting Video mux to %d\n", dev->video_input); cx231xx_init_bulk()
1114 video_mux(dev, dev->video_input); cx231xx_init_bulk()
1117 cx231xx_uninit_bulk(dev); cx231xx_init_bulk()
1119 dev->video_mode.bulk_ctl.bulk_copy = bulk_copy; cx231xx_init_bulk()
1120 dev->video_mode.bulk_ctl.num_bufs = num_bufs; cx231xx_init_bulk()
1126 dma_q->lines_per_field = dev->height / 2; cx231xx_init_bulk()
1127 dma_q->bytes_left_in_line = dev->width << 1; cx231xx_init_bulk()
1139 dev->video_mode.bulk_ctl.urb = cx231xx_init_bulk()
1141 if (!dev->video_mode.bulk_ctl.urb) { cx231xx_init_bulk()
1142 dev_err(dev->dev, cx231xx_init_bulk()
1147 dev->video_mode.bulk_ctl.transfer_buffer = cx231xx_init_bulk()
1149 if (!dev->video_mode.bulk_ctl.transfer_buffer) { cx231xx_init_bulk()
1150 dev_err(dev->dev, cx231xx_init_bulk()
1152 kfree(dev->video_mode.bulk_ctl.urb); cx231xx_init_bulk()
1156 dev->video_mode.bulk_ctl.max_pkt_size = max_pkt_size; cx231xx_init_bulk()
1157 dev->video_mode.bulk_ctl.buf = NULL; cx231xx_init_bulk()
1159 sb_size = max_packets * dev->video_mode.bulk_ctl.max_pkt_size; cx231xx_init_bulk()
1161 if (dev->mode_tv == 1) cx231xx_init_bulk()
1162 dev->video_mode.end_point_addr = 0x81; cx231xx_init_bulk()
1164 dev->video_mode.end_point_addr = 0x84; cx231xx_init_bulk()
1168 for (i = 0; i < dev->video_mode.bulk_ctl.num_bufs; i++) { cx231xx_init_bulk()
1171 dev_err(dev->dev, cx231xx_init_bulk()
1173 cx231xx_uninit_bulk(dev); cx231xx_init_bulk()
1176 dev->video_mode.bulk_ctl.urb[i] = urb; cx231xx_init_bulk()
1179 dev->video_mode.bulk_ctl.transfer_buffer[i] = cx231xx_init_bulk()
1180 usb_alloc_coherent(dev->udev, sb_size, GFP_KERNEL, cx231xx_init_bulk()
1182 if (!dev->video_mode.bulk_ctl.transfer_buffer[i]) { cx231xx_init_bulk()
1183 dev_err(dev->dev, cx231xx_init_bulk()
1187 cx231xx_uninit_bulk(dev); cx231xx_init_bulk()
1190 memset(dev->video_mode.bulk_ctl.transfer_buffer[i], 0, sb_size); cx231xx_init_bulk()
1192 pipe = usb_rcvbulkpipe(dev->udev, cx231xx_init_bulk()
1193 dev->video_mode.end_point_addr); cx231xx_init_bulk()
1194 usb_fill_bulk_urb(urb, dev->udev, pipe, cx231xx_init_bulk()
1195 dev->video_mode.bulk_ctl.transfer_buffer[i], cx231xx_init_bulk()
1202 for (i = 0; i < dev->video_mode.bulk_ctl.num_bufs; i++) { cx231xx_init_bulk()
1203 rc = usb_submit_urb(dev->video_mode.bulk_ctl.urb[i], cx231xx_init_bulk()
1206 dev_err(dev->dev, cx231xx_init_bulk()
1208 cx231xx_uninit_bulk(dev); cx231xx_init_bulk()
1213 if (dev->mode_tv == 0) cx231xx_init_bulk()
1214 cx231xx_capture_start(dev, 1, Raw_Video); cx231xx_init_bulk()
1216 cx231xx_capture_start(dev, 1, TS1_serial_mode); cx231xx_init_bulk()
1221 void cx231xx_stop_TS1(struct cx231xx *dev) cx231xx_stop_TS1() argument
1229 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_stop_TS1()
1236 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_stop_TS1()
1240 void cx231xx_start_TS1(struct cx231xx *dev) cx231xx_start_TS1() argument
1248 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_start_TS1()
1255 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, cx231xx_start_TS1()
1262 int cx231xx_dev_init(struct cx231xx *dev) cx231xx_dev_init() argument
1269 dev->i2c_bus[0].nr = 0; cx231xx_dev_init()
1270 dev->i2c_bus[0].dev = dev; cx231xx_dev_init()
1271 dev->i2c_bus[0].i2c_period = I2C_SPEED_100K; /* 100 KHz */ cx231xx_dev_init()
1272 dev->i2c_bus[0].i2c_nostop = 0; cx231xx_dev_init()
1273 dev->i2c_bus[0].i2c_reserve = 0; cx231xx_dev_init()
1276 dev->i2c_bus[1].nr = 1; cx231xx_dev_init()
1277 dev->i2c_bus[1].dev = dev; cx231xx_dev_init()
1278 dev->i2c_bus[1].i2c_period = I2C_SPEED_100K; /* 100 KHz */ cx231xx_dev_init()
1279 dev->i2c_bus[1].i2c_nostop = 0; cx231xx_dev_init()
1280 dev->i2c_bus[1].i2c_reserve = 0; cx231xx_dev_init()
1283 dev->i2c_bus[2].nr = 2; cx231xx_dev_init()
1284 dev->i2c_bus[2].dev = dev; cx231xx_dev_init()
1285 dev->i2c_bus[2].i2c_period = I2C_SPEED_100K; /* 100kHz */ cx231xx_dev_init()
1286 dev->i2c_bus[2].i2c_nostop = 0; cx231xx_dev_init()
1287 dev->i2c_bus[2].i2c_reserve = 0; cx231xx_dev_init()
1290 cx231xx_i2c_register(&dev->i2c_bus[0]); cx231xx_dev_init()
1291 cx231xx_i2c_register(&dev->i2c_bus[1]); cx231xx_dev_init()
1292 cx231xx_i2c_register(&dev->i2c_bus[2]); cx231xx_dev_init()
1294 cx231xx_i2c_mux_register(dev, 0); cx231xx_dev_init()
1295 cx231xx_i2c_mux_register(dev, 1); cx231xx_dev_init()
1298 cx231xx_do_i2c_scan(dev, I2C_0); cx231xx_dev_init()
1299 cx231xx_do_i2c_scan(dev, I2C_1_MUX_1); cx231xx_dev_init()
1300 cx231xx_do_i2c_scan(dev, I2C_2); cx231xx_dev_init()
1301 cx231xx_do_i2c_scan(dev, I2C_1_MUX_3); cx231xx_dev_init()
1306 if (dev->board.external_av) { cx231xx_dev_init()
1307 errCode = cx231xx_set_power_mode(dev, cx231xx_dev_init()
1310 dev_err(dev->dev, cx231xx_dev_init()
1316 errCode = cx231xx_set_power_mode(dev, cx231xx_dev_init()
1319 dev_err(dev->dev, cx231xx_dev_init()
1327 if ((dev->board.tuner_type == TUNER_XC5000) || cx231xx_dev_init()
1328 (dev->board.tuner_type == TUNER_XC2028)) cx231xx_dev_init()
1329 cx231xx_gpio_set(dev, dev->board.tuner_gpio); cx231xx_dev_init()
1332 errCode = cx231xx_afe_init_super_block(dev, 0x23c); cx231xx_dev_init()
1334 dev_err(dev->dev, cx231xx_dev_init()
1339 errCode = cx231xx_afe_init_channels(dev); cx231xx_dev_init()
1341 dev_err(dev->dev, cx231xx_dev_init()
1348 errCode = cx231xx_dif_set_standard(dev, DIF_USE_BASEBAND); cx231xx_dev_init()
1350 dev_err(dev->dev, cx231xx_dev_init()
1357 errCode = cx231xx_i2s_blk_initialize(dev); cx231xx_dev_init()
1359 dev_err(dev->dev, cx231xx_dev_init()
1366 errCode = cx231xx_init_ctrl_pin_status(dev); cx231xx_dev_init()
1368 dev_err(dev->dev, cx231xx_dev_init()
1375 switch (dev->model) { cx231xx_dev_init()
1380 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 1); cx231xx_dev_init()
1389 errCode = cx231xx_set_agc_analog_digital_mux_select(dev, 0); cx231xx_dev_init()
1395 dev_err(dev->dev, cx231xx_dev_init()
1402 cx231xx_set_alt_setting(dev, INDEX_VIDEO, 0); cx231xx_dev_init()
1403 cx231xx_set_alt_setting(dev, INDEX_VANC, 0); cx231xx_dev_init()
1404 cx231xx_set_alt_setting(dev, INDEX_HANC, 0); cx231xx_dev_init()
1405 if (dev->board.has_dvb) cx231xx_dev_init()
1406 cx231xx_set_alt_setting(dev, INDEX_TS1, 0); cx231xx_dev_init()
1413 void cx231xx_dev_uninit(struct cx231xx *dev) cx231xx_dev_uninit() argument
1416 cx231xx_i2c_mux_unregister(dev, 1); cx231xx_dev_uninit()
1417 cx231xx_i2c_mux_unregister(dev, 0); cx231xx_dev_uninit()
1418 cx231xx_i2c_unregister(&dev->i2c_bus[2]); cx231xx_dev_uninit()
1419 cx231xx_i2c_unregister(&dev->i2c_bus[1]); cx231xx_dev_uninit()
1420 cx231xx_i2c_unregister(&dev->i2c_bus[0]); cx231xx_dev_uninit()
1427 int cx231xx_send_gpio_cmd(struct cx231xx *dev, u32 gpio_bit, u8 *gpio_val, cx231xx_send_gpio_cmd() argument
1470 status = cx231xx_send_vendor_cmd(dev, &ven_req); cx231xx_send_gpio_cmd()
1472 dev_err(dev->dev, "%s: failed with status -%d\n", cx231xx_send_gpio_cmd()
1483 int cx231xx_mode_register(struct cx231xx *dev, u16 address, u32 mode) cx231xx_mode_register() argument
1490 cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, address, value, 4); cx231xx_mode_register()
1503 cx231xx_write_ctrl_reg(dev, VRT_SET_REGISTER, address, value, 4); cx231xx_mode_register()
1511 int cx231xx_read_i2c_master(struct cx231xx *dev, u8 dev_addr, u16 saddr, cx231xx_read_i2c_master() argument
1533 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], cx231xx_read_i2c_master()
1536 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[1], cx231xx_read_i2c_master()
1539 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[2], cx231xx_read_i2c_master()
1557 int cx231xx_write_i2c_master(struct cx231xx *dev, u8 dev_addr, u16 saddr, cx231xx_write_i2c_master() argument
1584 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], cx231xx_write_i2c_master()
1587 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[1], cx231xx_write_i2c_master()
1590 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[2], cx231xx_write_i2c_master()
1596 int cx231xx_read_i2c_data(struct cx231xx *dev, u8 dev_addr, u16 saddr, cx231xx_read_i2c_data() argument
1617 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], &req_data); cx231xx_read_i2c_data()
1632 int cx231xx_write_i2c_data(struct cx231xx *dev, u8 dev_addr, u16 saddr, cx231xx_write_i2c_data() argument
1658 status = dev->cx231xx_send_usb_command(&dev->i2c_bus[0], &req_data); cx231xx_write_i2c_data()
1663 int cx231xx_reg_mask_write(struct cx231xx *dev, u8 dev_addr, u8 size, cx231xx_reg_mask_write() argument
1677 cx231xx_read_i2c_data(dev, dev_addr, register_address, 2, cx231xx_reg_mask_write()
1681 cx231xx_read_i2c_data(dev, dev_addr, register_address, 2, cx231xx_reg_mask_write()
1699 cx231xx_write_i2c_data(dev, dev_addr, register_address, 2, cx231xx_reg_mask_write()
1705 cx231xx_write_i2c_data(dev, dev_addr, register_address, 2, cx231xx_reg_mask_write()
1712 int cx231xx_read_modify_write_i2c_dword(struct cx231xx *dev, u8 dev_addr, cx231xx_read_modify_write_i2c_dword() argument
1718 status = cx231xx_read_i2c_data(dev, dev_addr, saddr, 2, &temp, 4); cx231xx_read_modify_write_i2c_dword()
1726 status = cx231xx_write_i2c_data(dev, dev_addr, saddr, 2, temp, 4); cx231xx_read_modify_write_i2c_dword()
H A Dcx231xx-audio.c47 static int cx231xx_isoc_audio_deinit(struct cx231xx *dev) cx231xx_isoc_audio_deinit() argument
51 dev_dbg(dev->dev, "Stopping isoc\n"); cx231xx_isoc_audio_deinit()
54 if (dev->adev.urb[i]) { cx231xx_isoc_audio_deinit()
56 usb_kill_urb(dev->adev.urb[i]); cx231xx_isoc_audio_deinit()
58 usb_unlink_urb(dev->adev.urb[i]); cx231xx_isoc_audio_deinit()
60 usb_free_urb(dev->adev.urb[i]); cx231xx_isoc_audio_deinit()
61 dev->adev.urb[i] = NULL; cx231xx_isoc_audio_deinit()
63 kfree(dev->adev.transfer_buffer[i]); cx231xx_isoc_audio_deinit()
64 dev->adev.transfer_buffer[i] = NULL; cx231xx_isoc_audio_deinit()
71 static int cx231xx_bulk_audio_deinit(struct cx231xx *dev) cx231xx_bulk_audio_deinit() argument
75 dev_dbg(dev->dev, "Stopping bulk\n"); cx231xx_bulk_audio_deinit()
78 if (dev->adev.urb[i]) { cx231xx_bulk_audio_deinit()
80 usb_kill_urb(dev->adev.urb[i]); cx231xx_bulk_audio_deinit()
82 usb_unlink_urb(dev->adev.urb[i]); cx231xx_bulk_audio_deinit()
84 usb_free_urb(dev->adev.urb[i]); cx231xx_bulk_audio_deinit()
85 dev->adev.urb[i] = NULL; cx231xx_bulk_audio_deinit()
87 kfree(dev->adev.transfer_buffer[i]); cx231xx_bulk_audio_deinit()
88 dev->adev.transfer_buffer[i] = NULL; cx231xx_bulk_audio_deinit()
97 struct cx231xx *dev = urb->context; cx231xx_audio_isocirq() local
107 if (dev->state & DEV_DISCONNECTED) cx231xx_audio_isocirq()
119 dev_dbg(dev->dev, "urb completition error %d.\n", cx231xx_audio_isocirq()
124 if (atomic_read(&dev->stream_started) == 0) cx231xx_audio_isocirq()
127 if (dev->adev.capture_pcm_substream) { cx231xx_audio_isocirq()
128 substream = dev->adev.capture_pcm_substream; cx231xx_audio_isocirq()
141 oldptr = dev->adev.hwptr_done_capture; cx231xx_audio_isocirq()
157 dev->adev.hwptr_done_capture += length; cx231xx_audio_isocirq()
158 if (dev->adev.hwptr_done_capture >= cx231xx_audio_isocirq()
160 dev->adev.hwptr_done_capture -= cx231xx_audio_isocirq()
163 dev->adev.capture_transfer_done += length; cx231xx_audio_isocirq()
164 if (dev->adev.capture_transfer_done >= cx231xx_audio_isocirq()
166 dev->adev.capture_transfer_done -= cx231xx_audio_isocirq()
179 dev_err(dev->dev, cx231xx_audio_isocirq()
188 struct cx231xx *dev = urb->context; cx231xx_audio_bulkirq() local
197 if (dev->state & DEV_DISCONNECTED) cx231xx_audio_bulkirq()
209 dev_dbg(dev->dev, "urb completition error %d.\n", cx231xx_audio_bulkirq()
214 if (atomic_read(&dev->stream_started) == 0) cx231xx_audio_bulkirq()
217 if (dev->adev.capture_pcm_substream) { cx231xx_audio_bulkirq()
218 substream = dev->adev.capture_pcm_substream; cx231xx_audio_bulkirq()
227 oldptr = dev->adev.hwptr_done_capture; cx231xx_audio_bulkirq()
243 dev->adev.hwptr_done_capture += length; cx231xx_audio_bulkirq()
244 if (dev->adev.hwptr_done_capture >= cx231xx_audio_bulkirq()
246 dev->adev.hwptr_done_capture -= cx231xx_audio_bulkirq()
249 dev->adev.capture_transfer_done += length; cx231xx_audio_bulkirq()
250 if (dev->adev.capture_transfer_done >= cx231xx_audio_bulkirq()
252 dev->adev.capture_transfer_done -= cx231xx_audio_bulkirq()
265 dev_err(dev->dev, cx231xx_audio_bulkirq()
272 static int cx231xx_init_audio_isoc(struct cx231xx *dev) cx231xx_init_audio_isoc() argument
277 dev_dbg(dev->dev, cx231xx_init_audio_isoc()
280 if (dev->state & DEV_DISCONNECTED) cx231xx_init_audio_isoc()
283 sb_size = CX231XX_ISO_NUM_AUDIO_PACKETS * dev->adev.max_pkt_size; cx231xx_init_audio_isoc()
289 dev->adev.transfer_buffer[i] = kmalloc(sb_size, GFP_ATOMIC); cx231xx_init_audio_isoc()
290 if (!dev->adev.transfer_buffer[i]) cx231xx_init_audio_isoc()
293 memset(dev->adev.transfer_buffer[i], 0x80, sb_size); cx231xx_init_audio_isoc()
296 dev_err(dev->dev, "usb_alloc_urb failed!\n"); cx231xx_init_audio_isoc()
298 usb_free_urb(dev->adev.urb[j]); cx231xx_init_audio_isoc()
299 kfree(dev->adev.transfer_buffer[j]); cx231xx_init_audio_isoc()
304 urb->dev = dev->udev; cx231xx_init_audio_isoc()
305 urb->context = dev; cx231xx_init_audio_isoc()
306 urb->pipe = usb_rcvisocpipe(dev->udev, cx231xx_init_audio_isoc()
307 dev->adev.end_point_addr); cx231xx_init_audio_isoc()
309 urb->transfer_buffer = dev->adev.transfer_buffer[i]; cx231xx_init_audio_isoc()
316 j++, k += dev->adev.max_pkt_size) { cx231xx_init_audio_isoc()
318 urb->iso_frame_desc[j].length = dev->adev.max_pkt_size; cx231xx_init_audio_isoc()
320 dev->adev.urb[i] = urb; cx231xx_init_audio_isoc()
324 errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC); cx231xx_init_audio_isoc()
326 cx231xx_isoc_audio_deinit(dev); cx231xx_init_audio_isoc()
334 static int cx231xx_init_audio_bulk(struct cx231xx *dev) cx231xx_init_audio_bulk() argument
339 dev_dbg(dev->dev, cx231xx_init_audio_bulk()
342 if (dev->state & DEV_DISCONNECTED) cx231xx_init_audio_bulk()
345 sb_size = CX231XX_NUM_AUDIO_PACKETS * dev->adev.max_pkt_size; cx231xx_init_audio_bulk()
351 dev->adev.transfer_buffer[i] = kmalloc(sb_size, GFP_ATOMIC); cx231xx_init_audio_bulk()
352 if (!dev->adev.transfer_buffer[i]) cx231xx_init_audio_bulk()
355 memset(dev->adev.transfer_buffer[i], 0x80, sb_size); cx231xx_init_audio_bulk()
358 dev_err(dev->dev, "usb_alloc_urb failed!\n"); cx231xx_init_audio_bulk()
360 usb_free_urb(dev->adev.urb[j]); cx231xx_init_audio_bulk()
361 kfree(dev->adev.transfer_buffer[j]); cx231xx_init_audio_bulk()
366 urb->dev = dev->udev; cx231xx_init_audio_bulk()
367 urb->context = dev; cx231xx_init_audio_bulk()
368 urb->pipe = usb_rcvbulkpipe(dev->udev, cx231xx_init_audio_bulk()
369 dev->adev.end_point_addr); cx231xx_init_audio_bulk()
371 urb->transfer_buffer = dev->adev.transfer_buffer[i]; cx231xx_init_audio_bulk()
375 dev->adev.urb[i] = urb; cx231xx_init_audio_bulk()
380 errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC); cx231xx_init_audio_bulk()
382 cx231xx_bulk_audio_deinit(dev); cx231xx_init_audio_bulk()
394 struct cx231xx *dev = snd_pcm_substream_chip(subs); snd_pcm_alloc_vmalloc_buffer() local
396 dev_dbg(dev->dev, "Allocating vbuffer\n"); snd_pcm_alloc_vmalloc_buffer()
435 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_capture_open() local
439 dev_dbg(dev->dev, snd_cx231xx_capture_open()
442 if (dev->state & DEV_DISCONNECTED) { snd_cx231xx_capture_open()
443 dev_err(dev->dev, snd_cx231xx_capture_open()
450 mutex_lock(&dev->lock); snd_cx231xx_capture_open()
451 if (dev->USE_ISO) snd_cx231xx_capture_open()
452 ret = cx231xx_set_alt_setting(dev, INDEX_AUDIO, 1); snd_cx231xx_capture_open()
454 ret = cx231xx_set_alt_setting(dev, INDEX_AUDIO, 0); snd_cx231xx_capture_open()
455 mutex_unlock(&dev->lock); snd_cx231xx_capture_open()
457 dev_err(dev->dev, snd_cx231xx_capture_open()
465 mutex_lock(&dev->lock); snd_cx231xx_capture_open()
467 ret = cx231xx_capture_start(dev, 1, Audio); snd_cx231xx_capture_open()
469 dev->adev.users++; snd_cx231xx_capture_open()
470 mutex_unlock(&dev->lock); snd_cx231xx_capture_open()
473 dev->adev.capture_pcm_substream = substream; snd_cx231xx_capture_open()
474 runtime->private_data = dev; snd_cx231xx_capture_open()
482 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_pcm_close() local
484 dev_dbg(dev->dev, "closing device\n"); snd_cx231xx_pcm_close()
487 mutex_lock(&dev->lock); snd_cx231xx_pcm_close()
488 ret = cx231xx_capture_start(dev, 0, Audio); snd_cx231xx_pcm_close()
492 ret = cx231xx_set_alt_setting(dev, INDEX_AUDIO, 0); snd_cx231xx_pcm_close()
494 dev_err(dev->dev, snd_cx231xx_pcm_close()
497 mutex_unlock(&dev->lock); snd_cx231xx_pcm_close()
501 dev->adev.users--; snd_cx231xx_pcm_close()
502 mutex_unlock(&dev->lock); snd_cx231xx_pcm_close()
504 if (dev->adev.users == 0 && dev->adev.shutdown == 1) { snd_cx231xx_pcm_close()
505 dev_dbg(dev->dev, "audio users: %d\n", dev->adev.users); snd_cx231xx_pcm_close()
506 dev_dbg(dev->dev, "disabling audio stream!\n"); snd_cx231xx_pcm_close()
507 dev->adev.shutdown = 0; snd_cx231xx_pcm_close()
508 dev_dbg(dev->dev, "released lock\n"); snd_cx231xx_pcm_close()
509 if (atomic_read(&dev->stream_started) > 0) { snd_cx231xx_pcm_close()
510 atomic_set(&dev->stream_started, 0); snd_cx231xx_pcm_close()
511 schedule_work(&dev->wq_trigger); snd_cx231xx_pcm_close()
520 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_hw_capture_params() local
523 dev_dbg(dev->dev, "Setting capture parameters\n"); snd_cx231xx_hw_capture_params()
543 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_hw_capture_free() local
545 dev_dbg(dev->dev, "Stop capture, if needed\n"); snd_cx231xx_hw_capture_free()
547 if (atomic_read(&dev->stream_started) > 0) { snd_cx231xx_hw_capture_free()
548 atomic_set(&dev->stream_started, 0); snd_cx231xx_hw_capture_free()
549 schedule_work(&dev->wq_trigger); snd_cx231xx_hw_capture_free()
557 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_prepare() local
559 dev->adev.hwptr_done_capture = 0; snd_cx231xx_prepare()
560 dev->adev.capture_transfer_done = 0; snd_cx231xx_prepare()
567 struct cx231xx *dev = container_of(work, struct cx231xx, wq_trigger); audio_trigger() local
569 if (atomic_read(&dev->stream_started)) { audio_trigger()
570 dev_dbg(dev->dev, "starting capture"); audio_trigger()
571 if (is_fw_load(dev) == 0) audio_trigger()
572 cx25840_call(dev, core, load_fw); audio_trigger()
573 if (dev->USE_ISO) audio_trigger()
574 cx231xx_init_audio_isoc(dev); audio_trigger()
576 cx231xx_init_audio_bulk(dev); audio_trigger()
578 dev_dbg(dev->dev, "stopping capture"); audio_trigger()
579 cx231xx_isoc_audio_deinit(dev); audio_trigger()
586 struct cx231xx *dev = snd_pcm_substream_chip(substream); snd_cx231xx_capture_trigger() local
589 if (dev->state & DEV_DISCONNECTED) snd_cx231xx_capture_trigger()
592 spin_lock(&dev->adev.slock); snd_cx231xx_capture_trigger()
595 atomic_set(&dev->stream_started, 1); snd_cx231xx_capture_trigger()
598 atomic_set(&dev->stream_started, 0); snd_cx231xx_capture_trigger()
604 spin_unlock(&dev->adev.slock); snd_cx231xx_capture_trigger()
606 schedule_work(&dev->wq_trigger); snd_cx231xx_capture_trigger()
614 struct cx231xx *dev; snd_cx231xx_capture_pointer() local
618 dev = snd_pcm_substream_chip(substream); snd_cx231xx_capture_pointer()
620 spin_lock_irqsave(&dev->adev.slock, flags); snd_cx231xx_capture_pointer()
621 hwptr_done = dev->adev.hwptr_done_capture; snd_cx231xx_capture_pointer()
622 spin_unlock_irqrestore(&dev->adev.slock, flags); snd_cx231xx_capture_pointer()
647 static int cx231xx_audio_init(struct cx231xx *dev) cx231xx_audio_init() argument
649 struct cx231xx_audio *adev = &dev->adev; cx231xx_audio_init()
657 if (dev->has_alsa_audio != 1) { cx231xx_audio_init()
664 dev_dbg(dev->dev, cx231xx_audio_init()
667 err = snd_card_new(dev->dev, index[devnr], "Cx231xx Audio", cx231xx_audio_init()
682 pcm->private_data = dev; cx231xx_audio_init()
688 INIT_WORK(&dev->wq_trigger, audio_trigger); cx231xx_audio_init()
696 adev->udev = dev->udev; cx231xx_audio_init()
700 dev->udev->actconfig->interface[dev->current_pcb_config. cx231xx_audio_init()
709 dev_info(dev->dev, cx231xx_audio_init()
723 dev_dbg(dev->dev, cx231xx_audio_init()
731 static int cx231xx_audio_fini(struct cx231xx *dev) cx231xx_audio_fini() argument
733 if (dev == NULL) cx231xx_audio_fini()
736 if (dev->has_alsa_audio != 1) { cx231xx_audio_fini()
743 if (dev->adev.sndcard) { cx231xx_audio_fini()
744 snd_card_free(dev->adev.sndcard); cx231xx_audio_fini()
745 kfree(dev->adev.alt_max_pkt_size); cx231xx_audio_fini()
746 dev->adev.sndcard = NULL; cx231xx_audio_fini()
H A Dcx231xx-dvb.c176 static inline void print_err_status(struct cx231xx *dev, int packet, int status) print_err_status() argument
207 dev_dbg(dev->dev, print_err_status()
210 dev_dbg(dev->dev, print_err_status()
216 static inline int dvb_isoc_copy(struct cx231xx *dev, struct urb *urb) dvb_isoc_copy() argument
220 if (!dev) dvb_isoc_copy()
223 if (dev->state & DEV_DISCONNECTED) dvb_isoc_copy()
227 print_err_status(dev, -1, urb->status); dvb_isoc_copy()
236 print_err_status(dev, i, status); dvb_isoc_copy()
241 dvb_dmx_swfilter(&dev->dvb->demux, dvb_isoc_copy()
250 static inline int dvb_bulk_copy(struct cx231xx *dev, struct urb *urb) dvb_bulk_copy() argument
252 if (!dev) dvb_bulk_copy()
255 if (dev->state & DEV_DISCONNECTED) dvb_bulk_copy()
259 print_err_status(dev, -1, urb->status); dvb_bulk_copy()
265 dvb_dmx_swfilter(&dev->dvb->demux, dvb_bulk_copy()
274 struct cx231xx *dev = dvb->adapter.priv; start_streaming() local
276 if (dev->USE_ISO) { start_streaming()
277 dev_dbg(dev->dev, "DVB transfer mode is ISO.\n"); start_streaming()
278 cx231xx_set_alt_setting(dev, INDEX_TS1, 4); start_streaming()
279 rc = cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE); start_streaming()
282 dev->mode_tv = 1; start_streaming()
283 return cx231xx_init_isoc(dev, CX231XX_DVB_MAX_PACKETS, start_streaming()
285 dev->ts1_mode.max_pkt_size, start_streaming()
288 dev_dbg(dev->dev, "DVB transfer mode is BULK.\n"); start_streaming()
289 cx231xx_set_alt_setting(dev, INDEX_TS1, 0); start_streaming()
290 rc = cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE); start_streaming()
293 dev->mode_tv = 1; start_streaming()
294 return cx231xx_init_bulk(dev, CX231XX_DVB_MAX_PACKETS, start_streaming()
296 dev->ts1_mode.max_pkt_size, start_streaming()
304 struct cx231xx *dev = dvb->adapter.priv; stop_streaming() local
306 if (dev->USE_ISO) stop_streaming()
307 cx231xx_uninit_isoc(dev); stop_streaming()
309 cx231xx_uninit_bulk(dev); stop_streaming()
311 cx231xx_set_mode(dev, CX231XX_SUSPEND); stop_streaming()
358 struct cx231xx *dev = fe->dvb->priv; cx231xx_dvb_bus_ctrl() local
361 return cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE); cx231xx_dvb_bus_ctrl()
363 return cx231xx_set_mode(dev, CX231XX_SUSPEND); cx231xx_dvb_bus_ctrl()
379 static int attach_xc5000(u8 addr, struct cx231xx *dev)
386 cfg.i2c_adap = cx231xx_get_i2c_adap(dev, dev->board.tuner_i2c_master);
389 if (!dev->dvb->frontend) {
390 dev_err(dev->dev, "%s/2: dvb frontend not attached. "
391 "Can't attach xc5000\n", dev->name);
395 fe = dvb_attach(xc5000_attach, dev->dvb->frontend, &cfg);
397 dev_err(dev->dev, "%s/2: xc5000 attach failed\n", dev->name);
398 dvb_frontend_detach(dev->dvb->frontend);
399 dev->dvb->frontend = NULL;
403 dev_info(dev->dev, "%s/2: xc5000 attached\n", dev->name);
409 int cx231xx_set_analog_freq(struct cx231xx *dev, u32 freq) cx231xx_set_analog_freq() argument
411 if ((dev->dvb != NULL) && (dev->dvb->frontend != NULL)) { cx231xx_set_analog_freq()
413 struct dvb_tuner_ops *dops = &dev->dvb->frontend->ops.tuner_ops; cx231xx_set_analog_freq()
419 params.std = dev->norm; cx231xx_set_analog_freq()
424 dops->set_analog_params(dev->dvb->frontend, &params); cx231xx_set_analog_freq()
432 int cx231xx_reset_analog_tuner(struct cx231xx *dev) cx231xx_reset_analog_tuner() argument
436 if ((dev->dvb != NULL) && (dev->dvb->frontend != NULL)) { cx231xx_reset_analog_tuner()
438 struct dvb_tuner_ops *dops = &dev->dvb->frontend->ops.tuner_ops; cx231xx_reset_analog_tuner()
440 if (dops->init != NULL && !dev->xc_fw_load_done) { cx231xx_reset_analog_tuner()
442 dev_dbg(dev->dev, cx231xx_reset_analog_tuner()
444 status = dops->init(dev->dvb->frontend); cx231xx_reset_analog_tuner()
446 dev->xc_fw_load_done = 1; cx231xx_reset_analog_tuner()
447 dev_dbg(dev->dev, cx231xx_reset_analog_tuner()
450 dev->xc_fw_load_done = 0; cx231xx_reset_analog_tuner()
451 dev_dbg(dev->dev, cx231xx_reset_analog_tuner()
465 struct cx231xx *dev, struct device *device) register_dvb()
473 result = dvb_register_adapter(&dvb->adapter, dev->name, module, device, register_dvb()
476 dev_warn(dev->dev, register_dvb()
478 dev->name, result); register_dvb()
481 dvb_register_media_controller(&dvb->adapter, dev->media_dev); register_dvb()
486 dvb->adapter.priv = dev; register_dvb()
491 dev_warn(dev->dev, register_dvb()
493 dev->name, result); register_dvb()
509 dev_warn(dev->dev, register_dvb()
511 dev->name, result); register_dvb()
520 dev_warn(dev->dev, register_dvb()
522 dev->name, result); register_dvb()
529 dev_warn(dev->dev, register_dvb()
531 dev->name, result); register_dvb()
538 dev_warn(dev->dev, register_dvb()
540 dev->name, result); register_dvb()
546 dev_warn(dev->dev, register_dvb()
548 dev->name, result); register_dvb()
586 module_put(client->dev.driver->owner); unregister_dvb()
594 static int dvb_init(struct cx231xx *dev) dvb_init() argument
601 if (!dev->board.has_dvb) { dvb_init()
609 dev_info(dev->dev, dvb_init()
613 dev->dvb = dvb; dvb_init()
614 dev->cx231xx_set_analog_freq = cx231xx_set_analog_freq; dvb_init()
615 dev->cx231xx_reset_analog_tuner = cx231xx_reset_analog_tuner; dvb_init()
617 tuner_i2c = cx231xx_get_i2c_adap(dev, dev->board.tuner_i2c_master); dvb_init()
618 demod_i2c = cx231xx_get_i2c_adap(dev, dev->board.demod_i2c_master); dvb_init()
619 mutex_lock(&dev->lock); dvb_init()
620 cx231xx_set_mode(dev, CX231XX_DIGITAL_MODE); dvb_init()
621 cx231xx_demod_reset(dev); dvb_init()
623 switch (dev->model) { dvb_init()
627 dev->dvb->frontend = dvb_attach(s5h1432_attach, dvb_init()
631 if (dev->dvb->frontend == NULL) { dvb_init()
632 dev_err(dev->dev, dvb_init()
641 if (!dvb_attach(xc5000_attach, dev->dvb->frontend, dvb_init()
652 dev->dvb->frontend = dvb_attach(s5h1411_attach, dvb_init()
656 if (dev->dvb->frontend == NULL) { dvb_init()
657 dev_err(dev->dev, dvb_init()
666 if (!dvb_attach(xc5000_attach, dev->dvb->frontend, dvb_init()
675 dev->dvb->frontend = dvb_attach(s5h1432_attach, dvb_init()
679 if (dev->dvb->frontend == NULL) { dvb_init()
680 dev_err(dev->dev, dvb_init()
689 if (!dvb_attach(tda18271_attach, dev->dvb->frontend, dvb_init()
699 dev->dvb->frontend = dvb_attach(s5h1411_attach, dvb_init()
703 if (dev->dvb->frontend == NULL) { dvb_init()
704 dev_err(dev->dev, dvb_init()
713 if (!dvb_attach(tda18271_attach, dev->dvb->frontend, dvb_init()
722 dev_info(dev->dev, dvb_init()
726 dev->dvb->frontend = dvb_attach(lgdt3305_attach, dvb_init()
730 if (dev->dvb->frontend == NULL) { dvb_init()
731 dev_err(dev->dev, dvb_init()
740 dvb_attach(tda18271_attach, dev->dvb->frontend, dvb_init()
747 dev->dvb->frontend = dvb_attach(si2165_attach, dvb_init()
752 if (dev->dvb->frontend == NULL) { dvb_init()
753 dev_err(dev->dev, dvb_init()
759 dev->dvb->frontend->ops.i2c_gate_ctrl = NULL; dvb_init()
764 dvb_attach(tda18271_attach, dev->dvb->frontend, dvb_init()
769 dev->cx231xx_reset_analog_tuner = NULL; dvb_init()
780 dev->dvb->frontend = dvb_attach(si2165_attach, dvb_init()
785 if (dev->dvb->frontend == NULL) { dvb_init()
786 dev_err(dev->dev, dvb_init()
792 dev->dvb->frontend->ops.i2c_gate_ctrl = NULL; dvb_init()
799 si2157_config.fe = dev->dvb->frontend; dvb_init()
810 if (client == NULL || client->dev.driver == NULL) { dvb_init()
811 dvb_frontend_detach(dev->dvb->frontend); dvb_init()
816 if (!try_module_get(client->dev.driver->owner)) { dvb_init()
818 dvb_frontend_detach(dev->dvb->frontend); dvb_init()
823 dev->cx231xx_reset_analog_tuner = NULL; dvb_init()
825 dev->dvb->i2c_client_tuner = client; dvb_init()
836 dev->dvb->frontend = dvb_attach(lgdt3306a_attach, dvb_init()
841 if (dev->dvb->frontend == NULL) { dvb_init()
842 dev_err(dev->dev, dvb_init()
848 dev->dvb->frontend->ops.i2c_gate_ctrl = NULL; dvb_init()
855 si2157_config.fe = dev->dvb->frontend; dvb_init()
866 if (client == NULL || client->dev.driver == NULL) { dvb_init()
867 dvb_frontend_detach(dev->dvb->frontend); dvb_init()
872 if (!try_module_get(client->dev.driver->owner)) { dvb_init()
874 dvb_frontend_detach(dev->dvb->frontend); dvb_init()
879 dev->cx231xx_reset_analog_tuner = NULL; dvb_init()
881 dev->dvb->i2c_client_tuner = client; dvb_init()
887 dev_info(dev->dev, dvb_init()
891 dev->dvb->frontend = dvb_attach(mb86a20s_attach, dvb_init()
895 if (dev->dvb->frontend == NULL) { dvb_init()
896 dev_err(dev->dev, dvb_init()
905 dvb_attach(tda18271_attach, dev->dvb->frontend, dvb_init()
911 dev_err(dev->dev, dvb_init()
913 dev->name); dvb_init()
917 dev_err(dev->dev, dvb_init()
918 "%s/2: frontend initialization failed\n", dev->name); dvb_init()
924 result = register_dvb(dvb, THIS_MODULE, dev, dev->dev); dvb_init()
930 dev_info(dev->dev, "Successfully loaded cx231xx-dvb\n"); dvb_init()
933 cx231xx_set_mode(dev, CX231XX_SUSPEND); dvb_init()
934 mutex_unlock(&dev->lock); dvb_init()
939 dev->dvb = NULL; dvb_init()
943 static int dvb_fini(struct cx231xx *dev) dvb_fini() argument
945 if (!dev->board.has_dvb) { dvb_fini()
950 if (dev->dvb) { dvb_fini()
951 unregister_dvb(dev->dvb); dvb_fini()
952 dev->dvb = NULL; dvb_fini()
463 register_dvb(struct cx231xx_dvb *dvb, struct module *module, struct cx231xx *dev, struct device *device) register_dvb() argument
/linux-4.4.14/drivers/media/usb/uvc/
H A Duvc_status.c26 static int uvc_input_init(struct uvc_device *dev) uvc_input_init() argument
35 usb_make_path(dev->udev, dev->input_phys, sizeof(dev->input_phys)); uvc_input_init()
36 strlcat(dev->input_phys, "/button", sizeof(dev->input_phys)); uvc_input_init()
38 input->name = dev->name; uvc_input_init()
39 input->phys = dev->input_phys; uvc_input_init()
40 usb_to_input_id(dev->udev, &input->id); uvc_input_init()
41 input->dev.parent = &dev->intf->dev; uvc_input_init()
49 dev->input = input; uvc_input_init()
57 static void uvc_input_cleanup(struct uvc_device *dev) uvc_input_cleanup() argument
59 if (dev->input) uvc_input_cleanup()
60 input_unregister_device(dev->input); uvc_input_cleanup()
63 static void uvc_input_report_key(struct uvc_device *dev, unsigned int code, uvc_input_report_key() argument
66 if (dev->input) { uvc_input_report_key()
67 input_report_key(dev->input, code, value); uvc_input_report_key()
68 input_sync(dev->input); uvc_input_report_key()
73 #define uvc_input_init(dev)
74 #define uvc_input_cleanup(dev)
75 #define uvc_input_report_key(dev, code, value)
81 static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len) uvc_event_streaming() argument
94 uvc_input_report_key(dev, KEY_CAMERA, data[3]); uvc_event_streaming()
101 static void uvc_event_control(struct uvc_device *dev, __u8 *data, int len) uvc_event_control() argument
117 struct uvc_device *dev = urb->context; uvc_status_complete() local
139 switch (dev->status[0] & 0x0f) { uvc_status_complete()
141 uvc_event_control(dev, dev->status, len); uvc_status_complete()
145 uvc_event_streaming(dev, dev->status, len); uvc_status_complete()
150 "type %u.\n", dev->status[0]); uvc_status_complete()
156 urb->interval = dev->int_ep->desc.bInterval; uvc_status_complete()
163 int uvc_status_init(struct uvc_device *dev) uvc_status_init() argument
165 struct usb_host_endpoint *ep = dev->int_ep; uvc_status_init()
172 uvc_input_init(dev); uvc_status_init()
174 dev->status = kzalloc(UVC_MAX_STATUS_SIZE, GFP_KERNEL); uvc_status_init()
175 if (dev->status == NULL) uvc_status_init()
178 dev->int_urb = usb_alloc_urb(0, GFP_KERNEL); uvc_status_init()
179 if (dev->int_urb == NULL) { uvc_status_init()
180 kfree(dev->status); uvc_status_init()
184 pipe = usb_rcvintpipe(dev->udev, ep->desc.bEndpointAddress); uvc_status_init()
190 if (interval > 16 && dev->udev->speed == USB_SPEED_HIGH && uvc_status_init()
191 (dev->quirks & UVC_QUIRK_STATUS_INTERVAL)) uvc_status_init()
194 usb_fill_int_urb(dev->int_urb, dev->udev, pipe, uvc_status_init()
195 dev->status, UVC_MAX_STATUS_SIZE, uvc_status_complete, uvc_status_init()
196 dev, interval); uvc_status_init()
201 void uvc_status_cleanup(struct uvc_device *dev) uvc_status_cleanup() argument
203 usb_kill_urb(dev->int_urb); uvc_status_cleanup()
204 usb_free_urb(dev->int_urb); uvc_status_cleanup()
205 kfree(dev->status); uvc_status_cleanup()
206 uvc_input_cleanup(dev); uvc_status_cleanup()
209 int uvc_status_start(struct uvc_device *dev, gfp_t flags) uvc_status_start() argument
211 if (dev->int_urb == NULL) uvc_status_start()
214 return usb_submit_urb(dev->int_urb, flags); uvc_status_start()
217 void uvc_status_stop(struct uvc_device *dev) uvc_status_stop() argument
219 usb_kill_urb(dev->int_urb); uvc_status_stop()
/linux-4.4.14/drivers/memstick/host/
H A Dr592.c58 static inline u32 r592_read_reg(struct r592_device *dev, int address) r592_read_reg() argument
60 u32 value = readl(dev->mmio + address); r592_read_reg()
66 static inline void r592_write_reg(struct r592_device *dev, r592_write_reg() argument
70 writel(value, dev->mmio + address); r592_write_reg()
74 static inline u32 r592_read_reg_raw_be(struct r592_device *dev, int address) r592_read_reg_raw_be() argument
76 u32 value = __raw_readl(dev->mmio + address); r592_read_reg_raw_be()
82 static inline void r592_write_reg_raw_be(struct r592_device *dev, r592_write_reg_raw_be() argument
86 __raw_writel(cpu_to_be32(value), dev->mmio + address); r592_write_reg_raw_be()
90 static inline void r592_set_reg_mask(struct r592_device *dev, r592_set_reg_mask() argument
93 u32 reg = readl(dev->mmio + address); r592_set_reg_mask()
95 writel(reg | mask , dev->mmio + address); r592_set_reg_mask()
99 static inline void r592_clear_reg_mask(struct r592_device *dev, r592_clear_reg_mask() argument
102 u32 reg = readl(dev->mmio + address); r592_clear_reg_mask()
105 writel(reg & ~mask, dev->mmio + address); r592_clear_reg_mask()
110 static int r592_wait_status(struct r592_device *dev, u32 mask, u32 wanted_mask) r592_wait_status() argument
113 u32 reg = r592_read_reg(dev, R592_STATUS); r592_wait_status()
120 reg = r592_read_reg(dev, R592_STATUS); r592_wait_status()
135 static int r592_enable_device(struct r592_device *dev, bool enable) r592_enable_device() argument
142 r592_write_reg(dev, R592_POWER, R592_POWER_0 | R592_POWER_1); r592_enable_device()
145 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); r592_enable_device()
150 r592_write_reg(dev, R592_POWER, 0); r592_enable_device()
156 static int r592_set_mode(struct r592_device *dev, bool parallel_mode) r592_set_mode() argument
162 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_SERIAL); r592_set_mode()
164 r592_clear_reg_mask(dev, R592_POWER, R592_POWER_20); r592_set_mode()
170 r592_set_reg_mask(dev, R592_POWER, R592_POWER_20); r592_set_mode()
172 r592_clear_reg_mask(dev, R592_IO, r592_set_mode()
176 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_PARALLEL); r592_set_mode()
179 dev->parallel_mode = parallel_mode; r592_set_mode()
184 static void r592_host_reset(struct r592_device *dev) r592_host_reset() argument
186 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); r592_host_reset()
188 r592_set_mode(dev, dev->parallel_mode); r592_host_reset()
193 static void r592_clear_interrupts(struct r592_device *dev) r592_clear_interrupts() argument
196 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_ACK_MASK); r592_clear_interrupts()
197 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_EN_MASK); r592_clear_interrupts()
202 static int r592_test_io_error(struct r592_device *dev) r592_test_io_error() argument
204 if (!(r592_read_reg(dev, R592_STATUS) & r592_test_io_error()
212 static int r592_test_fifo_empty(struct r592_device *dev) r592_test_fifo_empty() argument
214 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) r592_test_fifo_empty()
218 r592_host_reset(dev); r592_test_fifo_empty()
220 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) r592_test_fifo_empty()
228 static void r592_start_dma(struct r592_device *dev, bool is_write) r592_start_dma() argument
232 spin_lock_irqsave(&dev->irq_lock, flags); r592_start_dma()
235 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); r592_start_dma()
236 r592_set_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); r592_start_dma()
239 r592_write_reg(dev, R592_FIFO_DMA, sg_dma_address(&dev->req->sg)); r592_start_dma()
242 reg = r592_read_reg(dev, R592_FIFO_DMA_SETTINGS); r592_start_dma()
249 r592_write_reg(dev, R592_FIFO_DMA_SETTINGS, reg); r592_start_dma()
251 spin_unlock_irqrestore(&dev->irq_lock, flags); r592_start_dma()
255 static void r592_stop_dma(struct r592_device *dev, int error) r592_stop_dma() argument
257 r592_clear_reg_mask(dev, R592_FIFO_DMA_SETTINGS, r592_stop_dma()
261 r592_write_reg(dev, R592_FIFO_DMA, r592_stop_dma()
262 dev->dummy_dma_page_physical_address); r592_stop_dma()
264 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); r592_stop_dma()
265 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); r592_stop_dma()
266 dev->dma_error = error; r592_stop_dma()
270 static void r592_check_dma(struct r592_device *dev) r592_check_dma() argument
272 dev->dma_capable = r592_enable_dma && r592_check_dma()
273 (r592_read_reg(dev, R592_FIFO_DMA_SETTINGS) & r592_check_dma()
278 static int r592_transfer_fifo_dma(struct r592_device *dev) r592_transfer_fifo_dma() argument
283 if (!dev->dma_capable || !dev->req->long_data) r592_transfer_fifo_dma()
286 len = dev->req->sg.length; r592_transfer_fifo_dma()
287 is_write = dev->req->data_dir == WRITE; r592_transfer_fifo_dma()
294 dev->dma_error = 0; r592_transfer_fifo_dma()
295 reinit_completion(&dev->dma_done); r592_transfer_fifo_dma()
298 sg_count = dma_map_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? r592_transfer_fifo_dma()
302 (sg_dma_len(&dev->req->sg) < dev->req->sg.length)) { r592_transfer_fifo_dma()
307 r592_start_dma(dev, is_write); r592_transfer_fifo_dma()
311 &dev->dma_done, msecs_to_jiffies(1000))) { r592_transfer_fifo_dma()
313 r592_stop_dma(dev, -ETIMEDOUT); r592_transfer_fifo_dma()
316 dma_unmap_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? r592_transfer_fifo_dma()
320 return dev->dma_error; r592_transfer_fifo_dma()
330 static void r592_write_fifo_pio(struct r592_device *dev, r592_write_fifo_pio() argument
334 if (!kfifo_is_empty(&dev->pio_fifo)) { r592_write_fifo_pio()
337 int copy_len = kfifo_in(&dev->pio_fifo, buffer, len); r592_write_fifo_pio()
339 if (!kfifo_is_full(&dev->pio_fifo)) r592_write_fifo_pio()
344 copy_len = kfifo_out(&dev->pio_fifo, tmp, 4); r592_write_fifo_pio()
346 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)tmp); r592_write_fifo_pio()
349 WARN_ON(!kfifo_is_empty(&dev->pio_fifo)); r592_write_fifo_pio()
353 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); r592_write_fifo_pio()
360 kfifo_in(&dev->pio_fifo, buffer, len); r592_write_fifo_pio()
364 static void r592_flush_fifo_write(struct r592_device *dev) r592_flush_fifo_write() argument
369 if (kfifo_is_empty(&dev->pio_fifo)) r592_flush_fifo_write()
372 len = kfifo_out(&dev->pio_fifo, buffer, 4); r592_flush_fifo_write()
373 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); r592_flush_fifo_write()
381 static void r592_read_fifo_pio(struct r592_device *dev, r592_read_fifo_pio() argument
387 if (!kfifo_is_empty(&dev->pio_fifo)) { r592_read_fifo_pio()
389 kfifo_out(&dev->pio_fifo, buffer, min(4, len)); r592_read_fifo_pio()
393 if (!kfifo_is_empty(&dev->pio_fifo)) r592_read_fifo_pio()
399 *(u32 *)buffer = r592_read_reg_raw_be(dev, R592_FIFO_PIO); r592_read_fifo_pio()
405 *(u32 *)tmp = r592_read_reg_raw_be(dev, R592_FIFO_PIO); r592_read_fifo_pio()
406 kfifo_in(&dev->pio_fifo, tmp, 4); r592_read_fifo_pio()
407 len -= kfifo_out(&dev->pio_fifo, buffer, len); r592_read_fifo_pio()
415 static int r592_transfer_fifo_pio(struct r592_device *dev) r592_transfer_fifo_pio() argument
419 bool is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; r592_transfer_fifo_pio()
422 kfifo_reset(&dev->pio_fifo); r592_transfer_fifo_pio()
424 if (!dev->req->long_data) { r592_transfer_fifo_pio()
426 r592_write_fifo_pio(dev, dev->req->data, r592_transfer_fifo_pio()
427 dev->req->data_len); r592_transfer_fifo_pio()
428 r592_flush_fifo_write(dev); r592_transfer_fifo_pio()
430 r592_read_fifo_pio(dev, dev->req->data, r592_transfer_fifo_pio()
431 dev->req->data_len); r592_transfer_fifo_pio()
436 sg_miter_start(&miter, &dev->req->sg, 1, SG_MITER_ATOMIC | r592_transfer_fifo_pio()
442 r592_write_fifo_pio(dev, miter.addr, miter.length); r592_transfer_fifo_pio()
444 r592_read_fifo_pio(dev, miter.addr, miter.length); r592_transfer_fifo_pio()
449 r592_flush_fifo_write(dev); r592_transfer_fifo_pio()
457 static void r592_execute_tpc(struct r592_device *dev) r592_execute_tpc() argument
463 if (!dev->req) { r592_execute_tpc()
468 is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; r592_execute_tpc()
469 len = dev->req->long_data ? r592_execute_tpc()
470 dev->req->sg.length : dev->req->data_len; r592_execute_tpc()
479 if (!(r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_PRSNT)) { r592_execute_tpc()
486 memstick_debug_get_tpc_name(dev->req->tpc), len); r592_execute_tpc()
490 r592_set_reg_mask(dev, R592_IO, R592_IO_DIRECTION); r592_execute_tpc()
492 r592_clear_reg_mask(dev, R592_IO, R592_IO_DIRECTION); r592_execute_tpc()
495 error = r592_test_fifo_empty(dev); r592_execute_tpc()
501 error = r592_transfer_fifo_dma(dev); r592_execute_tpc()
503 error = r592_transfer_fifo_pio(dev); r592_execute_tpc()
511 (dev->req->tpc << R592_TPC_EXEC_TPC_SHIFT) | r592_execute_tpc()
514 r592_write_reg(dev, R592_TPC_EXEC, reg); r592_execute_tpc()
518 if (dev->req->need_card_int) r592_execute_tpc()
521 error = r592_wait_status(dev, status, status); r592_execute_tpc()
528 error = r592_test_io_error(dev); r592_execute_tpc()
536 error = r592_transfer_fifo_dma(dev); r592_execute_tpc()
538 error = r592_transfer_fifo_pio(dev); r592_execute_tpc()
543 if (dev->parallel_mode && dev->req->need_card_int) { r592_execute_tpc()
545 dev->req->int_reg = 0; r592_execute_tpc()
546 status = r592_read_reg(dev, R592_STATUS); r592_execute_tpc()
549 dev->req->int_reg |= MEMSTICK_INT_CMDNAK; r592_execute_tpc()
551 dev->req->int_reg |= MEMSTICK_INT_BREQ; r592_execute_tpc()
553 dev->req->int_reg |= MEMSTICK_INT_ERR; r592_execute_tpc()
555 dev->req->int_reg |= MEMSTICK_INT_CED; r592_execute_tpc()
561 dev->req->error = error; r592_execute_tpc()
562 r592_clear_reg_mask(dev, R592_REG_MSC, R592_REG_MSC_LED); r592_execute_tpc()
570 struct r592_device *dev = (struct r592_device *)data; r592_process_thread() local
574 spin_lock_irqsave(&dev->io_thread_lock, flags); r592_process_thread()
576 error = memstick_next_req(dev->host, &dev->req); r592_process_thread()
577 spin_unlock_irqrestore(&dev->io_thread_lock, flags); r592_process_thread()
593 r592_execute_tpc(dev); r592_process_thread()
601 static void r592_update_card_detect(struct r592_device *dev) r592_update_card_detect() argument
603 u32 reg = r592_read_reg(dev, R592_REG_MSC); r592_update_card_detect()
616 r592_write_reg(dev, R592_REG_MSC, reg); r592_update_card_detect()
622 struct r592_device *dev = (struct r592_device *)data; r592_detect_timer() local
623 r592_update_card_detect(dev); r592_detect_timer()
624 memstick_detect_change(dev->host); r592_detect_timer()
630 struct r592_device *dev = (struct r592_device *)data; r592_irq() local
637 spin_lock_irqsave(&dev->irq_lock, flags); r592_irq()
639 reg = r592_read_reg(dev, R592_REG_MSC); r592_irq()
645 r592_write_reg(dev, R592_REG_MSC, reg); r592_irq()
659 mod_timer(&dev->detect_timer, r592_irq()
675 r592_stop_dma(dev, error); r592_irq()
676 complete(&dev->dma_done); r592_irq()
679 spin_unlock_irqrestore(&dev->irq_lock, flags); r592_irq()
687 struct r592_device *dev = memstick_priv(host); r592_set_param() local
693 return r592_enable_device(dev, true); r592_set_param()
695 return r592_enable_device(dev, false); r592_set_param()
702 return r592_set_mode(dev, 0); r592_set_param()
704 return r592_set_mode(dev, 1); r592_set_param()
716 struct r592_device *dev = memstick_priv(host); r592_submit_req() local
719 if (dev->req) r592_submit_req()
722 spin_lock_irqsave(&dev->io_thread_lock, flags); r592_submit_req()
723 if (wake_up_process(dev->io_thread)) r592_submit_req()
725 spin_unlock_irqrestore(&dev->io_thread_lock, flags); r592_submit_req()
739 struct r592_device *dev; r592_probe() local
742 host = memstick_alloc_host(sizeof(struct r592_device), &pdev->dev); r592_probe()
746 dev = memstick_priv(host); r592_probe()
747 dev->host = host; r592_probe()
748 dev->pci_dev = pdev; r592_probe()
749 pci_set_drvdata(pdev, dev); r592_probe()
757 error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); r592_probe()
765 dev->mmio = pci_ioremap_bar(pdev, 0); r592_probe()
766 if (!dev->mmio) r592_probe()
769 dev->irq = pdev->irq; r592_probe()
770 spin_lock_init(&dev->irq_lock); r592_probe()
771 spin_lock_init(&dev->io_thread_lock); r592_probe()
772 init_completion(&dev->dma_done); r592_probe()
773 INIT_KFIFO(dev->pio_fifo); r592_probe()
774 setup_timer(&dev->detect_timer, r592_probe()
775 r592_detect_timer, (long unsigned int)dev); r592_probe()
781 r592_check_dma(dev); r592_probe()
783 dev->io_thread = kthread_run(r592_process_thread, dev, "r592_io"); r592_probe()
784 if (IS_ERR(dev->io_thread)) { r592_probe()
785 error = PTR_ERR(dev->io_thread); r592_probe()
790 dev->dummy_dma_page = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, r592_probe()
791 &dev->dummy_dma_page_physical_address, GFP_KERNEL); r592_probe()
792 r592_stop_dma(dev , 0); r592_probe()
794 if (request_irq(dev->irq, &r592_irq, IRQF_SHARED, r592_probe()
795 DRV_NAME, dev)) r592_probe()
798 r592_update_card_detect(dev); r592_probe()
805 free_irq(dev->irq, dev); r592_probe()
807 if (dev->dummy_dma_page) r592_probe()
808 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, r592_probe()
809 dev->dummy_dma_page_physical_address); r592_probe()
811 kthread_stop(dev->io_thread); r592_probe()
813 iounmap(dev->mmio); r592_probe()
827 struct r592_device *dev = pci_get_drvdata(pdev); r592_remove() local
831 kthread_stop(dev->io_thread); r592_remove()
833 r592_enable_device(dev, false); r592_remove()
835 while (!error && dev->req) { r592_remove()
836 dev->req->error = -ETIME; r592_remove()
837 error = memstick_next_req(dev->host, &dev->req); r592_remove()
839 memstick_remove_host(dev->host); r592_remove()
841 free_irq(dev->irq, dev); r592_remove()
842 iounmap(dev->mmio); r592_remove()
845 memstick_free_host(dev->host); r592_remove()
847 if (dev->dummy_dma_page) r592_remove()
848 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, r592_remove()
849 dev->dummy_dma_page_physical_address); r592_remove()
856 struct r592_device *dev = pci_get_drvdata(pdev); r592_suspend() local
858 r592_clear_interrupts(dev); r592_suspend()
859 memstick_suspend_host(dev->host); r592_suspend()
860 del_timer_sync(&dev->detect_timer); r592_suspend()
867 struct r592_device *dev = pci_get_drvdata(pdev); r592_resume() local
869 r592_clear_interrupts(dev); r592_resume()
870 r592_enable_device(dev, false); r592_resume()
871 memstick_resume_host(dev->host); r592_resume()
872 r592_update_card_detect(dev); r592_resume()
/linux-4.4.14/drivers/staging/rtl8192e/rtl8192e/
H A Drtl_pm.c24 struct net_device *dev = pci_get_drvdata(pdev); rtl92e_suspend() local
25 struct r8192_priv *priv = rtllib_priv(dev); rtl92e_suspend()
28 netdev_info(dev, "============> r8192E suspend call.\n"); rtl92e_suspend()
33 if (!netif_running(dev)) { rtl92e_suspend()
34 netdev_info(dev, rtl92e_suspend()
39 if (dev->netdev_ops->ndo_stop) rtl92e_suspend()
40 dev->netdev_ops->ndo_stop(dev); rtl92e_suspend()
41 netif_device_detach(dev); rtl92e_suspend()
44 rtl92e_set_rf_state(dev, eRfOff, RF_CHANGE_BY_INIT); rtl92e_suspend()
45 ulRegRead = rtl92e_readl(dev, CPU_GEN); rtl92e_suspend()
47 rtl92e_writel(dev, CPU_GEN, ulRegRead); rtl92e_suspend()
49 rtl92e_writel(dev, WFCRC0, 0xffffffff); rtl92e_suspend()
50 rtl92e_writel(dev, WFCRC1, 0xffffffff); rtl92e_suspend()
51 rtl92e_writel(dev, WFCRC2, 0xffffffff); rtl92e_suspend()
52 rtl92e_writeb(dev, PMR, 0x5); rtl92e_suspend()
53 rtl92e_writeb(dev, MacBlkCtrl, 0xa); rtl92e_suspend()
56 netdev_info(dev, "WOL is %s\n", priv->rtllib->bSupportRemoteWakeUp ? rtl92e_suspend()
71 struct net_device *dev = pci_get_drvdata(pdev); rtl92e_resume() local
72 struct r8192_priv *priv = rtllib_priv(dev); rtl92e_resume()
76 netdev_info(dev, "================>r8192E resume call.\n"); rtl92e_resume()
82 netdev_err(dev, "pci_enable_device failed on resume\n"); rtl92e_resume()
94 rtl92e_check_rfctrl_gpio_timer((unsigned long)dev); rtl92e_resume()
96 if (!netif_running(dev)) { rtl92e_resume()
97 netdev_info(dev, rtl92e_resume()
102 netif_device_attach(dev); rtl92e_resume()
103 if (dev->netdev_ops->ndo_open) rtl92e_resume()
104 dev->netdev_ops->ndo_open(dev); rtl92e_resume()
107 rtl92e_set_rf_state(dev, eRfOn, RF_CHANGE_BY_INIT); rtl92e_resume()
H A Drtl_eeprom.c24 static void _rtl92e_gpio_write_bit(struct net_device *dev, int no, bool val) _rtl92e_gpio_write_bit() argument
26 u8 reg = rtl92e_readb(dev, EPROM_CMD); _rtl92e_gpio_write_bit()
33 rtl92e_writeb(dev, EPROM_CMD, reg); _rtl92e_gpio_write_bit()
37 static bool _rtl92e_gpio_get_bit(struct net_device *dev, int no) _rtl92e_gpio_get_bit() argument
39 u8 reg = rtl92e_readb(dev, EPROM_CMD); _rtl92e_gpio_get_bit()
44 static void _rtl92e_eeprom_ck_cycle(struct net_device *dev) _rtl92e_eeprom_ck_cycle() argument
46 _rtl92e_gpio_write_bit(dev, EPROM_CK_BIT, 1); _rtl92e_eeprom_ck_cycle()
47 _rtl92e_gpio_write_bit(dev, EPROM_CK_BIT, 0); _rtl92e_eeprom_ck_cycle()
50 static u16 _rtl92e_eeprom_xfer(struct net_device *dev, u16 data, int tx_len) _rtl92e_eeprom_xfer() argument
55 _rtl92e_gpio_write_bit(dev, EPROM_CS_BIT, 1); _rtl92e_eeprom_xfer()
56 _rtl92e_eeprom_ck_cycle(dev); _rtl92e_eeprom_xfer()
59 _rtl92e_gpio_write_bit(dev, EPROM_W_BIT, _rtl92e_eeprom_xfer()
61 _rtl92e_eeprom_ck_cycle(dev); _rtl92e_eeprom_xfer()
64 _rtl92e_gpio_write_bit(dev, EPROM_W_BIT, 0); _rtl92e_eeprom_xfer()
67 _rtl92e_eeprom_ck_cycle(dev); _rtl92e_eeprom_xfer()
68 ret |= _rtl92e_gpio_get_bit(dev, EPROM_R_BIT) << rx_len; _rtl92e_eeprom_xfer()
71 _rtl92e_gpio_write_bit(dev, EPROM_CS_BIT, 0); _rtl92e_eeprom_xfer()
72 _rtl92e_eeprom_ck_cycle(dev); _rtl92e_eeprom_xfer()
77 u32 rtl92e_eeprom_read(struct net_device *dev, u32 addr) rtl92e_eeprom_read() argument
79 struct r8192_priv *priv = rtllib_priv(dev); rtl92e_eeprom_read()
82 rtl92e_writeb(dev, EPROM_CMD, rtl92e_eeprom_read()
88 ret = _rtl92e_eeprom_xfer(dev, (addr & 0xFF) | (0x6 << 8), 11); rtl92e_eeprom_read()
90 ret = _rtl92e_eeprom_xfer(dev, (addr & 0x3F) | (0x6 << 6), 9); rtl92e_eeprom_read()
92 rtl92e_writeb(dev, EPROM_CMD, rtl92e_eeprom_read()
/linux-4.4.14/drivers/ssb/
H A Dpcihost_wrapper.c24 struct pci_dev *dev = to_pci_dev(d); ssb_pcihost_suspend() local
25 struct ssb_bus *ssb = pci_get_drvdata(dev); ssb_pcihost_suspend()
31 pci_save_state(dev); ssb_pcihost_suspend()
32 pci_disable_device(dev); ssb_pcihost_suspend()
38 pci_prepare_to_sleep(dev); ssb_pcihost_suspend()
45 struct pci_dev *dev = to_pci_dev(d); ssb_pcihost_resume() local
46 struct ssb_bus *ssb = pci_get_drvdata(dev); ssb_pcihost_resume()
49 pci_back_from_sleep(dev); ssb_pcihost_resume()
50 err = pci_enable_device(dev); ssb_pcihost_resume()
53 pci_restore_state(dev); ssb_pcihost_resume()
67 static int ssb_pcihost_probe(struct pci_dev *dev, ssb_pcihost_probe() argument
78 err = pci_enable_device(dev); ssb_pcihost_probe()
81 name = dev_name(&dev->dev); ssb_pcihost_probe()
82 if (dev->driver && dev->driver->name) ssb_pcihost_probe()
83 name = dev->driver->name; ssb_pcihost_probe()
84 err = pci_request_regions(dev, name); ssb_pcihost_probe()
87 pci_set_master(dev); ssb_pcihost_probe()
91 pci_read_config_dword(dev, 0x40, &val); ssb_pcihost_probe()
93 pci_write_config_dword(dev, 0x40, val & 0xffff00ff); ssb_pcihost_probe()
95 err = ssb_bus_pcibus_register(ssb, dev); ssb_pcihost_probe()
99 pci_set_drvdata(dev, ssb); ssb_pcihost_probe()
105 pci_release_regions(dev); ssb_pcihost_probe()
107 pci_disable_device(dev); ssb_pcihost_probe()
113 static void ssb_pcihost_remove(struct pci_dev *dev) ssb_pcihost_remove() argument
115 struct ssb_bus *ssb = pci_get_drvdata(dev); ssb_pcihost_remove()
118 pci_release_regions(dev); ssb_pcihost_remove()
119 pci_disable_device(dev); ssb_pcihost_remove()
121 pci_set_drvdata(dev, NULL); ssb_pcihost_remove()
H A Ddriver_gige.c32 static inline u8 gige_read8(struct ssb_gige *dev, u16 offset) gige_read8() argument
34 return ssb_read8(dev->dev, offset); gige_read8()
37 static inline u16 gige_read16(struct ssb_gige *dev, u16 offset) gige_read16() argument
39 return ssb_read16(dev->dev, offset); gige_read16()
42 static inline u32 gige_read32(struct ssb_gige *dev, u16 offset) gige_read32() argument
44 return ssb_read32(dev->dev, offset); gige_read32()
47 static inline void gige_write8(struct ssb_gige *dev, gige_write8() argument
50 ssb_write8(dev->dev, offset, value); gige_write8()
53 static inline void gige_write16(struct ssb_gige *dev, gige_write16() argument
56 ssb_write16(dev->dev, offset, value); gige_write16()
59 static inline void gige_write32(struct ssb_gige *dev, gige_write32() argument
62 ssb_write32(dev->dev, offset, value); gige_write32()
66 u8 gige_pcicfg_read8(struct ssb_gige *dev, unsigned int offset) gige_pcicfg_read8() argument
69 return gige_read8(dev, SSB_GIGE_PCICFG + offset); gige_pcicfg_read8()
73 u16 gige_pcicfg_read16(struct ssb_gige *dev, unsigned int offset) gige_pcicfg_read16() argument
76 return gige_read16(dev, SSB_GIGE_PCICFG + offset); gige_pcicfg_read16()
80 u32 gige_pcicfg_read32(struct ssb_gige *dev, unsigned int offset) gige_pcicfg_read32() argument
83 return gige_read32(dev, SSB_GIGE_PCICFG + offset); gige_pcicfg_read32()
87 void gige_pcicfg_write8(struct ssb_gige *dev, gige_pcicfg_write8() argument
91 gige_write8(dev, SSB_GIGE_PCICFG + offset, value); gige_pcicfg_write8()
95 void gige_pcicfg_write16(struct ssb_gige *dev, gige_pcicfg_write16() argument
99 gige_write16(dev, SSB_GIGE_PCICFG + offset, value); gige_pcicfg_write16()
103 void gige_pcicfg_write32(struct ssb_gige *dev, gige_pcicfg_write32() argument
107 gige_write32(dev, SSB_GIGE_PCICFG + offset, value); gige_pcicfg_write32()
113 struct ssb_gige *dev = container_of(bus->ops, struct ssb_gige, pci_ops); ssb_gige_pci_read_config() local
121 spin_lock_irqsave(&dev->lock, flags); ssb_gige_pci_read_config()
124 *val = gige_pcicfg_read8(dev, reg); ssb_gige_pci_read_config()
127 *val = gige_pcicfg_read16(dev, reg); ssb_gige_pci_read_config()
130 *val = gige_pcicfg_read32(dev, reg); ssb_gige_pci_read_config()
135 spin_unlock_irqrestore(&dev->lock, flags); ssb_gige_pci_read_config()
143 struct ssb_gige *dev = container_of(bus->ops, struct ssb_gige, pci_ops); ssb_gige_pci_write_config() local
151 spin_lock_irqsave(&dev->lock, flags); ssb_gige_pci_write_config()
154 gige_pcicfg_write8(dev, reg, val); ssb_gige_pci_write_config()
157 gige_pcicfg_write16(dev, reg, val); ssb_gige_pci_write_config()
160 gige_pcicfg_write32(dev, reg, val); ssb_gige_pci_write_config()
165 spin_unlock_irqrestore(&dev->lock, flags); ssb_gige_pci_write_config()
173 struct ssb_gige *dev; ssb_gige_probe() local
176 dev = kzalloc(sizeof(*dev), GFP_KERNEL); ssb_gige_probe()
177 if (!dev) ssb_gige_probe()
179 dev->dev = sdev; ssb_gige_probe()
181 spin_lock_init(&dev->lock); ssb_gige_probe()
182 dev->pci_controller.pci_ops = &dev->pci_ops; ssb_gige_probe()
183 dev->pci_controller.io_resource = &dev->io_resource; ssb_gige_probe()
184 dev->pci_controller.mem_resource = &dev->mem_resource; ssb_gige_probe()
185 dev->pci_controller.io_map_base = 0x800; ssb_gige_probe()
186 dev->pci_ops.read = ssb_gige_pci_read_config; ssb_gige_probe()
187 dev->pci_ops.write = ssb_gige_pci_write_config; ssb_gige_probe()
189 dev->io_resource.name = SSB_GIGE_IO_RES_NAME; ssb_gige_probe()
190 dev->io_resource.start = 0x800; ssb_gige_probe()
191 dev->io_resource.end = 0x8FF; ssb_gige_probe()
192 dev->io_resource.flags = IORESOURCE_IO | IORESOURCE_PCI_FIXED; ssb_gige_probe()
199 gige_pcicfg_write32(dev, PCI_BASE_ADDRESS_0, base); ssb_gige_probe()
200 gige_pcicfg_write32(dev, PCI_BASE_ADDRESS_1, 0); ssb_gige_probe()
202 dev->mem_resource.name = SSB_GIGE_MEM_RES_NAME; ssb_gige_probe()
203 dev->mem_resource.start = base; ssb_gige_probe()
204 dev->mem_resource.end = base + 0x10000 - 1; ssb_gige_probe()
205 dev->mem_resource.flags = IORESOURCE_MEM | IORESOURCE_PCI_FIXED; ssb_gige_probe()
208 gige_pcicfg_write16(dev, PCI_COMMAND, ssb_gige_probe()
209 gige_pcicfg_read16(dev, PCI_COMMAND) ssb_gige_probe()
218 gige_write32(dev, SSB_GIGE_SHIM_FLUSHSTAT, 0x00000068); ssb_gige_probe()
227 dev->has_rgmii = 1; ssb_gige_probe()
231 dev->has_rgmii = 0; ssb_gige_probe()
236 ssb_set_drvdata(sdev, dev); ssb_gige_probe()
237 register_pci_controller(&dev->pci_controller); ssb_gige_probe()
253 struct ssb_gige *dev = ssb_get_drvdata(sdev); ssb_gige_pcibios_plat_dev_init() local
256 if (pdev->bus->ops != &dev->pci_ops) { ssb_gige_pcibios_plat_dev_init()
264 res->name = dev->mem_resource.name; ssb_gige_pcibios_plat_dev_init()
265 res->start = dev->mem_resource.start; ssb_gige_pcibios_plat_dev_init()
266 res->end = dev->mem_resource.end; ssb_gige_pcibios_plat_dev_init()
278 struct ssb_gige *dev = ssb_get_drvdata(sdev); ssb_gige_map_irq() local
280 if (pdev->bus->ops != &dev->pci_ops) { ssb_gige_map_irq()
/linux-4.4.14/drivers/acpi/
H A Dproc.c30 struct acpi_device *dev = acpi_system_wakeup_device_seq_show() local
34 if (!dev->wakeup.flags.valid) acpi_system_wakeup_device_seq_show()
38 dev->pnp.bus_id, acpi_system_wakeup_device_seq_show()
39 (u32) dev->wakeup.sleep_state); acpi_system_wakeup_device_seq_show()
41 mutex_lock(&dev->physical_node_lock); acpi_system_wakeup_device_seq_show()
43 if (!dev->physical_node_count) { acpi_system_wakeup_device_seq_show()
45 dev->wakeup.flags.run_wake ? '*' : ' ', acpi_system_wakeup_device_seq_show()
46 device_may_wakeup(&dev->dev) ? acpi_system_wakeup_device_seq_show()
50 list_for_each_entry(entry, &dev->physical_node_list, acpi_system_wakeup_device_seq_show()
52 ldev = get_device(entry->dev); acpi_system_wakeup_device_seq_show()
57 dev->physical_node_list.next) acpi_system_wakeup_device_seq_show()
61 dev->wakeup.flags.run_wake ? '*' : ' ', acpi_system_wakeup_device_seq_show()
62 (device_may_wakeup(&dev->dev) || acpi_system_wakeup_device_seq_show()
71 mutex_unlock(&dev->physical_node_lock); acpi_system_wakeup_device_seq_show()
85 if (entry->dev && device_can_wakeup(entry->dev)) { physical_device_enable_wakeup()
86 bool enable = !device_may_wakeup(entry->dev); physical_device_enable_wakeup()
87 device_set_wakeup_enable(entry->dev, enable); physical_device_enable_wakeup()
112 struct acpi_device *dev = acpi_system_write_wakeup_device() local
114 if (!dev->wakeup.flags.valid) acpi_system_write_wakeup_device()
117 if (!strncmp(dev->pnp.bus_id, str, 4)) { acpi_system_write_wakeup_device()
118 if (device_can_wakeup(&dev->dev)) { acpi_system_write_wakeup_device()
119 bool enable = !device_may_wakeup(&dev->dev); acpi_system_write_wakeup_device()
120 device_set_wakeup_enable(&dev->dev, enable); acpi_system_write_wakeup_device()
122 physical_device_enable_wakeup(dev); acpi_system_write_wakeup_device()
H A Dwakeup.c35 struct acpi_device *dev = acpi_enable_wakeup_devices() local
38 if (!dev->wakeup.flags.valid acpi_enable_wakeup_devices()
39 || sleep_state > (u32) dev->wakeup.sleep_state acpi_enable_wakeup_devices()
40 || !(device_may_wakeup(&dev->dev) acpi_enable_wakeup_devices()
41 || dev->wakeup.prepare_count)) acpi_enable_wakeup_devices()
44 if (device_may_wakeup(&dev->dev)) acpi_enable_wakeup_devices()
45 acpi_enable_wakeup_device_power(dev, sleep_state); acpi_enable_wakeup_devices()
48 acpi_set_gpe_wake_mask(dev->wakeup.gpe_device, dev->wakeup.gpe_number, acpi_enable_wakeup_devices()
62 struct acpi_device *dev = acpi_disable_wakeup_devices() local
65 if (!dev->wakeup.flags.valid acpi_disable_wakeup_devices()
66 || sleep_state > (u32) dev->wakeup.sleep_state acpi_disable_wakeup_devices()
67 || !(device_may_wakeup(&dev->dev) acpi_disable_wakeup_devices()
68 || dev->wakeup.prepare_count)) acpi_disable_wakeup_devices()
71 acpi_set_gpe_wake_mask(dev->wakeup.gpe_device, dev->wakeup.gpe_number, acpi_disable_wakeup_devices()
74 if (device_may_wakeup(&dev->dev)) acpi_disable_wakeup_devices()
75 acpi_disable_wakeup_device_power(dev); acpi_disable_wakeup_devices()
85 struct acpi_device *dev = container_of(node, acpi_wakeup_device_init() local
88 if (device_can_wakeup(&dev->dev)) { acpi_wakeup_device_init()
90 acpi_enable_gpe(dev->wakeup.gpe_device, acpi_wakeup_device_init()
91 dev->wakeup.gpe_number); acpi_wakeup_device_init()
92 device_set_wakeup_enable(&dev->dev, true); acpi_wakeup_device_init()
/linux-4.4.14/drivers/usb/c67x00/
H A Dc67x00-ll-hpi.c84 static inline u16 hpi_read_reg(struct c67x00_device *dev, int reg) hpi_read_reg() argument
87 return __raw_readw(dev->hpi.base + reg * dev->hpi.regstep); hpi_read_reg()
90 static inline void hpi_write_reg(struct c67x00_device *dev, int reg, u16 value) hpi_write_reg() argument
93 __raw_writew(value, dev->hpi.base + reg * dev->hpi.regstep); hpi_write_reg()
96 static inline u16 hpi_read_word_nolock(struct c67x00_device *dev, u16 reg) hpi_read_word_nolock() argument
98 hpi_write_reg(dev, HPI_ADDR, reg); hpi_read_word_nolock()
99 return hpi_read_reg(dev, HPI_DATA); hpi_read_word_nolock()
102 static u16 hpi_read_word(struct c67x00_device *dev, u16 reg) hpi_read_word() argument
107 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_read_word()
108 value = hpi_read_word_nolock(dev, reg); hpi_read_word()
109 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_read_word()
114 static void hpi_write_word_nolock(struct c67x00_device *dev, u16 reg, u16 value) hpi_write_word_nolock() argument
116 hpi_write_reg(dev, HPI_ADDR, reg); hpi_write_word_nolock()
117 hpi_write_reg(dev, HPI_DATA, value); hpi_write_word_nolock()
120 static void hpi_write_word(struct c67x00_device *dev, u16 reg, u16 value) hpi_write_word() argument
124 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_write_word()
125 hpi_write_word_nolock(dev, reg, value); hpi_write_word()
126 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_write_word()
132 static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, hpi_write_words_le16() argument
138 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_write_words_le16()
140 hpi_write_reg(dev, HPI_ADDR, addr); hpi_write_words_le16()
142 hpi_write_reg(dev, HPI_DATA, le16_to_cpu(*data++)); hpi_write_words_le16()
144 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_write_words_le16()
150 static void hpi_read_words_le16(struct c67x00_device *dev, u16 addr, hpi_read_words_le16() argument
156 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_read_words_le16()
157 hpi_write_reg(dev, HPI_ADDR, addr); hpi_read_words_le16()
159 *data++ = cpu_to_le16(hpi_read_reg(dev, HPI_DATA)); hpi_read_words_le16()
161 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_read_words_le16()
164 static void hpi_set_bits(struct c67x00_device *dev, u16 reg, u16 mask) hpi_set_bits() argument
169 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_set_bits()
170 value = hpi_read_word_nolock(dev, reg); hpi_set_bits()
171 hpi_write_word_nolock(dev, reg, value | mask); hpi_set_bits()
172 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_set_bits()
175 static void hpi_clear_bits(struct c67x00_device *dev, u16 reg, u16 mask) hpi_clear_bits() argument
180 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_clear_bits()
181 value = hpi_read_word_nolock(dev, reg); hpi_clear_bits()
182 hpi_write_word_nolock(dev, reg, value & ~mask); hpi_clear_bits()
183 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_clear_bits()
186 static u16 hpi_recv_mbox(struct c67x00_device *dev) hpi_recv_mbox() argument
191 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_recv_mbox()
192 value = hpi_read_reg(dev, HPI_MAILBOX); hpi_recv_mbox()
193 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_recv_mbox()
198 static u16 hpi_send_mbox(struct c67x00_device *dev, u16 value) hpi_send_mbox() argument
202 spin_lock_irqsave(&dev->hpi.lock, flags); hpi_send_mbox()
203 hpi_write_reg(dev, HPI_MAILBOX, value); hpi_send_mbox()
204 spin_unlock_irqrestore(&dev->hpi.lock, flags); hpi_send_mbox()
209 u16 c67x00_ll_hpi_status(struct c67x00_device *dev) c67x00_ll_hpi_status() argument
214 spin_lock_irqsave(&dev->hpi.lock, flags); c67x00_ll_hpi_status()
215 value = hpi_read_reg(dev, HPI_STATUS); c67x00_ll_hpi_status()
216 spin_unlock_irqrestore(&dev->hpi.lock, flags); c67x00_ll_hpi_status()
221 void c67x00_ll_hpi_reg_init(struct c67x00_device *dev) c67x00_ll_hpi_reg_init() argument
225 hpi_recv_mbox(dev); c67x00_ll_hpi_reg_init()
226 c67x00_ll_hpi_status(dev); c67x00_ll_hpi_reg_init()
227 hpi_write_word(dev, HPI_IRQ_ROUTING_REG, 0); c67x00_ll_hpi_reg_init()
230 hpi_write_word(dev, SIEMSG_REG(i), 0); c67x00_ll_hpi_reg_init()
231 hpi_read_word(dev, SIEMSG_REG(i)); c67x00_ll_hpi_reg_init()
237 hpi_set_bits(sie->dev, HPI_IRQ_ROUTING_REG, c67x00_ll_hpi_enable_sofeop()
243 hpi_clear_bits(sie->dev, HPI_IRQ_ROUTING_REG, c67x00_ll_hpi_disable_sofeop()
250 static inline int ll_recv_msg(struct c67x00_device *dev) ll_recv_msg() argument
254 res = wait_for_completion_timeout(&dev->hpi.lcp.msg_received, 5 * HZ); ll_recv_msg()
263 u16 c67x00_ll_fetch_siemsg(struct c67x00_device *dev, int sie_num) c67x00_ll_fetch_siemsg() argument
267 val = hpi_read_word(dev, SIEMSG_REG(sie_num)); c67x00_ll_fetch_siemsg()
269 hpi_write_word(dev, SIEMSG_REG(sie_num), 0); c67x00_ll_fetch_siemsg()
276 return hpi_read_word(sie->dev, USB_CTL_REG(sie->sie_num)); c67x00_ll_get_usb_ctl()
284 hpi_write_word(sie->dev, USB_STAT_REG(sie->sie_num), bits); c67x00_ll_usb_clear_status()
289 return hpi_read_word(sie->dev, USB_STAT_REG(sie->sie_num)); c67x00_ll_usb_get_status()
294 static int c67x00_comm_exec_int(struct c67x00_device *dev, u16 nr, c67x00_comm_exec_int() argument
299 mutex_lock(&dev->hpi.lcp.mutex); c67x00_comm_exec_int()
300 hpi_write_word(dev, COMM_INT_NUM, nr); c67x00_comm_exec_int()
302 hpi_write_word(dev, COMM_R(i), data->regs[i]); c67x00_comm_exec_int()
303 hpi_send_mbox(dev, COMM_EXEC_INT); c67x00_comm_exec_int()
304 rc = ll_recv_msg(dev); c67x00_comm_exec_int()
305 mutex_unlock(&dev->hpi.lcp.mutex); c67x00_comm_exec_int()
313 void c67x00_ll_set_husb_eot(struct c67x00_device *dev, u16 value) c67x00_ll_set_husb_eot() argument
315 mutex_lock(&dev->hpi.lcp.mutex); c67x00_ll_set_husb_eot()
316 hpi_write_word(dev, HUSB_pEOT, value); c67x00_ll_set_husb_eot()
317 mutex_unlock(&dev->hpi.lcp.mutex); c67x00_ll_set_husb_eot()
322 struct c67x00_device *dev = sie->dev; c67x00_ll_husb_sie_init() local
326 rc = c67x00_comm_exec_int(dev, HUSB_SIE_INIT_INT(sie->sie_num), &data); c67x00_ll_husb_sie_init()
332 struct c67x00_device *dev = sie->dev; c67x00_ll_husb_reset() local
338 rc = c67x00_comm_exec_int(dev, HUSB_RESET_INT, &data); c67x00_ll_husb_reset()
344 hpi_write_word(sie->dev, HUSB_SIE_pCurrentTDPtr(sie->sie_num), addr); c67x00_ll_husb_set_current_td()
349 return hpi_read_word(sie->dev, HUSB_SIE_pCurrentTDPtr(sie->sie_num)); c67x00_ll_husb_get_current_td()
354 return hpi_read_word(sie->dev, HOST_FRAME_REG(sie->sie_num)); c67x00_ll_husb_get_frame()
360 hpi_set_bits(sie->dev, USB_CTL_REG(sie->sie_num), HOST_MODE); c67x00_ll_husb_init_host_port()
365 if (!(hpi_read_word(sie->dev, USB_CTL_REG(sie->sie_num)) & HOST_MODE)) c67x00_ll_husb_init_host_port()
376 hpi_set_bits(sie->dev, HPI_IRQ_ROUTING_REG, c67x00_ll_husb_reset_port()
378 hpi_set_bits(sie->dev, HOST_IRQ_EN_REG(sie->sie_num), c67x00_ll_husb_reset_port()
382 hpi_set_bits(sie->dev, USB_CTL_REG(sie->sie_num), PORT_RES_EN(port)); c67x00_ll_husb_reset_port()
387 void c67x00_ll_irq(struct c67x00_device *dev, u16 int_status) c67x00_ll_irq() argument
392 dev->hpi.lcp.last_msg = hpi_recv_mbox(dev); c67x00_ll_irq()
393 complete(&dev->hpi.lcp.msg_received); c67x00_ll_irq()
398 int c67x00_ll_reset(struct c67x00_device *dev) c67x00_ll_reset() argument
402 mutex_lock(&dev->hpi.lcp.mutex); c67x00_ll_reset()
403 hpi_send_mbox(dev, COMM_RESET); c67x00_ll_reset()
404 rc = ll_recv_msg(dev); c67x00_ll_reset()
405 mutex_unlock(&dev->hpi.lcp.mutex); c67x00_ll_reset()
416 void c67x00_ll_write_mem_le16(struct c67x00_device *dev, u16 addr, c67x00_ll_write_mem_le16() argument
423 dev_err(&dev->pdev->dev, c67x00_ll_write_mem_le16()
431 tmp = hpi_read_word(dev, addr - 1); c67x00_ll_write_mem_le16()
433 hpi_write_word(dev, addr - 1, tmp); c67x00_ll_write_mem_le16()
438 hpi_write_words_le16(dev, addr, (__le16 *)buf, len / 2); c67x00_ll_write_mem_le16()
445 tmp = hpi_read_word(dev, addr); c67x00_ll_write_mem_le16()
447 hpi_write_word(dev, addr, tmp); c67x00_ll_write_mem_le16()
455 void c67x00_ll_read_mem_le16(struct c67x00_device *dev, u16 addr, c67x00_ll_read_mem_le16() argument
463 tmp = hpi_read_word(dev, addr - 1); c67x00_ll_read_mem_le16()
469 hpi_read_words_le16(dev, addr, (__le16 *)buf, len / 2); c67x00_ll_read_mem_le16()
476 tmp = hpi_read_word(dev, addr); c67x00_ll_read_mem_le16()
483 void c67x00_ll_init(struct c67x00_device *dev) c67x00_ll_init() argument
485 mutex_init(&dev->hpi.lcp.mutex); c67x00_ll_init()
486 init_completion(&dev->hpi.lcp.msg_received); c67x00_ll_init()
489 void c67x00_ll_release(struct c67x00_device *dev) c67x00_ll_release() argument
/linux-4.4.14/drivers/staging/comedi/drivers/
H A Dni_labpc_isadma.h10 void labpc_init_dma_chan(struct comedi_device *dev, unsigned int dma_chan);
11 void labpc_free_dma_chan(struct comedi_device *dev);
12 void labpc_setup_dma(struct comedi_device *dev, struct comedi_subdevice *s);
13 void labpc_drain_dma(struct comedi_device *dev);
14 void labpc_handle_dma_status(struct comedi_device *dev);
18 static inline void labpc_init_dma_chan(struct comedi_device *dev, labpc_init_dma_chan() argument
23 static inline void labpc_free_dma_chan(struct comedi_device *dev) labpc_free_dma_chan() argument
27 static inline void labpc_setup_dma(struct comedi_device *dev, labpc_setup_dma() argument
32 static inline void labpc_drain_dma(struct comedi_device *dev) labpc_drain_dma() argument
36 static inline void labpc_handle_dma_status(struct comedi_device *dev) labpc_handle_dma_status() argument
/linux-4.4.14/drivers/media/platform/s5p-mfc/
H A Ds5p_mfc_ctrl.c27 int s5p_mfc_alloc_firmware(struct s5p_mfc_dev *dev) s5p_mfc_alloc_firmware() argument
32 dev->fw_size = dev->variant->buf_size->fw; s5p_mfc_alloc_firmware()
34 if (dev->fw_virt_addr) { s5p_mfc_alloc_firmware()
39 dev->fw_virt_addr = dma_alloc_coherent(dev->mem_dev_l, dev->fw_size, s5p_mfc_alloc_firmware()
40 &dev->bank1, GFP_KERNEL); s5p_mfc_alloc_firmware()
42 if (!dev->fw_virt_addr) { s5p_mfc_alloc_firmware()
47 if (HAS_PORTNUM(dev) && IS_TWOPORT(dev)) { s5p_mfc_alloc_firmware()
48 bank2_virt = dma_alloc_coherent(dev->mem_dev_r, 1 << MFC_BASE_ALIGN_ORDER, s5p_mfc_alloc_firmware()
53 dma_free_coherent(dev->mem_dev_l, dev->fw_size, s5p_mfc_alloc_firmware()
54 dev->fw_virt_addr, dev->bank1); s5p_mfc_alloc_firmware()
55 dev->fw_virt_addr = NULL; s5p_mfc_alloc_firmware()
63 dev->bank2 = bank2_dma_addr - (1 << MFC_BASE_ALIGN_ORDER); s5p_mfc_alloc_firmware()
65 dma_free_coherent(dev->mem_dev_r, 1 << MFC_BASE_ALIGN_ORDER, s5p_mfc_alloc_firmware()
72 dev->bank2 = dev->bank1; s5p_mfc_alloc_firmware()
78 int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev) s5p_mfc_load_firmware() argument
88 if (!dev->variant->fw_name[i]) s5p_mfc_load_firmware()
91 dev->variant->fw_name[i], dev->v4l2_dev.dev); s5p_mfc_load_firmware()
93 dev->fw_ver = (enum s5p_mfc_fw_ver) i; s5p_mfc_load_firmware()
102 if (fw_blob->size > dev->fw_size) { s5p_mfc_load_firmware()
107 if (!dev->fw_virt_addr) { s5p_mfc_load_firmware()
112 memcpy(dev->fw_virt_addr, fw_blob->data, fw_blob->size); s5p_mfc_load_firmware()
120 int s5p_mfc_release_firmware(struct s5p_mfc_dev *dev) s5p_mfc_release_firmware() argument
124 if (!dev->fw_virt_addr) s5p_mfc_release_firmware()
126 dma_free_coherent(dev->mem_dev_l, dev->fw_size, dev->fw_virt_addr, s5p_mfc_release_firmware()
127 dev->bank1); s5p_mfc_release_firmware()
128 dev->fw_virt_addr = NULL; s5p_mfc_release_firmware()
132 static int s5p_mfc_bus_reset(struct s5p_mfc_dev *dev) s5p_mfc_bus_reset() argument
138 mfc_write(dev, 0x1, S5P_FIMV_MFC_BUS_RESET_CTRL); s5p_mfc_bus_reset()
146 status = mfc_read(dev, S5P_FIMV_MFC_BUS_RESET_CTRL); s5p_mfc_bus_reset()
152 int s5p_mfc_reset(struct s5p_mfc_dev *dev) s5p_mfc_reset() argument
160 if (IS_MFCV6_PLUS(dev)) { s5p_mfc_reset()
162 mfc_write(dev, 0, S5P_FIMV_RISC2HOST_CMD_V6); s5p_mfc_reset()
163 mfc_write(dev, 0, S5P_FIMV_HOST2RISC_CMD_V6); s5p_mfc_reset()
164 mfc_write(dev, 0, S5P_FIMV_FW_VERSION_V6); s5p_mfc_reset()
167 mfc_write(dev, 0, S5P_FIMV_REG_CLEAR_BEGIN_V6 + (i*4)); s5p_mfc_reset()
170 if (dev->risc_on) s5p_mfc_reset()
171 if (s5p_mfc_bus_reset(dev)) s5p_mfc_reset()
177 if ((!dev->risc_on) || (!IS_MFCV7_PLUS(dev))) s5p_mfc_reset()
178 mfc_write(dev, 0, S5P_FIMV_RISC_ON_V6); s5p_mfc_reset()
180 mfc_write(dev, 0x1FFF, S5P_FIMV_MFC_RESET_V6); s5p_mfc_reset()
181 mfc_write(dev, 0, S5P_FIMV_MFC_RESET_V6); s5p_mfc_reset()
185 mfc_write(dev, 0x3f6, S5P_FIMV_SW_RESET); s5p_mfc_reset()
187 mfc_write(dev, 0x3e2, S5P_FIMV_SW_RESET); s5p_mfc_reset()
198 mc_status = mfc_read(dev, S5P_FIMV_MC_STATUS); s5p_mfc_reset()
202 mfc_write(dev, 0x0, S5P_FIMV_SW_RESET); s5p_mfc_reset()
203 mfc_write(dev, 0x3fe, S5P_FIMV_SW_RESET); s5p_mfc_reset()
210 static inline void s5p_mfc_init_memctrl(struct s5p_mfc_dev *dev) s5p_mfc_init_memctrl() argument
212 if (IS_MFCV6_PLUS(dev)) { s5p_mfc_init_memctrl()
213 mfc_write(dev, dev->bank1, S5P_FIMV_RISC_BASE_ADDRESS_V6); s5p_mfc_init_memctrl()
214 mfc_debug(2, "Base Address : %pad\n", &dev->bank1); s5p_mfc_init_memctrl()
216 mfc_write(dev, dev->bank1, S5P_FIMV_MC_DRAMBASE_ADR_A); s5p_mfc_init_memctrl()
217 mfc_write(dev, dev->bank2, S5P_FIMV_MC_DRAMBASE_ADR_B); s5p_mfc_init_memctrl()
219 &dev->bank1, &dev->bank2); s5p_mfc_init_memctrl()
223 static inline void s5p_mfc_clear_cmds(struct s5p_mfc_dev *dev) s5p_mfc_clear_cmds() argument
225 if (IS_MFCV6_PLUS(dev)) { s5p_mfc_clear_cmds()
229 mfc_write(dev, 0xffffffff, S5P_FIMV_SI_CH0_INST_ID); s5p_mfc_clear_cmds()
230 mfc_write(dev, 0xffffffff, S5P_FIMV_SI_CH1_INST_ID); s5p_mfc_clear_cmds()
231 mfc_write(dev, 0, S5P_FIMV_RISC2HOST_CMD); s5p_mfc_clear_cmds()
232 mfc_write(dev, 0, S5P_FIMV_HOST2RISC_CMD); s5p_mfc_clear_cmds()
237 int s5p_mfc_init_hw(struct s5p_mfc_dev *dev) s5p_mfc_init_hw() argument
243 if (!dev->fw_virt_addr) { s5p_mfc_init_hw()
251 dev->risc_on = 0; s5p_mfc_init_hw()
252 ret = s5p_mfc_reset(dev); s5p_mfc_init_hw()
259 s5p_mfc_init_memctrl(dev); s5p_mfc_init_hw()
261 s5p_mfc_clear_cmds(dev); s5p_mfc_init_hw()
263 s5p_mfc_clean_dev_int_flags(dev); s5p_mfc_init_hw()
264 if (IS_MFCV6_PLUS(dev)) { s5p_mfc_init_hw()
265 dev->risc_on = 1; s5p_mfc_init_hw()
266 mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6); s5p_mfc_init_hw()
269 mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET); s5p_mfc_init_hw()
271 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_FW_STATUS_RET)) { s5p_mfc_init_hw()
273 s5p_mfc_reset(dev); s5p_mfc_init_hw()
277 s5p_mfc_clean_dev_int_flags(dev); s5p_mfc_init_hw()
279 ret = s5p_mfc_hw_call(dev->mfc_cmds, sys_init_cmd, dev); s5p_mfc_init_hw()
282 s5p_mfc_reset(dev); s5p_mfc_init_hw()
287 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_SYS_INIT_RET)) { s5p_mfc_init_hw()
289 s5p_mfc_reset(dev); s5p_mfc_init_hw()
293 dev->int_cond = 0; s5p_mfc_init_hw()
294 if (dev->int_err != 0 || dev->int_type != s5p_mfc_init_hw()
298 dev->int_err, dev->int_type); s5p_mfc_init_hw()
299 s5p_mfc_reset(dev); s5p_mfc_init_hw()
303 if (IS_MFCV6_PLUS(dev)) s5p_mfc_init_hw()
304 ver = mfc_read(dev, S5P_FIMV_FW_VERSION_V6); s5p_mfc_init_hw()
306 ver = mfc_read(dev, S5P_FIMV_FW_VERSION); s5p_mfc_init_hw()
317 void s5p_mfc_deinit_hw(struct s5p_mfc_dev *dev) s5p_mfc_deinit_hw() argument
321 s5p_mfc_reset(dev); s5p_mfc_deinit_hw()
322 s5p_mfc_hw_call_void(dev->mfc_ops, release_dev_context_buffer, dev); s5p_mfc_deinit_hw()
327 int s5p_mfc_sleep(struct s5p_mfc_dev *dev) s5p_mfc_sleep() argument
333 s5p_mfc_clean_dev_int_flags(dev); s5p_mfc_sleep()
334 ret = s5p_mfc_hw_call(dev->mfc_cmds, sleep_cmd, dev); s5p_mfc_sleep()
339 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_SLEEP_RET)) { s5p_mfc_sleep()
344 dev->int_cond = 0; s5p_mfc_sleep()
345 if (dev->int_err != 0 || dev->int_type != s5p_mfc_sleep()
348 mfc_err("Failed to sleep - error: %d int: %d\n", dev->int_err, s5p_mfc_sleep()
349 dev->int_type); s5p_mfc_sleep()
356 static int s5p_mfc_v8_wait_wakeup(struct s5p_mfc_dev *dev) s5p_mfc_v8_wait_wakeup() argument
361 dev->risc_on = 1; s5p_mfc_v8_wait_wakeup()
362 mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6); s5p_mfc_v8_wait_wakeup()
364 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_FW_STATUS_RET)) { s5p_mfc_v8_wait_wakeup()
369 ret = s5p_mfc_hw_call(dev->mfc_cmds, wakeup_cmd, dev); s5p_mfc_v8_wait_wakeup()
375 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_WAKEUP_RET)) { s5p_mfc_v8_wait_wakeup()
382 static int s5p_mfc_wait_wakeup(struct s5p_mfc_dev *dev) s5p_mfc_wait_wakeup() argument
387 ret = s5p_mfc_hw_call(dev->mfc_cmds, wakeup_cmd, dev); s5p_mfc_wait_wakeup()
394 if (IS_MFCV6_PLUS(dev)) { s5p_mfc_wait_wakeup()
395 dev->risc_on = 1; s5p_mfc_wait_wakeup()
396 mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6); s5p_mfc_wait_wakeup()
398 mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET); s5p_mfc_wait_wakeup()
401 if (s5p_mfc_wait_for_done_dev(dev, S5P_MFC_R2H_CMD_WAKEUP_RET)) { s5p_mfc_wait_wakeup()
408 int s5p_mfc_wakeup(struct s5p_mfc_dev *dev) s5p_mfc_wakeup() argument
416 dev->risc_on = 0; s5p_mfc_wakeup()
417 ret = s5p_mfc_reset(dev); s5p_mfc_wakeup()
425 s5p_mfc_init_memctrl(dev); s5p_mfc_wakeup()
427 s5p_mfc_clear_cmds(dev); s5p_mfc_wakeup()
428 s5p_mfc_clean_dev_int_flags(dev); s5p_mfc_wakeup()
430 if (IS_MFCV8(dev)) s5p_mfc_wakeup()
431 ret = s5p_mfc_v8_wait_wakeup(dev); s5p_mfc_wakeup()
433 ret = s5p_mfc_wait_wakeup(dev); s5p_mfc_wakeup()
439 dev->int_cond = 0; s5p_mfc_wakeup()
440 if (dev->int_err != 0 || dev->int_type != s5p_mfc_wakeup()
443 mfc_err("Failed to wakeup - error: %d int: %d\n", dev->int_err, s5p_mfc_wakeup()
444 dev->int_type); s5p_mfc_wakeup()
451 int s5p_mfc_open_mfc_inst(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx) s5p_mfc_open_mfc_inst() argument
455 ret = s5p_mfc_hw_call(dev->mfc_ops, alloc_instance_buffer, ctx); s5p_mfc_open_mfc_inst()
462 ret = s5p_mfc_hw_call(dev->mfc_ops, s5p_mfc_open_mfc_inst()
471 s5p_mfc_hw_call_void(dev->mfc_ops, try_run, dev); s5p_mfc_open_mfc_inst()
485 s5p_mfc_hw_call_void(dev->mfc_ops, release_dec_desc_buffer, ctx); s5p_mfc_open_mfc_inst()
487 s5p_mfc_hw_call_void(dev->mfc_ops, release_instance_buffer, ctx); s5p_mfc_open_mfc_inst()
492 void s5p_mfc_close_mfc_inst(struct s5p_mfc_dev *dev, struct s5p_mfc_ctx *ctx) s5p_mfc_close_mfc_inst() argument
496 s5p_mfc_hw_call_void(dev->mfc_ops, try_run, dev); s5p_mfc_close_mfc_inst()
503 s5p_mfc_hw_call_void(dev->mfc_ops, release_codec_buffers, ctx); s5p_mfc_close_mfc_inst()
504 s5p_mfc_hw_call_void(dev->mfc_ops, release_instance_buffer, ctx); s5p_mfc_close_mfc_inst()
506 s5p_mfc_hw_call_void(dev->mfc_ops, release_dec_desc_buffer, ctx); s5p_mfc_close_mfc_inst()
/linux-4.4.14/drivers/input/misc/
H A Dcm109.c297 static void report_key(struct cm109_dev *dev, int key) report_key() argument
299 struct input_dev *idev = dev->idev; report_key()
301 if (dev->key_code >= 0) { report_key()
303 input_report_key(idev, dev->key_code, 0); report_key()
306 dev->key_code = key; report_key()
319 static void cm109_submit_buzz_toggle(struct cm109_dev *dev) cm109_submit_buzz_toggle() argument
323 if (dev->buzzer_state) cm109_submit_buzz_toggle()
324 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON; cm109_submit_buzz_toggle()
326 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON; cm109_submit_buzz_toggle()
328 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); cm109_submit_buzz_toggle()
330 dev_err(&dev->intf->dev, cm109_submit_buzz_toggle()
340 struct cm109_dev *dev = urb->context; cm109_urb_irq_callback() local
344 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n", cm109_urb_irq_callback()
345 dev->irq_data->byte[0], cm109_urb_irq_callback()
346 dev->irq_data->byte[1], cm109_urb_irq_callback()
347 dev->irq_data->byte[2], cm109_urb_irq_callback()
348 dev->irq_data->byte[3], cm109_urb_irq_callback()
349 dev->keybit); cm109_urb_irq_callback()
354 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n", cm109_urb_irq_callback()
360 if (dev->irq_data->byte[HID_IR0] & 0x0f) { cm109_urb_irq_callback()
361 const int code = (dev->irq_data->byte[HID_IR0] & 0x0f); cm109_urb_irq_callback()
362 report_key(dev, dev->keymap[0xff + code]); cm109_urb_irq_callback()
366 if (dev->keybit == 0xf) { cm109_urb_irq_callback()
369 if ((dev->gpi & 0xf0) == (dev->irq_data->byte[HID_IR1] & 0xf0)) cm109_urb_irq_callback()
372 dev->gpi = dev->irq_data->byte[HID_IR1] & 0xf0; cm109_urb_irq_callback()
373 dev->keybit = 0x1; cm109_urb_irq_callback()
375 report_key(dev, dev->keymap[dev->irq_data->byte[HID_IR1]]); cm109_urb_irq_callback()
377 dev->keybit <<= 1; cm109_urb_irq_callback()
378 if (dev->keybit > 0x8) cm109_urb_irq_callback()
379 dev->keybit = 0xf; cm109_urb_irq_callback()
384 spin_lock(&dev->ctl_submit_lock); cm109_urb_irq_callback()
386 dev->irq_urb_pending = 0; cm109_urb_irq_callback()
388 if (likely(!dev->shutdown)) { cm109_urb_irq_callback()
390 if (dev->buzzer_state) cm109_urb_irq_callback()
391 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON; cm109_urb_irq_callback()
393 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON; cm109_urb_irq_callback()
395 dev->ctl_data->byte[HID_OR1] = dev->keybit; cm109_urb_irq_callback()
396 dev->ctl_data->byte[HID_OR2] = dev->keybit; cm109_urb_irq_callback()
398 dev->buzzer_pending = 0; cm109_urb_irq_callback()
399 dev->ctl_urb_pending = 1; cm109_urb_irq_callback()
401 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC); cm109_urb_irq_callback()
403 dev_err(&dev->intf->dev, cm109_urb_irq_callback()
408 spin_unlock(&dev->ctl_submit_lock); cm109_urb_irq_callback()
413 struct cm109_dev *dev = urb->context; cm109_urb_ctl_callback() local
417 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n", cm109_urb_ctl_callback()
418 dev->ctl_data->byte[0], cm109_urb_ctl_callback()
419 dev->ctl_data->byte[1], cm109_urb_ctl_callback()
420 dev->ctl_data->byte[2], cm109_urb_ctl_callback()
421 dev->ctl_data->byte[3]); cm109_urb_ctl_callback()
426 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n", cm109_urb_ctl_callback()
430 spin_lock(&dev->ctl_submit_lock); cm109_urb_ctl_callback()
432 dev->ctl_urb_pending = 0; cm109_urb_ctl_callback()
434 if (likely(!dev->shutdown)) { cm109_urb_ctl_callback()
436 if (dev->buzzer_pending || status) { cm109_urb_ctl_callback()
437 dev->buzzer_pending = 0; cm109_urb_ctl_callback()
438 dev->ctl_urb_pending = 1; cm109_urb_ctl_callback()
439 cm109_submit_buzz_toggle(dev); cm109_urb_ctl_callback()
440 } else if (likely(!dev->irq_urb_pending)) { cm109_urb_ctl_callback()
442 dev->irq_urb_pending = 1; cm109_urb_ctl_callback()
443 error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC); cm109_urb_ctl_callback()
445 dev_err(&dev->intf->dev, cm109_urb_ctl_callback()
451 spin_unlock(&dev->ctl_submit_lock); cm109_urb_ctl_callback()
454 static void cm109_toggle_buzzer_async(struct cm109_dev *dev) cm109_toggle_buzzer_async() argument
458 spin_lock_irqsave(&dev->ctl_submit_lock, flags); cm109_toggle_buzzer_async()
460 if (dev->ctl_urb_pending) { cm109_toggle_buzzer_async()
462 dev->buzzer_pending = 1; cm109_toggle_buzzer_async()
464 dev->ctl_urb_pending = 1; cm109_toggle_buzzer_async()
465 cm109_submit_buzz_toggle(dev); cm109_toggle_buzzer_async()
468 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags); cm109_toggle_buzzer_async()
471 static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on) cm109_toggle_buzzer_sync() argument
476 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON; cm109_toggle_buzzer_sync()
478 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON; cm109_toggle_buzzer_sync()
480 error = usb_control_msg(dev->udev, cm109_toggle_buzzer_sync()
481 usb_sndctrlpipe(dev->udev, 0), cm109_toggle_buzzer_sync()
482 dev->ctl_req->bRequest, cm109_toggle_buzzer_sync()
483 dev->ctl_req->bRequestType, cm109_toggle_buzzer_sync()
484 le16_to_cpu(dev->ctl_req->wValue), cm109_toggle_buzzer_sync()
485 le16_to_cpu(dev->ctl_req->wIndex), cm109_toggle_buzzer_sync()
486 dev->ctl_data, cm109_toggle_buzzer_sync()
489 dev_err(&dev->intf->dev, "%s: usb_control_msg() failed %d\n", cm109_toggle_buzzer_sync()
493 static void cm109_stop_traffic(struct cm109_dev *dev) cm109_stop_traffic() argument
495 dev->shutdown = 1; cm109_stop_traffic()
501 usb_kill_urb(dev->urb_ctl); cm109_stop_traffic()
502 usb_kill_urb(dev->urb_irq); cm109_stop_traffic()
504 cm109_toggle_buzzer_sync(dev, 0); cm109_stop_traffic()
506 dev->shutdown = 0; cm109_stop_traffic()
510 static void cm109_restore_state(struct cm109_dev *dev) cm109_restore_state() argument
512 if (dev->open) { cm109_restore_state()
517 cm109_toggle_buzzer_async(dev); cm109_restore_state()
527 struct cm109_dev *dev = input_get_drvdata(idev); cm109_input_open() local
530 error = usb_autopm_get_interface(dev->intf); cm109_input_open()
532 dev_err(&idev->dev, "%s - cannot autoresume, result %d\n", cm109_input_open()
537 mutex_lock(&dev->pm_mutex); cm109_input_open()
539 dev->buzzer_state = 0; cm109_input_open()
540 dev->key_code = -1; /* no keys pressed */ cm109_input_open()
541 dev->keybit = 0xf; cm109_input_open()
544 dev->ctl_data->byte[HID_OR0] = HID_OR_GPO_BUZ_SPDIF; cm109_input_open()
545 dev->ctl_data->byte[HID_OR1] = dev->keybit; cm109_input_open()
546 dev->ctl_data->byte[HID_OR2] = dev->keybit; cm109_input_open()
547 dev->ctl_data->byte[HID_OR3] = 0x00; cm109_input_open()
549 error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL); cm109_input_open()
551 dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n", cm109_input_open()
554 dev->open = 1; cm109_input_open()
556 mutex_unlock(&dev->pm_mutex); cm109_input_open()
559 usb_autopm_put_interface(dev->intf); cm109_input_open()
566 struct cm109_dev *dev = input_get_drvdata(idev); cm109_input_close() local
568 mutex_lock(&dev->pm_mutex); cm109_input_close()
575 cm109_stop_traffic(dev); cm109_input_close()
576 dev->open = 0; cm109_input_close()
578 mutex_unlock(&dev->pm_mutex); cm109_input_close()
580 usb_autopm_put_interface(dev->intf); cm109_input_close()
586 struct cm109_dev *dev = input_get_drvdata(idev); cm109_input_ev() local
588 dev_dbg(&dev->intf->dev, cm109_input_ev()
597 dev->buzzer_state = !!value; cm109_input_ev()
598 if (!dev->resetting) cm109_input_ev()
599 cm109_toggle_buzzer_async(dev); cm109_input_ev()
641 static void cm109_usb_cleanup(struct cm109_dev *dev) cm109_usb_cleanup() argument
643 kfree(dev->ctl_req); cm109_usb_cleanup()
644 if (dev->ctl_data) cm109_usb_cleanup()
645 usb_free_coherent(dev->udev, USB_PKT_LEN, cm109_usb_cleanup()
646 dev->ctl_data, dev->ctl_dma); cm109_usb_cleanup()
647 if (dev->irq_data) cm109_usb_cleanup()
648 usb_free_coherent(dev->udev, USB_PKT_LEN, cm109_usb_cleanup()
649 dev->irq_data, dev->irq_dma); cm109_usb_cleanup()
651 usb_free_urb(dev->urb_irq); /* parameter validation in core/urb */ cm109_usb_cleanup()
652 usb_free_urb(dev->urb_ctl); /* parameter validation in core/urb */ cm109_usb_cleanup()
653 kfree(dev); cm109_usb_cleanup()
658 struct cm109_dev *dev = usb_get_intfdata(interface); cm109_usb_disconnect() local
661 input_unregister_device(dev->idev); cm109_usb_disconnect()
662 cm109_usb_cleanup(dev); cm109_usb_disconnect()
672 struct cm109_dev *dev; cm109_usb_probe() local
683 dev = kzalloc(sizeof(*dev), GFP_KERNEL); cm109_usb_probe()
684 if (!dev) cm109_usb_probe()
687 spin_lock_init(&dev->ctl_submit_lock); cm109_usb_probe()
688 mutex_init(&dev->pm_mutex); cm109_usb_probe()
690 dev->udev = udev; cm109_usb_probe()
691 dev->intf = intf; cm109_usb_probe()
693 dev->idev = input_dev = input_allocate_device(); cm109_usb_probe()
698 dev->irq_data = usb_alloc_coherent(udev, USB_PKT_LEN, cm109_usb_probe()
699 GFP_KERNEL, &dev->irq_dma); cm109_usb_probe()
700 if (!dev->irq_data) cm109_usb_probe()
703 dev->ctl_data = usb_alloc_coherent(udev, USB_PKT_LEN, cm109_usb_probe()
704 GFP_KERNEL, &dev->ctl_dma); cm109_usb_probe()
705 if (!dev->ctl_data) cm109_usb_probe()
708 dev->ctl_req = kmalloc(sizeof(*(dev->ctl_req)), GFP_KERNEL); cm109_usb_probe()
709 if (!dev->ctl_req) cm109_usb_probe()
713 dev->urb_irq = usb_alloc_urb(0, GFP_KERNEL); cm109_usb_probe()
714 if (!dev->urb_irq) cm109_usb_probe()
717 dev->urb_ctl = usb_alloc_urb(0, GFP_KERNEL); cm109_usb_probe()
718 if (!dev->urb_ctl) cm109_usb_probe()
725 dev_err(&intf->dev, "invalid payload size %d, expected %d\n", cm109_usb_probe()
729 usb_fill_int_urb(dev->urb_irq, udev, pipe, dev->irq_data, cm109_usb_probe()
731 cm109_urb_irq_callback, dev, endpoint->bInterval); cm109_usb_probe()
732 dev->urb_irq->transfer_dma = dev->irq_dma; cm109_usb_probe()
733 dev->urb_irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; cm109_usb_probe()
734 dev->urb_irq->dev = udev; cm109_usb_probe()
737 dev->ctl_req->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | cm109_usb_probe()
739 dev->ctl_req->bRequest = USB_REQ_SET_CONFIGURATION; cm109_usb_probe()
740 dev->ctl_req->wValue = cpu_to_le16(0x200); cm109_usb_probe()
741 dev->ctl_req->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber); cm109_usb_probe()
742 dev->ctl_req->wLength = cpu_to_le16(USB_PKT_LEN); cm109_usb_probe()
744 usb_fill_control_urb(dev->urb_ctl, udev, usb_sndctrlpipe(udev, 0), cm109_usb_probe()
745 (void *)dev->ctl_req, dev->ctl_data, USB_PKT_LEN, cm109_usb_probe()
746 cm109_urb_ctl_callback, dev); cm109_usb_probe()
747 dev->urb_ctl->transfer_dma = dev->ctl_dma; cm109_usb_probe()
748 dev->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; cm109_usb_probe()
749 dev->urb_ctl->dev = udev; cm109_usb_probe()
752 usb_make_path(udev, dev->phys, sizeof(dev->phys)); cm109_usb_probe()
753 strlcat(dev->phys, "/input0", sizeof(dev->phys)); cm109_usb_probe()
757 input_dev->phys = dev->phys; cm109_usb_probe()
759 input_dev->dev.parent = &intf->dev; cm109_usb_probe()
761 input_set_drvdata(input_dev, dev); cm109_usb_probe()
766 input_dev->keycode = dev->keymap; cm109_usb_probe()
768 input_dev->keycodemax = ARRAY_SIZE(dev->keymap); cm109_usb_probe()
776 dev->keymap[i] = k; cm109_usb_probe()
781 error = input_register_device(dev->idev); cm109_usb_probe()
785 usb_set_intfdata(intf, dev); cm109_usb_probe()
791 cm109_usb_cleanup(dev); cm109_usb_probe()
797 struct cm109_dev *dev = usb_get_intfdata(intf); cm109_usb_suspend() local
799 dev_info(&intf->dev, "cm109: usb_suspend (event=%d)\n", message.event); cm109_usb_suspend()
801 mutex_lock(&dev->pm_mutex); cm109_usb_suspend()
802 cm109_stop_traffic(dev); cm109_usb_suspend()
803 mutex_unlock(&dev->pm_mutex); cm109_usb_suspend()
810 struct cm109_dev *dev = usb_get_intfdata(intf); cm109_usb_resume() local
812 dev_info(&intf->dev, "cm109: usb_resume\n"); cm109_usb_resume()
814 mutex_lock(&dev->pm_mutex); cm109_usb_resume()
815 cm109_restore_state(dev); cm109_usb_resume()
816 mutex_unlock(&dev->pm_mutex); cm109_usb_resume()
823 struct cm109_dev *dev = usb_get_intfdata(intf); cm109_usb_pre_reset() local
825 mutex_lock(&dev->pm_mutex); cm109_usb_pre_reset()
831 dev->resetting = 1; cm109_usb_pre_reset()
834 cm109_stop_traffic(dev); cm109_usb_pre_reset()
841 struct cm109_dev *dev = usb_get_intfdata(intf); cm109_usb_post_reset() local
843 dev->resetting = 0; cm109_usb_post_reset()
846 cm109_restore_state(dev); cm109_usb_post_reset()
848 mutex_unlock(&dev->pm_mutex); cm109_usb_post_reset()
/linux-4.4.14/drivers/media/pci/cx25821/
H A Dcx25821-audio-upstream.c47 static int cx25821_sram_channel_setup_upstream_audio(struct cx25821_dev *dev, cx25821_sram_channel_setup_upstream_audio() argument
102 static __le32 *cx25821_risc_field_upstream_audio(struct cx25821_dev *dev, cx25821_risc_field_upstream_audio() argument
110 dev->channels[dev->_audio_upstream_channel].sram_channels; cx25821_risc_field_upstream_audio()
136 static int cx25821_risc_buffer_upstream_audio(struct cx25821_dev *dev, cx25821_risc_buffer_upstream_audio() argument
149 rp = dev->_risc_virt_addr; cx25821_risc_buffer_upstream_audio()
168 dev->_risc_phys_start_addr + cx25821_risc_buffer_upstream_audio()
172 dev->_risc_phys_start_addr + cx25821_risc_buffer_upstream_audio()
177 rp = cx25821_risc_field_upstream_audio(dev, rp, cx25821_risc_buffer_upstream_audio()
178 dev->_audiodata_buf_phys_addr + databuf_offset, cx25821_risc_buffer_upstream_audio()
193 rp = dev->_risc_virt_addr + RISC_SYNC_INSTRUCTION_SIZE / 4 + cx25821_risc_buffer_upstream_audio()
200 static void cx25821_free_memory_audio(struct cx25821_dev *dev) cx25821_free_memory_audio() argument
202 if (dev->_risc_virt_addr) { cx25821_free_memory_audio()
203 pci_free_consistent(dev->pci, dev->_audiorisc_size, cx25821_free_memory_audio()
204 dev->_risc_virt_addr, dev->_risc_phys_addr); cx25821_free_memory_audio()
205 dev->_risc_virt_addr = NULL; cx25821_free_memory_audio()
208 if (dev->_audiodata_buf_virt_addr) { cx25821_free_memory_audio()
209 pci_free_consistent(dev->pci, dev->_audiodata_buf_size, cx25821_free_memory_audio()
210 dev->_audiodata_buf_virt_addr, cx25821_free_memory_audio()
211 dev->_audiodata_buf_phys_addr); cx25821_free_memory_audio()
212 dev->_audiodata_buf_virt_addr = NULL; cx25821_free_memory_audio()
216 void cx25821_stop_upstream_audio(struct cx25821_dev *dev) cx25821_stop_upstream_audio() argument
219 dev->channels[AUDIO_UPSTREAM_SRAM_CHANNEL_B].sram_channels; cx25821_stop_upstream_audio()
222 if (!dev->_audio_is_running) { cx25821_stop_upstream_audio()
236 if (dev->_audiodata_buf_virt_addr) cx25821_stop_upstream_audio()
237 memset(dev->_audiodata_buf_virt_addr, 0, cx25821_stop_upstream_audio()
238 dev->_audiodata_buf_size); cx25821_stop_upstream_audio()
240 dev->_audio_is_running = 0; cx25821_stop_upstream_audio()
241 dev->_is_first_audio_frame = 0; cx25821_stop_upstream_audio()
242 dev->_audioframe_count = 0; cx25821_stop_upstream_audio()
243 dev->_audiofile_status = END_OF_FILE; cx25821_stop_upstream_audio()
245 kfree(dev->_irq_audio_queues); cx25821_stop_upstream_audio()
246 dev->_irq_audio_queues = NULL; cx25821_stop_upstream_audio()
248 kfree(dev->_audiofilename); cx25821_stop_upstream_audio()
251 void cx25821_free_mem_upstream_audio(struct cx25821_dev *dev) cx25821_free_mem_upstream_audio() argument
253 if (dev->_audio_is_running) cx25821_free_mem_upstream_audio()
254 cx25821_stop_upstream_audio(dev); cx25821_free_mem_upstream_audio()
256 cx25821_free_memory_audio(dev); cx25821_free_mem_upstream_audio()
259 static int cx25821_get_audio_data(struct cx25821_dev *dev, cx25821_get_audio_data() argument
263 int frame_index_temp = dev->_audioframe_index; cx25821_get_audio_data()
268 loff_t file_offset = dev->_audioframe_count * frame_size; cx25821_get_audio_data()
271 if (dev->_audiofile_status == END_OF_FILE) cx25821_get_audio_data()
274 file = filp_open(dev->_audiofilename, O_RDONLY | O_LARGEFILE, 0); cx25821_get_audio_data()
277 __func__, dev->_audiofilename, -PTR_ERR(file)); cx25821_get_audio_data()
281 if (dev->_audiodata_buf_virt_addr) cx25821_get_audio_data()
282 p = (char *)dev->_audiodata_buf_virt_addr + frame_offset; cx25821_get_audio_data()
284 for (i = 0; i < dev->_audio_lines_count; i++) { cx25821_get_audio_data()
289 dev->_audiofile_status = END_OF_FILE; cx25821_get_audio_data()
293 dev->_audiofile_status = IN_PROGRESS; cx25821_get_audio_data()
300 dev->_audioframe_count++; cx25821_get_audio_data()
308 struct cx25821_dev *dev = container_of(work, struct cx25821_dev, cx25821_audioups_handler() local
311 if (!dev) { cx25821_audioups_handler()
317 cx25821_get_audio_data(dev, dev->channels[dev->_audio_upstream_channel]. cx25821_audioups_handler()
321 static int cx25821_openfile_audio(struct cx25821_dev *dev, cx25821_openfile_audio() argument
324 char *p = (void *)dev->_audiodata_buf_virt_addr; cx25821_openfile_audio()
329 file = filp_open(dev->_audiofilename, O_RDONLY | O_LARGEFILE, 0); cx25821_openfile_audio()
332 __func__, dev->_audiofilename, PTR_ERR(file)); cx25821_openfile_audio()
337 for (i = 0; i < dev->_audio_lines_count; i++) { cx25821_openfile_audio()
345 dev->_audiofile_status = END_OF_FILE; cx25821_openfile_audio()
355 dev->_audioframe_count++; cx25821_openfile_audio()
357 dev->_audiofile_status = IN_PROGRESS; cx25821_openfile_audio()
362 static int cx25821_audio_upstream_buffer_prepare(struct cx25821_dev *dev, cx25821_audio_upstream_buffer_prepare() argument
370 cx25821_free_memory_audio(dev); cx25821_audio_upstream_buffer_prepare()
372 dev->_risc_virt_addr = pci_alloc_consistent(dev->pci, cx25821_audio_upstream_buffer_prepare()
373 dev->audio_upstream_riscbuf_size, &dma_addr); cx25821_audio_upstream_buffer_prepare()
374 dev->_risc_virt_start_addr = dev->_risc_virt_addr; cx25821_audio_upstream_buffer_prepare()
375 dev->_risc_phys_start_addr = dma_addr; cx25821_audio_upstream_buffer_prepare()
376 dev->_risc_phys_addr = dma_addr; cx25821_audio_upstream_buffer_prepare()
377 dev->_audiorisc_size = dev->audio_upstream_riscbuf_size; cx25821_audio_upstream_buffer_prepare()
379 if (!dev->_risc_virt_addr) { cx25821_audio_upstream_buffer_prepare()
385 memset(dev->_risc_virt_addr, 0, dev->_audiorisc_size); cx25821_audio_upstream_buffer_prepare()
388 dev->_audiodata_buf_virt_addr = pci_alloc_consistent(dev->pci, cx25821_audio_upstream_buffer_prepare()
389 dev->audio_upstream_databuf_size, &data_dma_addr); cx25821_audio_upstream_buffer_prepare()
390 dev->_audiodata_buf_phys_addr = data_dma_addr; cx25821_audio_upstream_buffer_prepare()
391 dev->_audiodata_buf_size = dev->audio_upstream_databuf_size; cx25821_audio_upstream_buffer_prepare()
393 if (!dev->_audiodata_buf_virt_addr) { cx25821_audio_upstream_buffer_prepare()
399 memset(dev->_audiodata_buf_virt_addr, 0, dev->_audiodata_buf_size); cx25821_audio_upstream_buffer_prepare()
401 ret = cx25821_openfile_audio(dev, sram_ch); cx25821_audio_upstream_buffer_prepare()
406 ret = cx25821_risc_buffer_upstream_audio(dev, dev->pci, bpl, cx25821_audio_upstream_buffer_prepare()
407 dev->_audio_lines_count); cx25821_audio_upstream_buffer_prepare()
420 static int cx25821_audio_upstream_irq(struct cx25821_dev *dev, int chan_num, cx25821_audio_upstream_irq() argument
425 const struct sram_channel *channel = dev->channels[chan_num].sram_channels; cx25821_audio_upstream_irq()
438 spin_lock(&dev->slock); cx25821_audio_upstream_irq()
440 while (prog_cnt != dev->_last_index_irq) { cx25821_audio_upstream_irq()
442 if (dev->_last_index_irq < (NUMBER_OF_PROGRAMS - 1)) cx25821_audio_upstream_irq()
443 dev->_last_index_irq++; cx25821_audio_upstream_irq()
445 dev->_last_index_irq = 0; cx25821_audio_upstream_irq()
447 dev->_audioframe_index = dev->_last_index_irq; cx25821_audio_upstream_irq()
449 queue_work(dev->_irq_audio_queues, cx25821_audio_upstream_irq()
450 &dev->_audio_work_entry); cx25821_audio_upstream_irq()
453 if (dev->_is_first_audio_frame) { cx25821_audio_upstream_irq()
454 dev->_is_first_audio_frame = 0; cx25821_audio_upstream_irq()
456 if (dev->_risc_virt_start_addr != NULL) { cx25821_audio_upstream_irq()
458 dev->_risc_phys_start_addr + cx25821_audio_upstream_irq()
462 rp = cx25821_risc_field_upstream_audio(dev, cx25821_audio_upstream_irq()
463 dev->_risc_virt_start_addr + 1, cx25821_audio_upstream_irq()
464 dev->_audiodata_buf_phys_addr, cx25821_audio_upstream_irq()
481 spin_unlock(&dev->slock); cx25821_audio_upstream_irq()
500 if (dev->_audiofile_status == END_OF_FILE) { cx25821_audio_upstream_irq()
502 dev->_audioframe_count); cx25821_audio_upstream_irq()
514 struct cx25821_dev *dev = dev_id; cx25821_upstream_irq_audio() local
519 if (!dev) cx25821_upstream_irq_audio()
522 sram_ch = dev->channels[dev->_audio_upstream_channel].sram_channels; cx25821_upstream_irq_audio()
528 handled = cx25821_audio_upstream_irq(dev, cx25821_upstream_irq_audio()
529 dev->_audio_upstream_channel, audio_status); cx25821_upstream_irq_audio()
533 cx25821_stop_upstream_audio(dev); cx25821_upstream_irq_audio()
540 static void cx25821_wait_fifo_enable(struct cx25821_dev *dev, cx25821_wait_fifo_enable() argument
564 static int cx25821_start_audio_dma_upstream(struct cx25821_dev *dev, cx25821_start_audio_dma_upstream() argument
572 cx_write(sram_ch->cmds_start + 0, dev->_risc_phys_addr); cx25821_start_audio_dma_upstream()
602 err = request_irq(dev->pci->irq, cx25821_upstream_irq_audio, cx25821_start_audio_dma_upstream()
603 IRQF_SHARED, dev->name, dev); cx25821_start_audio_dma_upstream()
605 pr_err("%s: can't get upstream IRQ %d\n", dev->name, cx25821_start_audio_dma_upstream()
606 dev->pci->irq); cx25821_start_audio_dma_upstream()
614 dev->_audio_is_running = 1; cx25821_start_audio_dma_upstream()
615 dev->_is_first_audio_frame = 1; cx25821_start_audio_dma_upstream()
618 cx25821_wait_fifo_enable(dev, sram_ch); cx25821_start_audio_dma_upstream()
623 cx25821_dev_unregister(dev); cx25821_start_audio_dma_upstream()
627 int cx25821_audio_upstream_init(struct cx25821_dev *dev, int channel_select) cx25821_audio_upstream_init() argument
632 if (dev->_audio_is_running) { cx25821_audio_upstream_init()
637 dev->_audio_upstream_channel = channel_select; cx25821_audio_upstream_init()
638 sram_ch = dev->channels[channel_select].sram_channels; cx25821_audio_upstream_init()
641 INIT_WORK(&dev->_audio_work_entry, cx25821_audioups_handler); cx25821_audio_upstream_init()
642 dev->_irq_audio_queues = cx25821_audio_upstream_init()
645 if (!dev->_irq_audio_queues) { cx25821_audio_upstream_init()
651 dev->_last_index_irq = 0; cx25821_audio_upstream_init()
652 dev->_audio_is_running = 0; cx25821_audio_upstream_init()
653 dev->_audioframe_count = 0; cx25821_audio_upstream_init()
654 dev->_audiofile_status = RESET_STATUS; cx25821_audio_upstream_init()
655 dev->_audio_lines_count = LINES_PER_AUDIO_BUFFER; cx25821_audio_upstream_init()
658 if ((dev->input_audiofilename) && cx25821_audio_upstream_init()
659 (strcmp(dev->input_audiofilename, "") != 0)) cx25821_audio_upstream_init()
660 dev->_audiofilename = kstrdup(dev->input_audiofilename, cx25821_audio_upstream_init()
663 dev->_audiofilename = kstrdup(_defaultAudioName, cx25821_audio_upstream_init()
666 if (!dev->_audiofilename) { cx25821_audio_upstream_init()
671 cx25821_sram_channel_setup_upstream_audio(dev, sram_ch, cx25821_audio_upstream_init()
674 dev->audio_upstream_riscbuf_size = cx25821_audio_upstream_init()
677 dev->audio_upstream_databuf_size = AUDIO_DATA_BUF_SZ * NUM_AUDIO_PROGS; cx25821_audio_upstream_init()
680 err = cx25821_audio_upstream_buffer_prepare(dev, sram_ch, cx25821_audio_upstream_init()
684 dev->name); cx25821_audio_upstream_init()
688 cx25821_start_audio_dma_upstream(dev, sram_ch); cx25821_audio_upstream_init()
693 cx25821_dev_unregister(dev); cx25821_audio_upstream_init()
/linux-4.4.14/sound/soc/dwc/
H A Ddesignware_i2s.c96 struct device *dev; member in struct:dw_i2s_dev
115 static inline void i2s_disable_channels(struct dw_i2s_dev *dev, u32 stream) i2s_disable_channels() argument
121 i2s_write_reg(dev->i2s_base, TER(i), 0); i2s_disable_channels()
124 i2s_write_reg(dev->i2s_base, RER(i), 0); i2s_disable_channels()
128 static inline void i2s_clear_irqs(struct dw_i2s_dev *dev, u32 stream) i2s_clear_irqs() argument
134 i2s_read_reg(dev->i2s_base, TOR(i)); i2s_clear_irqs()
137 i2s_read_reg(dev->i2s_base, ROR(i)); i2s_clear_irqs()
141 static void i2s_start(struct dw_i2s_dev *dev, i2s_start() argument
145 i2s_write_reg(dev->i2s_base, IER, 1); i2s_start()
149 irq = i2s_read_reg(dev->i2s_base, IMR(i)); i2s_start()
150 i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x30); i2s_start()
152 i2s_write_reg(dev->i2s_base, ITER, 1); i2s_start()
155 irq = i2s_read_reg(dev->i2s_base, IMR(i)); i2s_start()
156 i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x03); i2s_start()
158 i2s_write_reg(dev->i2s_base, IRER, 1); i2s_start()
161 i2s_write_reg(dev->i2s_base, CER, 1); i2s_start()
164 static void i2s_stop(struct dw_i2s_dev *dev, i2s_stop() argument
169 i2s_clear_irqs(dev, substream->stream); i2s_stop()
171 i2s_write_reg(dev->i2s_base, ITER, 0); i2s_stop()
174 irq = i2s_read_reg(dev->i2s_base, IMR(i)); i2s_stop()
175 i2s_write_reg(dev->i2s_base, IMR(i), irq | 0x30); i2s_stop()
178 i2s_write_reg(dev->i2s_base, IRER, 0); i2s_stop()
181 irq = i2s_read_reg(dev->i2s_base, IMR(i)); i2s_stop()
182 i2s_write_reg(dev->i2s_base, IMR(i), irq | 0x03); i2s_stop()
186 if (!dev->active) { i2s_stop()
187 i2s_write_reg(dev->i2s_base, CER, 0); i2s_stop()
188 i2s_write_reg(dev->i2s_base, IER, 0); i2s_stop()
195 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai); dw_i2s_startup() local
198 if (!(dev->capability & DWC_I2S_RECORD) && dw_i2s_startup()
202 if (!(dev->capability & DWC_I2S_PLAY) && dw_i2s_startup()
207 dma_data = &dev->play_dma_data; dw_i2s_startup()
209 dma_data = &dev->capture_dma_data; dw_i2s_startup()
219 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); dw_i2s_hw_params() local
220 struct i2s_clk_config_data *config = &dev->config; dw_i2s_hw_params()
244 dev_err(dev->dev, "designware-i2s: unsuppted PCM fmt"); dw_i2s_hw_params()
257 dev_err(dev->dev, "channel not supported\n"); dw_i2s_hw_params()
261 i2s_disable_channels(dev, substream->stream); dw_i2s_hw_params()
265 i2s_write_reg(dev->i2s_base, TCR(ch_reg), dw_i2s_hw_params()
267 i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02); dw_i2s_hw_params()
268 irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); dw_i2s_hw_params()
269 i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30); dw_i2s_hw_params()
270 i2s_write_reg(dev->i2s_base, TER(ch_reg), 1); dw_i2s_hw_params()
272 i2s_write_reg(dev->i2s_base, RCR(ch_reg), dw_i2s_hw_params()
274 i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07); dw_i2s_hw_params()
275 irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); dw_i2s_hw_params()
276 i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03); dw_i2s_hw_params()
277 i2s_write_reg(dev->i2s_base, RER(ch_reg), 1); dw_i2s_hw_params()
281 i2s_write_reg(dev->i2s_base, CCR, ccr); dw_i2s_hw_params()
285 if (dev->capability & DW_I2S_MASTER) { dw_i2s_hw_params()
286 if (dev->i2s_clk_cfg) { dw_i2s_hw_params()
287 ret = dev->i2s_clk_cfg(config); dw_i2s_hw_params()
289 dev_err(dev->dev, "runtime audio clk config fail\n"); dw_i2s_hw_params()
296 ret = clk_set_rate(dev->clk, bitclk); dw_i2s_hw_params()
298 dev_err(dev->dev, "Can't set I2S clock rate: %d\n", dw_i2s_hw_params()
316 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); dw_i2s_prepare() local
319 i2s_write_reg(dev->i2s_base, TXFFR, 1); dw_i2s_prepare()
321 i2s_write_reg(dev->i2s_base, RXFFR, 1); dw_i2s_prepare()
329 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); dw_i2s_trigger() local
336 dev->active++; dw_i2s_trigger()
337 i2s_start(dev, substream); dw_i2s_trigger()
343 dev->active--; dw_i2s_trigger()
344 i2s_stop(dev, substream); dw_i2s_trigger()
355 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai); dw_i2s_set_fmt() local
360 if (dev->capability & DW_I2S_SLAVE) dw_i2s_set_fmt()
366 if (dev->capability & DW_I2S_MASTER) dw_i2s_set_fmt()
376 dev_dbg(dev->dev, "dwc : Invalid master/slave format\n"); dw_i2s_set_fmt()
400 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); dw_i2s_suspend() local
402 if (dev->capability & DW_I2S_MASTER) dw_i2s_suspend()
403 clk_disable(dev->clk); dw_i2s_suspend()
409 struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); dw_i2s_resume() local
411 if (dev->capability & DW_I2S_MASTER) dw_i2s_resume()
412 clk_enable(dev->clk); dw_i2s_resume()
454 static int dw_configure_dai(struct dw_i2s_dev *dev, dw_configure_dai() argument
462 u32 comp1 = i2s_read_reg(dev->i2s_base, I2S_COMP_PARAM_1); dw_configure_dai()
463 u32 comp2 = i2s_read_reg(dev->i2s_base, I2S_COMP_PARAM_2); dw_configure_dai()
467 dev_dbg(dev->dev, " designware: play supported\n"); dw_configure_dai()
479 dev_dbg(dev->dev, "designware: record supported\n"); dw_configure_dai()
491 dev_dbg(dev->dev, "designware: i2s master mode supported\n"); dw_configure_dai()
492 dev->capability |= DW_I2S_MASTER; dw_configure_dai()
494 dev_dbg(dev->dev, "designware: i2s slave mode supported\n"); dw_configure_dai()
495 dev->capability |= DW_I2S_SLAVE; dw_configure_dai()
501 static int dw_configure_dai_by_pd(struct dw_i2s_dev *dev, dw_configure_dai_by_pd() argument
506 u32 comp1 = i2s_read_reg(dev->i2s_base, I2S_COMP_PARAM_1); dw_configure_dai_by_pd()
513 ret = dw_configure_dai(dev, dw_i2s_dai, pdata->snd_rates); dw_configure_dai_by_pd()
518 dev->play_dma_data.pd.data = pdata->play_dma_data; dw_configure_dai_by_pd()
519 dev->capture_dma_data.pd.data = pdata->capture_dma_data; dw_configure_dai_by_pd()
520 dev->play_dma_data.pd.addr = res->start + I2S_TXDMA; dw_configure_dai_by_pd()
521 dev->capture_dma_data.pd.addr = res->start + I2S_RXDMA; dw_configure_dai_by_pd()
522 dev->play_dma_data.pd.max_burst = 16; dw_configure_dai_by_pd()
523 dev->capture_dma_data.pd.max_burst = 16; dw_configure_dai_by_pd()
524 dev->play_dma_data.pd.addr_width = bus_widths[idx]; dw_configure_dai_by_pd()
525 dev->capture_dma_data.pd.addr_width = bus_widths[idx]; dw_configure_dai_by_pd()
526 dev->play_dma_data.pd.filter = pdata->filter; dw_configure_dai_by_pd()
527 dev->capture_dma_data.pd.filter = pdata->filter; dw_configure_dai_by_pd()
532 static int dw_configure_dai_by_dt(struct dw_i2s_dev *dev, dw_configure_dai_by_dt() argument
536 u32 comp1 = i2s_read_reg(dev->i2s_base, I2S_COMP_PARAM_1); dw_configure_dai_by_dt()
537 u32 comp2 = i2s_read_reg(dev->i2s_base, I2S_COMP_PARAM_2); dw_configure_dai_by_dt()
546 ret = dw_configure_dai(dev, dw_i2s_dai, SNDRV_PCM_RATE_8000_192000); dw_configure_dai_by_dt()
553 dev->capability |= DWC_I2S_PLAY; dw_configure_dai_by_dt()
554 dev->play_dma_data.dt.addr = res->start + I2S_TXDMA; dw_configure_dai_by_dt()
555 dev->play_dma_data.dt.addr_width = bus_widths[idx]; dw_configure_dai_by_dt()
556 dev->play_dma_data.dt.chan_name = "TX"; dw_configure_dai_by_dt()
557 dev->play_dma_data.dt.fifo_size = fifo_depth * dw_configure_dai_by_dt()
559 dev->play_dma_data.dt.maxburst = 16; dw_configure_dai_by_dt()
564 dev->capability |= DWC_I2S_RECORD; dw_configure_dai_by_dt()
565 dev->capture_dma_data.dt.addr = res->start + I2S_RXDMA; dw_configure_dai_by_dt()
566 dev->capture_dma_data.dt.addr_width = bus_widths[idx]; dw_configure_dai_by_dt()
567 dev->capture_dma_data.dt.chan_name = "RX"; dw_configure_dai_by_dt()
568 dev->capture_dma_data.dt.fifo_size = fifo_depth * dw_configure_dai_by_dt()
570 dev->capture_dma_data.dt.maxburst = 16; dw_configure_dai_by_dt()
579 const struct i2s_platform_data *pdata = pdev->dev.platform_data; dw_i2s_probe()
580 struct dw_i2s_dev *dev; dw_i2s_probe() local
586 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); dw_i2s_probe()
587 if (!dev) { dw_i2s_probe()
588 dev_warn(&pdev->dev, "kzalloc fail\n"); dw_i2s_probe()
592 dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL); dw_i2s_probe()
601 dev->i2s_base = devm_ioremap_resource(&pdev->dev, res); dw_i2s_probe()
602 if (IS_ERR(dev->i2s_base)) dw_i2s_probe()
603 return PTR_ERR(dev->i2s_base); dw_i2s_probe()
605 dev->dev = &pdev->dev; dw_i2s_probe()
608 dev->capability = pdata->cap; dw_i2s_probe()
610 ret = dw_configure_dai_by_pd(dev, dw_i2s_dai, res, pdata); dw_i2s_probe()
613 ret = dw_configure_dai_by_dt(dev, dw_i2s_dai, res); dw_i2s_probe()
618 if (dev->capability & DW_I2S_MASTER) { dw_i2s_probe()
620 dev->i2s_clk_cfg = pdata->i2s_clk_cfg; dw_i2s_probe()
621 if (!dev->i2s_clk_cfg) { dw_i2s_probe()
622 dev_err(&pdev->dev, "no clock configure method\n"); dw_i2s_probe()
626 dev->clk = devm_clk_get(&pdev->dev, clk_id); dw_i2s_probe()
628 if (IS_ERR(dev->clk)) dw_i2s_probe()
629 return PTR_ERR(dev->clk); dw_i2s_probe()
631 ret = clk_prepare_enable(dev->clk); dw_i2s_probe()
636 dev_set_drvdata(&pdev->dev, dev); dw_i2s_probe()
637 ret = devm_snd_soc_register_component(&pdev->dev, &dw_i2s_component, dw_i2s_probe()
640 dev_err(&pdev->dev, "not able to register dai\n"); dw_i2s_probe()
645 ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); dw_i2s_probe()
647 dev_err(&pdev->dev, dw_i2s_probe()
656 if (dev->capability & DW_I2S_MASTER) dw_i2s_probe()
657 clk_disable_unprepare(dev->clk); dw_i2s_probe()
663 struct dw_i2s_dev *dev = dev_get_drvdata(&pdev->dev); dw_i2s_remove() local
665 if (dev->capability & DW_I2S_MASTER) dw_i2s_remove()
666 clk_disable_unprepare(dev->clk); dw_i2s_remove()
/linux-4.4.14/include/uapi/linux/
H A Dsound.h10 #define SND_DEV_CTL 0 /* Control port /dev/mixer */
11 #define SND_DEV_SEQ 1 /* Sequencer output /dev/sequencer (FM
14 #define SND_DEV_DSP 3 /* Digitized voice /dev/dsp */
15 #define SND_DEV_AUDIO 4 /* Sparc compatible /dev/audio */
16 #define SND_DEV_DSP16 5 /* Like /dev/dsp but 16 bits/sample */
17 /* #define SND_DEV_STATUS 6 */ /* /dev/sndstat (obsolete) */
20 #define SND_DEV_SEQ2 8 /* /dev/sequencer, level 2 interface */
21 /* #define SND_DEV_SNDPROC 9 */ /* /dev/sndproc for programmable devices (not used) */
23 #define SND_DEV_SYNTH 9 /* Raw synth access /dev/synth (same as /dev/dmfm) */
24 #define SND_DEV_DMFM 10 /* Raw synth access /dev/dmfm */
26 #define SND_DEV_ADSP 12 /* Like /dev/dsp (obsolete) */
27 #define SND_DEV_AMIDI 13 /* Like /dev/midi (obsolete) */
28 #define SND_DEV_ADMMIDI 14 /* Like /dev/dmmidi (onsolete) */
/linux-4.4.14/drivers/gpu/drm/tilcdc/
H A Dtilcdc_drv.c48 static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev, tilcdc_fb_create() argument
51 return drm_fb_cma_create(dev, file_priv, mode_cmd); tilcdc_fb_create()
54 static void tilcdc_fb_output_poll_changed(struct drm_device *dev) tilcdc_fb_output_poll_changed() argument
56 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_fb_output_poll_changed()
65 static int modeset_init(struct drm_device *dev) modeset_init() argument
67 struct tilcdc_drm_private *priv = dev->dev_private; modeset_init()
70 drm_mode_config_init(dev); modeset_init()
72 priv->crtc = tilcdc_crtc_create(dev); modeset_init()
76 mod->funcs->modeset_init(mod, dev); modeset_init()
79 dev->mode_config.min_width = 0; modeset_init()
80 dev->mode_config.min_height = 0; modeset_init()
81 dev->mode_config.max_width = tilcdc_crtc_max_width(priv->crtc); modeset_init()
82 dev->mode_config.max_height = 2048; modeset_init()
83 dev->mode_config.funcs = &mode_config_funcs; modeset_init()
109 static int tilcdc_unload(struct drm_device *dev) tilcdc_unload() argument
111 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_unload()
113 tilcdc_remove_external_encoders(dev); tilcdc_unload()
116 drm_kms_helper_poll_fini(dev); tilcdc_unload()
117 drm_mode_config_cleanup(dev); tilcdc_unload()
118 drm_vblank_cleanup(dev); tilcdc_unload()
120 pm_runtime_get_sync(dev->dev); tilcdc_unload()
121 drm_irq_uninstall(dev); tilcdc_unload()
122 pm_runtime_put_sync(dev->dev); tilcdc_unload()
138 dev->dev_private = NULL; tilcdc_unload()
140 pm_runtime_disable(dev->dev); tilcdc_unload()
147 static int tilcdc_load(struct drm_device *dev, unsigned long flags) tilcdc_load() argument
149 struct platform_device *pdev = dev->platformdev; tilcdc_load()
150 struct device_node *node = pdev->dev.of_node; tilcdc_load()
159 dev_err(dev->dev, "failed to allocate private data\n"); tilcdc_load()
163 dev->dev_private = priv; tilcdc_load()
166 tilcdc_get_external_components(dev->dev, NULL) > 0; tilcdc_load()
176 dev_err(dev->dev, "failed to get memory resource\n"); tilcdc_load()
183 dev_err(dev->dev, "failed to ioremap\n"); tilcdc_load()
188 priv->clk = clk_get(dev->dev, "fck"); tilcdc_load()
190 dev_err(dev->dev, "failed to get functional clock\n"); tilcdc_load()
195 priv->disp_clk = clk_get(dev->dev, "dpll_disp_ck"); tilcdc_load()
197 dev_err(dev->dev, "failed to get display clock\n"); tilcdc_load()
208 dev_err(dev->dev, "failed to register cpufreq notifier\n"); tilcdc_load()
229 pm_runtime_enable(dev->dev); tilcdc_load()
230 pm_runtime_irq_safe(dev->dev); tilcdc_load()
233 pm_runtime_get_sync(dev->dev); tilcdc_load()
234 switch (tilcdc_read(dev, LCDC_PID_REG)) { tilcdc_load()
243 dev_warn(dev->dev, "Unknown PID Reg value 0x%08x, " tilcdc_load()
245 tilcdc_read(dev, LCDC_PID_REG)); tilcdc_load()
250 pm_runtime_put_sync(dev->dev); tilcdc_load()
252 ret = modeset_init(dev); tilcdc_load()
254 dev_err(dev->dev, "failed to initialize mode setting\n"); tilcdc_load()
258 platform_set_drvdata(pdev, dev); tilcdc_load()
261 ret = component_bind_all(dev->dev, dev); tilcdc_load()
265 ret = tilcdc_add_external_encoders(dev, &bpp); tilcdc_load()
271 dev_err(dev->dev, "no encoders/connectors found\n"); tilcdc_load()
276 ret = drm_vblank_init(dev, 1); tilcdc_load()
278 dev_err(dev->dev, "failed to initialize vblank\n"); tilcdc_load()
282 pm_runtime_get_sync(dev->dev); tilcdc_load()
283 ret = drm_irq_install(dev, platform_get_irq(dev->platformdev, 0)); tilcdc_load()
284 pm_runtime_put_sync(dev->dev); tilcdc_load()
286 dev_err(dev->dev, "failed to install IRQ handler\n"); tilcdc_load()
297 priv->fbdev = drm_fbdev_cma_init(dev, bpp, tilcdc_load()
298 dev->mode_config.num_crtc, tilcdc_load()
299 dev->mode_config.num_connector); tilcdc_load()
305 drm_kms_helper_poll_init(dev); tilcdc_load()
310 pm_runtime_get_sync(dev->dev); tilcdc_load()
311 drm_irq_uninstall(dev); tilcdc_load()
312 pm_runtime_put_sync(dev->dev); tilcdc_load()
315 drm_vblank_cleanup(dev); tilcdc_load()
318 drm_mode_config_cleanup(dev); tilcdc_load()
322 component_unbind_all(dev->dev, dev); tilcdc_load()
325 tilcdc_remove_external_encoders(dev); tilcdc_load()
328 pm_runtime_disable(dev->dev); tilcdc_load()
347 dev->dev_private = NULL; tilcdc_load()
352 static void tilcdc_preclose(struct drm_device *dev, struct drm_file *file) tilcdc_preclose() argument
354 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_preclose()
359 static void tilcdc_lastclose(struct drm_device *dev) tilcdc_lastclose() argument
361 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_lastclose()
367 struct drm_device *dev = arg; tilcdc_irq() local
368 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_irq()
372 static void tilcdc_irq_preinstall(struct drm_device *dev) tilcdc_irq_preinstall() argument
374 tilcdc_clear_irqstatus(dev, 0xffffffff); tilcdc_irq_preinstall()
377 static int tilcdc_irq_postinstall(struct drm_device *dev) tilcdc_irq_postinstall() argument
379 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_irq_postinstall()
383 tilcdc_set(dev, LCDC_RASTER_CTRL_REG, LCDC_V1_UNDERFLOW_INT_ENA); tilcdc_irq_postinstall()
385 tilcdc_set(dev, LCDC_INT_ENABLE_SET_REG, LCDC_V2_UNDERFLOW_INT_ENA); tilcdc_irq_postinstall()
390 static void tilcdc_irq_uninstall(struct drm_device *dev) tilcdc_irq_uninstall() argument
392 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_irq_uninstall()
396 tilcdc_clear(dev, LCDC_RASTER_CTRL_REG, tilcdc_irq_uninstall()
398 tilcdc_clear(dev, LCDC_DMA_CTRL_REG, LCDC_V1_END_OF_FRAME_INT_ENA); tilcdc_irq_uninstall()
400 tilcdc_clear(dev, LCDC_INT_ENABLE_SET_REG, tilcdc_irq_uninstall()
408 static void enable_vblank(struct drm_device *dev, bool enable) enable_vblank() argument
410 struct tilcdc_drm_private *priv = dev->dev_private; enable_vblank()
423 tilcdc_set(dev, reg, mask); enable_vblank()
425 tilcdc_clear(dev, reg, mask); enable_vblank()
428 static int tilcdc_enable_vblank(struct drm_device *dev, unsigned int pipe) tilcdc_enable_vblank() argument
430 enable_vblank(dev, true); tilcdc_enable_vblank()
434 static void tilcdc_disable_vblank(struct drm_device *dev, unsigned int pipe) tilcdc_disable_vblank() argument
436 enable_vblank(dev, false); tilcdc_disable_vblank()
476 struct drm_device *dev = node->minor->dev; tilcdc_regs_show() local
477 struct tilcdc_drm_private *priv = dev->dev_private; tilcdc_regs_show()
480 pm_runtime_get_sync(dev->dev); tilcdc_regs_show()
487 tilcdc_read(dev, registers[i].reg)); tilcdc_regs_show()
489 pm_runtime_put_sync(dev->dev); tilcdc_regs_show()
497 struct drm_device *dev = node->minor->dev; tilcdc_mm_show() local
498 return drm_mm_dump_table(m, &dev->vma_offset_manager->vm_addr_space_mm); tilcdc_mm_show()
509 struct drm_device *dev = minor->dev; tilcdc_debugfs_init() local
522 dev_err(dev->dev, "could not install tilcdc_debugfs_list\n"); tilcdc_debugfs_init()
591 static int tilcdc_pm_suspend(struct device *dev) tilcdc_pm_suspend() argument
593 struct drm_device *ddev = dev_get_drvdata(dev); tilcdc_pm_suspend()
607 static int tilcdc_pm_resume(struct device *dev) tilcdc_pm_resume() argument
609 struct drm_device *ddev = dev_get_drvdata(dev); tilcdc_pm_resume()
632 static int tilcdc_bind(struct device *dev) tilcdc_bind() argument
634 return drm_platform_init(&tilcdc_driver, to_platform_device(dev)); tilcdc_bind()
637 static void tilcdc_unbind(struct device *dev) tilcdc_unbind() argument
639 drm_put_dev(dev_get_drvdata(dev)); tilcdc_unbind()
653 if (!pdev->dev.of_node) { tilcdc_pdev_probe()
654 dev_err(&pdev->dev, "device-tree data is missing\n"); tilcdc_pdev_probe()
658 ret = tilcdc_get_external_components(&pdev->dev, &match); tilcdc_pdev_probe()
664 return component_master_add_with_match(&pdev->dev, tilcdc_pdev_probe()
671 struct drm_device *ddev = dev_get_drvdata(&pdev->dev); tilcdc_pdev_remove()
679 component_master_del(&pdev->dev, &tilcdc_comp_ops); tilcdc_pdev_remove()
/linux-4.4.14/drivers/pci/
H A Diov.c22 int pci_iov_virtfn_bus(struct pci_dev *dev, int vf_id) pci_iov_virtfn_bus() argument
24 if (!dev->is_physfn) pci_iov_virtfn_bus()
26 return dev->bus->number + ((dev->devfn + dev->sriov->offset + pci_iov_virtfn_bus()
27 dev->sriov->stride * vf_id) >> 8); pci_iov_virtfn_bus()
30 int pci_iov_virtfn_devfn(struct pci_dev *dev, int vf_id) pci_iov_virtfn_devfn() argument
32 if (!dev->is_physfn) pci_iov_virtfn_devfn()
34 return (dev->devfn + dev->sriov->offset + pci_iov_virtfn_devfn()
35 dev->sriov->stride * vf_id) & 0xff; pci_iov_virtfn_devfn()
44 static inline void pci_iov_set_numvfs(struct pci_dev *dev, int nr_virtfn) pci_iov_set_numvfs() argument
46 struct pci_sriov *iov = dev->sriov; pci_iov_set_numvfs()
48 pci_write_config_word(dev, iov->pos + PCI_SRIOV_NUM_VF, nr_virtfn); pci_iov_set_numvfs()
49 pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_OFFSET, &iov->offset); pci_iov_set_numvfs()
50 pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_STRIDE, &iov->stride); pci_iov_set_numvfs()
60 static int compute_max_vf_buses(struct pci_dev *dev) compute_max_vf_buses() argument
62 struct pci_sriov *iov = dev->sriov; compute_max_vf_buses()
66 pci_iov_set_numvfs(dev, nr_virtfn); compute_max_vf_buses()
72 busnr = pci_iov_virtfn_bus(dev, nr_virtfn - 1); compute_max_vf_buses()
78 pci_iov_set_numvfs(dev, 0); compute_max_vf_buses()
108 resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno) pci_iov_resource_size() argument
110 if (!dev->is_physfn) pci_iov_resource_size()
113 return dev->sriov->barsz[resno - PCI_IOV_RESOURCES]; pci_iov_resource_size()
116 static int virtfn_add(struct pci_dev *dev, int id, int reset) virtfn_add() argument
124 struct pci_sriov *iov = dev->sriov; virtfn_add()
127 mutex_lock(&iov->dev->sriov->lock); virtfn_add()
128 bus = virtfn_add_bus(dev->bus, pci_iov_virtfn_bus(dev, id)); virtfn_add()
136 virtfn->devfn = pci_iov_virtfn_devfn(dev, id); virtfn_add()
137 virtfn->vendor = dev->vendor; virtfn_add()
138 pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device); virtfn_add()
140 virtfn->dev.parent = dev->dev.parent; virtfn_add()
141 virtfn->physfn = pci_dev_get(dev); virtfn_add()
146 res = &dev->resource[i + PCI_IOV_RESOURCES]; virtfn_add()
151 size = pci_iov_resource_size(dev, i + PCI_IOV_RESOURCES); virtfn_add()
162 mutex_unlock(&iov->dev->sriov->lock); virtfn_add()
166 rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf); virtfn_add()
169 rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn"); virtfn_add()
173 kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE); virtfn_add()
178 sysfs_remove_link(&dev->dev.kobj, buf); virtfn_add()
180 pci_dev_put(dev); virtfn_add()
181 mutex_lock(&iov->dev->sriov->lock); virtfn_add()
184 virtfn_remove_bus(dev->bus, bus); virtfn_add()
186 mutex_unlock(&iov->dev->sriov->lock); virtfn_add()
191 static void virtfn_remove(struct pci_dev *dev, int id, int reset) virtfn_remove() argument
195 struct pci_sriov *iov = dev->sriov; virtfn_remove()
197 virtfn = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus), virtfn_remove()
198 pci_iov_virtfn_bus(dev, id), virtfn_remove()
199 pci_iov_virtfn_devfn(dev, id)); virtfn_remove()
204 device_release_driver(&virtfn->dev); virtfn_remove()
209 sysfs_remove_link(&dev->dev.kobj, buf); virtfn_remove()
215 if (virtfn->dev.kobj.sd) virtfn_remove()
216 sysfs_remove_link(&virtfn->dev.kobj, "physfn"); virtfn_remove()
218 mutex_lock(&iov->dev->sriov->lock); virtfn_remove()
220 virtfn_remove_bus(dev->bus, virtfn->bus); virtfn_remove()
221 mutex_unlock(&iov->dev->sriov->lock); virtfn_remove()
225 pci_dev_put(dev); virtfn_remove()
238 static int sriov_enable(struct pci_dev *dev, int nr_virtfn) sriov_enable() argument
246 struct pci_sriov *iov = dev->sriov; sriov_enable()
256 pci_read_config_word(dev, iov->pos + PCI_SRIOV_INITIAL_VF, &initial); sriov_enable()
268 res = &dev->resource[i + PCI_IOV_RESOURCES]; sriov_enable()
273 dev_err(&dev->dev, "not enough MMIO resources for SR-IOV\n"); sriov_enable()
277 bus = pci_iov_virtfn_bus(dev, nr_virtfn - 1); sriov_enable()
278 if (bus > dev->bus->busn_res.end) { sriov_enable()
279 dev_err(&dev->dev, "can't enable %d VFs (bus %02x out of range of %pR)\n", sriov_enable()
280 nr_virtfn, bus, &dev->bus->busn_res); sriov_enable()
284 if (pci_enable_resources(dev, bars)) { sriov_enable()
285 dev_err(&dev->dev, "SR-IOV: IOV BARS not allocated\n"); sriov_enable()
289 if (iov->link != dev->devfn) { sriov_enable()
290 pdev = pci_get_slot(dev->bus, iov->link); sriov_enable()
299 rc = sysfs_create_link(&dev->dev.kobj, sriov_enable()
300 &pdev->dev.kobj, "dep_link"); sriov_enable()
306 pci_iov_set_numvfs(dev, nr_virtfn); sriov_enable()
308 pci_cfg_access_lock(dev); sriov_enable()
309 pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl); sriov_enable()
311 pci_cfg_access_unlock(dev); sriov_enable()
317 rc = pcibios_sriov_enable(dev, initial); sriov_enable()
319 dev_err(&dev->dev, "failure %d from pcibios_sriov_enable()\n", rc); sriov_enable()
324 rc = virtfn_add(dev, i, 0); sriov_enable()
329 kobject_uevent(&dev->dev.kobj, KOBJ_CHANGE); sriov_enable()
336 virtfn_remove(dev, i, 0); sriov_enable()
338 pcibios_sriov_disable(dev); sriov_enable()
341 pci_cfg_access_lock(dev); sriov_enable()
342 pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl); sriov_enable()
344 pci_cfg_access_unlock(dev); sriov_enable()
346 if (iov->link != dev->devfn) sriov_enable()
347 sysfs_remove_link(&dev->dev.kobj, "dep_link"); sriov_enable()
349 pci_iov_set_numvfs(dev, 0); sriov_enable()
353 static void sriov_disable(struct pci_dev *dev) sriov_disable() argument
356 struct pci_sriov *iov = dev->sriov; sriov_disable()
362 virtfn_remove(dev, i, 0); sriov_disable()
364 pcibios_sriov_disable(dev); sriov_disable()
367 pci_cfg_access_lock(dev); sriov_disable()
368 pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl); sriov_disable()
370 pci_cfg_access_unlock(dev); sriov_disable()
372 if (iov->link != dev->devfn) sriov_disable()
373 sysfs_remove_link(&dev->dev.kobj, "dep_link"); sriov_disable()
376 pci_iov_set_numvfs(dev, 0); sriov_disable()
379 static int sriov_init(struct pci_dev *dev, int pos) sriov_init() argument
390 if (pci_pcie_type(dev) != PCI_EXP_TYPE_RC_END && sriov_init()
391 pci_pcie_type(dev) != PCI_EXP_TYPE_ENDPOINT) sriov_init()
394 pci_read_config_word(dev, pos + PCI_SRIOV_CTRL, &ctrl); sriov_init()
396 pci_write_config_word(dev, pos + PCI_SRIOV_CTRL, 0); sriov_init()
401 list_for_each_entry(pdev, &dev->bus->devices, bus_list) sriov_init()
406 if (pci_ari_enabled(dev->bus)) sriov_init()
410 pci_write_config_word(dev, pos + PCI_SRIOV_CTRL, ctrl); sriov_init()
412 pci_read_config_word(dev, pos + PCI_SRIOV_TOTAL_VF, &total); sriov_init()
416 pci_read_config_dword(dev, pos + PCI_SRIOV_SUP_PGSIZE, &pgsz); sriov_init()
423 pci_write_config_dword(dev, pos + PCI_SRIOV_SYS_PGSIZE, pgsz); sriov_init()
431 res = &dev->resource[i + PCI_IOV_RESOURCES]; sriov_init()
439 bar64 = __pci_read_base(dev, pci_bar_unknown, res, sriov_init()
449 dev_info(&dev->dev, "VF(n) BAR%d space: %pR (contains BAR%d for %d VFs)\n", sriov_init()
460 iov->self = dev; sriov_init()
461 pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap); sriov_init()
462 pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link); sriov_init()
463 if (pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END) sriov_init()
464 iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link); sriov_init()
467 iov->dev = pci_dev_get(pdev); sriov_init()
469 iov->dev = dev; sriov_init()
473 dev->sriov = iov; sriov_init()
474 dev->is_physfn = 1; sriov_init()
475 rc = compute_max_vf_buses(dev); sriov_init()
482 dev->sriov = NULL; sriov_init()
483 dev->is_physfn = 0; sriov_init()
486 res = &dev->resource[i + PCI_IOV_RESOURCES]; sriov_init()
494 static void sriov_release(struct pci_dev *dev) sriov_release() argument
496 BUG_ON(dev->sriov->num_VFs); sriov_release()
498 if (dev != dev->sriov->dev) sriov_release()
499 pci_dev_put(dev->sriov->dev); sriov_release()
501 mutex_destroy(&dev->sriov->lock); sriov_release()
503 kfree(dev->sriov); sriov_release()
504 dev->sriov = NULL; sriov_release()
507 static void sriov_restore_state(struct pci_dev *dev) sriov_restore_state() argument
511 struct pci_sriov *iov = dev->sriov; sriov_restore_state()
513 pci_read_config_word(dev, iov->pos + PCI_SRIOV_CTRL, &ctrl); sriov_restore_state()
518 pci_update_resource(dev, i); sriov_restore_state()
520 pci_write_config_dword(dev, iov->pos + PCI_SRIOV_SYS_PGSIZE, iov->pgsz); sriov_restore_state()
521 pci_iov_set_numvfs(dev, iov->num_VFs); sriov_restore_state()
522 pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl); sriov_restore_state()
529 * @dev: the PCI device
533 int pci_iov_init(struct pci_dev *dev) pci_iov_init() argument
537 if (!pci_is_pcie(dev)) pci_iov_init()
540 pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV); pci_iov_init()
542 return sriov_init(dev, pos); pci_iov_init()
549 * @dev: the PCI device
551 void pci_iov_release(struct pci_dev *dev) pci_iov_release() argument
553 if (dev->is_physfn) pci_iov_release()
554 sriov_release(dev); pci_iov_release()
559 * @dev: the PCI device
564 int pci_iov_resource_bar(struct pci_dev *dev, int resno) pci_iov_resource_bar() argument
569 BUG_ON(!dev->is_physfn); pci_iov_resource_bar()
571 return dev->sriov->pos + PCI_SRIOV_BAR + pci_iov_resource_bar()
575 resource_size_t __weak pcibios_iov_resource_alignment(struct pci_dev *dev, pcibios_iov_resource_alignment() argument
578 return pci_iov_resource_size(dev, resno); pcibios_iov_resource_alignment()
583 * @dev: the PCI device
591 resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno) pci_sriov_resource_alignment() argument
593 return pcibios_iov_resource_alignment(dev, resno); pci_sriov_resource_alignment()
598 * @dev: the PCI device
600 void pci_restore_iov_state(struct pci_dev *dev) pci_restore_iov_state() argument
602 if (dev->is_physfn) pci_restore_iov_state()
603 sriov_restore_state(dev); pci_restore_iov_state()
616 struct pci_dev *dev; pci_iov_bus_range() local
618 list_for_each_entry(dev, &bus->devices, bus_list) { pci_iov_bus_range()
619 if (!dev->is_physfn) pci_iov_bus_range()
621 if (dev->sriov->max_VF_buses > max) pci_iov_bus_range()
622 max = dev->sriov->max_VF_buses; pci_iov_bus_range()
630 * @dev: the PCI device
635 int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn) pci_enable_sriov() argument
639 if (!dev->is_physfn) pci_enable_sriov()
642 return sriov_enable(dev, nr_virtfn); pci_enable_sriov()
648 * @dev: the PCI device
650 void pci_disable_sriov(struct pci_dev *dev) pci_disable_sriov() argument
654 if (!dev->is_physfn) pci_disable_sriov()
657 sriov_disable(dev); pci_disable_sriov()
663 * @dev: the PCI device
667 int pci_num_vf(struct pci_dev *dev) pci_num_vf() argument
669 if (!dev->is_physfn) pci_num_vf()
672 return dev->sriov->num_VFs; pci_num_vf()
678 * @dev: the PCI device
683 int pci_vfs_assigned(struct pci_dev *dev) pci_vfs_assigned() argument
690 if (!dev->is_physfn) pci_vfs_assigned()
697 pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_VF_DID, &dev_id); pci_vfs_assigned()
700 vfdev = pci_get_device(dev->vendor, dev_id, NULL); pci_vfs_assigned()
704 * our dev as the physical function and the assigned bit is set pci_vfs_assigned()
706 if (vfdev->is_virtfn && (vfdev->physfn == dev) && pci_vfs_assigned()
710 vfdev = pci_get_device(dev->vendor, dev_id, vfdev); pci_vfs_assigned()
719 * @dev: the PCI PF device
730 int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs) pci_sriov_set_totalvfs() argument
732 if (!dev->is_physfn) pci_sriov_set_totalvfs()
734 if (numvfs > dev->sriov->total_VFs) pci_sriov_set_totalvfs()
738 if (dev->sriov->ctrl & PCI_SRIOV_CTRL_VFE) pci_sriov_set_totalvfs()
741 dev->sriov->driver_max_VFs = numvfs; pci_sriov_set_totalvfs()
749 * @dev: the PCI PF device
755 int pci_sriov_get_totalvfs(struct pci_dev *dev) pci_sriov_get_totalvfs() argument
757 if (!dev->is_physfn) pci_sriov_get_totalvfs()
760 if (dev->sriov->driver_max_VFs) pci_sriov_get_totalvfs()
761 return dev->sriov->driver_max_VFs; pci_sriov_get_totalvfs()
763 return dev->sriov->total_VFs; pci_sriov_get_totalvfs()
H A Dremove.c6 static void pci_free_resources(struct pci_dev *dev) pci_free_resources() argument
10 pci_cleanup_rom(dev); pci_free_resources()
12 struct resource *res = dev->resource + i; pci_free_resources()
18 static void pci_stop_dev(struct pci_dev *dev) pci_stop_dev() argument
20 pci_pme_active(dev, false); pci_stop_dev()
22 if (dev->is_added) { pci_stop_dev()
23 pci_proc_detach_device(dev); pci_stop_dev()
24 pci_remove_sysfs_dev_files(dev); pci_stop_dev()
25 device_release_driver(&dev->dev); pci_stop_dev()
26 dev->is_added = 0; pci_stop_dev()
29 if (dev->bus->self) pci_stop_dev()
30 pcie_aspm_exit_link_state(dev); pci_stop_dev()
33 static void pci_destroy_dev(struct pci_dev *dev) pci_destroy_dev() argument
35 if (!dev->dev.kobj.parent) pci_destroy_dev()
38 device_del(&dev->dev); pci_destroy_dev()
41 list_del(&dev->bus_list); pci_destroy_dev()
44 pci_free_resources(dev); pci_destroy_dev()
45 put_device(&dev->dev); pci_destroy_dev()
58 device_unregister(&bus->dev); pci_remove_bus()
62 static void pci_stop_bus_device(struct pci_dev *dev) pci_stop_bus_device() argument
64 struct pci_bus *bus = dev->subordinate; pci_stop_bus_device()
79 pci_stop_dev(dev); pci_stop_bus_device()
82 static void pci_remove_bus_device(struct pci_dev *dev) pci_remove_bus_device() argument
84 struct pci_bus *bus = dev->subordinate; pci_remove_bus_device()
93 dev->subordinate = NULL; pci_remove_bus_device()
96 pci_destroy_dev(dev); pci_remove_bus_device()
101 * @dev: the device to remove
111 void pci_stop_and_remove_bus_device(struct pci_dev *dev) pci_stop_and_remove_bus_device() argument
113 pci_stop_bus_device(dev); pci_stop_and_remove_bus_device()
114 pci_remove_bus_device(dev); pci_stop_and_remove_bus_device()
118 void pci_stop_and_remove_bus_device_locked(struct pci_dev *dev) pci_stop_and_remove_bus_device_locked() argument
121 pci_stop_and_remove_bus_device(dev); pci_stop_and_remove_bus_device_locked()
140 device_release_driver(&host_bridge->dev); pci_stop_root_bus()
160 device_unregister(&host_bridge->dev); pci_remove_root_bus()
/linux-4.4.14/drivers/crypto/
H A Dsahara.c240 static inline void sahara_write(struct sahara_dev *dev, u32 data, u32 reg) sahara_write() argument
242 writel(data, dev->regs_base + reg); sahara_write()
245 static inline unsigned int sahara_read(struct sahara_dev *dev, u32 reg) sahara_read() argument
247 return readl(dev->regs_base + reg); sahara_read()
250 static u32 sahara_aes_key_hdr(struct sahara_dev *dev) sahara_aes_key_hdr() argument
256 if (dev->flags & FLAGS_CBC) { sahara_aes_key_hdr()
261 if (dev->flags & FLAGS_ENCRYPT) { sahara_aes_key_hdr()
269 static u32 sahara_aes_data_link_hdr(struct sahara_dev *dev) sahara_aes_data_link_hdr() argument
329 static void sahara_decode_error(struct sahara_dev *dev, unsigned int error) sahara_decode_error() argument
334 dev_err(dev->device, "%s: Error Register = 0x%08x\n", __func__, error); sahara_decode_error()
336 dev_err(dev->device, " - %s.\n", sahara_err_src[source]); sahara_decode_error()
340 dev_err(dev->device, " * DMA read.\n"); sahara_decode_error()
342 dev_err(dev->device, " * DMA write.\n"); sahara_decode_error()
344 dev_err(dev->device, " * %s.\n", sahara_decode_error()
346 dev_err(dev->device, " * %s.\n", sahara_decode_error()
349 dev_err(dev->device, " * %s.\n", sahara_decode_error()
351 dev_err(dev->device, " * %s.\n", sahara_decode_error()
354 dev_err(dev->device, "\n"); sahara_decode_error()
359 static void sahara_decode_status(struct sahara_dev *dev, unsigned int status) sahara_decode_status() argument
368 dev_dbg(dev->device, "%s: Status Register = 0x%08x\n", sahara_decode_status()
371 dev_dbg(dev->device, " - State = %d:\n", state); sahara_decode_status()
373 dev_dbg(dev->device, " * Descriptor completed. IRQ pending.\n"); sahara_decode_status()
375 dev_dbg(dev->device, " * %s.\n", sahara_decode_status()
379 dev_dbg(dev->device, " - DAR Full.\n"); sahara_decode_status()
381 dev_dbg(dev->device, " - Error.\n"); sahara_decode_status()
383 dev_dbg(dev->device, " - Secure.\n"); sahara_decode_status()
385 dev_dbg(dev->device, " - Fail.\n"); sahara_decode_status()
387 dev_dbg(dev->device, " - RNG Reseed Request.\n"); sahara_decode_status()
389 dev_dbg(dev->device, " - RNG Active.\n"); sahara_decode_status()
391 dev_dbg(dev->device, " - MDHA Active.\n"); sahara_decode_status()
393 dev_dbg(dev->device, " - SKHA Active.\n"); sahara_decode_status()
396 dev_dbg(dev->device, " - Batch Mode.\n"); sahara_decode_status()
398 dev_dbg(dev->device, " - Decidated Mode.\n"); sahara_decode_status()
400 dev_dbg(dev->device, " - Debug Mode.\n"); sahara_decode_status()
402 dev_dbg(dev->device, " - Internal state = 0x%02x\n", sahara_decode_status()
405 dev_dbg(dev->device, "Current DAR: 0x%08x\n", sahara_decode_status()
406 sahara_read(dev, SAHARA_REG_CDAR)); sahara_decode_status()
407 dev_dbg(dev->device, "Initial DAR: 0x%08x\n\n", sahara_decode_status()
408 sahara_read(dev, SAHARA_REG_IDAR)); sahara_decode_status()
411 static void sahara_dump_descriptors(struct sahara_dev *dev) sahara_dump_descriptors() argument
419 dev_dbg(dev->device, "Descriptor (%d) (0x%08x):\n", sahara_dump_descriptors()
420 i, dev->hw_phys_desc[i]); sahara_dump_descriptors()
421 dev_dbg(dev->device, "\thdr = 0x%08x\n", dev->hw_desc[i]->hdr); sahara_dump_descriptors()
422 dev_dbg(dev->device, "\tlen1 = %u\n", dev->hw_desc[i]->len1); sahara_dump_descriptors()
423 dev_dbg(dev->device, "\tp1 = 0x%08x\n", dev->hw_desc[i]->p1); sahara_dump_descriptors()
424 dev_dbg(dev->device, "\tlen2 = %u\n", dev->hw_desc[i]->len2); sahara_dump_descriptors()
425 dev_dbg(dev->device, "\tp2 = 0x%08x\n", dev->hw_desc[i]->p2); sahara_dump_descriptors()
426 dev_dbg(dev->device, "\tnext = 0x%08x\n", sahara_dump_descriptors()
427 dev->hw_desc[i]->next); sahara_dump_descriptors()
429 dev_dbg(dev->device, "\n"); sahara_dump_descriptors()
432 static void sahara_dump_links(struct sahara_dev *dev) sahara_dump_links() argument
440 dev_dbg(dev->device, "Link (%d) (0x%08x):\n", sahara_dump_links()
441 i, dev->hw_phys_link[i]); sahara_dump_links()
442 dev_dbg(dev->device, "\tlen = %u\n", dev->hw_link[i]->len); sahara_dump_links()
443 dev_dbg(dev->device, "\tp = 0x%08x\n", dev->hw_link[i]->p); sahara_dump_links()
444 dev_dbg(dev->device, "\tnext = 0x%08x\n", sahara_dump_links()
445 dev->hw_link[i]->next); sahara_dump_links()
447 dev_dbg(dev->device, "\n"); sahara_dump_links()
450 static int sahara_hw_descriptor_create(struct sahara_dev *dev) sahara_hw_descriptor_create() argument
452 struct sahara_ctx *ctx = dev->ctx; sahara_hw_descriptor_create()
460 memcpy(dev->key_base, ctx->key, ctx->keylen); sahara_hw_descriptor_create()
463 if (dev->flags & FLAGS_CBC) { sahara_hw_descriptor_create()
464 dev->hw_desc[idx]->len1 = AES_BLOCK_SIZE; sahara_hw_descriptor_create()
465 dev->hw_desc[idx]->p1 = dev->iv_phys_base; sahara_hw_descriptor_create()
467 dev->hw_desc[idx]->len1 = 0; sahara_hw_descriptor_create()
468 dev->hw_desc[idx]->p1 = 0; sahara_hw_descriptor_create()
470 dev->hw_desc[idx]->len2 = ctx->keylen; sahara_hw_descriptor_create()
471 dev->hw_desc[idx]->p2 = dev->key_phys_base; sahara_hw_descriptor_create()
472 dev->hw_desc[idx]->next = dev->hw_phys_desc[1]; sahara_hw_descriptor_create()
474 dev->hw_desc[idx]->hdr = sahara_aes_key_hdr(dev); sahara_hw_descriptor_create()
479 dev->nb_in_sg = sg_nents_for_len(dev->in_sg, dev->total); sahara_hw_descriptor_create()
480 dev->nb_out_sg = sg_nents_for_len(dev->out_sg, dev->total); sahara_hw_descriptor_create()
481 if ((dev->nb_in_sg + dev->nb_out_sg) > SAHARA_MAX_HW_LINK) { sahara_hw_descriptor_create()
482 dev_err(dev->device, "not enough hw links (%d)\n", sahara_hw_descriptor_create()
483 dev->nb_in_sg + dev->nb_out_sg); sahara_hw_descriptor_create()
487 ret = dma_map_sg(dev->device, dev->in_sg, dev->nb_in_sg, sahara_hw_descriptor_create()
489 if (ret != dev->nb_in_sg) { sahara_hw_descriptor_create()
490 dev_err(dev->device, "couldn't map in sg\n"); sahara_hw_descriptor_create()
493 ret = dma_map_sg(dev->device, dev->out_sg, dev->nb_out_sg, sahara_hw_descriptor_create()
495 if (ret != dev->nb_out_sg) { sahara_hw_descriptor_create()
496 dev_err(dev->device, "couldn't map out sg\n"); sahara_hw_descriptor_create()
501 dev->hw_desc[idx]->p1 = dev->hw_phys_link[0]; sahara_hw_descriptor_create()
502 sg = dev->in_sg; sahara_hw_descriptor_create()
503 for (i = 0; i < dev->nb_in_sg; i++) { sahara_hw_descriptor_create()
504 dev->hw_link[i]->len = sg->length; sahara_hw_descriptor_create()
505 dev->hw_link[i]->p = sg->dma_address; sahara_hw_descriptor_create()
506 if (i == (dev->nb_in_sg - 1)) { sahara_hw_descriptor_create()
507 dev->hw_link[i]->next = 0; sahara_hw_descriptor_create()
509 dev->hw_link[i]->next = dev->hw_phys_link[i + 1]; sahara_hw_descriptor_create()
515 dev->hw_desc[idx]->p2 = dev->hw_phys_link[i]; sahara_hw_descriptor_create()
516 sg = dev->out_sg; sahara_hw_descriptor_create()
517 for (j = i; j < dev->nb_out_sg + i; j++) { sahara_hw_descriptor_create()
518 dev->hw_link[j]->len = sg->length; sahara_hw_descriptor_create()
519 dev->hw_link[j]->p = sg->dma_address; sahara_hw_descriptor_create()
520 if (j == (dev->nb_out_sg + i - 1)) { sahara_hw_descriptor_create()
521 dev->hw_link[j]->next = 0; sahara_hw_descriptor_create()
523 dev->hw_link[j]->next = dev->hw_phys_link[j + 1]; sahara_hw_descriptor_create()
529 dev->hw_desc[idx]->hdr = sahara_aes_data_link_hdr(dev); sahara_hw_descriptor_create()
530 dev->hw_desc[idx]->len1 = dev->total; sahara_hw_descriptor_create()
531 dev->hw_desc[idx]->len2 = dev->total; sahara_hw_descriptor_create()
532 dev->hw_desc[idx]->next = 0; sahara_hw_descriptor_create()
534 sahara_dump_descriptors(dev); sahara_hw_descriptor_create()
535 sahara_dump_links(dev); sahara_hw_descriptor_create()
537 sahara_write(dev, dev->hw_phys_desc[0], SAHARA_REG_DAR); sahara_hw_descriptor_create()
542 dma_unmap_sg(dev->device, dev->out_sg, dev->nb_out_sg, sahara_hw_descriptor_create()
545 dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg, sahara_hw_descriptor_create()
553 struct sahara_dev *dev = dev_ptr; sahara_aes_process() local
560 dev_dbg(dev->device, sahara_aes_process()
565 dev->total = req->nbytes; sahara_aes_process()
566 dev->in_sg = req->src; sahara_aes_process()
567 dev->out_sg = req->dst; sahara_aes_process()
572 dev->flags = (dev->flags & ~FLAGS_MODE_MASK) | rctx->mode; sahara_aes_process()
574 if ((dev->flags & FLAGS_CBC) && req->info) sahara_aes_process()
575 memcpy(dev->iv_base, req->info, AES_KEYSIZE_128); sahara_aes_process()
578 dev->ctx = ctx; sahara_aes_process()
580 reinit_completion(&dev->dma_completion); sahara_aes_process()
582 ret = sahara_hw_descriptor_create(dev); sahara_aes_process()
586 timeout = wait_for_completion_timeout(&dev->dma_completion, sahara_aes_process()
589 dev_err(dev->device, "AES timeout\n"); sahara_aes_process()
593 dma_unmap_sg(dev->device, dev->out_sg, dev->nb_out_sg, sahara_aes_process()
595 dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg, sahara_aes_process()
641 struct sahara_dev *dev = dev_ptr; sahara_aes_crypt() local
644 dev_dbg(dev->device, "nbytes: %d, enc: %d, cbc: %d\n", sahara_aes_crypt()
648 dev_err(dev->device, sahara_aes_crypt()
655 mutex_lock(&dev->queue_mutex); sahara_aes_crypt()
656 err = ablkcipher_enqueue_request(&dev->queue, req); sahara_aes_crypt()
657 mutex_unlock(&dev->queue_mutex); sahara_aes_crypt()
659 wake_up_process(dev->kthread); sahara_aes_crypt()
762 static u32 sahara_sha_init_hdr(struct sahara_dev *dev, sahara_sha_init_hdr() argument
785 static int sahara_sha_hw_links_create(struct sahara_dev *dev, sahara_sha_hw_links_create() argument
793 dev->in_sg = rctx->in_sg; sahara_sha_hw_links_create()
795 dev->nb_in_sg = sg_nents_for_len(dev->in_sg, rctx->total); sahara_sha_hw_links_create()
796 if ((dev->nb_in_sg) > SAHARA_MAX_HW_LINK) { sahara_sha_hw_links_create()
797 dev_err(dev->device, "not enough hw links (%d)\n", sahara_sha_hw_links_create()
798 dev->nb_in_sg + dev->nb_out_sg); sahara_sha_hw_links_create()
802 sg = dev->in_sg; sahara_sha_hw_links_create()
803 ret = dma_map_sg(dev->device, dev->in_sg, dev->nb_in_sg, DMA_TO_DEVICE); sahara_sha_hw_links_create()
807 for (i = start; i < dev->nb_in_sg + start; i++) { sahara_sha_hw_links_create()
808 dev->hw_link[i]->len = sg->length; sahara_sha_hw_links_create()
809 dev->hw_link[i]->p = sg->dma_address; sahara_sha_hw_links_create()
810 if (i == (dev->nb_in_sg + start - 1)) { sahara_sha_hw_links_create()
811 dev->hw_link[i]->next = 0; sahara_sha_hw_links_create()
813 dev->hw_link[i]->next = dev->hw_phys_link[i + 1]; sahara_sha_hw_links_create()
821 static int sahara_sha_hw_data_descriptor_create(struct sahara_dev *dev, sahara_sha_hw_data_descriptor_create() argument
831 dev->hw_desc[index]->hdr = sahara_sha_init_hdr(dev, rctx); sahara_sha_hw_data_descriptor_create()
834 dev->hw_desc[index]->hdr = SAHARA_HDR_MDHA_HASH; sahara_sha_hw_data_descriptor_create()
836 dev->hw_desc[index]->len1 = rctx->total; sahara_sha_hw_data_descriptor_create()
837 if (dev->hw_desc[index]->len1 == 0) { sahara_sha_hw_data_descriptor_create()
839 dev->hw_desc[index]->p1 = 0; sahara_sha_hw_data_descriptor_create()
843 dev->hw_desc[index]->p1 = dev->hw_phys_link[index]; sahara_sha_hw_data_descriptor_create()
844 i = sahara_sha_hw_links_create(dev, rctx, index); sahara_sha_hw_data_descriptor_create()
851 dev->hw_desc[index]->p2 = dev->hw_phys_link[i]; sahara_sha_hw_data_descriptor_create()
855 dev->hw_link[i]->p = dev->context_phys_base; sahara_sha_hw_data_descriptor_create()
857 dev->hw_link[i]->len = result_len; sahara_sha_hw_data_descriptor_create()
858 dev->hw_desc[index]->len2 = result_len; sahara_sha_hw_data_descriptor_create()
860 dev->hw_link[i]->next = 0; sahara_sha_hw_data_descriptor_create()
874 static int sahara_sha_hw_context_descriptor_create(struct sahara_dev *dev, sahara_sha_hw_context_descriptor_create() argument
879 dev->hw_desc[index]->hdr = sahara_sha_init_hdr(dev, rctx); sahara_sha_hw_context_descriptor_create()
881 dev->hw_desc[index]->len1 = rctx->context_size; sahara_sha_hw_context_descriptor_create()
882 dev->hw_desc[index]->p1 = dev->hw_phys_link[index]; sahara_sha_hw_context_descriptor_create()
883 dev->hw_desc[index]->len2 = 0; sahara_sha_hw_context_descriptor_create()
884 dev->hw_desc[index]->p2 = 0; sahara_sha_hw_context_descriptor_create()
886 dev->hw_link[index]->len = rctx->context_size; sahara_sha_hw_context_descriptor_create()
887 dev->hw_link[index]->p = dev->context_phys_base; sahara_sha_hw_context_descriptor_create()
888 dev->hw_link[index]->next = 0; sahara_sha_hw_context_descriptor_create()
987 struct sahara_dev *dev = dev_ptr; sahara_sha_process() local
997 sahara_sha_hw_data_descriptor_create(dev, rctx, req, 0); sahara_sha_process()
998 dev->hw_desc[0]->next = 0; sahara_sha_process()
1001 memcpy(dev->context_base, rctx->context, rctx->context_size); sahara_sha_process()
1003 sahara_sha_hw_context_descriptor_create(dev, rctx, req, 0); sahara_sha_process()
1004 dev->hw_desc[0]->next = dev->hw_phys_desc[1]; sahara_sha_process()
1005 sahara_sha_hw_data_descriptor_create(dev, rctx, req, 1); sahara_sha_process()
1006 dev->hw_desc[1]->next = 0; sahara_sha_process()
1009 sahara_dump_descriptors(dev); sahara_sha_process()
1010 sahara_dump_links(dev); sahara_sha_process()
1012 reinit_completion(&dev->dma_completion); sahara_sha_process()
1014 sahara_write(dev, dev->hw_phys_desc[0], SAHARA_REG_DAR); sahara_sha_process()
1016 timeout = wait_for_completion_timeout(&dev->dma_completion, sahara_sha_process()
1019 dev_err(dev->device, "SHA timeout\n"); sahara_sha_process()
1024 dma_unmap_sg(dev->device, dev->in_sg, dev->nb_in_sg, sahara_sha_process()
1027 memcpy(rctx->context, dev->context_base, rctx->context_size); sahara_sha_process()
1037 struct sahara_dev *dev = (struct sahara_dev *)data; sahara_queue_manage() local
1045 mutex_lock(&dev->queue_mutex); sahara_queue_manage()
1046 backlog = crypto_get_backlog(&dev->queue); sahara_queue_manage()
1047 async_req = crypto_dequeue_request(&dev->queue); sahara_queue_manage()
1048 mutex_unlock(&dev->queue_mutex); sahara_queue_manage()
1081 struct sahara_dev *dev = dev_ptr; sahara_sha_enqueue() local
1095 mutex_lock(&dev->queue_mutex); sahara_sha_enqueue()
1096 ret = crypto_enqueue_request(&dev->queue, &req->base); sahara_sha_enqueue()
1097 mutex_unlock(&dev->queue_mutex); sahara_sha_enqueue()
1099 wake_up_process(dev->kthread); sahara_sha_enqueue()
1309 struct sahara_dev *dev = (struct sahara_dev *)data; sahara_irq_handler() local
1310 unsigned int stat = sahara_read(dev, SAHARA_REG_STATUS); sahara_irq_handler()
1311 unsigned int err = sahara_read(dev, SAHARA_REG_ERRSTATUS); sahara_irq_handler()
1313 sahara_write(dev, SAHARA_CMD_CLEAR_INT | SAHARA_CMD_CLEAR_ERR, sahara_irq_handler()
1316 sahara_decode_status(dev, stat); sahara_irq_handler()
1321 dev->error = 0; sahara_irq_handler()
1323 sahara_decode_error(dev, err); sahara_irq_handler()
1324 dev->error = -EINVAL; sahara_irq_handler()
1327 complete(&dev->dma_completion); sahara_irq_handler()
1333 static int sahara_register_algs(struct sahara_dev *dev) sahara_register_algs() argument
1351 if (dev->version > SAHARA_VERSION_3) sahara_register_algs()
1375 static void sahara_unregister_algs(struct sahara_dev *dev) sahara_unregister_algs() argument
1385 if (dev->version > SAHARA_VERSION_3) sahara_unregister_algs()
1405 struct sahara_dev *dev; sahara_probe() local
1412 dev = devm_kzalloc(&pdev->dev, sizeof(struct sahara_dev), GFP_KERNEL); sahara_probe()
1413 if (dev == NULL) { sahara_probe()
1414 dev_err(&pdev->dev, "unable to alloc data struct.\n"); sahara_probe()
1418 dev->device = &pdev->dev; sahara_probe()
1419 platform_set_drvdata(pdev, dev); sahara_probe()
1423 dev->regs_base = devm_ioremap_resource(&pdev->dev, res); sahara_probe()
1424 if (IS_ERR(dev->regs_base)) sahara_probe()
1425 return PTR_ERR(dev->regs_base); sahara_probe()
1430 dev_err(&pdev->dev, "failed to get irq resource\n"); sahara_probe()
1434 err = devm_request_irq(&pdev->dev, irq, sahara_irq_handler, sahara_probe()
1435 0, dev_name(&pdev->dev), dev); sahara_probe()
1437 dev_err(&pdev->dev, "failed to request irq\n"); sahara_probe()
1442 dev->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); sahara_probe()
1443 if (IS_ERR(dev->clk_ipg)) { sahara_probe()
1444 dev_err(&pdev->dev, "Could not get ipg clock\n"); sahara_probe()
1445 return PTR_ERR(dev->clk_ipg); sahara_probe()
1448 dev->clk_ahb = devm_clk_get(&pdev->dev, "ahb"); sahara_probe()
1449 if (IS_ERR(dev->clk_ahb)) { sahara_probe()
1450 dev_err(&pdev->dev, "Could not get ahb clock\n"); sahara_probe()
1451 return PTR_ERR(dev->clk_ahb); sahara_probe()
1455 dev->hw_desc[0] = dmam_alloc_coherent(&pdev->dev, sahara_probe()
1457 &dev->hw_phys_desc[0], GFP_KERNEL); sahara_probe()
1458 if (!dev->hw_desc[0]) { sahara_probe()
1459 dev_err(&pdev->dev, "Could not allocate hw descriptors\n"); sahara_probe()
1462 dev->hw_desc[1] = dev->hw_desc[0] + 1; sahara_probe()
1463 dev->hw_phys_desc[1] = dev->hw_phys_desc[0] + sahara_probe()
1467 dev->key_base = dmam_alloc_coherent(&pdev->dev, 2 * AES_KEYSIZE_128, sahara_probe()
1468 &dev->key_phys_base, GFP_KERNEL); sahara_probe()
1469 if (!dev->key_base) { sahara_probe()
1470 dev_err(&pdev->dev, "Could not allocate memory for key\n"); sahara_probe()
1473 dev->iv_base = dev->key_base + AES_KEYSIZE_128; sahara_probe()
1474 dev->iv_phys_base = dev->key_phys_base + AES_KEYSIZE_128; sahara_probe()
1477 dev->context_base = dmam_alloc_coherent(&pdev->dev, sahara_probe()
1479 &dev->context_phys_base, GFP_KERNEL); sahara_probe()
1480 if (!dev->context_base) { sahara_probe()
1481 dev_err(&pdev->dev, "Could not allocate memory for MDHA context\n"); sahara_probe()
1486 dev->hw_link[0] = dmam_alloc_coherent(&pdev->dev, sahara_probe()
1488 &dev->hw_phys_link[0], GFP_KERNEL); sahara_probe()
1489 if (!dev->hw_link[0]) { sahara_probe()
1490 dev_err(&pdev->dev, "Could not allocate hw links\n"); sahara_probe()
1494 dev->hw_phys_link[i] = dev->hw_phys_link[i - 1] + sahara_probe()
1496 dev->hw_link[i] = dev->hw_link[i - 1] + 1; sahara_probe()
1499 crypto_init_queue(&dev->queue, SAHARA_QUEUE_LENGTH); sahara_probe()
1501 spin_lock_init(&dev->lock); sahara_probe()
1502 mutex_init(&dev->queue_mutex); sahara_probe()
1504 dev_ptr = dev; sahara_probe()
1506 dev->kthread = kthread_run(sahara_queue_manage, dev, "sahara_crypto"); sahara_probe()
1507 if (IS_ERR(dev->kthread)) { sahara_probe()
1508 return PTR_ERR(dev->kthread); sahara_probe()
1511 init_completion(&dev->dma_completion); sahara_probe()
1513 err = clk_prepare_enable(dev->clk_ipg); sahara_probe()
1516 err = clk_prepare_enable(dev->clk_ahb); sahara_probe()
1520 version = sahara_read(dev, SAHARA_REG_VERSION); sahara_probe()
1521 if (of_device_is_compatible(pdev->dev.of_node, "fsl,imx27-sahara")) { sahara_probe()
1524 } else if (of_device_is_compatible(pdev->dev.of_node, sahara_probe()
1531 dev_err(&pdev->dev, "SAHARA version %d not supported\n", sahara_probe()
1536 dev->version = version; sahara_probe()
1538 sahara_write(dev, SAHARA_CMD_RESET | SAHARA_CMD_MODE_BATCH, sahara_probe()
1540 sahara_write(dev, SAHARA_CONTROL_SET_THROTTLE(0) | sahara_probe()
1546 err = sahara_register_algs(dev); sahara_probe()
1550 dev_info(&pdev->dev, "SAHARA version %d initialized\n", version); sahara_probe()
1555 kthread_stop(dev->kthread); sahara_probe()
1557 clk_disable_unprepare(dev->clk_ahb); sahara_probe()
1559 clk_disable_unprepare(dev->clk_ipg); sahara_probe()
1566 struct sahara_dev *dev = platform_get_drvdata(pdev); sahara_remove() local
1568 kthread_stop(dev->kthread); sahara_remove()
1570 sahara_unregister_algs(dev); sahara_remove()
1572 clk_disable_unprepare(dev->clk_ipg); sahara_remove()
1573 clk_disable_unprepare(dev->clk_ahb); sahara_remove()
H A Ds5p-sss.c133 #define SSS_REG(dev, reg) ((dev)->ioaddr + (SSS_REG_##reg))
134 #define SSS_READ(dev, reg) __raw_readl(SSS_REG(dev, reg))
135 #define SSS_WRITE(dev, reg, val) __raw_writel((val), SSS_REG(dev, reg))
137 #define SSS_AES_REG(dev, reg) ((dev)->aes_ioaddr + SSS_REG_##reg)
138 #define SSS_AES_WRITE(dev, reg, val) __raw_writel((val), \
139 SSS_AES_REG(dev, reg))
169 struct s5p_aes_dev *dev; member in struct:s5p_aes_ctx
177 struct device *dev; member in struct:s5p_aes_dev
225 if (IS_ENABLED(CONFIG_OF) && (pdev->dev.of_node)) { find_s5p_sss_version()
228 pdev->dev.of_node); find_s5p_sss_version()
235 static void s5p_set_dma_indata(struct s5p_aes_dev *dev, struct scatterlist *sg) s5p_set_dma_indata() argument
237 SSS_WRITE(dev, FCBRDMAS, sg_dma_address(sg)); s5p_set_dma_indata()
238 SSS_WRITE(dev, FCBRDMAL, sg_dma_len(sg)); s5p_set_dma_indata()
241 static void s5p_set_dma_outdata(struct s5p_aes_dev *dev, struct scatterlist *sg) s5p_set_dma_outdata() argument
243 SSS_WRITE(dev, FCBTDMAS, sg_dma_address(sg)); s5p_set_dma_outdata()
244 SSS_WRITE(dev, FCBTDMAL, sg_dma_len(sg)); s5p_set_dma_outdata()
247 static void s5p_aes_complete(struct s5p_aes_dev *dev, int err) s5p_aes_complete() argument
250 dev->req->base.complete(&dev->req->base, err); s5p_aes_complete()
251 dev->busy = false; s5p_aes_complete()
254 static void s5p_unset_outdata(struct s5p_aes_dev *dev) s5p_unset_outdata() argument
256 dma_unmap_sg(dev->dev, dev->sg_dst, 1, DMA_FROM_DEVICE); s5p_unset_outdata()
259 static void s5p_unset_indata(struct s5p_aes_dev *dev) s5p_unset_indata() argument
261 dma_unmap_sg(dev->dev, dev->sg_src, 1, DMA_TO_DEVICE); s5p_unset_indata()
264 static int s5p_set_outdata(struct s5p_aes_dev *dev, struct scatterlist *sg) s5p_set_outdata() argument
277 err = dma_map_sg(dev->dev, sg, 1, DMA_FROM_DEVICE); s5p_set_outdata()
283 dev->sg_dst = sg; s5p_set_outdata()
290 static int s5p_set_indata(struct s5p_aes_dev *dev, struct scatterlist *sg) s5p_set_indata() argument
303 err = dma_map_sg(dev->dev, sg, 1, DMA_TO_DEVICE); s5p_set_indata()
309 dev->sg_src = sg; s5p_set_indata()
316 static void s5p_aes_tx(struct s5p_aes_dev *dev) s5p_aes_tx() argument
320 s5p_unset_outdata(dev); s5p_aes_tx()
322 if (!sg_is_last(dev->sg_dst)) { s5p_aes_tx()
323 err = s5p_set_outdata(dev, sg_next(dev->sg_dst)); s5p_aes_tx()
325 s5p_aes_complete(dev, err); s5p_aes_tx()
329 s5p_set_dma_outdata(dev, dev->sg_dst); s5p_aes_tx()
331 s5p_aes_complete(dev, err); s5p_aes_tx()
333 dev->busy = true; s5p_aes_tx()
334 tasklet_schedule(&dev->tasklet); s5p_aes_tx()
338 static void s5p_aes_rx(struct s5p_aes_dev *dev) s5p_aes_rx() argument
342 s5p_unset_indata(dev); s5p_aes_rx()
344 if (!sg_is_last(dev->sg_src)) { s5p_aes_rx()
345 err = s5p_set_indata(dev, sg_next(dev->sg_src)); s5p_aes_rx()
347 s5p_aes_complete(dev, err); s5p_aes_rx()
351 s5p_set_dma_indata(dev, dev->sg_src); s5p_aes_rx()
358 struct s5p_aes_dev *dev = platform_get_drvdata(pdev); s5p_aes_interrupt() local
362 spin_lock_irqsave(&dev->lock, flags); s5p_aes_interrupt()
364 if (irq == dev->irq_fc) { s5p_aes_interrupt()
365 status = SSS_READ(dev, FCINTSTAT); s5p_aes_interrupt()
367 s5p_aes_rx(dev); s5p_aes_interrupt()
369 s5p_aes_tx(dev); s5p_aes_interrupt()
371 SSS_WRITE(dev, FCINTPEND, status); s5p_aes_interrupt()
374 spin_unlock_irqrestore(&dev->lock, flags); s5p_aes_interrupt()
379 static void s5p_set_aes(struct s5p_aes_dev *dev, s5p_set_aes() argument
385 memcpy(dev->aes_ioaddr + SSS_REG_AES_IV_DATA(0), iv, 0x10); s5p_set_aes()
388 keystart = dev->aes_ioaddr + SSS_REG_AES_KEY_DATA(0); s5p_set_aes()
390 keystart = dev->aes_ioaddr + SSS_REG_AES_KEY_DATA(2); s5p_set_aes()
392 keystart = dev->aes_ioaddr + SSS_REG_AES_KEY_DATA(4); s5p_set_aes()
397 static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode) s5p_aes_crypt_start() argument
399 struct ablkcipher_request *req = dev->req; s5p_aes_crypt_start()
414 if (dev->ctx->keylen == AES_KEYSIZE_192) s5p_aes_crypt_start()
416 else if (dev->ctx->keylen == AES_KEYSIZE_256) s5p_aes_crypt_start()
428 spin_lock_irqsave(&dev->lock, flags); s5p_aes_crypt_start()
430 SSS_WRITE(dev, FCINTENCLR, s5p_aes_crypt_start()
432 SSS_WRITE(dev, FCFIFOCTRL, 0x00); s5p_aes_crypt_start()
434 err = s5p_set_indata(dev, req->src); s5p_aes_crypt_start()
438 err = s5p_set_outdata(dev, req->dst); s5p_aes_crypt_start()
442 SSS_AES_WRITE(dev, AES_CONTROL, aes_control); s5p_aes_crypt_start()
443 s5p_set_aes(dev, dev->ctx->aes_key, req->info, dev->ctx->keylen); s5p_aes_crypt_start()
445 s5p_set_dma_indata(dev, req->src); s5p_aes_crypt_start()
446 s5p_set_dma_outdata(dev, req->dst); s5p_aes_crypt_start()
448 SSS_WRITE(dev, FCINTENSET, s5p_aes_crypt_start()
451 spin_unlock_irqrestore(&dev->lock, flags); s5p_aes_crypt_start()
456 s5p_unset_indata(dev); s5p_aes_crypt_start()
459 s5p_aes_complete(dev, err); s5p_aes_crypt_start()
460 spin_unlock_irqrestore(&dev->lock, flags); s5p_aes_crypt_start()
465 struct s5p_aes_dev *dev = (struct s5p_aes_dev *)data; s5p_tasklet_cb() local
470 spin_lock_irqsave(&dev->lock, flags); s5p_tasklet_cb()
471 backlog = crypto_get_backlog(&dev->queue); s5p_tasklet_cb()
472 async_req = crypto_dequeue_request(&dev->queue); s5p_tasklet_cb()
475 dev->busy = false; s5p_tasklet_cb()
476 spin_unlock_irqrestore(&dev->lock, flags); s5p_tasklet_cb()
479 spin_unlock_irqrestore(&dev->lock, flags); s5p_tasklet_cb()
484 dev->req = ablkcipher_request_cast(async_req); s5p_tasklet_cb()
485 dev->ctx = crypto_tfm_ctx(dev->req->base.tfm); s5p_tasklet_cb()
486 reqctx = ablkcipher_request_ctx(dev->req); s5p_tasklet_cb()
488 s5p_aes_crypt_start(dev, reqctx->mode); s5p_tasklet_cb()
491 static int s5p_aes_handle_req(struct s5p_aes_dev *dev, s5p_aes_handle_req() argument
497 spin_lock_irqsave(&dev->lock, flags); s5p_aes_handle_req()
498 err = ablkcipher_enqueue_request(&dev->queue, req); s5p_aes_handle_req()
499 if (dev->busy) { s5p_aes_handle_req()
500 spin_unlock_irqrestore(&dev->lock, flags); s5p_aes_handle_req()
503 dev->busy = true; s5p_aes_handle_req()
505 spin_unlock_irqrestore(&dev->lock, flags); s5p_aes_handle_req()
507 tasklet_schedule(&dev->tasklet); s5p_aes_handle_req()
518 struct s5p_aes_dev *dev = ctx->dev; s5p_aes_crypt() local
527 return s5p_aes_handle_req(dev, req); s5p_aes_crypt()
571 ctx->dev = s5p_dev; s5p_aes_cra_init()
627 struct device *dev = &pdev->dev; s5p_aes_probe() local
634 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); s5p_aes_probe()
639 pdata->ioaddr = devm_ioremap_resource(&pdev->dev, res); s5p_aes_probe()
645 pdata->clk = devm_clk_get(dev, "secss"); s5p_aes_probe()
647 dev_err(dev, "failed to find secss clock source\n"); s5p_aes_probe()
653 dev_err(dev, "Enabling SSS clk failed, err %d\n", err); s5p_aes_probe()
664 dev_warn(dev, "feed control interrupt is not available.\n"); s5p_aes_probe()
667 err = devm_request_irq(dev, pdata->irq_fc, s5p_aes_interrupt, s5p_aes_probe()
670 dev_warn(dev, "feed control interrupt is not available.\n"); s5p_aes_probe()
678 dev_warn(dev, "hash interrupt is not available.\n"); s5p_aes_probe()
681 err = devm_request_irq(dev, pdata->irq_hash, s5p_aes_interrupt, s5p_aes_probe()
684 dev_warn(dev, "hash interrupt is not available.\n"); s5p_aes_probe()
691 pdata->dev = dev; s5p_aes_probe()
709 dev_err(dev, "can't register '%s': %d\n", algs[i].cra_name, err); s5p_aes_probe()
/linux-4.4.14/drivers/gpu/drm/nouveau/
H A Dnouveau_vga.c38 struct drm_device *dev = pci_get_drvdata(pdev); nouveau_switcheroo_set_state() local
45 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; nouveau_switcheroo_set_state()
46 nouveau_pmops_resume(&pdev->dev); nouveau_switcheroo_set_state()
47 drm_kms_helper_poll_enable(dev); nouveau_switcheroo_set_state()
48 dev->switch_power_state = DRM_SWITCH_POWER_ON; nouveau_switcheroo_set_state()
51 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; nouveau_switcheroo_set_state()
52 drm_kms_helper_poll_disable(dev); nouveau_switcheroo_set_state()
54 nouveau_pmops_suspend(&pdev->dev); nouveau_switcheroo_set_state()
55 dev->switch_power_state = DRM_SWITCH_POWER_OFF; nouveau_switcheroo_set_state()
62 struct drm_device *dev = pci_get_drvdata(pdev); nouveau_switcheroo_reprobe() local
63 nouveau_fbcon_output_poll_changed(dev); nouveau_switcheroo_reprobe()
69 struct drm_device *dev = pci_get_drvdata(pdev); nouveau_switcheroo_can_switch() local
76 return dev->open_count == 0; nouveau_switcheroo_can_switch()
89 struct drm_device *dev = drm->dev; nouveau_vga_init() local
93 if (!dev->pdev) nouveau_vga_init()
96 vga_client_register(dev->pdev, dev, NULL, nouveau_vga_set_decode); nouveau_vga_init()
102 vga_switcheroo_register_client(dev->pdev, &nouveau_switcheroo_ops, runtime); nouveau_vga_init()
105 vga_switcheroo_init_domain_pm_ops(drm->dev->dev, &drm->vga_pm_domain); nouveau_vga_init()
111 struct drm_device *dev = drm->dev; nouveau_vga_fini() local
119 vga_switcheroo_unregister_client(dev->pdev); nouveau_vga_fini()
121 vga_switcheroo_fini_domain_pm_ops(drm->dev->dev); nouveau_vga_fini()
122 vga_client_register(dev->pdev, NULL, NULL, NULL); nouveau_vga_fini()
127 nouveau_vga_lastclose(struct drm_device *dev) nouveau_vga_lastclose() argument
/linux-4.4.14/sound/aoa/soundbus/
H A Dcore.c16 struct soundbus_dev *soundbus_dev_get(struct soundbus_dev *dev) soundbus_dev_get() argument
20 if (!dev) soundbus_dev_get()
22 tmp = get_device(&dev->ofdev.dev); soundbus_dev_get()
30 void soundbus_dev_put(struct soundbus_dev *dev) soundbus_dev_put() argument
32 if (dev) soundbus_dev_put()
33 put_device(&dev->ofdev.dev); soundbus_dev_put()
37 static int soundbus_probe(struct device *dev) soundbus_probe() argument
43 drv = to_soundbus_driver(dev->driver); soundbus_probe()
44 soundbus_dev = to_soundbus_device(dev); soundbus_probe()
59 static int soundbus_uevent(struct device *dev, struct kobj_uevent_env *env) soundbus_uevent() argument
67 if (!dev) soundbus_uevent()
70 soundbus_dev = to_soundbus_device(dev); soundbus_uevent()
77 retval = add_uevent_var(env, "OF_NAME=%s", of->dev.of_node->name); soundbus_uevent()
81 retval = add_uevent_var(env, "OF_TYPE=%s", of->dev.of_node->type); soundbus_uevent()
89 compat = of_get_property(of->dev.of_node, "compatible", &cplen); soundbus_uevent()
108 static int soundbus_device_remove(struct device *dev) soundbus_device_remove() argument
110 struct soundbus_dev * soundbus_dev = to_soundbus_device(dev); soundbus_device_remove()
111 struct soundbus_driver * drv = to_soundbus_driver(dev->driver); soundbus_device_remove()
113 if (dev->driver && drv->remove) soundbus_device_remove()
120 static void soundbus_device_shutdown(struct device *dev) soundbus_device_shutdown() argument
122 struct soundbus_dev * soundbus_dev = to_soundbus_device(dev); soundbus_device_shutdown()
123 struct soundbus_driver * drv = to_soundbus_driver(dev->driver); soundbus_device_shutdown()
125 if (dev->driver && drv->shutdown) soundbus_device_shutdown()
140 int soundbus_add_one(struct soundbus_dev *dev) soundbus_add_one() argument
145 if (!dev->attach_codec || soundbus_add_one()
146 !dev->ofdev.dev.of_node || soundbus_add_one()
147 dev->pcmname || soundbus_add_one()
148 dev->pcmid != -1) { soundbus_add_one()
153 dev_set_name(&dev->ofdev.dev, "soundbus:%x", ++devcount); soundbus_add_one()
154 dev->ofdev.dev.bus = &soundbus_bus_type; soundbus_add_one()
155 return of_device_register(&dev->ofdev); soundbus_add_one()
159 void soundbus_remove_one(struct soundbus_dev *dev) soundbus_remove_one() argument
161 of_device_unregister(&dev->ofdev); soundbus_remove_one()
/linux-4.4.14/drivers/media/usb/stkwebcam/
H A Dstk-webcam.c128 int stk_camera_write_reg(struct stk_camera *dev, u16 index, u8 value) stk_camera_write_reg() argument
130 struct usb_device *udev = dev->udev; stk_camera_write_reg()
147 int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value) stk_camera_read_reg() argument
149 struct usb_device *udev = dev->udev; stk_camera_read_reg()
166 static int stk_start_stream(struct stk_camera *dev) stk_start_stream() argument
172 if (!is_present(dev)) stk_start_stream()
174 if (!is_memallocd(dev) || !is_initialised(dev)) { stk_start_stream()
178 ret = usb_set_interface(dev->udev, 0, 5); stk_start_stream()
182 if (stk_sensor_wakeup(dev)) stk_start_stream()
185 stk_camera_read_reg(dev, 0x0116, &value_116); stk_start_stream()
186 stk_camera_read_reg(dev, 0x0117, &value_117); stk_start_stream()
188 stk_camera_write_reg(dev, 0x0116, 0x0000); stk_start_stream()
189 stk_camera_write_reg(dev, 0x0117, 0x0000); stk_start_stream()
191 stk_camera_read_reg(dev, 0x0100, &value); stk_start_stream()
192 stk_camera_write_reg(dev, 0x0100, value | 0x80); stk_start_stream()
194 stk_camera_write_reg(dev, 0x0116, value_116); stk_start_stream()
195 stk_camera_write_reg(dev, 0x0117, value_117); stk_start_stream()
197 if (dev->isobufs[i].urb) { stk_start_stream()
198 ret = usb_submit_urb(dev->isobufs[i].urb, GFP_KERNEL); stk_start_stream()
199 atomic_inc(&dev->urbs_used); stk_start_stream()
204 set_streaming(dev); stk_start_stream()
208 static int stk_stop_stream(struct stk_camera *dev) stk_stop_stream() argument
212 if (is_present(dev)) { stk_stop_stream()
213 stk_camera_read_reg(dev, 0x0100, &value); stk_stop_stream()
214 stk_camera_write_reg(dev, 0x0100, value & ~0x80); stk_stop_stream()
215 if (dev->isobufs != NULL) { stk_stop_stream()
217 if (dev->isobufs[i].urb) stk_stop_stream()
218 usb_kill_urb(dev->isobufs[i].urb); stk_stop_stream()
221 unset_streaming(dev); stk_stop_stream()
223 if (usb_set_interface(dev->udev, 0, 0)) stk_stop_stream()
225 if (stk_sensor_sleep(dev)) stk_stop_stream()
269 static int stk_initialise(struct stk_camera *dev) stk_initialise() argument
273 if (!is_present(dev)) stk_initialise()
275 if (is_initialised(dev)) stk_initialise()
279 ret = stk_camera_write_reg(dev, rv->reg, rv->val); stk_initialise()
284 if (stk_sensor_init(dev) == 0) { stk_initialise()
285 set_initialised(dev); stk_initialise()
307 struct stk_camera *dev; stk_isoc_handler() local
310 dev = (struct stk_camera *) urb->context; stk_isoc_handler()
312 if (dev == NULL) { stk_isoc_handler()
319 atomic_dec(&dev->urbs_used); stk_isoc_handler()
323 spin_lock_irqsave(&dev->spinlock, flags); stk_isoc_handler()
330 if (list_empty(&dev->sio_avail)) { stk_isoc_handler()
336 fb = list_first_entry(&dev->sio_avail, stk_isoc_handler()
367 && fb->v4lbuf.bytesused != dev->frame_size) { stk_isoc_handler()
374 } else if (fb->v4lbuf.bytesused == dev->frame_size) { stk_isoc_handler()
375 if (list_is_singular(&dev->sio_avail)) { stk_isoc_handler()
380 list_move_tail(dev->sio_avail.next, stk_isoc_handler()
381 &dev->sio_full); stk_isoc_handler()
382 wake_up(&dev->wait_frame); stk_isoc_handler()
383 fb = list_first_entry(&dev->sio_avail, stk_isoc_handler()
395 if (framelen + fb->v4lbuf.bytesused > dev->frame_size) { stk_isoc_handler()
401 spin_unlock_irqrestore(&dev->spinlock, flags); stk_isoc_handler()
403 spin_lock_irqsave(&dev->spinlock, flags); stk_isoc_handler()
411 spin_unlock_irqrestore(&dev->spinlock, flags); stk_isoc_handler()
412 urb->dev = dev->udev; stk_isoc_handler()
422 static int stk_prepare_iso(struct stk_camera *dev) stk_prepare_iso() argument
429 if (dev == NULL) stk_prepare_iso()
431 udev = dev->udev; stk_prepare_iso()
433 if (dev->isobufs) stk_prepare_iso()
436 dev->isobufs = kcalloc(MAX_ISO_BUFS, sizeof(*dev->isobufs), stk_prepare_iso()
438 if (dev->isobufs == NULL) { stk_prepare_iso()
443 if (dev->isobufs[i].data == NULL) { stk_prepare_iso()
450 dev->isobufs[i].data = kbuf; stk_prepare_iso()
453 if (dev->isobufs[i].urb == NULL) { stk_prepare_iso()
459 dev->isobufs[i].urb = urb; stk_prepare_iso()
462 usb_kill_urb(dev->isobufs[i].urb); stk_prepare_iso()
463 urb = dev->isobufs[i].urb; stk_prepare_iso()
466 urb->dev = udev; stk_prepare_iso()
467 urb->pipe = usb_rcvisocpipe(udev, dev->isoc_ep); stk_prepare_iso()
469 urb->transfer_buffer = dev->isobufs[i].data; stk_prepare_iso()
472 urb->context = dev; stk_prepare_iso()
481 set_memallocd(dev); stk_prepare_iso()
485 for (i = 0; i < MAX_ISO_BUFS && dev->isobufs[i].data; i++) stk_prepare_iso()
486 kfree(dev->isobufs[i].data); stk_prepare_iso()
487 for (i = 0; i < MAX_ISO_BUFS && dev->isobufs[i].urb; i++) stk_prepare_iso()
488 usb_free_urb(dev->isobufs[i].urb); stk_prepare_iso()
489 kfree(dev->isobufs); stk_prepare_iso()
490 dev->isobufs = NULL; stk_prepare_iso()
494 static void stk_clean_iso(struct stk_camera *dev) stk_clean_iso() argument
498 if (dev == NULL || dev->isobufs == NULL) stk_clean_iso()
504 urb = dev->isobufs[i].urb; stk_clean_iso()
506 if (atomic_read(&dev->urbs_used) && is_present(dev)) stk_clean_iso()
510 kfree(dev->isobufs[i].data); stk_clean_iso()
512 kfree(dev->isobufs); stk_clean_iso()
513 dev->isobufs = NULL; stk_clean_iso()
514 unset_memallocd(dev); stk_clean_iso()
517 static int stk_setup_siobuf(struct stk_camera *dev, int index) stk_setup_siobuf() argument
519 struct stk_sio_buffer *buf = dev->sio_bufs + index; stk_setup_siobuf()
521 buf->v4lbuf.length = PAGE_ALIGN(dev->frame_size); stk_setup_siobuf()
526 buf->dev = dev; stk_setup_siobuf()
536 static int stk_free_sio_buffers(struct stk_camera *dev) stk_free_sio_buffers() argument
541 if (dev->n_sbufs == 0 || dev->sio_bufs == NULL) stk_free_sio_buffers()
546 for (i = 0; i < dev->n_sbufs; i++) { stk_free_sio_buffers()
547 if (dev->sio_bufs[i].mapcount > 0) stk_free_sio_buffers()
553 spin_lock_irqsave(&dev->spinlock, flags); stk_free_sio_buffers()
554 INIT_LIST_HEAD(&dev->sio_avail); stk_free_sio_buffers()
555 INIT_LIST_HEAD(&dev->sio_full); stk_free_sio_buffers()
556 nbufs = dev->n_sbufs; stk_free_sio_buffers()
557 dev->n_sbufs = 0; stk_free_sio_buffers()
558 spin_unlock_irqrestore(&dev->spinlock, flags); stk_free_sio_buffers()
560 vfree(dev->sio_bufs[i].buffer); stk_free_sio_buffers()
561 kfree(dev->sio_bufs); stk_free_sio_buffers()
562 dev->sio_bufs = NULL; stk_free_sio_buffers()
566 static int stk_prepare_sio_buffers(struct stk_camera *dev, unsigned n_sbufs) stk_prepare_sio_buffers() argument
569 if (dev->sio_bufs != NULL) stk_prepare_sio_buffers()
572 dev->sio_bufs = kzalloc(n_sbufs * sizeof(struct stk_sio_buffer), stk_prepare_sio_buffers()
574 if (dev->sio_bufs == NULL) stk_prepare_sio_buffers()
577 if (stk_setup_siobuf(dev, i)) stk_prepare_sio_buffers()
578 return (dev->n_sbufs > 1 ? 0 : -ENOMEM); stk_prepare_sio_buffers()
579 dev->n_sbufs = i+1; stk_prepare_sio_buffers()
585 static int stk_allocate_buffers(struct stk_camera *dev, unsigned n_sbufs) stk_allocate_buffers() argument
588 err = stk_prepare_iso(dev); stk_allocate_buffers()
590 stk_clean_iso(dev); stk_allocate_buffers()
593 err = stk_prepare_sio_buffers(dev, n_sbufs); stk_allocate_buffers()
595 stk_free_sio_buffers(dev); stk_allocate_buffers()
601 static void stk_free_buffers(struct stk_camera *dev) stk_free_buffers() argument
603 stk_clean_iso(dev); stk_free_buffers()
604 stk_free_sio_buffers(dev); stk_free_buffers()
612 struct stk_camera *dev = video_drvdata(fp); v4l_stk_open() local
615 if (dev == NULL || !is_present(dev)) v4l_stk_open()
618 if (mutex_lock_interruptible(&dev->lock)) v4l_stk_open()
620 if (!dev->first_init) v4l_stk_open()
621 stk_camera_write_reg(dev, 0x0, 0x24); v4l_stk_open()
623 dev->first_init = 0; v4l_stk_open()
627 usb_autopm_get_interface(dev->interface); v4l_stk_open()
628 mutex_unlock(&dev->lock); v4l_stk_open()
634 struct stk_camera *dev = video_drvdata(fp); v4l_stk_release() local
636 mutex_lock(&dev->lock); v4l_stk_release()
637 if (dev->owner == fp) { v4l_stk_release()
638 stk_stop_stream(dev); v4l_stk_release()
639 stk_free_buffers(dev); v4l_stk_release()
640 stk_camera_write_reg(dev, 0x0, 0x49); /* turn off the LED */ v4l_stk_release()
641 unset_initialised(dev); v4l_stk_release()
642 dev->owner = NULL; v4l_stk_release()
645 if (is_present(dev)) v4l_stk_release()
646 usb_autopm_put_interface(dev->interface); v4l_stk_release()
647 mutex_unlock(&dev->lock); v4l_stk_release()
658 struct stk_camera *dev = video_drvdata(fp); stk_read() local
660 if (!is_present(dev)) stk_read()
662 if (dev->owner && (!dev->reading || dev->owner != fp)) stk_read()
664 dev->owner = fp; stk_read()
665 if (!is_streaming(dev)) { stk_read()
666 if (stk_initialise(dev) stk_read()
667 || stk_allocate_buffers(dev, 3) stk_read()
668 || stk_start_stream(dev)) stk_read()
670 dev->reading = 1; stk_read()
671 spin_lock_irqsave(&dev->spinlock, flags); stk_read()
672 for (i = 0; i < dev->n_sbufs; i++) { stk_read()
673 list_add_tail(&dev->sio_bufs[i].list, &dev->sio_avail); stk_read()
674 dev->sio_bufs[i].v4lbuf.flags = V4L2_BUF_FLAG_QUEUED; stk_read()
676 spin_unlock_irqrestore(&dev->spinlock, flags); stk_read()
679 if (fp->f_flags & O_NONBLOCK && list_empty(&dev->sio_full)) stk_read()
681 ret = wait_event_interruptible(dev->wait_frame, stk_read()
682 !list_empty(&dev->sio_full) || !is_present(dev)); stk_read()
685 if (!is_present(dev)) stk_read()
688 if (count + *f_pos > dev->frame_size) stk_read()
689 count = dev->frame_size - *f_pos; stk_read()
690 spin_lock_irqsave(&dev->spinlock, flags); stk_read()
691 if (list_empty(&dev->sio_full)) { stk_read()
692 spin_unlock_irqrestore(&dev->spinlock, flags); stk_read()
696 sbuf = list_first_entry(&dev->sio_full, struct stk_sio_buffer, list); stk_read()
697 spin_unlock_irqrestore(&dev->spinlock, flags); stk_read()
704 if (*f_pos >= dev->frame_size) { stk_read()
706 spin_lock_irqsave(&dev->spinlock, flags); stk_read()
707 list_move_tail(&sbuf->list, &dev->sio_avail); stk_read()
708 spin_unlock_irqrestore(&dev->spinlock, flags); stk_read()
716 struct stk_camera *dev = video_drvdata(fp); v4l_stk_read() local
719 if (mutex_lock_interruptible(&dev->lock)) v4l_stk_read()
722 mutex_unlock(&dev->lock); v4l_stk_read()
728 struct stk_camera *dev = video_drvdata(fp); v4l_stk_poll() local
731 poll_wait(fp, &dev->wait_frame, wait); v4l_stk_poll()
733 if (!is_present(dev)) v4l_stk_poll()
736 if (!list_empty(&dev->sio_full)) v4l_stk_poll()
765 struct stk_camera *dev = video_drvdata(fp); v4l_stk_mmap() local
771 for (i = 0; i < dev->n_sbufs; i++) { v4l_stk_mmap()
772 if (dev->sio_bufs[i].v4lbuf.m.offset == offset) { v4l_stk_mmap()
773 sbuf = dev->sio_bufs + i; v4l_stk_mmap()
795 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_querycap() local
799 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); stk_vidioc_querycap()
832 struct stk_camera *dev = stk_s_ctrl() local
837 return stk_sensor_set_brightness(dev, ctrl->val); stk_s_ctrl()
840 dev->vsettings.hflip = !ctrl->val; stk_s_ctrl()
842 dev->vsettings.hflip = ctrl->val; stk_s_ctrl()
846 dev->vsettings.vflip = !ctrl->val; stk_s_ctrl()
848 dev->vsettings.vflip = ctrl->val; stk_s_ctrl()
903 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_g_fmt_vid_cap() local
907 stk_sizes[i].m != dev->vsettings.mode; i++) stk_vidioc_g_fmt_vid_cap()
917 pix_format->pixelformat = dev->vsettings.palette; stk_vidioc_g_fmt_vid_cap()
918 if (dev->vsettings.palette == V4L2_PIX_FMT_SBGGR8) stk_vidioc_g_fmt_vid_cap()
976 static int stk_setup_format(struct stk_camera *dev) stk_setup_format() argument
980 if (dev->vsettings.palette == V4L2_PIX_FMT_SBGGR8) stk_setup_format()
985 stk_sizes[i].m != dev->vsettings.mode) stk_setup_format()
992 stk_camera_write_reg(dev, 0x001b, 0x0e); stk_setup_format()
993 if (dev->vsettings.mode == MODE_SXGA) stk_setup_format()
994 stk_camera_write_reg(dev, 0x001c, 0x0e); stk_setup_format()
996 stk_camera_write_reg(dev, 0x001c, 0x46); stk_setup_format()
1001 stk_camera_write_reg(dev, 0x0115, stk_setup_format()
1003 stk_camera_write_reg(dev, 0x0114, stk_setup_format()
1005 stk_camera_write_reg(dev, 0x0117, stk_setup_format()
1007 stk_camera_write_reg(dev, 0x0116, stk_setup_format()
1009 return stk_sensor_configure(dev); stk_setup_format()
1017 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_s_fmt_vid_cap() local
1019 if (dev == NULL) stk_vidioc_s_fmt_vid_cap()
1021 if (!is_present(dev)) stk_vidioc_s_fmt_vid_cap()
1023 if (is_streaming(dev)) stk_vidioc_s_fmt_vid_cap()
1025 if (dev->owner) stk_vidioc_s_fmt_vid_cap()
1031 dev->vsettings.palette = fmtd->fmt.pix.pixelformat; stk_vidioc_s_fmt_vid_cap()
1032 stk_free_buffers(dev); stk_vidioc_s_fmt_vid_cap()
1033 dev->frame_size = fmtd->fmt.pix.sizeimage; stk_vidioc_s_fmt_vid_cap()
1034 dev->vsettings.mode = stk_sizes[idx].m; stk_vidioc_s_fmt_vid_cap()
1036 stk_initialise(dev); stk_vidioc_s_fmt_vid_cap()
1037 return stk_setup_format(dev); stk_vidioc_s_fmt_vid_cap()
1043 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_reqbufs() local
1045 if (dev == NULL) stk_vidioc_reqbufs()
1049 if (is_streaming(dev) stk_vidioc_reqbufs()
1050 || (dev->owner && dev->owner != filp)) stk_vidioc_reqbufs()
1052 stk_free_buffers(dev); stk_vidioc_reqbufs()
1054 stk_camera_write_reg(dev, 0x0, 0x49); /* turn off the LED */ stk_vidioc_reqbufs()
1055 unset_initialised(dev); stk_vidioc_reqbufs()
1056 dev->owner = NULL; stk_vidioc_reqbufs()
1059 dev->owner = filp; stk_vidioc_reqbufs()
1068 stk_allocate_buffers(dev, rb->count); stk_vidioc_reqbufs()
1069 rb->count = dev->n_sbufs; stk_vidioc_reqbufs()
1076 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_querybuf() local
1079 if (buf->index >= dev->n_sbufs) stk_vidioc_querybuf()
1081 sbuf = dev->sio_bufs + buf->index; stk_vidioc_querybuf()
1089 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_qbuf() local
1096 if (buf->index >= dev->n_sbufs) stk_vidioc_qbuf()
1098 sbuf = dev->sio_bufs + buf->index; stk_vidioc_qbuf()
1103 spin_lock_irqsave(&dev->spinlock, flags); stk_vidioc_qbuf()
1104 list_add_tail(&sbuf->list, &dev->sio_avail); stk_vidioc_qbuf()
1106 spin_unlock_irqrestore(&dev->spinlock, flags); stk_vidioc_qbuf()
1113 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_dqbuf() local
1118 if (!is_streaming(dev)) stk_vidioc_dqbuf()
1121 if (filp->f_flags & O_NONBLOCK && list_empty(&dev->sio_full)) stk_vidioc_dqbuf()
1123 ret = wait_event_interruptible(dev->wait_frame, stk_vidioc_dqbuf()
1124 !list_empty(&dev->sio_full) || !is_present(dev)); stk_vidioc_dqbuf()
1127 if (!is_present(dev)) stk_vidioc_dqbuf()
1130 spin_lock_irqsave(&dev->spinlock, flags); stk_vidioc_dqbuf()
1131 sbuf = list_first_entry(&dev->sio_full, struct stk_sio_buffer, list); stk_vidioc_dqbuf()
1133 spin_unlock_irqrestore(&dev->spinlock, flags); stk_vidioc_dqbuf()
1136 sbuf->v4lbuf.sequence = ++dev->sequence; stk_vidioc_dqbuf()
1146 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_streamon() local
1147 if (is_streaming(dev)) stk_vidioc_streamon()
1149 if (dev->sio_bufs == NULL) stk_vidioc_streamon()
1151 dev->sequence = 0; stk_vidioc_streamon()
1152 return stk_start_stream(dev); stk_vidioc_streamon()
1158 struct stk_camera *dev = video_drvdata(filp); stk_vidioc_streamoff() local
1161 stk_stop_stream(dev); stk_vidioc_streamoff()
1162 spin_lock_irqsave(&dev->spinlock, flags); stk_vidioc_streamoff()
1163 INIT_LIST_HEAD(&dev->sio_avail); stk_vidioc_streamoff()
1164 INIT_LIST_HEAD(&dev->sio_full); stk_vidioc_streamoff()
1165 for (i = 0; i < dev->n_sbufs; i++) { stk_vidioc_streamoff()
1166 INIT_LIST_HEAD(&dev->sio_bufs[i].list); stk_vidioc_streamoff()
1167 dev->sio_bufs[i].v4lbuf.flags = 0; stk_vidioc_streamoff()
1169 spin_unlock_irqrestore(&dev->spinlock, flags); stk_vidioc_streamoff()
1241 struct stk_camera *dev = vdev_to_camera(vd); stk_v4l_dev_release() local
1243 if (dev->sio_bufs != NULL || dev->isobufs != NULL) stk_v4l_dev_release()
1245 usb_put_intf(dev->interface); stk_v4l_dev_release()
1246 kfree(dev); stk_v4l_dev_release()
1257 static int stk_register_video_device(struct stk_camera *dev) stk_register_video_device() argument
1261 dev->vdev = stk_v4l_data; stk_register_video_device()
1262 dev->vdev.lock = &dev->lock; stk_register_video_device()
1263 dev->vdev.v4l2_dev = &dev->v4l2_dev; stk_register_video_device()
1264 video_set_drvdata(&dev->vdev, dev); stk_register_video_device()
1265 err = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1); stk_register_video_device()
1270 video_device_node_name(&dev->vdev)); stk_register_video_device()
1284 struct stk_camera *dev = NULL; stk_camera_probe() local
1289 dev = kzalloc(sizeof(struct stk_camera), GFP_KERNEL); stk_camera_probe()
1290 if (dev == NULL) { stk_camera_probe()
1294 err = v4l2_device_register(&interface->dev, &dev->v4l2_dev); stk_camera_probe()
1296 dev_err(&udev->dev, "couldn't register v4l2_device\n"); stk_camera_probe()
1297 kfree(dev); stk_camera_probe()
1300 hdl = &dev->hdl; stk_camera_probe()
1310 dev_err(&udev->dev, "couldn't register control\n"); stk_camera_probe()
1313 dev->v4l2_dev.ctrl_handler = hdl; stk_camera_probe()
1315 spin_lock_init(&dev->spinlock); stk_camera_probe()
1316 mutex_init(&dev->lock); stk_camera_probe()
1317 init_waitqueue_head(&dev->wait_frame); stk_camera_probe()
1318 dev->first_init = 1; /* webcam LED management */ stk_camera_probe()
1320 dev->udev = udev; stk_camera_probe()
1321 dev->interface = interface; stk_camera_probe()
1325 dev->vsettings.hflip = hflip; stk_camera_probe()
1327 dev->vsettings.hflip = 1; stk_camera_probe()
1329 dev->vsettings.hflip = 0; stk_camera_probe()
1331 dev->vsettings.vflip = vflip; stk_camera_probe()
1333 dev->vsettings.vflip = 1; stk_camera_probe()
1335 dev->vsettings.vflip = 0; stk_camera_probe()
1336 dev->n_sbufs = 0; stk_camera_probe()
1337 set_present(dev); stk_camera_probe()
1347 if (!dev->isoc_ep stk_camera_probe()
1350 dev->isoc_ep = usb_endpoint_num(endpoint); stk_camera_probe()
1354 if (!dev->isoc_ep) { stk_camera_probe()
1359 dev->vsettings.palette = V4L2_PIX_FMT_RGB565; stk_camera_probe()
1360 dev->vsettings.mode = MODE_VGA; stk_camera_probe()
1361 dev->frame_size = 640 * 480 * 2; stk_camera_probe()
1363 INIT_LIST_HEAD(&dev->sio_avail); stk_camera_probe()
1364 INIT_LIST_HEAD(&dev->sio_full); stk_camera_probe()
1366 usb_set_intfdata(interface, dev); stk_camera_probe()
1368 err = stk_register_video_device(dev); stk_camera_probe()
1376 v4l2_device_unregister(&dev->v4l2_dev); stk_camera_probe()
1377 kfree(dev); stk_camera_probe()
1383 struct stk_camera *dev = usb_get_intfdata(interface); stk_camera_disconnect() local
1386 unset_present(dev); stk_camera_disconnect()
1388 wake_up_interruptible(&dev->wait_frame); stk_camera_disconnect()
1391 video_device_node_name(&dev->vdev)); stk_camera_disconnect()
1393 video_unregister_device(&dev->vdev); stk_camera_disconnect()
1394 v4l2_ctrl_handler_free(&dev->hdl); stk_camera_disconnect()
1395 v4l2_device_unregister(&dev->v4l2_dev); stk_camera_disconnect()
1401 struct stk_camera *dev = usb_get_intfdata(intf); stk_camera_suspend() local
1402 if (is_streaming(dev)) { stk_camera_suspend()
1403 stk_stop_stream(dev); stk_camera_suspend()
1405 set_streaming(dev); stk_camera_suspend()
1412 struct stk_camera *dev = usb_get_intfdata(intf); stk_camera_resume() local
1413 if (!is_initialised(dev)) stk_camera_resume()
1415 unset_initialised(dev); stk_camera_resume()
1416 stk_initialise(dev); stk_camera_resume()
1417 stk_camera_write_reg(dev, 0x0, 0x49); stk_camera_resume()
1418 stk_setup_format(dev); stk_camera_resume()
1419 if (is_streaming(dev)) stk_camera_resume()
1420 stk_start_stream(dev); stk_camera_resume()
/linux-4.4.14/drivers/w1/masters/
H A Dmatrox_w1.c106 static __inline__ u8 matrox_w1_read_reg(struct matrox_device *dev, u8 reg) matrox_w1_read_reg() argument
110 writeb(reg, dev->port_index); matrox_w1_read_reg()
111 ret = readb(dev->port_data); matrox_w1_read_reg()
117 static __inline__ void matrox_w1_write_reg(struct matrox_device *dev, u8 reg, u8 val) matrox_w1_write_reg() argument
119 writeb(reg, dev->port_index); matrox_w1_write_reg()
120 writeb(val, dev->port_data); matrox_w1_write_reg()
127 struct matrox_device *dev = data; matrox_w1_write_ddc_bit() local
132 bit = dev->data_mask; matrox_w1_write_ddc_bit()
134 ret = matrox_w1_read_reg(dev, MATROX_GET_CONTROL); matrox_w1_write_ddc_bit()
135 matrox_w1_write_reg(dev, MATROX_GET_CONTROL, ((ret & ~dev->data_mask) | bit)); matrox_w1_write_ddc_bit()
136 matrox_w1_write_reg(dev, MATROX_GET_DATA, 0x00); matrox_w1_write_ddc_bit()
142 struct matrox_device *dev = data; matrox_w1_read_ddc_bit() local
144 ret = matrox_w1_read_reg(dev, MATROX_GET_DATA); matrox_w1_read_ddc_bit()
149 static void matrox_w1_hw_init(struct matrox_device *dev) matrox_w1_hw_init() argument
151 matrox_w1_write_reg(dev, MATROX_GET_DATA, 0xFF); matrox_w1_hw_init()
152 matrox_w1_write_reg(dev, MATROX_GET_CONTROL, 0x00); matrox_w1_hw_init()
157 struct matrox_device *dev; matrox_w1_probe() local
166 dev = kzalloc(sizeof(struct matrox_device) + matrox_w1_probe()
168 if (!dev) { matrox_w1_probe()
169 dev_err(&pdev->dev, matrox_w1_probe()
176 dev->bus_master = (struct w1_bus_master *)(dev + 1); matrox_w1_probe()
182 dev->phys_addr = pci_resource_start(pdev, 1); matrox_w1_probe()
184 dev->virt_addr = ioremap_nocache(dev->phys_addr, 16384); matrox_w1_probe()
185 if (!dev->virt_addr) { matrox_w1_probe()
186 dev_err(&pdev->dev, "%s: failed to ioremap(0x%lx, %d).\n", matrox_w1_probe()
187 __func__, dev->phys_addr, 16384); matrox_w1_probe()
192 dev->base_addr = dev->virt_addr + MATROX_BASE; matrox_w1_probe()
193 dev->port_index = dev->base_addr + MATROX_PORT_INDEX_OFFSET; matrox_w1_probe()
194 dev->port_data = dev->base_addr + MATROX_PORT_DATA_OFFSET; matrox_w1_probe()
195 dev->data_mask = (MATROX_G400_DDC_DATA); matrox_w1_probe()
197 matrox_w1_hw_init(dev); matrox_w1_probe()
199 dev->bus_master->data = dev; matrox_w1_probe()
200 dev->bus_master->read_bit = &matrox_w1_read_ddc_bit; matrox_w1_probe()
201 dev->bus_master->write_bit = &matrox_w1_write_ddc_bit; matrox_w1_probe()
203 err = w1_add_master_device(dev->bus_master); matrox_w1_probe()
207 pci_set_drvdata(pdev, dev); matrox_w1_probe()
209 dev->found = 1; matrox_w1_probe()
211 dev_info(&pdev->dev, "Matrox G400 GPIO transport layer for 1-wire.\n"); matrox_w1_probe()
216 if (dev->virt_addr) matrox_w1_probe()
217 iounmap(dev->virt_addr); matrox_w1_probe()
218 kfree(dev); matrox_w1_probe()
225 struct matrox_device *dev = pci_get_drvdata(pdev); matrox_w1_remove() local
227 assert(dev != NULL); matrox_w1_remove()
229 if (dev->found) { matrox_w1_remove()
230 w1_remove_master_device(dev->bus_master); matrox_w1_remove()
231 iounmap(dev->virt_addr); matrox_w1_remove()
233 kfree(dev); matrox_w1_remove()
/linux-4.4.14/drivers/media/pci/saa7134/
H A Dsaa7134-core.c102 int (*saa7134_dmasound_init)(struct saa7134_dev *dev);
103 int (*saa7134_dmasound_exit)(struct saa7134_dev *dev);
115 void saa7134_track_gpio(struct saa7134_dev *dev, char *msg) saa7134_track_gpio() argument
127 dev->name, mode, (~mode) & status, mode & status, msg); saa7134_track_gpio()
130 void saa7134_set_gpio(struct saa7134_dev *dev, int bit_no, int value) saa7134_set_gpio() argument
165 struct saa7134_dev* dev = container_of(work, struct saa7134_dev, request_module_wk); request_module_async() local
166 if (card_is_empress(dev)) request_module_async()
168 if (card_is_dvb(dev)) request_module_async()
170 if (card_is_go7007(dev)) request_module_async()
173 if (dev->pci->device != PCI_DEVICE_ID_PHILIPS_SAA7130) request_module_async()
178 static void request_submodules(struct saa7134_dev *dev) request_submodules() argument
180 INIT_WORK(&dev->request_module_wk, request_module_async); request_submodules()
181 schedule_work(&dev->request_module_wk); request_submodules()
184 static void flush_request_submodules(struct saa7134_dev *dev) flush_request_submodules() argument
186 flush_work(&dev->request_module_wk); flush_request_submodules()
190 #define request_submodules(dev)
191 #define flush_request_submodules(dev)
277 int saa7134_buffer_queue(struct saa7134_dev *dev, saa7134_buffer_queue() argument
284 spin_lock_irqsave(&dev->slock, flags); saa7134_buffer_queue()
289 buf->activate(dev, buf, NULL); saa7134_buffer_queue()
296 buf->activate(dev, buf, next); saa7134_buffer_queue()
301 spin_unlock_irqrestore(&dev->slock, flags); saa7134_buffer_queue()
305 void saa7134_buffer_finish(struct saa7134_dev *dev, saa7134_buffer_finish() argument
318 void saa7134_buffer_next(struct saa7134_dev *dev, saa7134_buffer_next() argument
323 assert_spin_locked(&dev->slock); saa7134_buffer_next()
335 buf->activate(dev, buf, next); saa7134_buffer_next()
341 saa7134_set_dmabits(dev); saa7134_buffer_next()
349 struct saa7134_dev *dev = q->dev; saa7134_buffer_timeout() local
352 spin_lock_irqsave(&dev->slock, flags); saa7134_buffer_timeout()
363 saa7134_buffer_finish(dev, q, VB2_BUF_STATE_ERROR); saa7134_buffer_timeout()
365 saa7134_buffer_next(dev, q); saa7134_buffer_timeout()
366 spin_unlock_irqrestore(&dev->slock, flags); saa7134_buffer_timeout()
369 void saa7134_stop_streaming(struct saa7134_dev *dev, struct saa7134_dmaqueue *q) saa7134_stop_streaming() argument
375 spin_lock_irqsave(&dev->slock, flags); saa7134_stop_streaming()
385 spin_unlock_irqrestore(&dev->slock, flags); saa7134_stop_streaming()
392 int saa7134_set_dmabits(struct saa7134_dev *dev) saa7134_set_dmabits() argument
398 assert_spin_locked(&dev->slock); saa7134_set_dmabits()
400 if (dev->insuspend) saa7134_set_dmabits()
404 if (dev->video_q.curr) { saa7134_set_dmabits()
409 cap = dev->field; saa7134_set_dmabits()
413 if (dev->video_q.curr && dev->fmt->planar) { saa7134_set_dmabits()
419 if (dev->ovenable) { saa7134_set_dmabits()
422 ov = dev->ovfield; saa7134_set_dmabits()
426 if (dev->vbi_q.curr) { saa7134_set_dmabits()
437 if (dev->dmasound.dma_running) { saa7134_set_dmabits()
444 if (dev->ts_q.curr) { saa7134_set_dmabits()
503 static void print_irqstatus(struct saa7134_dev *dev, int loop, print_irqstatus() argument
527 struct saa7134_dev *dev = (struct saa7134_dev*) dev_id; saa7134_irq() local
531 if (dev->insuspend) saa7134_irq()
542 (dev->dmasound.priv_data != NULL) ) saa7134_irq()
556 print_irqstatus(dev,loop,report,status); saa7134_irq()
561 saa7134_irq_video_signalchange(dev); saa7134_irq()
566 saa7134_irq_video_done(dev,status); saa7134_irq()
570 saa7134_irq_vbi_done(dev,status); saa7134_irq()
573 card_has_mpeg(dev)) { saa7134_irq()
574 if (dev->mops->irq_ts_done != NULL) saa7134_irq()
575 dev->mops->irq_ts_done(dev, status); saa7134_irq()
577 saa7134_irq_ts_done(dev, status); saa7134_irq()
581 switch (dev->has_remote) { saa7134_irq()
583 if (!dev->remote) saa7134_irq()
585 if (dev->remote->mask_keydown & 0x10000) { saa7134_irq()
586 saa7134_input_irq(dev); saa7134_irq()
599 switch (dev->has_remote) { saa7134_irq()
601 if (!dev->remote) saa7134_irq()
603 if ((dev->remote->mask_keydown & 0x40000) || saa7134_irq()
604 (dev->remote->mask_keyup & 0x40000)) { saa7134_irq()
605 saa7134_input_irq(dev); saa7134_irq()
619 print_irqstatus(dev,loop,report,status); saa7134_irq()
623 "clearing PE (parity error!) enable bit\n",dev->name); saa7134_irq()
628 "clearing GPIO16 enable bit\n",dev->name); saa7134_irq()
634 "clearing GPIO18 enable bit\n",dev->name); saa7134_irq()
640 "clearing all enable bits\n",dev->name); saa7134_irq()
654 static int saa7134_hw_enable1(struct saa7134_dev *dev) saa7134_hw_enable1() argument
686 static int saa7134_hwinit1(struct saa7134_dev *dev) saa7134_hwinit1() argument
696 mutex_init(&dev->lock); saa7134_hwinit1()
697 spin_lock_init(&dev->slock); saa7134_hwinit1()
699 saa7134_track_gpio(dev,"pre-init"); saa7134_hwinit1()
700 saa7134_video_init1(dev); saa7134_hwinit1()
701 saa7134_vbi_init1(dev); saa7134_hwinit1()
702 if (card_has_mpeg(dev)) saa7134_hwinit1()
703 saa7134_ts_init1(dev); saa7134_hwinit1()
704 saa7134_input_init1(dev); saa7134_hwinit1()
706 saa7134_hw_enable1(dev); saa7134_hwinit1()
712 static int saa7134_hw_enable2(struct saa7134_dev *dev) saa7134_hw_enable2() argument
726 if (dev->has_remote == SAA7134_REMOTE_GPIO && dev->remote) { saa7134_hw_enable2()
727 if (dev->remote->mask_keydown & 0x10000) saa7134_hw_enable2()
730 if (dev->remote->mask_keydown & 0x40000) saa7134_hw_enable2()
732 if (dev->remote->mask_keyup & 0x40000) saa7134_hw_enable2()
737 if (dev->has_remote == SAA7134_REMOTE_I2C) { saa7134_hw_enable2()
747 static int saa7134_hwinit2(struct saa7134_dev *dev) saa7134_hwinit2() argument
752 saa7134_video_init2(dev); saa7134_hwinit2()
753 saa7134_tvaudio_init2(dev); saa7134_hwinit2()
755 saa7134_hw_enable2(dev); saa7134_hwinit2()
762 static int saa7134_hwfini(struct saa7134_dev *dev) saa7134_hwfini() argument
766 if (card_has_mpeg(dev)) saa7134_hwfini()
767 saa7134_ts_fini(dev); saa7134_hwfini()
768 saa7134_input_fini(dev); saa7134_hwfini()
769 saa7134_vbi_fini(dev); saa7134_hwfini()
770 saa7134_tvaudio_fini(dev); saa7134_hwfini()
771 saa7134_video_fini(dev); saa7134_hwfini()
809 static struct video_device *vdev_init(struct saa7134_dev *dev, vdev_init() argument
819 vfd->v4l2_dev = &dev->v4l2_dev; vdev_init()
822 dev->name, type, saa7134_boards[dev->board].name); vdev_init()
823 video_set_drvdata(vfd, dev); vdev_init()
827 static void saa7134_unregister_video(struct saa7134_dev *dev) saa7134_unregister_video() argument
829 if (dev->video_dev) { saa7134_unregister_video()
830 if (video_is_registered(dev->video_dev)) saa7134_unregister_video()
831 video_unregister_device(dev->video_dev); saa7134_unregister_video()
833 video_device_release(dev->video_dev); saa7134_unregister_video()
834 dev->video_dev = NULL; saa7134_unregister_video()
836 if (dev->vbi_dev) { saa7134_unregister_video()
837 if (video_is_registered(dev->vbi_dev)) saa7134_unregister_video()
838 video_unregister_device(dev->vbi_dev); saa7134_unregister_video()
840 video_device_release(dev->vbi_dev); saa7134_unregister_video()
841 dev->vbi_dev = NULL; saa7134_unregister_video()
843 if (dev->radio_dev) { saa7134_unregister_video()
844 if (video_is_registered(dev->radio_dev)) saa7134_unregister_video()
845 video_unregister_device(dev->radio_dev); saa7134_unregister_video()
847 video_device_release(dev->radio_dev); saa7134_unregister_video()
848 dev->radio_dev = NULL; saa7134_unregister_video()
853 struct saa7134_dev *dev) mpeg_ops_attach()
857 if (NULL != dev->mops) mpeg_ops_attach()
859 if (saa7134_boards[dev->board].mpeg != ops->type) mpeg_ops_attach()
861 err = ops->init(dev); mpeg_ops_attach()
864 dev->mops = ops; mpeg_ops_attach()
868 struct saa7134_dev *dev) mpeg_ops_detach()
870 if (NULL == dev->mops) mpeg_ops_detach()
872 if (dev->mops != ops) mpeg_ops_detach()
874 dev->mops->fini(dev); mpeg_ops_detach()
875 dev->mops = NULL; mpeg_ops_detach()
881 struct saa7134_dev *dev; saa7134_initdev() local
888 dev = kzalloc(sizeof(*dev),GFP_KERNEL); saa7134_initdev()
889 if (NULL == dev) saa7134_initdev()
892 err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev); saa7134_initdev()
897 dev->pci = pci_dev; saa7134_initdev()
903 dev->nr = saa7134_devcount; saa7134_initdev()
904 sprintf(dev->name,"saa%x[%d]",pci_dev->device,dev->nr); saa7134_initdev()
909 pr_info("%s: quirk: PCIPCI_TRITON\n", dev->name); saa7134_initdev()
911 pr_info("%s: quirk: PCIPCI_NATOMA\n", dev->name); saa7134_initdev()
913 pr_info("%s: quirk: PCIPCI_VIAETBF\n", dev->name); saa7134_initdev()
915 pr_info("%s: quirk: PCIPCI_VSFX\n", dev->name); saa7134_initdev()
919 dev->name); saa7134_initdev()
926 " in overlay mode.\n",dev->name); saa7134_initdev()
930 dev->name); saa7134_initdev()
936 dev->name); saa7134_initdev()
942 dev->name,latency); saa7134_initdev()
947 dev->pci_rev = pci_dev->revision; saa7134_initdev()
948 pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat); saa7134_initdev()
950 "latency: %d, mmio: 0x%llx\n", dev->name, saa7134_initdev()
951 pci_name(pci_dev), dev->pci_rev, pci_dev->irq, saa7134_initdev()
952 dev->pci_lat,(unsigned long long)pci_resource_start(pci_dev,0)); saa7134_initdev()
956 pr_warn("%s: Oops: no 32bit PCI DMA ???\n", dev->name); saa7134_initdev()
961 dev->board = pci_id->driver_data; saa7134_initdev()
962 if ((unsigned)card[dev->nr] < saa7134_bcount) saa7134_initdev()
963 dev->board = card[dev->nr]; saa7134_initdev()
964 if (SAA7134_BOARD_UNKNOWN == dev->board) saa7134_initdev()
966 else if (SAA7134_BOARD_NOAUTO == dev->board) { saa7134_initdev()
968 dev->board = SAA7134_BOARD_UNKNOWN; saa7134_initdev()
970 dev->autodetected = card[dev->nr] != dev->board; saa7134_initdev()
971 dev->tuner_type = saa7134_boards[dev->board].tuner_type; saa7134_initdev()
972 dev->tuner_addr = saa7134_boards[dev->board].tuner_addr; saa7134_initdev()
973 dev->radio_type = saa7134_boards[dev->board].radio_type; saa7134_initdev()
974 dev->radio_addr = saa7134_boards[dev->board].radio_addr; saa7134_initdev()
975 dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf; saa7134_initdev()
976 if (UNSET != tuner[dev->nr]) saa7134_initdev()
977 dev->tuner_type = tuner[dev->nr]; saa7134_initdev()
979 dev->name,pci_dev->subsystem_vendor, saa7134_initdev()
980 pci_dev->subsystem_device,saa7134_boards[dev->board].name, saa7134_initdev()
981 dev->board, dev->autodetected ? saa7134_initdev()
987 dev->name)) { saa7134_initdev()
990 dev->name,(unsigned long long)pci_resource_start(pci_dev,0)); saa7134_initdev()
993 dev->lmmio = ioremap(pci_resource_start(pci_dev, 0), saa7134_initdev()
995 dev->bmmio = (__u8 __iomem *)dev->lmmio; saa7134_initdev()
996 if (NULL == dev->lmmio) { saa7134_initdev()
999 dev->name); saa7134_initdev()
1004 saa7134_board_init1(dev); saa7134_initdev()
1005 saa7134_hwinit1(dev); saa7134_initdev()
1007 dev->alloc_ctx = vb2_dma_sg_init_ctx(&pci_dev->dev); saa7134_initdev()
1008 if (IS_ERR(dev->alloc_ctx)) { saa7134_initdev()
1009 err = PTR_ERR(dev->alloc_ctx); saa7134_initdev()
1014 IRQF_SHARED, dev->name, dev); saa7134_initdev()
1017 dev->name,pci_dev->irq); saa7134_initdev()
1023 saa7134_i2c_register(dev); saa7134_initdev()
1024 saa7134_board_init2(dev); saa7134_initdev()
1026 saa7134_hwinit2(dev); saa7134_initdev()
1029 if (card_is_empress(dev)) { saa7134_initdev()
1030 dev->empress_sd = saa7134_initdev()
1031 v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap, saa7134_initdev()
1033 saa7134_boards[dev->board].empress_addr, NULL); saa7134_initdev()
1035 if (dev->empress_sd) saa7134_initdev()
1036 dev->empress_sd->grp_id = GRP_EMPRESS; saa7134_initdev()
1039 if (saa7134_boards[dev->board].rds_addr) { saa7134_initdev()
1042 sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, saa7134_initdev()
1043 &dev->i2c_adap, "saa6588", saa7134_initdev()
1044 0, I2C_ADDRS(saa7134_boards[dev->board].rds_addr)); saa7134_initdev()
1046 pr_info("%s: found RDS decoder\n", dev->name); saa7134_initdev()
1047 dev->has_rds = 1; saa7134_initdev()
1053 mpeg_ops_attach(mops, dev); saa7134_initdev()
1054 list_add_tail(&dev->devlist, &saa7134_devlist); saa7134_initdev()
1058 saa7134_irq_video_signalchange(dev); saa7134_initdev()
1060 if (TUNER_ABSENT != dev->tuner_type) saa7134_initdev()
1061 saa_call_all(dev, core, s_power, 0); saa7134_initdev()
1065 pr_info("%s: Overlay support disabled.\n", dev->name); saa7134_initdev()
1067 dev->video_dev = vdev_init(dev,&saa7134_video_template,"video"); saa7134_initdev()
1068 dev->video_dev->ctrl_handler = &dev->ctrl_handler; saa7134_initdev()
1069 dev->video_dev->lock = &dev->lock; saa7134_initdev()
1070 dev->video_dev->queue = &dev->video_vbq; saa7134_initdev()
1071 err = video_register_device(dev->video_dev,VFL_TYPE_GRABBER, saa7134_initdev()
1072 video_nr[dev->nr]); saa7134_initdev()
1075 dev->name); saa7134_initdev()
1079 dev->name, video_device_node_name(dev->video_dev)); saa7134_initdev()
1081 dev->vbi_dev = vdev_init(dev, &saa7134_video_template, "vbi"); saa7134_initdev()
1082 dev->vbi_dev->ctrl_handler = &dev->ctrl_handler; saa7134_initdev()
1083 dev->vbi_dev->lock = &dev->lock; saa7134_initdev()
1084 dev->vbi_dev->queue = &dev->vbi_vbq; saa7134_initdev()
1086 err = video_register_device(dev->vbi_dev,VFL_TYPE_VBI, saa7134_initdev()
1087 vbi_nr[dev->nr]); saa7134_initdev()
1091 dev->name, video_device_node_name(dev->vbi_dev)); saa7134_initdev()
1093 if (card_has_radio(dev)) { saa7134_initdev()
1094 dev->radio_dev = vdev_init(dev,&saa7134_radio_template,"radio"); saa7134_initdev()
1095 dev->radio_dev->ctrl_handler = &dev->radio_ctrl_handler; saa7134_initdev()
1096 dev->radio_dev->lock = &dev->lock; saa7134_initdev()
1097 err = video_register_device(dev->radio_dev,VFL_TYPE_RADIO, saa7134_initdev()
1098 radio_nr[dev->nr]); saa7134_initdev()
1102 dev->name, video_device_node_name(dev->radio_dev)); saa7134_initdev()
1108 if (saa7134_dmasound_init && !dev->dmasound.priv_data) saa7134_initdev()
1109 saa7134_dmasound_init(dev); saa7134_initdev()
1111 request_submodules(dev); saa7134_initdev()
1115 saa7134_unregister_video(dev); saa7134_initdev()
1116 saa7134_i2c_unregister(dev); saa7134_initdev()
1117 free_irq(pci_dev->irq, dev); saa7134_initdev()
1119 vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); saa7134_initdev()
1121 saa7134_hwfini(dev); saa7134_initdev()
1122 iounmap(dev->lmmio); saa7134_initdev()
1127 v4l2_device_unregister(&dev->v4l2_dev); saa7134_initdev()
1129 kfree(dev); saa7134_initdev()
1136 struct saa7134_dev *dev = container_of(v4l2_dev, struct saa7134_dev, v4l2_dev); saa7134_finidev() local
1139 flush_request_submodules(dev); saa7134_finidev()
1142 if (saa7134_dmasound_exit && dev->dmasound.priv_data) { saa7134_finidev()
1143 saa7134_dmasound_exit(dev); saa7134_finidev()
1150 print_irqstatus(dev,42,report,status); saa7134_finidev()
1162 saa7134_hwfini(dev); saa7134_finidev()
1166 list_del(&dev->devlist); saa7134_finidev()
1168 mpeg_ops_detach(mops, dev); saa7134_finidev()
1172 saa7134_i2c_unregister(dev); saa7134_finidev()
1173 saa7134_unregister_video(dev); saa7134_finidev()
1178 if (dev->dmasound.priv_data != NULL) { saa7134_finidev()
1179 free_irq(pci_dev->irq, &dev->dmasound); saa7134_finidev()
1180 dev->dmasound.priv_data = NULL; saa7134_finidev()
1185 free_irq(pci_dev->irq, dev); saa7134_finidev()
1186 vb2_dma_sg_cleanup_ctx(dev->alloc_ctx); saa7134_finidev()
1187 iounmap(dev->lmmio); saa7134_finidev()
1192 v4l2_device_unregister(&dev->v4l2_dev); saa7134_finidev()
1195 kfree(dev); saa7134_finidev()
1201 static int saa7134_buffer_requeue(struct saa7134_dev *dev, saa7134_buffer_requeue() argument
1206 assert_spin_locked(&dev->slock); saa7134_buffer_requeue()
1220 buf->activate(dev, buf, next); saa7134_buffer_requeue()
1228 struct saa7134_dev *dev = container_of(v4l2_dev, struct saa7134_dev, v4l2_dev); saa7134_suspend() local
1231 dev->ovenable = 0; saa7134_suspend()
1238 dev->insuspend = 1; saa7134_suspend()
1249 del_timer(&dev->video_q.timeout); saa7134_suspend()
1250 del_timer(&dev->vbi_q.timeout); saa7134_suspend()
1251 del_timer(&dev->ts_q.timeout); saa7134_suspend()
1253 if (dev->remote) saa7134_suspend()
1254 saa7134_ir_stop(dev); saa7134_suspend()
1265 struct saa7134_dev *dev = container_of(v4l2_dev, struct saa7134_dev, v4l2_dev); saa7134_resume() local
1274 saa7134_board_init1(dev); saa7134_resume()
1277 if (saa7134_boards[dev->board].video_out) saa7134_resume()
1278 saa7134_videoport_init(dev); saa7134_resume()
1279 if (card_has_mpeg(dev)) saa7134_resume()
1280 saa7134_ts_init_hw(dev); saa7134_resume()
1281 if (dev->remote) saa7134_resume()
1282 saa7134_ir_start(dev); saa7134_resume()
1283 saa7134_hw_enable1(dev); saa7134_resume()
1287 saa7134_board_init2(dev); saa7134_resume()
1290 saa7134_set_tvnorm_hw(dev); saa7134_resume()
1291 saa7134_tvaudio_setmute(dev); saa7134_resume()
1292 saa7134_tvaudio_setvolume(dev, dev->ctl_volume); saa7134_resume()
1293 saa7134_tvaudio_init(dev); saa7134_resume()
1294 saa7134_enable_i2s(dev); saa7134_resume()
1295 saa7134_hw_enable2(dev); saa7134_resume()
1297 saa7134_irq_video_signalchange(dev); saa7134_resume()
1300 spin_lock_irqsave(&dev->slock, flags); saa7134_resume()
1301 saa7134_buffer_requeue(dev, &dev->video_q); saa7134_resume()
1302 saa7134_buffer_requeue(dev, &dev->vbi_q); saa7134_resume()
1303 saa7134_buffer_requeue(dev, &dev->ts_q); saa7134_resume()
1308 dev->dmasound.dma_running = 0; saa7134_resume()
1311 dev->insuspend = 0; saa7134_resume()
1313 saa7134_set_dmabits(dev); saa7134_resume()
1314 spin_unlock_irqrestore(&dev->slock, flags); saa7134_resume()
1324 struct saa7134_dev *dev; saa7134_ts_register() local
1327 list_for_each_entry(dev, &saa7134_devlist, devlist) saa7134_ts_register()
1328 mpeg_ops_attach(ops, dev); saa7134_ts_register()
1336 struct saa7134_dev *dev; saa7134_ts_unregister() local
1340 list_for_each_entry(dev, &saa7134_devlist, devlist) saa7134_ts_unregister()
1341 mpeg_ops_detach(ops, dev); saa7134_ts_unregister()
852 mpeg_ops_attach(struct saa7134_mpeg_ops *ops, struct saa7134_dev *dev) mpeg_ops_attach() argument
867 mpeg_ops_detach(struct saa7134_mpeg_ops *ops, struct saa7134_dev *dev) mpeg_ops_detach() argument
H A Dsaa7134-ts.c44 static int buffer_activate(struct saa7134_dev *dev, buffer_activate() argument
52 if (!dev->ts_started) buffer_activate()
53 dev->ts_field = V4L2_FIELD_TOP; buffer_activate()
57 if (V4L2_FIELD_TOP == dev->ts_field) { buffer_activate()
61 dev->ts_field = V4L2_FIELD_BOTTOM; buffer_activate()
66 dev->ts_field = V4L2_FIELD_TOP; buffer_activate()
70 saa7134_set_dmabits(dev); buffer_activate()
72 mod_timer(&dev->ts_q.timeout, jiffies+TS_BUFFER_TIMEOUT); buffer_activate()
74 if (!dev->ts_started) buffer_activate()
75 saa7134_ts_start(dev); buffer_activate()
97 struct saa7134_dev *dev = dmaq->dev; saa7134_ts_buffer_prepare() local
105 lines = dev->ts.nr_packets; saa7134_ts_buffer_prepare()
112 vbuf->field = dev->field; saa7134_ts_buffer_prepare()
114 return saa7134_pgtable_build(dev->pci, &dmaq->pt, dma->sgl, dma->nents, saa7134_ts_buffer_prepare()
124 struct saa7134_dev *dev = dmaq->dev; saa7134_ts_queue_setup() local
125 int size = TS_PACKET_SIZE * dev->ts.nr_packets; saa7134_ts_queue_setup()
128 *nbuffers = dev->ts.nr_bufs; saa7134_ts_queue_setup()
134 alloc_ctxs[0] = dev->alloc_ctx; saa7134_ts_queue_setup()
142 struct saa7134_dev *dev = dmaq->dev; saa7134_ts_start_streaming() local
148 if (vb2_is_busy(&dev->video_vbq) && dev->fmt->planar) { saa7134_ts_start_streaming()
171 struct saa7134_dev *dev = dmaq->dev; saa7134_ts_stop_streaming() local
173 saa7134_ts_stop(dev); saa7134_ts_stop_streaming()
174 saa7134_stop_streaming(dev, dmaq); saa7134_ts_stop_streaming()
200 int saa7134_ts_init_hw(struct saa7134_dev *dev) saa7134_ts_init_hw() argument
207 saa_writeb(SAA7134_TS_DMA0, ((dev->ts.nr_packets-1)&0xff)); saa7134_ts_init_hw()
208 saa_writeb(SAA7134_TS_DMA1, (((dev->ts.nr_packets-1)>>8)&0xff)); saa7134_ts_init_hw()
211 ((((dev->ts.nr_packets-1)>>16)&0x3f) | 0x00)); saa7134_ts_init_hw()
216 int saa7134_ts_init1(struct saa7134_dev *dev) saa7134_ts_init1() argument
227 dev->ts.nr_bufs = tsbufs; saa7134_ts_init1()
228 dev->ts.nr_packets = ts_nr_packets; saa7134_ts_init1()
230 INIT_LIST_HEAD(&dev->ts_q.queue); saa7134_ts_init1()
231 init_timer(&dev->ts_q.timeout); saa7134_ts_init1()
232 dev->ts_q.timeout.function = saa7134_buffer_timeout; saa7134_ts_init1()
233 dev->ts_q.timeout.data = (unsigned long)(&dev->ts_q); saa7134_ts_init1()
234 dev->ts_q.dev = dev; saa7134_ts_init1()
235 dev->ts_q.need_two = 1; saa7134_ts_init1()
236 dev->ts_started = 0; saa7134_ts_init1()
237 saa7134_pgtable_alloc(dev->pci, &dev->ts_q.pt); saa7134_ts_init1()
240 saa7134_ts_init_hw(dev); saa7134_ts_init1()
246 int saa7134_ts_stop(struct saa7134_dev *dev) saa7134_ts_stop() argument
250 if (!dev->ts_started) saa7134_ts_stop()
254 switch (saa7134_boards[dev->board].ts_type) { saa7134_ts_stop()
257 dev->ts_started = 0; saa7134_ts_stop()
261 dev->ts_started = 0; saa7134_ts_stop()
268 int saa7134_ts_start(struct saa7134_dev *dev) saa7134_ts_start() argument
272 if (WARN_ON(dev->ts_started)) saa7134_ts_start()
276 saa_writeb(SAA7134_TS_DMA0, (dev->ts.nr_packets - 1) & 0xff); saa7134_ts_start()
278 ((dev->ts.nr_packets - 1) >> 8) & 0xff); saa7134_ts_start()
281 (((dev->ts.nr_packets - 1) >> 16) & 0x3f) | 0x00); saa7134_ts_start()
285 (dev->ts_q.pt.dma >> 12)); saa7134_ts_start()
297 switch (saa7134_boards[dev->board].ts_type) { saa7134_ts_start()
301 (saa7134_boards[dev->board].ts_force_val << 4)); saa7134_ts_start()
306 (saa7134_boards[dev->board].ts_force_val << 4)); saa7134_ts_start()
312 dev->ts_started = 1; saa7134_ts_start()
317 int saa7134_ts_fini(struct saa7134_dev *dev) saa7134_ts_fini() argument
319 saa7134_pgtable_free(dev->pci, &dev->ts_q.pt); saa7134_ts_fini()
323 void saa7134_irq_ts_done(struct saa7134_dev *dev, unsigned long status) saa7134_irq_ts_done() argument
327 spin_lock(&dev->slock); saa7134_irq_ts_done()
328 if (dev->ts_q.curr) { saa7134_irq_ts_done()
329 field = dev->ts_field; saa7134_irq_ts_done()
337 saa7134_buffer_finish(dev, &dev->ts_q, VB2_BUF_STATE_DONE); saa7134_irq_ts_done()
339 saa7134_buffer_next(dev,&dev->ts_q); saa7134_irq_ts_done()
342 spin_unlock(&dev->slock); saa7134_irq_ts_done()
/linux-4.4.14/drivers/media/usb/au0828/
H A Dau0828-video.c60 static inline void i2c_gate_ctrl(struct au0828_dev *dev, int val) i2c_gate_ctrl() argument
62 if (dev->dvb.frontend && dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl) i2c_gate_ctrl()
63 dev->dvb.frontend->ops.analog_ops.i2c_gate_ctrl(dev->dvb.frontend, val); i2c_gate_ctrl()
66 static inline void print_err_status(struct au0828_dev *dev, print_err_status() argument
105 static int check_dev(struct au0828_dev *dev) check_dev() argument
107 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) { check_dev()
112 if (test_bit(DEV_MISCONFIGURED, &dev->dev_state)) { check_dev()
125 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); au0828_irq_callback() local
144 spin_lock_irqsave(&dev->slock, flags); au0828_irq_callback()
145 dev->isoc_ctl.isoc_copy(dev, urb); au0828_irq_callback()
146 spin_unlock_irqrestore(&dev->slock, flags); au0828_irq_callback()
160 dev->stream_state = STREAM_ON; au0828_irq_callback()
166 static void au0828_uninit_isoc(struct au0828_dev *dev) au0828_uninit_isoc() argument
173 dev->isoc_ctl.nfields = -1; au0828_uninit_isoc()
174 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { au0828_uninit_isoc()
175 urb = dev->isoc_ctl.urb[i]; au0828_uninit_isoc()
182 if (dev->isoc_ctl.transfer_buffer[i]) { au0828_uninit_isoc()
183 usb_free_coherent(dev->usbdev, au0828_uninit_isoc()
185 dev->isoc_ctl.transfer_buffer[i], au0828_uninit_isoc()
189 dev->isoc_ctl.urb[i] = NULL; au0828_uninit_isoc()
191 dev->isoc_ctl.transfer_buffer[i] = NULL; au0828_uninit_isoc()
194 kfree(dev->isoc_ctl.urb); au0828_uninit_isoc()
195 kfree(dev->isoc_ctl.transfer_buffer); au0828_uninit_isoc()
197 dev->isoc_ctl.urb = NULL; au0828_uninit_isoc()
198 dev->isoc_ctl.transfer_buffer = NULL; au0828_uninit_isoc()
199 dev->isoc_ctl.num_bufs = 0; au0828_uninit_isoc()
201 dev->stream_state = STREAM_OFF; au0828_uninit_isoc()
207 static int au0828_init_isoc(struct au0828_dev *dev, int max_packets, au0828_init_isoc() argument
209 int (*isoc_copy) (struct au0828_dev *dev, struct urb *urb)) au0828_init_isoc()
211 struct au0828_dmaqueue *dma_q = &dev->vidq; au0828_init_isoc()
220 dev->isoc_ctl.isoc_copy = isoc_copy; au0828_init_isoc()
221 dev->isoc_ctl.num_bufs = num_bufs; au0828_init_isoc()
223 dev->isoc_ctl.urb = kzalloc(sizeof(void *)*num_bufs, GFP_KERNEL); au0828_init_isoc()
224 if (!dev->isoc_ctl.urb) { au0828_init_isoc()
229 dev->isoc_ctl.transfer_buffer = kzalloc(sizeof(void *)*num_bufs, au0828_init_isoc()
231 if (!dev->isoc_ctl.transfer_buffer) { au0828_init_isoc()
233 kfree(dev->isoc_ctl.urb); au0828_init_isoc()
237 dev->isoc_ctl.max_pkt_size = max_pkt_size; au0828_init_isoc()
238 dev->isoc_ctl.buf = NULL; au0828_init_isoc()
240 sb_size = max_packets * dev->isoc_ctl.max_pkt_size; au0828_init_isoc()
243 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { au0828_init_isoc()
247 au0828_uninit_isoc(dev); au0828_init_isoc()
250 dev->isoc_ctl.urb[i] = urb; au0828_init_isoc()
252 dev->isoc_ctl.transfer_buffer[i] = usb_alloc_coherent(dev->usbdev, au0828_init_isoc()
254 if (!dev->isoc_ctl.transfer_buffer[i]) { au0828_init_isoc()
259 au0828_uninit_isoc(dev); au0828_init_isoc()
262 memset(dev->isoc_ctl.transfer_buffer[i], 0, sb_size); au0828_init_isoc()
264 pipe = usb_rcvisocpipe(dev->usbdev, au0828_init_isoc()
265 dev->isoc_in_endpointaddr), au0828_init_isoc()
267 usb_fill_int_urb(urb, dev->usbdev, pipe, au0828_init_isoc()
268 dev->isoc_ctl.transfer_buffer[i], sb_size, au0828_init_isoc()
278 dev->isoc_ctl.max_pkt_size; au0828_init_isoc()
279 k += dev->isoc_ctl.max_pkt_size; au0828_init_isoc()
284 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { au0828_init_isoc()
285 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); au0828_init_isoc()
289 au0828_uninit_isoc(dev); au0828_init_isoc()
300 static inline void buffer_filled(struct au0828_dev *dev, buffer_filled() argument
311 vb->sequence = dev->frame_count++; buffer_filled()
313 vb->sequence = dev->vbi_frame_count++; buffer_filled()
323 static void au0828_copy_video(struct au0828_dev *dev, au0828_copy_video() argument
331 int bytesperline = dev->width << 1; /* Assumes 16-bit depth @@@@ */ au0828_copy_video()
395 dev->greenscreen_detected = 1; au0828_copy_video()
407 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vidq); get_next_buf() local
411 dev->isoc_ctl.buf = NULL; get_next_buf()
422 dev->isoc_ctl.buf = *buf; get_next_buf()
427 static void au0828_copy_vbi(struct au0828_dev *dev, au0828_copy_vbi() argument
437 if (dev == NULL) { au0828_copy_vbi()
438 au0828_isocdbg("dev is null\n"); au0828_copy_vbi()
457 bytesperline = dev->vbi_width; au0828_copy_vbi()
467 startwrite += bytesperline * dev->vbi_height; au0828_copy_vbi()
482 struct au0828_dev *dev = container_of(dma_q, struct au0828_dev, vbiq); vbi_get_next_buf() local
486 dev->isoc_ctl.vbi_buf = NULL; vbi_get_next_buf()
497 dev->isoc_ctl.vbi_buf = *buf; vbi_get_next_buf()
504 static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb) au0828_isoc_copy() argument
509 struct au0828_dmaqueue *vbi_dma_q = &dev->vbiq; au0828_isoc_copy()
518 if (!dev) au0828_isoc_copy()
521 if (test_bit(DEV_DISCONNECTED, &dev->dev_state) || au0828_isoc_copy()
522 test_bit(DEV_MISCONFIGURED, &dev->dev_state)) au0828_isoc_copy()
526 print_err_status(dev, -1, urb->status); au0828_isoc_copy()
531 buf = dev->isoc_ctl.buf; au0828_isoc_copy()
535 vbi_buf = dev->isoc_ctl.vbi_buf; au0828_isoc_copy()
543 print_err_status(dev, i, status); au0828_isoc_copy()
552 dev->max_pkt_size) { au0828_isoc_copy()
570 buffer_filled(dev, vbi_dma_q, vbi_buf); au0828_isoc_copy()
580 buffer_filled(dev, dma_q, buf); au0828_isoc_copy()
590 if (dev->vid_timeout_running) au0828_isoc_copy()
591 mod_timer(&dev->vid_timeout, au0828_isoc_copy()
593 if (dev->vbi_timeout_running) au0828_isoc_copy()
594 mod_timer(&dev->vbi_timeout, au0828_isoc_copy()
612 dev->vbi_read = 0; au0828_isoc_copy()
617 vbi_field_size = dev->vbi_width * dev->vbi_height * 2; au0828_isoc_copy()
618 if (dev->vbi_read < vbi_field_size) { au0828_isoc_copy()
619 remain = vbi_field_size - dev->vbi_read; au0828_isoc_copy()
626 au0828_copy_vbi(dev, vbi_dma_q, vbi_buf, p, au0828_isoc_copy()
631 dev->vbi_read += lencopy; au0828_isoc_copy()
634 if (dev->vbi_read >= vbi_field_size && buf != NULL) au0828_isoc_copy()
635 au0828_copy_video(dev, dma_q, buf, p, outp, len); au0828_isoc_copy()
645 struct au0828_dev *dev = vb2_get_drv_priv(vq); queue_setup() local
646 unsigned long img_size = dev->height * dev->bytesperline; queue_setup()
665 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); buffer_prepare() local
667 buf->length = dev->height * dev->bytesperline; buffer_prepare()
685 struct au0828_dev *dev = vb2_get_drv_priv(vb->vb2_queue); buffer_queue() local
686 struct au0828_dmaqueue *vidq = &dev->vidq; buffer_queue()
692 spin_lock_irqsave(&dev->slock, flags); buffer_queue()
694 spin_unlock_irqrestore(&dev->slock, flags); buffer_queue()
697 static int au0828_i2s_init(struct au0828_dev *dev) au0828_i2s_init() argument
700 au0828_writereg(dev, AU0828_AUDIOCTRL_50C, 0x01); au0828_i2s_init()
752 static void au0828_analog_stream_reset(struct au0828_dev *dev) au0828_analog_stream_reset() argument
755 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0x0); au0828_analog_stream_reset()
757 au0828_writereg(dev, AU0828_SENSORCTRL_100, 0xb3); au0828_analog_stream_reset()
763 static int au0828_stream_interrupt(struct au0828_dev *dev) au0828_stream_interrupt() argument
767 dev->stream_state = STREAM_INTERRUPT; au0828_stream_interrupt()
768 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) au0828_stream_interrupt()
771 set_bit(DEV_MISCONFIGURED, &dev->dev_state); au0828_stream_interrupt()
780 struct au0828_dev *dev = vb2_get_drv_priv(vq); au0828_start_analog_streaming() local
784 dev->streaming_users); au0828_start_analog_streaming()
787 dev->frame_count = 0; au0828_start_analog_streaming()
789 dev->vbi_frame_count = 0; au0828_start_analog_streaming()
791 if (dev->streaming_users == 0) { au0828_start_analog_streaming()
793 au0828_i2s_init(dev); au0828_start_analog_streaming()
794 rc = au0828_init_isoc(dev, AU0828_ISO_PACKETS_PER_URB, au0828_start_analog_streaming()
795 AU0828_MAX_ISO_BUFS, dev->max_pkt_size, au0828_start_analog_streaming()
803 v4l2_device_call_all(&dev->v4l2_dev, 0, video, au0828_start_analog_streaming()
805 dev->vid_timeout_running = 1; au0828_start_analog_streaming()
806 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); au0828_start_analog_streaming()
808 dev->vbi_timeout_running = 1; au0828_start_analog_streaming()
809 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); au0828_start_analog_streaming()
812 dev->streaming_users++; au0828_start_analog_streaming()
818 struct au0828_dev *dev = vb2_get_drv_priv(vq); au0828_stop_streaming() local
819 struct au0828_dmaqueue *vidq = &dev->vidq; au0828_stop_streaming()
822 dprintk(1, "au0828_stop_streaming called %d\n", dev->streaming_users); au0828_stop_streaming()
824 if (dev->streaming_users-- == 1) au0828_stop_streaming()
825 au0828_uninit_isoc(dev); au0828_stop_streaming()
827 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0); au0828_stop_streaming()
828 dev->vid_timeout_running = 0; au0828_stop_streaming()
829 del_timer_sync(&dev->vid_timeout); au0828_stop_streaming()
831 spin_lock_irqsave(&dev->slock, flags); au0828_stop_streaming()
832 if (dev->isoc_ctl.buf != NULL) { au0828_stop_streaming()
833 vb2_buffer_done(&dev->isoc_ctl.buf->vb.vb2_buf, au0828_stop_streaming()
835 dev->isoc_ctl.buf = NULL; au0828_stop_streaming()
844 spin_unlock_irqrestore(&dev->slock, flags); au0828_stop_streaming()
849 struct au0828_dev *dev = vb2_get_drv_priv(vq); au0828_stop_vbi_streaming() local
850 struct au0828_dmaqueue *vbiq = &dev->vbiq; au0828_stop_vbi_streaming()
854 dev->streaming_users); au0828_stop_vbi_streaming()
856 if (dev->streaming_users-- == 1) au0828_stop_vbi_streaming()
857 au0828_uninit_isoc(dev); au0828_stop_vbi_streaming()
859 spin_lock_irqsave(&dev->slock, flags); au0828_stop_vbi_streaming()
860 if (dev->isoc_ctl.vbi_buf != NULL) { au0828_stop_vbi_streaming()
861 vb2_buffer_done(&dev->isoc_ctl.vbi_buf->vb.vb2_buf, au0828_stop_vbi_streaming()
863 dev->isoc_ctl.vbi_buf = NULL; au0828_stop_vbi_streaming()
872 spin_unlock_irqrestore(&dev->slock, flags); au0828_stop_vbi_streaming()
874 dev->vbi_timeout_running = 0; au0828_stop_vbi_streaming()
875 del_timer_sync(&dev->vbi_timeout); au0828_stop_vbi_streaming()
895 void au0828_analog_unregister(struct au0828_dev *dev) au0828_analog_unregister() argument
899 video_unregister_device(&dev->vdev); au0828_analog_unregister()
900 video_unregister_device(&dev->vbi_dev); au0828_analog_unregister()
909 struct au0828_dev *dev = (struct au0828_dev *) data; au0828_vid_buffer_timeout() local
910 struct au0828_dmaqueue *dma_q = &dev->vidq; au0828_vid_buffer_timeout()
915 spin_lock_irqsave(&dev->slock, flags); au0828_vid_buffer_timeout()
917 buf = dev->isoc_ctl.buf; au0828_vid_buffer_timeout()
921 buffer_filled(dev, dma_q, buf); au0828_vid_buffer_timeout()
925 if (dev->vid_timeout_running == 1) au0828_vid_buffer_timeout()
926 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); au0828_vid_buffer_timeout()
928 spin_unlock_irqrestore(&dev->slock, flags); au0828_vid_buffer_timeout()
933 struct au0828_dev *dev = (struct au0828_dev *) data; au0828_vbi_buffer_timeout() local
934 struct au0828_dmaqueue *dma_q = &dev->vbiq; au0828_vbi_buffer_timeout()
939 spin_lock_irqsave(&dev->slock, flags); au0828_vbi_buffer_timeout()
941 buf = dev->isoc_ctl.vbi_buf; au0828_vbi_buffer_timeout()
945 buffer_filled(dev, dma_q, buf); au0828_vbi_buffer_timeout()
949 if (dev->vbi_timeout_running == 1) au0828_vbi_buffer_timeout()
950 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); au0828_vbi_buffer_timeout()
951 spin_unlock_irqrestore(&dev->slock, flags); au0828_vbi_buffer_timeout()
956 struct au0828_dev *dev = video_drvdata(filp); au0828_v4l2_open() local
961 __func__, dev->std_set_in_tuner_core, dev->dev_state, au0828_v4l2_open()
962 dev->streaming_users, dev->users); au0828_v4l2_open()
964 if (mutex_lock_interruptible(&dev->lock)) au0828_v4l2_open()
971 mutex_unlock(&dev->lock); au0828_v4l2_open()
975 if (dev->users == 0) { au0828_v4l2_open()
976 au0828_analog_stream_enable(dev); au0828_v4l2_open()
977 au0828_analog_stream_reset(dev); au0828_v4l2_open()
978 dev->stream_state = STREAM_OFF; au0828_v4l2_open()
979 set_bit(DEV_INITIALIZED, &dev->dev_state); au0828_v4l2_open()
981 dev->users++; au0828_v4l2_open()
982 mutex_unlock(&dev->lock); au0828_v4l2_open()
989 struct au0828_dev *dev = video_drvdata(filp); au0828_v4l2_close() local
994 __func__, dev->std_set_in_tuner_core, dev->dev_state, au0828_v4l2_close()
995 dev->streaming_users, dev->users); au0828_v4l2_close()
997 mutex_lock(&dev->lock); au0828_v4l2_close()
998 if (vdev->vfl_type == VFL_TYPE_GRABBER && dev->vid_timeout_running) { au0828_v4l2_close()
1000 dev->vid_timeout_running = 0; au0828_v4l2_close()
1001 del_timer_sync(&dev->vid_timeout); au0828_v4l2_close()
1003 dev->vbi_timeout_running) { au0828_v4l2_close()
1005 dev->vbi_timeout_running = 0; au0828_v4l2_close()
1006 del_timer_sync(&dev->vbi_timeout); au0828_v4l2_close()
1009 if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) au0828_v4l2_close()
1012 if (dev->users == 1) { au0828_v4l2_close()
1014 v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_power, 0); au0828_v4l2_close()
1015 dev->std_set_in_tuner_core = 0; au0828_v4l2_close()
1019 ret = usb_set_interface(dev->usbdev, 0, 0); au0828_v4l2_close()
1025 dev->users--; au0828_v4l2_close()
1026 mutex_unlock(&dev->lock); au0828_v4l2_close()
1030 /* Must be called with dev->lock held */ au0828_init_tuner()
1031 static void au0828_init_tuner(struct au0828_dev *dev) au0828_init_tuner() argument
1034 .frequency = dev->ctrl_freq, au0828_init_tuner()
1039 dev->std_set_in_tuner_core, dev->dev_state); au0828_init_tuner()
1041 if (dev->std_set_in_tuner_core) au0828_init_tuner()
1043 dev->std_set_in_tuner_core = 1; au0828_init_tuner()
1044 i2c_gate_ctrl(dev, 1); au0828_init_tuner()
1048 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, dev->std); au0828_init_tuner()
1049 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f); au0828_init_tuner()
1050 i2c_gate_ctrl(dev, 0); au0828_init_tuner()
1053 static int au0828_set_format(struct au0828_dev *dev, unsigned int cmd, au0828_set_format() argument
1084 dev->width = width; au0828_set_format()
1085 dev->height = height; au0828_set_format()
1086 dev->frame_size = width * height * 2; au0828_set_format()
1087 dev->field_size = width * height; au0828_set_format()
1088 dev->bytesperline = width * 2; au0828_set_format()
1090 if (dev->stream_state == STREAM_ON) { au0828_set_format()
1092 ret = au0828_stream_interrupt(dev); au0828_set_format()
1099 au0828_analog_stream_enable(dev); au0828_set_format()
1108 struct au0828_dev *dev = video_drvdata(file); vidioc_querycap() local
1111 dev->std_set_in_tuner_core, dev->dev_state); vidioc_querycap()
1114 strlcpy(cap->card, dev->board.name, sizeof(cap->card)); vidioc_querycap()
1115 usb_make_path(dev->usbdev, cap->bus_info, sizeof(cap->bus_info)); vidioc_querycap()
1151 struct au0828_dev *dev = video_drvdata(file); vidioc_g_fmt_vid_cap() local
1154 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_fmt_vid_cap()
1156 f->fmt.pix.width = dev->width; vidioc_g_fmt_vid_cap()
1157 f->fmt.pix.height = dev->height; vidioc_g_fmt_vid_cap()
1159 f->fmt.pix.bytesperline = dev->bytesperline; vidioc_g_fmt_vid_cap()
1160 f->fmt.pix.sizeimage = dev->frame_size; vidioc_g_fmt_vid_cap()
1170 struct au0828_dev *dev = video_drvdata(file); vidioc_try_fmt_vid_cap() local
1173 dev->std_set_in_tuner_core, dev->dev_state); vidioc_try_fmt_vid_cap()
1175 return au0828_set_format(dev, VIDIOC_TRY_FMT, f); vidioc_try_fmt_vid_cap()
1181 struct au0828_dev *dev = video_drvdata(file); vidioc_s_fmt_vid_cap() local
1185 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_fmt_vid_cap()
1187 rc = check_dev(dev); vidioc_s_fmt_vid_cap()
1191 if (vb2_is_busy(&dev->vb_vidq)) { vidioc_s_fmt_vid_cap()
1197 rc = au0828_set_format(dev, VIDIOC_S_FMT, f); vidioc_s_fmt_vid_cap()
1204 struct au0828_dev *dev = video_drvdata(file); vidioc_s_std() local
1207 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_std()
1209 if (norm == dev->std) vidioc_s_std()
1212 if (dev->streaming_users > 0) vidioc_s_std()
1215 dev->std = norm; vidioc_s_std()
1217 au0828_init_tuner(dev); vidioc_s_std()
1219 i2c_gate_ctrl(dev, 1); vidioc_s_std()
1227 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_std, norm); vidioc_s_std()
1229 i2c_gate_ctrl(dev, 0); vidioc_s_std()
1236 struct au0828_dev *dev = video_drvdata(file); vidioc_g_std() local
1239 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_std()
1241 *norm = dev->std; vidioc_g_std()
1248 struct au0828_dev *dev = video_drvdata(file); vidioc_enum_input() local
1262 dev->std_set_in_tuner_core, dev->dev_state); vidioc_enum_input()
1282 input->std = dev->vdev.tvnorms; vidioc_enum_input()
1289 struct au0828_dev *dev = video_drvdata(file); vidioc_g_input() local
1292 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_input()
1294 *i = dev->ctrl_input; vidioc_g_input()
1298 static void au0828_s_input(struct au0828_dev *dev, int index) au0828_s_input() argument
1303 dev->std_set_in_tuner_core, dev->dev_state); au0828_s_input()
1307 dev->input_type = AU0828_VMUX_SVIDEO; au0828_s_input()
1308 dev->ctrl_ainput = 1; au0828_s_input()
1311 dev->input_type = AU0828_VMUX_COMPOSITE; au0828_s_input()
1312 dev->ctrl_ainput = 1; au0828_s_input()
1315 dev->input_type = AU0828_VMUX_TELEVISION; au0828_s_input()
1316 dev->ctrl_ainput = 0; au0828_s_input()
1324 v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing, au0828_s_input()
1337 (AUVI_INPUT(i).audio_setup)(dev, enable); au0828_s_input()
1343 (AUVI_INPUT(i).audio_setup)(dev, enable); au0828_s_input()
1348 v4l2_device_call_all(&dev->v4l2_dev, 0, audio, s_routing, au0828_s_input()
1354 struct au0828_dev *dev = video_drvdata(file); vidioc_s_input() local
1362 dev->ctrl_input = index; vidioc_s_input()
1363 au0828_s_input(dev, index); vidioc_s_input()
1385 struct au0828_dev *dev = video_drvdata(file); vidioc_g_audio() local
1388 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_audio()
1390 a->index = dev->ctrl_ainput; vidioc_g_audio()
1402 struct au0828_dev *dev = video_drvdata(file); vidioc_s_audio() local
1404 if (a->index != dev->ctrl_ainput) vidioc_s_audio()
1408 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_audio()
1414 struct au0828_dev *dev = video_drvdata(file); vidioc_g_tuner() local
1420 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_tuner()
1424 au0828_init_tuner(dev); vidioc_g_tuner()
1425 i2c_gate_ctrl(dev, 1); vidioc_g_tuner()
1426 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t); vidioc_g_tuner()
1427 i2c_gate_ctrl(dev, 0); vidioc_g_tuner()
1434 struct au0828_dev *dev = video_drvdata(file); vidioc_s_tuner() local
1440 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_tuner()
1442 au0828_init_tuner(dev); vidioc_s_tuner()
1443 i2c_gate_ctrl(dev, 1); vidioc_s_tuner()
1444 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t); vidioc_s_tuner()
1445 i2c_gate_ctrl(dev, 0); vidioc_s_tuner()
1457 struct au0828_dev *dev = video_drvdata(file); vidioc_g_frequency() local
1462 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_frequency()
1463 freq->frequency = dev->ctrl_freq; vidioc_g_frequency()
1470 struct au0828_dev *dev = video_drvdata(file); vidioc_s_frequency() local
1477 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_frequency()
1479 au0828_init_tuner(dev); vidioc_s_frequency()
1480 i2c_gate_ctrl(dev, 1); vidioc_s_frequency()
1482 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, freq); vidioc_s_frequency()
1484 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_frequency, &new_freq); vidioc_s_frequency()
1485 dev->ctrl_freq = new_freq.frequency; vidioc_s_frequency()
1487 i2c_gate_ctrl(dev, 0); vidioc_s_frequency()
1489 au0828_analog_stream_reset(dev); vidioc_s_frequency()
1500 struct au0828_dev *dev = video_drvdata(file); vidioc_g_fmt_vbi_cap() local
1503 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_fmt_vbi_cap()
1505 format->fmt.vbi.samples_per_line = dev->vbi_width; vidioc_g_fmt_vbi_cap()
1511 format->fmt.vbi.count[0] = dev->vbi_height; vidioc_g_fmt_vbi_cap()
1512 format->fmt.vbi.count[1] = dev->vbi_height; vidioc_g_fmt_vbi_cap()
1523 struct au0828_dev *dev = video_drvdata(file); vidioc_cropcap() local
1529 dev->std_set_in_tuner_core, dev->dev_state); vidioc_cropcap()
1533 cc->bounds.width = dev->width; vidioc_cropcap()
1534 cc->bounds.height = dev->height; vidioc_cropcap()
1548 struct au0828_dev *dev = video_drvdata(file); vidioc_g_register() local
1551 dev->std_set_in_tuner_core, dev->dev_state); vidioc_g_register()
1553 reg->val = au0828_read(dev, reg->reg); vidioc_g_register()
1561 struct au0828_dev *dev = video_drvdata(file); vidioc_s_register() local
1564 dev->std_set_in_tuner_core, dev->dev_state); vidioc_s_register()
1566 return au0828_writereg(dev, reg->reg, reg->val); vidioc_s_register()
1581 void au0828_v4l2_suspend(struct au0828_dev *dev) au0828_v4l2_suspend() argument
1588 if (dev->stream_state == STREAM_ON) { au0828_v4l2_suspend()
1590 au0828_analog_stream_disable(dev); au0828_v4l2_suspend()
1592 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { au0828_v4l2_suspend()
1593 urb = dev->isoc_ctl.urb[i]; au0828_v4l2_suspend()
1603 if (dev->vid_timeout_running) au0828_v4l2_suspend()
1604 del_timer_sync(&dev->vid_timeout); au0828_v4l2_suspend()
1605 if (dev->vbi_timeout_running) au0828_v4l2_suspend()
1606 del_timer_sync(&dev->vbi_timeout); au0828_v4l2_suspend()
1609 void au0828_v4l2_resume(struct au0828_dev *dev) au0828_v4l2_resume() argument
1615 if (dev->stream_state == STREAM_ON) { au0828_v4l2_resume()
1616 au0828_stream_interrupt(dev); au0828_v4l2_resume()
1617 au0828_init_tuner(dev); au0828_v4l2_resume()
1620 if (dev->vid_timeout_running) au0828_v4l2_resume()
1621 mod_timer(&dev->vid_timeout, jiffies + (HZ / 10)); au0828_v4l2_resume()
1622 if (dev->vbi_timeout_running) au0828_v4l2_resume()
1623 mod_timer(&dev->vbi_timeout, jiffies + (HZ / 10)); au0828_v4l2_resume()
1626 au0828_i2s_init(dev); au0828_v4l2_resume()
1628 au0828_analog_stream_enable(dev); au0828_v4l2_resume()
1630 if (!(dev->stream_state == STREAM_ON)) { au0828_v4l2_resume()
1631 au0828_analog_stream_reset(dev); au0828_v4l2_resume()
1633 for (i = 0; i < dev->isoc_ctl.num_bufs; i++) { au0828_v4l2_resume()
1634 rc = usb_submit_urb(dev->isoc_ctl.urb[i], GFP_ATOMIC); au0828_v4l2_resume()
1638 au0828_uninit_isoc(dev); au0828_v4l2_resume()
1705 static int au0828_vb2_setup(struct au0828_dev *dev) au0828_vb2_setup() argument
1711 q = &dev->vb_vidq; au0828_vb2_setup()
1715 q->drv_priv = dev; au0828_vb2_setup()
1725 q = &dev->vb_vbiq; au0828_vb2_setup()
1729 q->drv_priv = dev; au0828_vb2_setup()
1743 int au0828_analog_register(struct au0828_dev *dev, au0828_analog_register() argument
1755 retval = usb_set_interface(dev->usbdev, au0828_analog_register()
1773 dev->max_pkt_size = (tmp & 0x07ff) * au0828_analog_register()
1775 dev->isoc_in_endpointaddr = endpoint->bEndpointAddress; au0828_analog_register()
1778 dev->isoc_in_endpointaddr, dev->max_pkt_size); au0828_analog_register()
1781 if (!(dev->isoc_in_endpointaddr)) { au0828_analog_register()
1786 init_waitqueue_head(&dev->open); au0828_analog_register()
1787 spin_lock_init(&dev->slock); au0828_analog_register()
1790 INIT_LIST_HEAD(&dev->vidq.active); au0828_analog_register()
1791 INIT_LIST_HEAD(&dev->vbiq.active); au0828_analog_register()
1793 setup_timer(&dev->vid_timeout, au0828_vid_buffer_timeout, au0828_analog_register()
1794 (unsigned long)dev); au0828_analog_register()
1795 setup_timer(&dev->vbi_timeout, au0828_vbi_buffer_timeout, au0828_analog_register()
1796 (unsigned long)dev); au0828_analog_register()
1798 dev->width = NTSC_STD_W; au0828_analog_register()
1799 dev->height = NTSC_STD_H; au0828_analog_register()
1800 dev->field_size = dev->width * dev->height; au0828_analog_register()
1801 dev->frame_size = dev->field_size << 1; au0828_analog_register()
1802 dev->bytesperline = dev->width << 1; au0828_analog_register()
1803 dev->vbi_width = 720; au0828_analog_register()
1804 dev->vbi_height = 1; au0828_analog_register()
1805 dev->ctrl_ainput = 0; au0828_analog_register()
1806 dev->ctrl_freq = 960; au0828_analog_register()
1807 dev->std = V4L2_STD_NTSC_M; au0828_analog_register()
1808 au0828_s_input(dev, 0); au0828_analog_register()
1810 mutex_init(&dev->vb_queue_lock); au0828_analog_register()
1811 mutex_init(&dev->vb_vbi_queue_lock); au0828_analog_register()
1814 dev->vdev = au0828_video_template; au0828_analog_register()
1815 dev->vdev.v4l2_dev = &dev->v4l2_dev; au0828_analog_register()
1816 dev->vdev.lock = &dev->lock; au0828_analog_register()
1817 dev->vdev.queue = &dev->vb_vidq; au0828_analog_register()
1818 dev->vdev.queue->lock = &dev->vb_queue_lock; au0828_analog_register()
1819 strcpy(dev->vdev.name, "au0828a video"); au0828_analog_register()
1822 dev->vbi_dev = au0828_video_template; au0828_analog_register()
1823 dev->vbi_dev.v4l2_dev = &dev->v4l2_dev; au0828_analog_register()
1824 dev->vbi_dev.lock = &dev->lock; au0828_analog_register()
1825 dev->vbi_dev.queue = &dev->vb_vbiq; au0828_analog_register()
1826 dev->vbi_dev.queue->lock = &dev->vb_vbi_queue_lock; au0828_analog_register()
1827 strcpy(dev->vbi_dev.name, "au0828a vbi"); au0828_analog_register()
1830 retval = au0828_vb2_setup(dev); au0828_analog_register()
1838 video_set_drvdata(&dev->vdev, dev); au0828_analog_register()
1839 retval = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1); au0828_analog_register()
1848 video_set_drvdata(&dev->vbi_dev, dev); au0828_analog_register()
1849 retval = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI, -1); au0828_analog_register()
1862 video_unregister_device(&dev->vdev); au0828_analog_register()
1864 vb2_queue_release(&dev->vb_vidq); au0828_analog_register()
1865 vb2_queue_release(&dev->vb_vbiq); au0828_analog_register()
H A Dau0828-core.c50 static int send_control_msg(struct au0828_dev *dev, u16 request, u32 value,
52 static int recv_control_msg(struct au0828_dev *dev, u16 request, u32 value,
59 u32 au0828_readreg(struct au0828_dev *dev, u16 reg) au0828_readreg() argument
63 recv_control_msg(dev, CMD_REQUEST_IN, 0, reg, &result, 1); au0828_readreg()
69 u32 au0828_writereg(struct au0828_dev *dev, u16 reg, u32 val) au0828_writereg() argument
72 return send_control_msg(dev, CMD_REQUEST_OUT, val, reg); au0828_writereg()
75 static int send_control_msg(struct au0828_dev *dev, u16 request, u32 value, send_control_msg() argument
80 if (dev->usbdev) { send_control_msg()
83 status = usb_control_msg(dev->usbdev, send_control_msg()
84 usb_sndctrlpipe(dev->usbdev, 0), send_control_msg()
102 static int recv_control_msg(struct au0828_dev *dev, u16 request, u32 value, recv_control_msg() argument
106 mutex_lock(&dev->mutex); recv_control_msg()
107 if (dev->usbdev) { recv_control_msg()
108 status = usb_control_msg(dev->usbdev, recv_control_msg()
109 usb_rcvctrlpipe(dev->usbdev, 0), recv_control_msg()
113 dev->ctrlmsg, size, 1000); recv_control_msg()
124 memcpy(cp, dev->ctrlmsg, size); recv_control_msg()
126 mutex_unlock(&dev->mutex); recv_control_msg()
130 static void au0828_usb_release(struct au0828_dev *dev) au0828_usb_release() argument
133 au0828_i2c_unregister(dev); au0828_usb_release()
135 kfree(dev); au0828_usb_release()
141 struct au0828_dev *dev = au0828_usb_v4l2_release() local
144 v4l2_ctrl_handler_free(&dev->v4l2_ctrl_hdl); au0828_usb_v4l2_release()
145 v4l2_device_unregister(&dev->v4l2_dev); au0828_usb_v4l2_release()
146 au0828_usb_release(dev); au0828_usb_v4l2_release()
152 struct au0828_dev *dev = usb_get_intfdata(interface); au0828_usb_disconnect() local
157 dev->usbdev is NULL, for poll (e.g: IR) try to access au0828_usb_disconnect()
162 set_bit(DEV_DISCONNECTED, &dev->dev_state); au0828_usb_disconnect()
164 au0828_rc_unregister(dev); au0828_usb_disconnect()
166 au0828_dvb_unregister(dev); au0828_usb_disconnect()
169 mutex_lock(&dev->mutex); au0828_usb_disconnect()
170 dev->usbdev = NULL; au0828_usb_disconnect()
171 mutex_unlock(&dev->mutex); au0828_usb_disconnect()
174 au0828_analog_unregister(dev); au0828_usb_disconnect()
175 v4l2_device_disconnect(&dev->v4l2_dev); au0828_usb_disconnect()
176 v4l2_device_put(&dev->v4l2_dev); au0828_usb_disconnect()
180 au0828_usb_release(dev); au0828_usb_disconnect()
189 struct au0828_dev *dev; au0828_usb_probe() local
213 dev = kzalloc(sizeof(*dev), GFP_KERNEL); au0828_usb_probe()
214 if (dev == NULL) { au0828_usb_probe()
219 mutex_init(&dev->lock); au0828_usb_probe()
220 mutex_lock(&dev->lock); au0828_usb_probe()
221 mutex_init(&dev->mutex); au0828_usb_probe()
222 mutex_init(&dev->dvb.lock); au0828_usb_probe()
223 dev->usbdev = usbdev; au0828_usb_probe()
224 dev->boardnr = id->driver_info; au0828_usb_probe()
225 dev->board = au0828_boards[dev->boardnr]; au0828_usb_probe()
229 dev->v4l2_dev.release = au0828_usb_v4l2_release; au0828_usb_probe()
232 retval = v4l2_device_register(&interface->dev, &dev->v4l2_dev); au0828_usb_probe()
236 mutex_unlock(&dev->lock); au0828_usb_probe()
237 kfree(dev); au0828_usb_probe()
241 retval = v4l2_ctrl_handler_init(&dev->v4l2_ctrl_hdl, 4); au0828_usb_probe()
245 mutex_unlock(&dev->lock); au0828_usb_probe()
246 kfree(dev); au0828_usb_probe()
249 dev->v4l2_dev.ctrl_handler = &dev->v4l2_ctrl_hdl; au0828_usb_probe()
253 au0828_write(dev, REG_600, 1 << 4); au0828_usb_probe()
256 au0828_gpio_setup(dev); au0828_usb_probe()
259 au0828_i2c_register(dev); au0828_usb_probe()
262 au0828_card_setup(dev); au0828_usb_probe()
267 au0828_analog_register(dev, interface); au0828_usb_probe()
271 retval = au0828_dvb_register(dev); au0828_usb_probe()
277 au0828_rc_register(dev); au0828_usb_probe()
283 usb_set_intfdata(interface, dev); au0828_usb_probe()
286 dev->board.name == NULL ? "Unset" : dev->board.name); au0828_usb_probe()
288 mutex_unlock(&dev->lock); au0828_usb_probe()
296 struct au0828_dev *dev = usb_get_intfdata(interface); au0828_suspend() local
298 if (!dev) au0828_suspend()
303 au0828_rc_suspend(dev); au0828_suspend()
304 au0828_v4l2_suspend(dev); au0828_suspend()
305 au0828_dvb_suspend(dev); au0828_suspend()
314 struct au0828_dev *dev = usb_get_intfdata(interface); au0828_resume() local
315 if (!dev) au0828_resume()
321 au0828_write(dev, REG_600, 1 << 4); au0828_resume()
324 au0828_gpio_setup(dev); au0828_resume()
326 au0828_rc_resume(dev); au0828_resume()
327 au0828_v4l2_resume(dev); au0828_resume()
328 au0828_dvb_resume(dev); au0828_resume()
/linux-4.4.14/drivers/scsi/
H A Dscsi_pm.c21 static int do_scsi_suspend(struct device *dev, const struct dev_pm_ops *pm) do_scsi_suspend() argument
23 return pm && pm->suspend ? pm->suspend(dev) : 0; do_scsi_suspend()
26 static int do_scsi_freeze(struct device *dev, const struct dev_pm_ops *pm) do_scsi_freeze() argument
28 return pm && pm->freeze ? pm->freeze(dev) : 0; do_scsi_freeze()
31 static int do_scsi_poweroff(struct device *dev, const struct dev_pm_ops *pm) do_scsi_poweroff() argument
33 return pm && pm->poweroff ? pm->poweroff(dev) : 0; do_scsi_poweroff()
36 static int do_scsi_resume(struct device *dev, const struct dev_pm_ops *pm) do_scsi_resume() argument
38 return pm && pm->resume ? pm->resume(dev) : 0; do_scsi_resume()
41 static int do_scsi_thaw(struct device *dev, const struct dev_pm_ops *pm) do_scsi_thaw() argument
43 return pm && pm->thaw ? pm->thaw(dev) : 0; do_scsi_thaw()
46 static int do_scsi_restore(struct device *dev, const struct dev_pm_ops *pm) do_scsi_restore() argument
48 return pm && pm->restore ? pm->restore(dev) : 0; do_scsi_restore()
51 static int scsi_dev_type_suspend(struct device *dev, scsi_dev_type_suspend() argument
54 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; scsi_dev_type_suspend()
60 err = scsi_device_quiesce(to_scsi_device(dev)); scsi_dev_type_suspend()
62 err = cb(dev, pm); scsi_dev_type_suspend()
64 scsi_device_resume(to_scsi_device(dev)); scsi_dev_type_suspend()
66 dev_dbg(dev, "scsi suspend: %d\n", err); scsi_dev_type_suspend()
70 static int scsi_dev_type_resume(struct device *dev, scsi_dev_type_resume() argument
73 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; scsi_dev_type_resume()
76 err = cb(dev, pm); scsi_dev_type_resume()
77 scsi_device_resume(to_scsi_device(dev)); scsi_dev_type_resume()
78 dev_dbg(dev, "scsi resume: %d\n", err); scsi_dev_type_resume()
81 pm_runtime_disable(dev); scsi_dev_type_resume()
82 pm_runtime_set_active(dev); scsi_dev_type_resume()
83 pm_runtime_enable(dev); scsi_dev_type_resume()
90 scsi_bus_suspend_common(struct device *dev, scsi_bus_suspend_common() argument
95 if (scsi_is_sdev_device(dev)) { scsi_bus_suspend_common()
102 if (pm_runtime_suspended(dev)) scsi_bus_suspend_common()
105 err = scsi_dev_type_suspend(dev, cb); scsi_bus_suspend_common()
111 static void async_sdev_resume(void *dev, async_cookie_t cookie) async_sdev_resume() argument
113 scsi_dev_type_resume(dev, do_scsi_resume); async_sdev_resume()
116 static void async_sdev_thaw(void *dev, async_cookie_t cookie) async_sdev_thaw() argument
118 scsi_dev_type_resume(dev, do_scsi_thaw); async_sdev_thaw()
121 static void async_sdev_restore(void *dev, async_cookie_t cookie) async_sdev_restore() argument
123 scsi_dev_type_resume(dev, do_scsi_restore); async_sdev_restore()
126 static int scsi_bus_resume_common(struct device *dev, scsi_bus_resume_common() argument
131 if (!scsi_is_sdev_device(dev)) scsi_bus_resume_common()
143 async_schedule_domain(fn, dev, &scsi_sd_pm_domain); scsi_bus_resume_common()
154 pm_runtime_disable(dev); scsi_bus_resume_common()
155 pm_runtime_set_active(dev); scsi_bus_resume_common()
156 pm_runtime_enable(dev); scsi_bus_resume_common()
161 static int scsi_bus_prepare(struct device *dev) scsi_bus_prepare() argument
163 if (scsi_is_sdev_device(dev)) { scsi_bus_prepare()
167 } else if (scsi_is_host_device(dev)) { scsi_bus_prepare()
174 static int scsi_bus_suspend(struct device *dev) scsi_bus_suspend() argument
176 return scsi_bus_suspend_common(dev, do_scsi_suspend); scsi_bus_suspend()
179 static int scsi_bus_resume(struct device *dev) scsi_bus_resume() argument
181 return scsi_bus_resume_common(dev, do_scsi_resume); scsi_bus_resume()
184 static int scsi_bus_freeze(struct device *dev) scsi_bus_freeze() argument
186 return scsi_bus_suspend_common(dev, do_scsi_freeze); scsi_bus_freeze()
189 static int scsi_bus_thaw(struct device *dev) scsi_bus_thaw() argument
191 return scsi_bus_resume_common(dev, do_scsi_thaw); scsi_bus_thaw()
194 static int scsi_bus_poweroff(struct device *dev) scsi_bus_poweroff() argument
196 return scsi_bus_suspend_common(dev, do_scsi_poweroff); scsi_bus_poweroff()
199 static int scsi_bus_restore(struct device *dev) scsi_bus_restore() argument
201 return scsi_bus_resume_common(dev, do_scsi_restore); scsi_bus_restore()
216 static int sdev_runtime_suspend(struct device *dev) sdev_runtime_suspend() argument
218 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; sdev_runtime_suspend()
219 struct scsi_device *sdev = to_scsi_device(dev); sdev_runtime_suspend()
226 err = pm->runtime_suspend(dev); sdev_runtime_suspend()
232 static int scsi_runtime_suspend(struct device *dev) scsi_runtime_suspend() argument
236 dev_dbg(dev, "scsi_runtime_suspend\n"); scsi_runtime_suspend()
237 if (scsi_is_sdev_device(dev)) scsi_runtime_suspend()
238 err = sdev_runtime_suspend(dev); scsi_runtime_suspend()
245 static int sdev_runtime_resume(struct device *dev) sdev_runtime_resume() argument
247 struct scsi_device *sdev = to_scsi_device(dev); sdev_runtime_resume()
248 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; sdev_runtime_resume()
253 err = pm->runtime_resume(dev); sdev_runtime_resume()
259 static int scsi_runtime_resume(struct device *dev) scsi_runtime_resume() argument
263 dev_dbg(dev, "scsi_runtime_resume\n"); scsi_runtime_resume()
264 if (scsi_is_sdev_device(dev)) scsi_runtime_resume()
265 err = sdev_runtime_resume(dev); scsi_runtime_resume()
272 static int scsi_runtime_idle(struct device *dev) scsi_runtime_idle() argument
274 dev_dbg(dev, "scsi_runtime_idle\n"); scsi_runtime_idle()
278 if (scsi_is_sdev_device(dev)) { scsi_runtime_idle()
279 pm_runtime_mark_last_busy(dev); scsi_runtime_idle()
280 pm_runtime_autosuspend(dev); scsi_runtime_idle()
308 pm_runtime_get_sync(&starget->dev); scsi_autopm_get_target()
313 pm_runtime_put_sync(&starget->dev); scsi_autopm_put_target()
/linux-4.4.14/virt/kvm/
H A Dcoalesced_mmio.c19 static inline struct kvm_coalesced_mmio_dev *to_mmio(struct kvm_io_device *dev) to_mmio() argument
21 return container_of(dev, struct kvm_coalesced_mmio_dev, dev); to_mmio()
24 static int coalesced_mmio_in_range(struct kvm_coalesced_mmio_dev *dev, coalesced_mmio_in_range() argument
35 if (addr < dev->zone.addr) coalesced_mmio_in_range()
37 if (addr + len > dev->zone.addr + dev->zone.size) coalesced_mmio_in_range()
42 static int coalesced_mmio_has_room(struct kvm_coalesced_mmio_dev *dev) coalesced_mmio_has_room() argument
53 ring = dev->kvm->coalesced_mmio_ring; coalesced_mmio_has_room()
67 struct kvm_coalesced_mmio_dev *dev = to_mmio(this); coalesced_mmio_write() local
68 struct kvm_coalesced_mmio_ring *ring = dev->kvm->coalesced_mmio_ring; coalesced_mmio_write()
70 if (!coalesced_mmio_in_range(dev, addr, len)) coalesced_mmio_write()
73 spin_lock(&dev->kvm->ring_lock); coalesced_mmio_write()
75 if (!coalesced_mmio_has_room(dev)) { coalesced_mmio_write()
76 spin_unlock(&dev->kvm->ring_lock); coalesced_mmio_write()
87 spin_unlock(&dev->kvm->ring_lock); coalesced_mmio_write()
93 struct kvm_coalesced_mmio_dev *dev = to_mmio(this); coalesced_mmio_destructor() local
95 list_del(&dev->list); coalesced_mmio_destructor()
97 kfree(dev); coalesced_mmio_destructor()
140 struct kvm_coalesced_mmio_dev *dev; kvm_vm_ioctl_register_coalesced_mmio() local
142 dev = kzalloc(sizeof(struct kvm_coalesced_mmio_dev), GFP_KERNEL); kvm_vm_ioctl_register_coalesced_mmio()
143 if (!dev) kvm_vm_ioctl_register_coalesced_mmio()
146 kvm_iodevice_init(&dev->dev, &coalesced_mmio_ops); kvm_vm_ioctl_register_coalesced_mmio()
147 dev->kvm = kvm; kvm_vm_ioctl_register_coalesced_mmio()
148 dev->zone = *zone; kvm_vm_ioctl_register_coalesced_mmio()
152 zone->size, &dev->dev); kvm_vm_ioctl_register_coalesced_mmio()
155 list_add_tail(&dev->list, &kvm->coalesced_zones); kvm_vm_ioctl_register_coalesced_mmio()
162 kfree(dev); kvm_vm_ioctl_register_coalesced_mmio()
170 struct kvm_coalesced_mmio_dev *dev, *tmp; kvm_vm_ioctl_unregister_coalesced_mmio() local
174 list_for_each_entry_safe(dev, tmp, &kvm->coalesced_zones, list) kvm_vm_ioctl_unregister_coalesced_mmio()
175 if (coalesced_mmio_in_range(dev, zone->addr, zone->size)) { kvm_vm_ioctl_unregister_coalesced_mmio()
176 kvm_io_bus_unregister_dev(kvm, KVM_MMIO_BUS, &dev->dev); kvm_vm_ioctl_unregister_coalesced_mmio()
177 kvm_iodevice_destructor(&dev->dev); kvm_vm_ioctl_unregister_coalesced_mmio()
/linux-4.4.14/include/net/
H A Dl3mdev.h27 u32 (*l3mdev_fib_table)(const struct net_device *dev);
30 struct rtable * (*l3mdev_get_rtable)(const struct net_device *dev,
32 int (*l3mdev_get_saddr)(struct net_device *dev,
36 struct dst_entry * (*l3mdev_get_rt6_dst)(const struct net_device *dev,
42 int l3mdev_master_ifindex_rcu(struct net_device *dev); l3mdev_master_ifindex()
43 static inline int l3mdev_master_ifindex(struct net_device *dev) l3mdev_master_ifindex() argument
48 ifindex = l3mdev_master_ifindex_rcu(dev); l3mdev_master_ifindex()
58 static inline int l3mdev_fib_oif_rcu(struct net_device *dev) l3mdev_fib_oif_rcu() argument
60 return l3mdev_master_ifindex_rcu(dev) ? : dev->ifindex; l3mdev_fib_oif_rcu()
63 static inline int l3mdev_fib_oif(struct net_device *dev) l3mdev_fib_oif() argument
68 oif = l3mdev_fib_oif_rcu(dev); l3mdev_fib_oif()
74 u32 l3mdev_fib_table_rcu(const struct net_device *dev);
76 static inline u32 l3mdev_fib_table(const struct net_device *dev) l3mdev_fib_table() argument
81 tb_id = l3mdev_fib_table_rcu(dev); l3mdev_fib_table()
87 static inline struct rtable *l3mdev_get_rtable(const struct net_device *dev, l3mdev_get_rtable() argument
90 if (netif_is_l3_master(dev) && dev->l3mdev_ops->l3mdev_get_rtable) l3mdev_get_rtable()
91 return dev->l3mdev_ops->l3mdev_get_rtable(dev, fl4); l3mdev_get_rtable()
98 struct net_device *dev; netif_index_is_l3_master() local
106 dev = dev_get_by_index_rcu(net, ifindex); netif_index_is_l3_master()
107 if (dev) netif_index_is_l3_master()
108 rc = netif_is_l3_master(dev); netif_index_is_l3_master()
118 struct net_device *dev; l3mdev_get_saddr() local
125 dev = dev_get_by_index_rcu(net, ifindex); l3mdev_get_saddr()
126 if (dev && netif_is_l3_master(dev) && l3mdev_get_saddr()
127 dev->l3mdev_ops->l3mdev_get_saddr) { l3mdev_get_saddr()
128 rc = dev->l3mdev_ops->l3mdev_get_saddr(dev, fl4); l3mdev_get_saddr()
137 static inline struct dst_entry *l3mdev_get_rt6_dst(const struct net_device *dev, l3mdev_get_rt6_dst() argument
140 if (netif_is_l3_master(dev) && dev->l3mdev_ops->l3mdev_get_rt6_dst) l3mdev_get_rt6_dst()
141 return dev->l3mdev_ops->l3mdev_get_rt6_dst(dev, fl6); l3mdev_get_rt6_dst()
151 struct net_device *dev; l3mdev_rt6_dst_by_oif() local
153 dev = dev_get_by_index(net, fl6->flowi6_oif); l3mdev_rt6_dst_by_oif()
154 if (dev) { l3mdev_rt6_dst_by_oif()
155 dst = l3mdev_get_rt6_dst(dev, fl6); l3mdev_rt6_dst_by_oif()
156 dev_put(dev); l3mdev_rt6_dst_by_oif()
164 static inline int l3mdev_master_ifindex_rcu(struct net_device *dev) l3mdev_master_ifindex_rcu() argument
168 static inline int l3mdev_master_ifindex(struct net_device *dev) l3mdev_master_ifindex() argument
173 static inline int l3mdev_fib_oif_rcu(struct net_device *dev) l3mdev_fib_oif_rcu() argument
175 return dev ? dev->ifindex : 0; l3mdev_fib_oif_rcu()
177 static inline int l3mdev_fib_oif(struct net_device *dev) l3mdev_fib_oif() argument
179 return dev ? dev->ifindex : 0; l3mdev_fib_oif()
182 static inline u32 l3mdev_fib_table_rcu(const struct net_device *dev) l3mdev_fib_table_rcu() argument
186 static inline u32 l3mdev_fib_table(const struct net_device *dev) l3mdev_fib_table() argument
195 static inline struct rtable *l3mdev_get_rtable(const struct net_device *dev, l3mdev_get_rtable() argument
213 struct dst_entry *l3mdev_get_rt6_dst(const struct net_device *dev, l3mdev_get_rt6_dst() argument
H A Dx25device.h9 static inline __be16 x25_type_trans(struct sk_buff *skb, struct net_device *dev) x25_type_trans() argument
11 skb->dev = dev; x25_type_trans()
/linux-4.4.14/drivers/media/tuners/
H A Dit913x.c41 struct it913x_dev *dev = fe->tuner_priv; it913x_init() local
48 dev_dbg(&dev->client->dev, "role %u\n", dev->role); it913x_init()
50 ret = regmap_write(dev->regmap, 0x80ec4c, 0x68); it913x_init()
56 ret = regmap_read(dev->regmap, 0x80ec86, &utmp); it913x_init()
63 dev->clk_mode = utmp; it913x_init()
64 dev->xtal = 2000; it913x_init()
65 dev->fdiv = 3; it913x_init()
70 dev->clk_mode = utmp; it913x_init()
71 dev->xtal = 640; it913x_init()
72 dev->fdiv = 1; it913x_init()
76 dev_err(&dev->client->dev, "unknown clock identifier %d\n", utmp); it913x_init()
80 ret = regmap_read(dev->regmap, 0x80ed03, &utmp); it913x_init()
92 ret = regmap_bulk_read(dev->regmap, 0x80ed23, buf, 2); it913x_init()
101 dev_dbg(&dev->client->dev, "r_fbc_m_bdry took %u ms, val %u\n", it913x_init()
105 dev->fn_min = dev->xtal * utmp; it913x_init()
106 dev->fn_min /= (dev->fdiv * nv_val); it913x_init()
107 dev->fn_min *= 1000; it913x_init()
108 dev_dbg(&dev->client->dev, "fn_min %u\n", dev->fn_min); it913x_init()
116 if (dev->chip_ver == 1) { it913x_init()
120 ret = regmap_read(dev->regmap, 0x80ec82, &utmp); it913x_init()
128 dev_dbg(&dev->client->dev, "p_tsm_init_mode took %u ms, val %u\n", it913x_init()
135 ret = regmap_write(dev->regmap, 0x80ed81, iqik_m_cal); it913x_init()
139 ret = regmap_write(dev->regmap, 0x80ec57, 0x00); it913x_init()
143 ret = regmap_write(dev->regmap, 0x80ec58, 0x00); it913x_init()
147 ret = regmap_write(dev->regmap, 0x80ec40, 0x01); it913x_init()
151 dev->active = true; it913x_init()
155 dev_dbg(&dev->client->dev, "failed %d\n", ret); it913x_init()
161 struct it913x_dev *dev = fe->tuner_priv; it913x_sleep() local
164 dev_dbg(&dev->client->dev, "role %u\n", dev->role); it913x_sleep()
166 dev->active = false; it913x_sleep()
168 ret = regmap_bulk_write(dev->regmap, 0x80ec40, "\x00", 1); it913x_sleep()
176 if (dev->role == IT913X_ROLE_DUAL_MASTER) it913x_sleep()
181 dev_dbg(&dev->client->dev, "role %u, len %d\n", dev->role, len); it913x_sleep()
183 ret = regmap_bulk_write(dev->regmap, 0x80ec02, it913x_sleep()
189 ret = regmap_bulk_write(dev->regmap, 0x80ec12, "\x00\x00\x00\x00", 4); it913x_sleep()
193 ret = regmap_bulk_write(dev->regmap, 0x80ec17, it913x_sleep()
198 ret = regmap_bulk_write(dev->regmap, 0x80ec22, it913x_sleep()
203 ret = regmap_bulk_write(dev->regmap, 0x80ec20, "\x00", 1); it913x_sleep()
207 ret = regmap_bulk_write(dev->regmap, 0x80ec3f, "\x01", 1); it913x_sleep()
213 dev_dbg(&dev->client->dev, "failed %d\n", ret); it913x_sleep()
219 struct it913x_dev *dev = fe->tuner_priv; it913x_set_params() local
227 dev_dbg(&dev->client->dev, "role=%u, frequency %u, bandwidth_hz %u\n", it913x_set_params()
228 dev->role, c->frequency, c->bandwidth_hz); it913x_set_params()
230 if (!dev->active) { it913x_set_params()
253 } else if (c->frequency <= dev->fn_min) { it913x_set_params()
264 ret = regmap_read(dev->regmap, 0x80ed81, &utmp); it913x_set_params()
271 if (dev->clk_mode == 0) it913x_set_params()
277 if (dev->clk_mode == 0) it913x_set_params()
283 t_cal_freq = (c->frequency / 1000) * n_div * dev->fdiv; it913x_set_params()
284 pre_lo_freq = t_cal_freq / dev->xtal; it913x_set_params()
285 utmp = pre_lo_freq * dev->xtal; it913x_set_params()
287 if ((t_cal_freq - utmp) >= (dev->xtal >> 1)) it913x_set_params()
293 dev_dbg(&dev->client->dev, "t_cal_freq %u, pre_lo_freq %u\n", it913x_set_params()
332 ret = regmap_write(dev->regmap, 0x80ee06, lna_band); it913x_set_params()
345 ret = regmap_write(dev->regmap, 0x80ec56, u8tmp); it913x_set_params()
350 ret = regmap_write(dev->regmap, 0x80ec4c, 0xa0 | (l_band << 3)); it913x_set_params()
354 ret = regmap_write(dev->regmap, 0x80ec4d, (t_cal_freq >> 0) & 0xff); it913x_set_params()
358 ret = regmap_write(dev->regmap, 0x80ec4e, (t_cal_freq >> 8) & 0xff); it913x_set_params()
362 ret = regmap_write(dev->regmap, 0x80011e, (pre_lo_freq >> 0) & 0xff); it913x_set_params()
366 ret = regmap_write(dev->regmap, 0x80011f, (pre_lo_freq >> 8) & 0xff); it913x_set_params()
372 dev_dbg(&dev->client->dev, "failed %d\n", ret); it913x_set_params()
391 struct it913x_config *cfg = client->dev.platform_data; it913x_probe()
393 struct it913x_dev *dev; it913x_probe() local
401 dev = kzalloc(sizeof(struct it913x_dev), GFP_KERNEL); it913x_probe()
402 if (dev == NULL) { it913x_probe()
404 dev_err(&client->dev, "kzalloc() failed\n"); it913x_probe()
408 dev->client = client; it913x_probe()
409 dev->fe = cfg->fe; it913x_probe()
410 dev->chip_ver = cfg->chip_ver; it913x_probe()
411 dev->role = cfg->role; it913x_probe()
412 dev->regmap = regmap_init_i2c(client, &regmap_config); it913x_probe()
413 if (IS_ERR(dev->regmap)) { it913x_probe()
414 ret = PTR_ERR(dev->regmap); it913x_probe()
418 fe->tuner_priv = dev; it913x_probe()
421 i2c_set_clientdata(client, dev); it913x_probe()
423 if (dev->chip_ver == 1) it913x_probe()
425 else if (dev->chip_ver == 2) it913x_probe()
430 dev_info(&dev->client->dev, "ITE IT913X %s successfully attached\n", it913x_probe()
432 dev_dbg(&dev->client->dev, "chip_ver %u, role %u\n", it913x_probe()
433 dev->chip_ver, dev->role); it913x_probe()
437 kfree(dev); it913x_probe()
439 dev_dbg(&client->dev, "failed %d\n", ret); it913x_probe()
445 struct it913x_dev *dev = i2c_get_clientdata(client); it913x_remove() local
446 struct dvb_frontend *fe = dev->fe; it913x_remove()
448 dev_dbg(&client->dev, "\n"); it913x_remove()
452 regmap_exit(dev->regmap); it913x_remove()
453 kfree(dev); it913x_remove()
H A Dfc2580.c33 static int fc2580_wr_reg_ff(struct fc2580_dev *dev, u8 reg, u8 val) fc2580_wr_reg_ff() argument
38 return regmap_write(dev->regmap, reg, val); fc2580_wr_reg_ff()
41 static int fc2580_set_params(struct fc2580_dev *dev) fc2580_set_params() argument
43 struct i2c_client *client = dev->client; fc2580_set_params()
50 if (!dev->active) { fc2580_set_params()
51 dev_dbg(&client->dev, "tuner is sleeping\n"); fc2580_set_params()
71 if (dev->f_frequency <= fc2580_pll_lut[i].freq) fc2580_set_params()
80 #define F_REF dev->clk fc2580_set_params()
82 f_vco = (u64) dev->f_frequency * div_out; fc2580_set_params()
107 dev_dbg(&client->dev, fc2580_set_params()
109 dev->f_frequency, dev->f_bandwidth, f_vco, F_REF, div_ref, fc2580_set_params()
112 ret = regmap_write(dev->regmap, 0x02, synth_config); fc2580_set_params()
116 ret = regmap_write(dev->regmap, 0x18, div_ref_val << 0 | k_cw >> 16); fc2580_set_params()
120 ret = regmap_write(dev->regmap, 0x1a, (k_cw >> 8) & 0xff); fc2580_set_params()
124 ret = regmap_write(dev->regmap, 0x1b, (k_cw >> 0) & 0xff); fc2580_set_params()
128 ret = regmap_write(dev->regmap, 0x1c, div_n); fc2580_set_params()
134 if (dev->f_frequency <= fc2580_freq_regs_lut[i].freq) fc2580_set_params()
142 ret = fc2580_wr_reg_ff(dev, 0x25, fc2580_freq_regs_lut[i].r25_val); fc2580_set_params()
146 ret = fc2580_wr_reg_ff(dev, 0x27, fc2580_freq_regs_lut[i].r27_val); fc2580_set_params()
150 ret = fc2580_wr_reg_ff(dev, 0x28, fc2580_freq_regs_lut[i].r28_val); fc2580_set_params()
154 ret = fc2580_wr_reg_ff(dev, 0x29, fc2580_freq_regs_lut[i].r29_val); fc2580_set_params()
158 ret = fc2580_wr_reg_ff(dev, 0x2b, fc2580_freq_regs_lut[i].r2b_val); fc2580_set_params()
162 ret = fc2580_wr_reg_ff(dev, 0x2c, fc2580_freq_regs_lut[i].r2c_val); fc2580_set_params()
166 ret = fc2580_wr_reg_ff(dev, 0x2d, fc2580_freq_regs_lut[i].r2d_val); fc2580_set_params()
170 ret = fc2580_wr_reg_ff(dev, 0x30, fc2580_freq_regs_lut[i].r30_val); fc2580_set_params()
174 ret = fc2580_wr_reg_ff(dev, 0x44, fc2580_freq_regs_lut[i].r44_val); fc2580_set_params()
178 ret = fc2580_wr_reg_ff(dev, 0x50, fc2580_freq_regs_lut[i].r50_val); fc2580_set_params()
182 ret = fc2580_wr_reg_ff(dev, 0x53, fc2580_freq_regs_lut[i].r53_val); fc2580_set_params()
186 ret = fc2580_wr_reg_ff(dev, 0x5f, fc2580_freq_regs_lut[i].r5f_val); fc2580_set_params()
190 ret = fc2580_wr_reg_ff(dev, 0x61, fc2580_freq_regs_lut[i].r61_val); fc2580_set_params()
194 ret = fc2580_wr_reg_ff(dev, 0x62, fc2580_freq_regs_lut[i].r62_val); fc2580_set_params()
198 ret = fc2580_wr_reg_ff(dev, 0x63, fc2580_freq_regs_lut[i].r63_val); fc2580_set_params()
202 ret = fc2580_wr_reg_ff(dev, 0x67, fc2580_freq_regs_lut[i].r67_val); fc2580_set_params()
206 ret = fc2580_wr_reg_ff(dev, 0x68, fc2580_freq_regs_lut[i].r68_val); fc2580_set_params()
210 ret = fc2580_wr_reg_ff(dev, 0x69, fc2580_freq_regs_lut[i].r69_val); fc2580_set_params()
214 ret = fc2580_wr_reg_ff(dev, 0x6a, fc2580_freq_regs_lut[i].r6a_val); fc2580_set_params()
218 ret = fc2580_wr_reg_ff(dev, 0x6b, fc2580_freq_regs_lut[i].r6b_val); fc2580_set_params()
222 ret = fc2580_wr_reg_ff(dev, 0x6c, fc2580_freq_regs_lut[i].r6c_val); fc2580_set_params()
226 ret = fc2580_wr_reg_ff(dev, 0x6d, fc2580_freq_regs_lut[i].r6d_val); fc2580_set_params()
230 ret = fc2580_wr_reg_ff(dev, 0x6e, fc2580_freq_regs_lut[i].r6e_val); fc2580_set_params()
234 ret = fc2580_wr_reg_ff(dev, 0x6f, fc2580_freq_regs_lut[i].r6f_val); fc2580_set_params()
240 if (dev->f_bandwidth <= fc2580_if_filter_lut[i].freq) fc2580_set_params()
248 ret = regmap_write(dev->regmap, 0x36, fc2580_if_filter_lut[i].r36_val); fc2580_set_params()
252 uitmp = (unsigned int) 8058000 - (dev->f_bandwidth * 122 / 100 / 2); fc2580_set_params()
253 uitmp = div64_u64((u64) dev->clk * uitmp, 1000000000000ULL); fc2580_set_params()
254 ret = regmap_write(dev->regmap, 0x37, uitmp); fc2580_set_params()
258 ret = regmap_write(dev->regmap, 0x39, fc2580_if_filter_lut[i].r39_val); fc2580_set_params()
265 ret = regmap_write(dev->regmap, 0x2e, 0x09); fc2580_set_params()
270 ret = regmap_read(dev->regmap, 0x2f, &uitmp); fc2580_set_params()
275 ret = regmap_write(dev->regmap, 0x2e, 0x01); fc2580_set_params()
280 dev_dbg(&client->dev, "filter did not lock %02x\n", uitmp); fc2580_set_params()
284 dev_dbg(&client->dev, "failed=%d\n", ret); fc2580_set_params()
288 static int fc2580_init(struct fc2580_dev *dev) fc2580_init() argument
290 struct i2c_client *client = dev->client; fc2580_init()
293 dev_dbg(&client->dev, "\n"); fc2580_init()
296 ret = regmap_write(dev->regmap, fc2580_init_reg_vals[i].reg, fc2580_init()
302 dev->active = true; fc2580_init()
305 dev_dbg(&client->dev, "failed=%d\n", ret); fc2580_init()
309 static int fc2580_sleep(struct fc2580_dev *dev) fc2580_sleep() argument
311 struct i2c_client *client = dev->client; fc2580_sleep()
314 dev_dbg(&client->dev, "\n"); fc2580_sleep()
316 dev->active = false; fc2580_sleep()
318 ret = regmap_write(dev->regmap, 0x02, 0x0a); fc2580_sleep()
323 dev_dbg(&client->dev, "failed=%d\n", ret); fc2580_sleep()
332 struct fc2580_dev *dev = fe->tuner_priv; fc2580_dvb_set_params() local
335 dev->f_frequency = c->frequency; fc2580_dvb_set_params()
336 dev->f_bandwidth = c->bandwidth_hz; fc2580_dvb_set_params()
337 return fc2580_set_params(dev); fc2580_dvb_set_params()
391 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_s_power() local
392 struct i2c_client *client = dev->client; fc2580_s_power()
395 dev_dbg(&client->dev, "on=%d\n", on); fc2580_s_power()
398 ret = fc2580_init(dev); fc2580_s_power()
400 ret = fc2580_sleep(dev); fc2580_s_power()
404 return fc2580_set_params(dev); fc2580_s_power()
413 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_g_tuner() local
414 struct i2c_client *client = dev->client; fc2580_g_tuner()
416 dev_dbg(&client->dev, "index=%d\n", v->index); fc2580_g_tuner()
428 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_s_tuner() local
429 struct i2c_client *client = dev->client; fc2580_s_tuner()
431 dev_dbg(&client->dev, "index=%d\n", v->index); fc2580_s_tuner()
437 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_g_frequency() local
438 struct i2c_client *client = dev->client; fc2580_g_frequency()
440 dev_dbg(&client->dev, "tuner=%d\n", f->tuner); fc2580_g_frequency()
441 f->frequency = dev->f_frequency; fc2580_g_frequency()
448 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_s_frequency() local
449 struct i2c_client *client = dev->client; fc2580_s_frequency()
451 dev_dbg(&client->dev, "tuner=%d type=%d frequency=%u\n", fc2580_s_frequency()
454 dev->f_frequency = clamp_t(unsigned int, f->frequency, fc2580_s_frequency()
456 return fc2580_set_params(dev); fc2580_s_frequency()
462 struct fc2580_dev *dev = fc2580_subdev_to_dev(sd); fc2580_enum_freq_bands() local
463 struct i2c_client *client = dev->client; fc2580_enum_freq_bands()
465 dev_dbg(&client->dev, "tuner=%d type=%d index=%d\n", fc2580_enum_freq_bands()
492 struct fc2580_dev *dev = container_of(ctrl->handler, struct fc2580_dev, hdl); fc2580_s_ctrl() local
493 struct i2c_client *client = dev->client; fc2580_s_ctrl()
496 dev_dbg(&client->dev, "ctrl: id=%d name=%s cur.val=%d val=%d\n", fc2580_s_ctrl()
507 dev->f_bandwidth = dev->bandwidth->val; fc2580_s_ctrl()
508 ret = fc2580_set_params(dev); fc2580_s_ctrl()
511 dev_dbg(&client->dev, "unknown ctrl"); fc2580_s_ctrl()
524 struct fc2580_dev *dev = i2c_get_clientdata(client); fc2580_get_v4l2_subdev() local
526 if (dev->subdev.ops) fc2580_get_v4l2_subdev()
527 return &dev->subdev; fc2580_get_v4l2_subdev()
535 struct fc2580_dev *dev; fc2580_probe() local
536 struct fc2580_platform_data *pdata = client->dev.platform_data; fc2580_probe()
545 dev = kzalloc(sizeof(*dev), GFP_KERNEL); fc2580_probe()
546 if (!dev) { fc2580_probe()
552 dev->clk = pdata->clk; fc2580_probe()
554 dev->clk = 16384000; /* internal clock */ fc2580_probe()
555 dev->client = client; fc2580_probe()
556 dev->regmap = devm_regmap_init_i2c(client, &regmap_config); fc2580_probe()
557 if (IS_ERR(dev->regmap)) { fc2580_probe()
558 ret = PTR_ERR(dev->regmap); fc2580_probe()
563 ret = regmap_read(dev->regmap, 0x01, &uitmp); fc2580_probe()
567 dev_dbg(&client->dev, "chip_id=%02x\n", uitmp); fc2580_probe()
580 v4l2_ctrl_handler_init(&dev->hdl, 2); fc2580_probe()
581 dev->bandwidth_auto = v4l2_ctrl_new_std(&dev->hdl, &fc2580_ctrl_ops, fc2580_probe()
584 dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, &fc2580_ctrl_ops, fc2580_probe()
587 v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false); fc2580_probe()
588 if (dev->hdl.error) { fc2580_probe()
589 ret = dev->hdl.error; fc2580_probe()
590 dev_err(&client->dev, "Could not initialize controls\n"); fc2580_probe()
591 v4l2_ctrl_handler_free(&dev->hdl); fc2580_probe()
594 dev->subdev.ctrl_handler = &dev->hdl; fc2580_probe()
595 dev->f_frequency = bands[0].rangelow; fc2580_probe()
596 dev->f_bandwidth = dev->bandwidth->val; fc2580_probe()
597 v4l2_i2c_subdev_init(&dev->subdev, client, &fc2580_subdev_ops); fc2580_probe()
599 fe->tuner_priv = dev; fc2580_probe()
603 i2c_set_clientdata(client, dev); fc2580_probe()
605 dev_info(&client->dev, "FCI FC2580 successfully identified\n"); fc2580_probe()
608 kfree(dev); fc2580_probe()
610 dev_dbg(&client->dev, "failed=%d\n", ret); fc2580_probe()
616 struct fc2580_dev *dev = i2c_get_clientdata(client); fc2580_remove() local
618 dev_dbg(&client->dev, "\n"); fc2580_remove()
621 v4l2_ctrl_handler_free(&dev->hdl); fc2580_remove()
623 kfree(dev); fc2580_remove()
H A De4000.c23 static int e4000_init(struct e4000_dev *dev) e4000_init() argument
25 struct i2c_client *client = dev->client; e4000_init()
28 dev_dbg(&client->dev, "\n"); e4000_init()
31 ret = regmap_write(dev->regmap, 0x00, 0x01); e4000_init()
36 ret = regmap_write(dev->regmap, 0x06, 0x00); e4000_init()
40 ret = regmap_write(dev->regmap, 0x7a, 0x96); e4000_init()
45 ret = regmap_bulk_write(dev->regmap, 0x7e, "\x01\xfe", 2); e4000_init()
49 ret = regmap_write(dev->regmap, 0x82, 0x00); e4000_init()
53 ret = regmap_write(dev->regmap, 0x24, 0x05); e4000_init()
57 ret = regmap_bulk_write(dev->regmap, 0x87, "\x20\x01", 2); e4000_init()
61 ret = regmap_bulk_write(dev->regmap, 0x9f, "\x7f\x07", 2); e4000_init()
66 ret = regmap_write(dev->regmap, 0x2d, 0x1f); e4000_init()
70 ret = regmap_bulk_write(dev->regmap, 0x70, "\x01\x01", 2); e4000_init()
75 ret = regmap_write(dev->regmap, 0x1a, 0x17); e4000_init()
79 ret = regmap_write(dev->regmap, 0x1f, 0x1a); e4000_init()
83 dev->active = true; e4000_init()
87 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_init()
91 static int e4000_sleep(struct e4000_dev *dev) e4000_sleep() argument
93 struct i2c_client *client = dev->client; e4000_sleep()
96 dev_dbg(&client->dev, "\n"); e4000_sleep()
98 dev->active = false; e4000_sleep()
100 ret = regmap_write(dev->regmap, 0x00, 0x00); e4000_sleep()
106 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_sleep()
110 static int e4000_set_params(struct e4000_dev *dev) e4000_set_params() argument
112 struct i2c_client *client = dev->client; e4000_set_params()
118 if (!dev->active) { e4000_set_params()
119 dev_dbg(&client->dev, "tuner is sleeping\n"); e4000_set_params()
124 ret = regmap_write(dev->regmap, 0x1a, 0x00); e4000_set_params()
144 if (dev->f_frequency <= e4000_pll_lut[i].freq) e4000_set_params()
152 #define F_REF dev->clk e4000_set_params()
154 f_vco = (u64) dev->f_frequency * div_out; e4000_set_params()
159 dev_dbg(&client->dev, e4000_set_params()
161 dev->f_frequency, dev->f_bandwidth, f_vco, F_REF, div_n, k, e4000_set_params()
169 ret = regmap_bulk_write(dev->regmap, 0x09, buf, 5); e4000_set_params()
175 if (dev->f_frequency <= e400_lna_filter_lut[i].freq) e4000_set_params()
183 ret = regmap_write(dev->regmap, 0x10, e400_lna_filter_lut[i].val); e4000_set_params()
189 if (dev->f_bandwidth <= e4000_if_filter_lut[i].freq) e4000_set_params()
200 ret = regmap_bulk_write(dev->regmap, 0x11, buf, 2); e4000_set_params()
206 if (dev->f_frequency <= e4000_band_lut[i].freq) e4000_set_params()
214 ret = regmap_write(dev->regmap, 0x07, e4000_band_lut[i].reg07_val); e4000_set_params()
218 ret = regmap_write(dev->regmap, 0x78, e4000_band_lut[i].reg78_val); e4000_set_params()
225 ret = regmap_bulk_write(dev->regmap, 0x15, "\x00\x7e\x24", 3); e4000_set_params()
227 ret = regmap_bulk_write(dev->regmap, 0x15, "\x00\x7f", 2); e4000_set_params()
229 ret = regmap_bulk_write(dev->regmap, 0x15, "\x01", 1); e4000_set_params()
231 ret = regmap_bulk_write(dev->regmap, 0x16, "\x7e", 1); e4000_set_params()
236 ret = regmap_write(dev->regmap, 0x29, 0x01); e4000_set_params()
240 ret = regmap_bulk_read(dev->regmap, 0x2a, buf, 3); e4000_set_params()
251 ret = regmap_bulk_write(dev->regmap, 0x50, q_data, 4); e4000_set_params()
255 ret = regmap_bulk_write(dev->regmap, 0x60, i_data, 4); e4000_set_params()
260 ret = regmap_write(dev->regmap, 0x1a, 0x17); e4000_set_params()
266 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_set_params()
298 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_s_power() local
299 struct i2c_client *client = dev->client; e4000_s_power()
302 dev_dbg(&client->dev, "on=%d\n", on); e4000_s_power()
305 ret = e4000_init(dev); e4000_s_power()
307 ret = e4000_sleep(dev); e4000_s_power()
311 return e4000_set_params(dev); e4000_s_power()
320 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_g_tuner() local
321 struct i2c_client *client = dev->client; e4000_g_tuner()
323 dev_dbg(&client->dev, "index=%d\n", v->index); e4000_g_tuner()
335 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_s_tuner() local
336 struct i2c_client *client = dev->client; e4000_s_tuner()
338 dev_dbg(&client->dev, "index=%d\n", v->index); e4000_s_tuner()
344 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_g_frequency() local
345 struct i2c_client *client = dev->client; e4000_g_frequency()
347 dev_dbg(&client->dev, "tuner=%d\n", f->tuner); e4000_g_frequency()
348 f->frequency = dev->f_frequency; e4000_g_frequency()
355 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_s_frequency() local
356 struct i2c_client *client = dev->client; e4000_s_frequency()
358 dev_dbg(&client->dev, "tuner=%d type=%d frequency=%u\n", e4000_s_frequency()
361 dev->f_frequency = clamp_t(unsigned int, f->frequency, e4000_s_frequency()
363 return e4000_set_params(dev); e4000_s_frequency()
369 struct e4000_dev *dev = e4000_subdev_to_dev(sd); e4000_enum_freq_bands() local
370 struct i2c_client *client = dev->client; e4000_enum_freq_bands()
372 dev_dbg(&client->dev, "tuner=%d type=%d index=%d\n", e4000_enum_freq_bands()
399 struct e4000_dev *dev = fe->tuner_priv; e4000_set_lna_gain() local
400 struct i2c_client *client = dev->client; e4000_set_lna_gain()
404 dev_dbg(&client->dev, "lna auto=%d->%d val=%d->%d\n", e4000_set_lna_gain()
405 dev->lna_gain_auto->cur.val, dev->lna_gain_auto->val, e4000_set_lna_gain()
406 dev->lna_gain->cur.val, dev->lna_gain->val); e4000_set_lna_gain()
408 if (dev->lna_gain_auto->val && dev->if_gain_auto->cur.val) e4000_set_lna_gain()
410 else if (dev->lna_gain_auto->val) e4000_set_lna_gain()
412 else if (dev->if_gain_auto->cur.val) e4000_set_lna_gain()
417 ret = regmap_write(dev->regmap, 0x1a, u8tmp); e4000_set_lna_gain()
421 if (dev->lna_gain_auto->val == false) { e4000_set_lna_gain()
422 ret = regmap_write(dev->regmap, 0x14, dev->lna_gain->val); e4000_set_lna_gain()
429 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_set_lna_gain()
435 struct e4000_dev *dev = fe->tuner_priv; e4000_set_mixer_gain() local
436 struct i2c_client *client = dev->client; e4000_set_mixer_gain()
440 dev_dbg(&client->dev, "mixer auto=%d->%d val=%d->%d\n", e4000_set_mixer_gain()
441 dev->mixer_gain_auto->cur.val, dev->mixer_gain_auto->val, e4000_set_mixer_gain()
442 dev->mixer_gain->cur.val, dev->mixer_gain->val); e4000_set_mixer_gain()
444 if (dev->mixer_gain_auto->val) e4000_set_mixer_gain()
449 ret = regmap_write(dev->regmap, 0x20, u8tmp); e4000_set_mixer_gain()
453 if (dev->mixer_gain_auto->val == false) { e4000_set_mixer_gain()
454 ret = regmap_write(dev->regmap, 0x15, dev->mixer_gain->val); e4000_set_mixer_gain()
461 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_set_mixer_gain()
467 struct e4000_dev *dev = fe->tuner_priv; e4000_set_if_gain() local
468 struct i2c_client *client = dev->client; e4000_set_if_gain()
473 dev_dbg(&client->dev, "if auto=%d->%d val=%d->%d\n", e4000_set_if_gain()
474 dev->if_gain_auto->cur.val, dev->if_gain_auto->val, e4000_set_if_gain()
475 dev->if_gain->cur.val, dev->if_gain->val); e4000_set_if_gain()
477 if (dev->if_gain_auto->val && dev->lna_gain_auto->cur.val) e4000_set_if_gain()
479 else if (dev->lna_gain_auto->cur.val) e4000_set_if_gain()
481 else if (dev->if_gain_auto->val) e4000_set_if_gain()
486 ret = regmap_write(dev->regmap, 0x1a, u8tmp); e4000_set_if_gain()
490 if (dev->if_gain_auto->val == false) { e4000_set_if_gain()
491 buf[0] = e4000_if_gain_lut[dev->if_gain->val].reg16_val; e4000_set_if_gain()
492 buf[1] = e4000_if_gain_lut[dev->if_gain->val].reg17_val; e4000_set_if_gain()
493 ret = regmap_bulk_write(dev->regmap, 0x16, buf, 2); e4000_set_if_gain()
500 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_set_if_gain()
506 struct e4000_dev *dev = fe->tuner_priv; e4000_pll_lock() local
507 struct i2c_client *client = dev->client; e4000_pll_lock()
511 ret = regmap_read(dev->regmap, 0x07, &uitmp); e4000_pll_lock()
515 dev->pll_lock->val = (uitmp & 0x01); e4000_pll_lock()
519 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_pll_lock()
525 struct e4000_dev *dev = container_of(ctrl->handler, struct e4000_dev, hdl); e4000_g_volatile_ctrl() local
526 struct i2c_client *client = dev->client; e4000_g_volatile_ctrl()
529 if (!dev->active) e4000_g_volatile_ctrl()
534 ret = e4000_pll_lock(dev->fe); e4000_g_volatile_ctrl()
537 dev_dbg(&client->dev, "unknown ctrl: id=%d name=%s\n", e4000_g_volatile_ctrl()
547 struct e4000_dev *dev = container_of(ctrl->handler, struct e4000_dev, hdl); e4000_s_ctrl() local
548 struct i2c_client *client = dev->client; e4000_s_ctrl()
551 if (!dev->active) e4000_s_ctrl()
562 dev->f_bandwidth = dev->bandwidth->val; e4000_s_ctrl()
563 ret = e4000_set_params(dev); e4000_s_ctrl()
567 ret = e4000_set_lna_gain(dev->fe); e4000_s_ctrl()
571 ret = e4000_set_mixer_gain(dev->fe); e4000_s_ctrl()
575 ret = e4000_set_if_gain(dev->fe); e4000_s_ctrl()
578 dev_dbg(&client->dev, "unknown ctrl: id=%d name=%s\n", e4000_s_ctrl()
597 struct e4000_dev *dev = fe->tuner_priv; e4000_dvb_set_params() local
600 dev->f_frequency = c->frequency; e4000_dvb_set_params()
601 dev->f_bandwidth = c->bandwidth_hz; e4000_dvb_set_params()
602 return e4000_set_params(dev); e4000_dvb_set_params()
638 struct e4000_dev *dev; e4000_probe() local
639 struct e4000_config *cfg = client->dev.platform_data; e4000_probe()
648 dev = kzalloc(sizeof(*dev), GFP_KERNEL); e4000_probe()
649 if (!dev) { e4000_probe()
654 dev->clk = cfg->clock; e4000_probe()
655 dev->client = client; e4000_probe()
656 dev->fe = cfg->fe; e4000_probe()
657 dev->regmap = devm_regmap_init_i2c(client, &regmap_config); e4000_probe()
658 if (IS_ERR(dev->regmap)) { e4000_probe()
659 ret = PTR_ERR(dev->regmap); e4000_probe()
664 ret = regmap_read(dev->regmap, 0x02, &uitmp); e4000_probe()
668 dev_dbg(&client->dev, "chip id=%02x\n", uitmp); e4000_probe()
676 ret = regmap_write(dev->regmap, 0x00, 0x00); e4000_probe()
682 v4l2_ctrl_handler_init(&dev->hdl, 9); e4000_probe()
683 dev->bandwidth_auto = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
685 dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
687 v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false); e4000_probe()
688 dev->lna_gain_auto = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
690 dev->lna_gain = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
692 v4l2_ctrl_auto_cluster(2, &dev->lna_gain_auto, 0, false); e4000_probe()
693 dev->mixer_gain_auto = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
695 dev->mixer_gain = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
697 v4l2_ctrl_auto_cluster(2, &dev->mixer_gain_auto, 0, false); e4000_probe()
698 dev->if_gain_auto = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
700 dev->if_gain = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
702 v4l2_ctrl_auto_cluster(2, &dev->if_gain_auto, 0, false); e4000_probe()
703 dev->pll_lock = v4l2_ctrl_new_std(&dev->hdl, &e4000_ctrl_ops, e4000_probe()
705 if (dev->hdl.error) { e4000_probe()
706 ret = dev->hdl.error; e4000_probe()
707 dev_err(&client->dev, "Could not initialize controls\n"); e4000_probe()
708 v4l2_ctrl_handler_free(&dev->hdl); e4000_probe()
712 dev->sd.ctrl_handler = &dev->hdl; e4000_probe()
713 dev->f_frequency = bands[0].rangelow; e4000_probe()
714 dev->f_bandwidth = dev->bandwidth->val; e4000_probe()
715 v4l2_i2c_subdev_init(&dev->sd, client, &e4000_subdev_ops); e4000_probe()
717 fe->tuner_priv = dev; e4000_probe()
720 v4l2_set_subdevdata(&dev->sd, client); e4000_probe()
721 i2c_set_clientdata(client, &dev->sd); e4000_probe()
723 dev_info(&client->dev, "Elonics E4000 successfully identified\n"); e4000_probe()
726 kfree(dev); e4000_probe()
728 dev_dbg(&client->dev, "failed=%d\n", ret); e4000_probe()
735 struct e4000_dev *dev = container_of(sd, struct e4000_dev, sd); e4000_remove() local
737 dev_dbg(&client->dev, "\n"); e4000_remove()
740 v4l2_ctrl_handler_free(&dev->hdl); e4000_remove()
742 kfree(dev); e4000_remove()
H A Dmsi001.c59 static int msi001_wreg(struct msi001_dev *dev, u32 data) msi001_wreg() argument
62 return spi_write(dev->spi, &data, 3); msi001_wreg()
65 static int msi001_set_gain(struct msi001_dev *dev, int lna_gain, int mixer_gain, msi001_set_gain() argument
68 struct spi_device *spi = dev->spi; msi001_set_gain()
72 dev_dbg(&spi->dev, "lna=%d mixer=%d if=%d\n", msi001_set_gain()
82 ret = msi001_wreg(dev, reg); msi001_set_gain()
88 dev_dbg(&spi->dev, "failed %d\n", ret); msi001_set_gain()
92 static int msi001_set_tuner(struct msi001_dev *dev) msi001_set_tuner() argument
94 struct spi_device *spi = dev->spi; msi001_set_tuner()
135 unsigned int f_rf = dev->f_tuner; msi001_set_tuner()
152 dev_dbg(&spi->dev, "f_rf=%d f_if=%d\n", f_rf, f_if); msi001_set_tuner()
184 bandwidth = dev->bandwidth->val; msi001_set_tuner()
198 dev->bandwidth->val = bandwidth_lut[i].freq; msi001_set_tuner()
200 dev_dbg(&spi->dev, "bandwidth selected=%d\n", bandwidth_lut[i].freq); msi001_set_tuner()
239 dev_dbg(&spi->dev, msi001_set_tuner()
243 ret = msi001_wreg(dev, 0x00000e); msi001_set_tuner()
247 ret = msi001_wreg(dev, 0x000003); msi001_set_tuner()
257 ret = msi001_wreg(dev, reg); msi001_set_tuner()
265 ret = msi001_wreg(dev, reg); msi001_set_tuner()
272 ret = msi001_wreg(dev, reg); msi001_set_tuner()
276 ret = msi001_set_gain(dev, dev->lna_gain->cur.val, msi001_set_tuner()
277 dev->mixer_gain->cur.val, dev->if_gain->cur.val); msi001_set_tuner()
284 ret = msi001_wreg(dev, reg); msi001_set_tuner()
290 dev_dbg(&spi->dev, "failed %d\n", ret); msi001_set_tuner()
296 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_s_power() local
297 struct spi_device *spi = dev->spi; msi001_s_power()
300 dev_dbg(&spi->dev, "on=%d\n", on); msi001_s_power()
305 ret = msi001_wreg(dev, 0x000000); msi001_s_power()
316 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_g_tuner() local
317 struct spi_device *spi = dev->spi; msi001_g_tuner()
319 dev_dbg(&spi->dev, "index=%d\n", v->index); msi001_g_tuner()
332 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_s_tuner() local
333 struct spi_device *spi = dev->spi; msi001_s_tuner()
335 dev_dbg(&spi->dev, "index=%d\n", v->index); msi001_s_tuner()
341 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_g_frequency() local
342 struct spi_device *spi = dev->spi; msi001_g_frequency()
344 dev_dbg(&spi->dev, "tuner=%d\n", f->tuner); msi001_g_frequency()
345 f->frequency = dev->f_tuner; msi001_g_frequency()
352 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_s_frequency() local
353 struct spi_device *spi = dev->spi; msi001_s_frequency()
356 dev_dbg(&spi->dev, "tuner=%d type=%d frequency=%u\n", msi001_s_frequency()
363 dev->f_tuner = clamp_t(unsigned int, f->frequency, msi001_s_frequency()
366 return msi001_set_tuner(dev); msi001_s_frequency()
372 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_enum_freq_bands() local
373 struct spi_device *spi = dev->spi; msi001_enum_freq_bands()
375 dev_dbg(&spi->dev, "tuner=%d type=%d index=%d\n", msi001_enum_freq_bands()
403 struct msi001_dev *dev = container_of(ctrl->handler, struct msi001_dev, hdl); msi001_s_ctrl() local
404 struct spi_device *spi = dev->spi; msi001_s_ctrl()
408 dev_dbg(&spi->dev, "id=%d name=%s val=%d min=%lld max=%lld step=%lld\n", msi001_s_ctrl()
415 ret = msi001_set_tuner(dev); msi001_s_ctrl()
418 ret = msi001_set_gain(dev, dev->lna_gain->val, msi001_s_ctrl()
419 dev->mixer_gain->cur.val, msi001_s_ctrl()
420 dev->if_gain->cur.val); msi001_s_ctrl()
423 ret = msi001_set_gain(dev, dev->lna_gain->cur.val, msi001_s_ctrl()
424 dev->mixer_gain->val, msi001_s_ctrl()
425 dev->if_gain->cur.val); msi001_s_ctrl()
428 ret = msi001_set_gain(dev, dev->lna_gain->cur.val, msi001_s_ctrl()
429 dev->mixer_gain->cur.val, msi001_s_ctrl()
430 dev->if_gain->val); msi001_s_ctrl()
433 dev_dbg(&spi->dev, "unknown control %d\n", ctrl->id); msi001_s_ctrl()
446 struct msi001_dev *dev; msi001_probe() local
449 dev_dbg(&spi->dev, "\n"); msi001_probe()
451 dev = kzalloc(sizeof(*dev), GFP_KERNEL); msi001_probe()
452 if (!dev) { msi001_probe()
457 dev->spi = spi; msi001_probe()
458 dev->f_tuner = bands[0].rangelow; msi001_probe()
459 v4l2_spi_subdev_init(&dev->sd, spi, &msi001_ops); msi001_probe()
462 v4l2_ctrl_handler_init(&dev->hdl, 5); msi001_probe()
463 dev->bandwidth_auto = v4l2_ctrl_new_std(&dev->hdl, &msi001_ctrl_ops, msi001_probe()
465 dev->bandwidth = v4l2_ctrl_new_std(&dev->hdl, &msi001_ctrl_ops, msi001_probe()
467 v4l2_ctrl_auto_cluster(2, &dev->bandwidth_auto, 0, false); msi001_probe()
468 dev->lna_gain = v4l2_ctrl_new_std(&dev->hdl, &msi001_ctrl_ops, msi001_probe()
470 dev->mixer_gain = v4l2_ctrl_new_std(&dev->hdl, &msi001_ctrl_ops, msi001_probe()
472 dev->if_gain = v4l2_ctrl_new_std(&dev->hdl, &msi001_ctrl_ops, msi001_probe()
474 if (dev->hdl.error) { msi001_probe()
475 ret = dev->hdl.error; msi001_probe()
476 dev_err(&spi->dev, "Could not initialize controls\n"); msi001_probe()
481 dev->sd.ctrl_handler = &dev->hdl; msi001_probe()
484 v4l2_ctrl_handler_free(&dev->hdl); msi001_probe()
485 kfree(dev); msi001_probe()
493 struct msi001_dev *dev = sd_to_msi001_dev(sd); msi001_remove() local
495 dev_dbg(&spi->dev, "\n"); msi001_remove()
501 v4l2_device_unregister_subdev(&dev->sd); msi001_remove()
502 v4l2_ctrl_handler_free(&dev->hdl); msi001_remove()
503 kfree(dev); msi001_remove()
/linux-4.4.14/drivers/net/ethernet/seeq/
H A Dether3.c76 static void ether3_setmulticastlist(struct net_device *dev);
77 static int ether3_rx(struct net_device *dev, unsigned int maxcnt);
78 static void ether3_tx(struct net_device *dev);
79 static int ether3_open (struct net_device *dev);
80 static int ether3_sendpacket (struct sk_buff *skb, struct net_device *dev);
82 static int ether3_close (struct net_device *dev);
83 static void ether3_setmulticastlist (struct net_device *dev);
84 static void ether3_timeout(struct net_device *dev);
117 ether3_setbuffer(struct net_device *dev, buffer_rw_t read, int start) ether3_setbuffer() argument
121 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); ether3_setbuffer()
122 ether3_outw(priv(dev)->regs.command | CMD_FIFOWRITE, REG_COMMAND); ether3_setbuffer()
126 printk("%s: setbuffer broken\n", dev->name); ether3_setbuffer()
127 priv(dev)->broken = 1; ether3_setbuffer()
135 ether3_outw(priv(dev)->regs.command | CMD_FIFOREAD, REG_COMMAND); ether3_setbuffer()
137 ether3_outw(priv(dev)->regs.command | CMD_FIFOWRITE, REG_COMMAND); ether3_setbuffer()
146 #define ether3_writebuffer(dev,data,length) \
149 #define ether3_writeword(dev,data) \
152 #define ether3_writelong(dev,data) { \
161 #define ether3_readbuffer(dev,data,length) \
164 #define ether3_readword(dev) \
167 #define ether3_readlong(dev) \
175 struct net_device *dev = (struct net_device *)data; ether3_ledoff() local
176 ether3_outw(priv(dev)->regs.config2 |= CFG2_CTRLO, REG_CONFIG2); ether3_ledoff()
182 static inline void ether3_ledon(struct net_device *dev) ether3_ledon() argument
184 del_timer(&priv(dev)->timer); ether3_ledon()
185 priv(dev)->timer.expires = jiffies + HZ / 50; /* leave on for 1/50th second */ ether3_ledon()
186 priv(dev)->timer.data = (unsigned long)dev; ether3_ledon()
187 priv(dev)->timer.function = ether3_ledoff; ether3_ledon()
188 add_timer(&priv(dev)->timer); ether3_ledon()
189 if (priv(dev)->regs.config2 & CFG2_CTRLO) ether3_ledon()
190 ether3_outw(priv(dev)->regs.config2 &= ~CFG2_CTRLO, REG_CONFIG2); ether3_ledon()
223 ether3_ramtest(struct net_device *dev, unsigned char byte) ether3_ramtest() argument
234 ether3_setbuffer(dev, buffer_write, 0); ether3_ramtest()
235 ether3_writebuffer(dev, buffer, TX_END); ether3_ramtest()
236 ether3_setbuffer(dev, buffer_write, RX_START); ether3_ramtest()
237 ether3_writebuffer(dev, buffer + RX_START, RX_LEN); ether3_ramtest()
239 ether3_setbuffer(dev, buffer_read, 0); ether3_ramtest()
240 ether3_readbuffer(dev, buffer, TX_END); ether3_ramtest()
241 ether3_setbuffer(dev, buffer_read, RX_START); ether3_ramtest()
242 ether3_readbuffer(dev, buffer + RX_START, RX_LEN); ether3_ramtest()
248 dev->name, buffer[i], byte, i); ether3_ramtest()
271 static int ether3_init_2(struct net_device *dev) ether3_init_2() argument
275 priv(dev)->regs.config1 = CFG1_RECVCOMPSTAT0|CFG1_DMABURST8; ether3_init_2()
276 priv(dev)->regs.config2 = CFG2_CTRLO|CFG2_RECVCRC|CFG2_ERRENCRC; ether3_init_2()
277 priv(dev)->regs.command = 0; ether3_init_2()
282 ether3_outw(priv(dev)->regs.config1 | CFG1_BUFSELSTAT0, REG_CONFIG1); ether3_init_2()
284 ether3_outb(dev->dev_addr[i], REG_BUFWIN); ether3_init_2()
286 if (dev->flags & IFF_PROMISC) ether3_init_2()
287 priv(dev)->regs.config1 |= CFG1_RECVPROMISC; ether3_init_2()
288 else if (dev->flags & IFF_MULTICAST) ether3_init_2()
289 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI; ether3_init_2()
291 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD; ether3_init_2()
298 ether3_outw(priv(dev)->regs.config1 | CFG1_TRANSEND, REG_CONFIG1); ether3_init_2()
300 ether3_outw(priv(dev)->rx_head, REG_RECVPTR); ether3_init_2()
302 ether3_outw(priv(dev)->rx_head >> 8, REG_RECVEND); ether3_init_2()
303 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); ether3_init_2()
304 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); ether3_init_2()
305 ether3_outw(priv(dev)->regs.command, REG_COMMAND); ether3_init_2()
307 i = ether3_ramtest(dev, 0x5A); ether3_init_2()
310 i = ether3_ramtest(dev, 0x1E); ether3_init_2()
314 ether3_setbuffer(dev, buffer_write, 0); ether3_init_2()
315 ether3_writelong(dev, 0); ether3_init_2()
320 ether3_init_for_open(struct net_device *dev) ether3_init_for_open() argument
328 priv(dev)->regs.command = 0; ether3_init_for_open()
333 ether3_outw(priv(dev)->regs.config1 | CFG1_BUFSELSTAT0, REG_CONFIG1); ether3_init_for_open()
335 ether3_outb(dev->dev_addr[i], REG_BUFWIN); ether3_init_for_open()
337 priv(dev)->tx_head = 0; ether3_init_for_open()
338 priv(dev)->tx_tail = 0; ether3_init_for_open()
339 priv(dev)->regs.config2 |= CFG2_CTRLO; ether3_init_for_open()
340 priv(dev)->rx_head = RX_START; ether3_init_for_open()
342 ether3_outw(priv(dev)->regs.config1 | CFG1_TRANSEND, REG_CONFIG1); ether3_init_for_open()
344 ether3_outw(priv(dev)->rx_head, REG_RECVPTR); ether3_init_for_open()
345 ether3_outw(priv(dev)->rx_head >> 8, REG_RECVEND); ether3_init_for_open()
347 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); ether3_init_for_open()
348 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); ether3_init_for_open()
350 ether3_setbuffer(dev, buffer_write, 0); ether3_init_for_open()
351 ether3_writelong(dev, 0); ether3_init_for_open()
353 priv(dev)->regs.command = CMD_ENINTRX | CMD_ENINTTX; ether3_init_for_open()
354 ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND); ether3_init_for_open()
358 ether3_probe_bus_8(struct net_device *dev, int val) ether3_probe_bus_8() argument
379 ether3_probe_bus_16(struct net_device *dev, int val) ether3_probe_bus_16() argument
400 ether3_open(struct net_device *dev) ether3_open() argument
402 if (request_irq(dev->irq, ether3_interrupt, 0, "ether3", dev)) ether3_open()
405 ether3_init_for_open(dev); ether3_open()
407 netif_start_queue(dev); ether3_open()
416 ether3_close(struct net_device *dev) ether3_close() argument
418 netif_stop_queue(dev); ether3_close()
420 disable_irq(dev->irq); ether3_close()
423 priv(dev)->regs.command = 0; ether3_close()
429 free_irq(dev->irq, dev); ether3_close()
440 static void ether3_setmulticastlist(struct net_device *dev) ether3_setmulticastlist() argument
442 priv(dev)->regs.config1 &= ~CFG1_RECVPROMISC; ether3_setmulticastlist()
444 if (dev->flags & IFF_PROMISC) { ether3_setmulticastlist()
446 priv(dev)->regs.config1 |= CFG1_RECVPROMISC; ether3_setmulticastlist()
447 } else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) { ether3_setmulticastlist()
448 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI; ether3_setmulticastlist()
450 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD; ether3_setmulticastlist()
452 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); ether3_setmulticastlist()
455 static void ether3_timeout(struct net_device *dev) ether3_timeout() argument
459 del_timer(&priv(dev)->timer); ether3_timeout()
462 printk(KERN_ERR "%s: transmit timed out, network cable problem?\n", dev->name); ether3_timeout()
463 printk(KERN_ERR "%s: state: { status=%04X cfg1=%04X cfg2=%04X }\n", dev->name, ether3_timeout()
465 printk(KERN_ERR "%s: { rpr=%04X rea=%04X tpr=%04X }\n", dev->name, ether3_timeout()
467 printk(KERN_ERR "%s: tx head=%X tx tail=%X\n", dev->name, ether3_timeout()
468 priv(dev)->tx_head, priv(dev)->tx_tail); ether3_timeout()
469 ether3_setbuffer(dev, buffer_read, priv(dev)->tx_tail); ether3_timeout()
470 printk(KERN_ERR "%s: packet status = %08X\n", dev->name, ether3_readlong(dev)); ether3_timeout()
473 priv(dev)->regs.config2 |= CFG2_CTRLO; ether3_timeout()
474 dev->stats.tx_errors += 1; ether3_timeout()
475 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); ether3_timeout()
476 priv(dev)->tx_head = priv(dev)->tx_tail = 0; ether3_timeout()
478 netif_wake_queue(dev); ether3_timeout()
485 ether3_sendpacket(struct sk_buff *skb, struct net_device *dev) ether3_sendpacket() argument
491 if (priv(dev)->broken) { ether3_sendpacket()
493 dev->stats.tx_dropped++; ether3_sendpacket()
494 netif_start_queue(dev); ether3_sendpacket()
504 next_ptr = (priv(dev)->tx_head + 1) & 15; ether3_sendpacket()
508 if (priv(dev)->tx_tail == next_ptr) { ether3_sendpacket()
513 ptr = 0x600 * priv(dev)->tx_head; ether3_sendpacket()
514 priv(dev)->tx_head = next_ptr; ether3_sendpacket()
519 ether3_setbuffer(dev, buffer_write, next_ptr); ether3_sendpacket()
520 ether3_writelong(dev, 0); ether3_sendpacket()
521 ether3_setbuffer(dev, buffer_write, ptr); ether3_sendpacket()
522 ether3_writelong(dev, 0); ether3_sendpacket()
523 ether3_writebuffer(dev, skb->data, length); ether3_sendpacket()
524 ether3_writeword(dev, htons(next_ptr)); ether3_sendpacket()
525 ether3_writeword(dev, TXHDR_CHAINCONTINUE >> 16); ether3_sendpacket()
526 ether3_setbuffer(dev, buffer_write, ptr); ether3_sendpacket()
527 ether3_writeword(dev, htons((ptr + length + 4))); ether3_sendpacket()
528 ether3_writeword(dev, TXHDR_FLAGS >> 16); ether3_sendpacket()
529 ether3_ledon(dev); ether3_sendpacket()
533 ether3_outw(priv(dev)->regs.command | CMD_TXON, REG_COMMAND); ether3_sendpacket()
536 next_ptr = (priv(dev)->tx_head + 1) & 15; ether3_sendpacket()
541 if (priv(dev)->tx_tail == next_ptr) ether3_sendpacket()
542 netif_stop_queue(dev); ether3_sendpacket()
551 struct net_device *dev = (struct net_device *)dev_id; ether3_interrupt() local
562 ether3_outw(CMD_ACKINTRX | priv(dev)->regs.command, REG_COMMAND); ether3_interrupt()
563 ether3_rx(dev, 12); ether3_interrupt()
568 ether3_outw(CMD_ACKINTTX | priv(dev)->regs.command, REG_COMMAND); ether3_interrupt()
569 ether3_tx(dev); ether3_interrupt()
583 static int ether3_rx(struct net_device *dev, unsigned int maxcnt) ether3_rx() argument
585 unsigned int next_ptr = priv(dev)->rx_head, received = 0; ether3_rx()
587 ether3_ledon(dev); ether3_rx()
601 ether3_setbuffer(dev, buffer_read, next_ptr); ether3_rx()
602 temp_ptr = ether3_readword(dev); ether3_rx()
603 status = ether3_readword(dev); ether3_rx()
611 ether3_setbuffer(dev, buffer_read, this_ptr); ether3_rx()
612 ether3_readbuffer(dev, addrs+2, 12); ether3_rx()
616 printk("%s: bad next pointer @%04X: ", dev->name, priv(dev)->rx_head); ether3_rx()
621 next_ptr = priv(dev)->rx_head; ether3_rx()
627 if (!(*(unsigned long *)&dev->dev_addr[0] ^ *(unsigned long *)&addrs[2+6]) && ether3_rx()
628 !(*(unsigned short *)&dev->dev_addr[4] ^ *(unsigned short *)&addrs[2+10])) { ether3_rx()
639 skb = netdev_alloc_skb(dev, length + 2); ether3_rx()
645 ether3_readbuffer(dev, buf + 12, length - 12); ether3_rx()
651 skb->protocol = eth_type_trans(skb, dev); ether3_rx()
656 dev->stats.rx_dropped++; ether3_rx()
660 struct net_device_stats *stats = &dev->stats; ether3_rx()
672 dev->stats.rx_packets += received; ether3_rx()
673 priv(dev)->rx_head = next_ptr; ether3_rx()
679 dev->stats.rx_dropped++; ether3_rx()
681 ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND); ether3_rx()
690 static void ether3_tx(struct net_device *dev) ether3_tx() argument
692 unsigned int tx_tail = priv(dev)->tx_tail; ether3_tx()
701 ether3_setbuffer(dev, buffer_read, tx_tail * 0x600); ether3_tx()
702 status = ether3_readlong(dev); ether3_tx()
715 dev->stats.tx_packets++; ether3_tx()
717 dev->stats.tx_errors++; ether3_tx()
719 dev->stats.collisions += 16; ether3_tx()
721 dev->stats.tx_fifo_errors++; ether3_tx()
727 if (priv(dev)->tx_tail != tx_tail) { ether3_tx()
728 priv(dev)->tx_tail = tx_tail; ether3_tx()
729 netif_wake_queue(dev); ether3_tx()
756 struct net_device *dev; ether3_probe() local
765 dev = alloc_etherdev(sizeof(struct dev_priv)); ether3_probe()
766 if (!dev) { ether3_probe()
771 SET_NETDEV_DEV(dev, &ec->dev); ether3_probe()
773 priv(dev)->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0); ether3_probe()
774 if (!priv(dev)->base) { ether3_probe()
779 ec->irqaddr = priv(dev)->base + data->base_offset; ether3_probe()
782 priv(dev)->seeq = priv(dev)->base + data->base_offset; ether3_probe()
783 dev->irq = ec->irq; ether3_probe()
785 ether3_addr(dev->dev_addr, ec); ether3_probe()
787 init_timer(&priv(dev)->timer); ether3_probe()
798 if (ether3_probe_bus_8(dev, 0x100) && ether3_probe()
799 ether3_probe_bus_8(dev, 0x201)) ether3_probe()
803 ether3_probe_bus_16(dev, 0x101) && ether3_probe()
804 ether3_probe_bus_16(dev, 0x201)) ether3_probe()
809 printk(KERN_ERR "%s: unable to identify bus width\n", dev->name); ether3_probe()
815 "8-bit card\n", dev->name, data->name); ether3_probe()
823 if (ether3_init_2(dev)) { ether3_probe()
828 dev->netdev_ops = &ether3_netdev_ops; ether3_probe()
829 dev->watchdog_timeo = 5 * HZ / 100; ether3_probe()
831 ret = register_netdev(dev); ether3_probe()
836 dev->name, data->name, ec->slot_no, dev->dev_addr); ether3_probe()
838 ecard_set_drvdata(ec, dev); ether3_probe()
842 free_netdev(dev); ether3_probe()
851 struct net_device *dev = ecard_get_drvdata(ec); ether3_remove() local
855 unregister_netdev(dev); ether3_remove()
856 free_netdev(dev); ether3_remove()
/linux-4.4.14/arch/xtensa/platforms/iss/
H A Dsimdisk.c72 static void simdisk_transfer(struct simdisk *dev, unsigned long sector, simdisk_transfer() argument
78 if (offset > dev->size || dev->size - offset < nbytes) { simdisk_transfer()
84 spin_lock(&dev->lock); simdisk_transfer()
88 simc_lseek(dev->fd, offset, SEEK_SET); simdisk_transfer()
90 io = simc_write(dev->fd, buffer, nbytes); simdisk_transfer()
92 io = simc_read(dev->fd, buffer, nbytes); simdisk_transfer()
101 spin_unlock(&dev->lock); simdisk_transfer()
106 struct simdisk *dev = q->queuedata; simdisk_make_request() local
115 simdisk_transfer(dev, sector, len, buffer, bio_for_each_segment()
127 struct simdisk *dev = bdev->bd_disk->private_data; simdisk_open() local
129 spin_lock(&dev->lock); simdisk_open()
130 if (!dev->users) simdisk_open()
132 ++dev->users; simdisk_open()
133 spin_unlock(&dev->lock); simdisk_open()
139 struct simdisk *dev = disk->private_data; simdisk_release() local
140 spin_lock(&dev->lock); simdisk_release()
141 --dev->users; simdisk_release()
142 spin_unlock(&dev->lock); simdisk_release()
154 static int simdisk_attach(struct simdisk *dev, const char *filename) simdisk_attach() argument
162 spin_lock(&dev->lock); simdisk_attach()
164 if (dev->fd != -1) { simdisk_attach()
168 dev->fd = simc_open(filename, O_RDWR, 0); simdisk_attach()
169 if (dev->fd == -1) { simdisk_attach()
174 dev->size = simc_lseek(dev->fd, 0, SEEK_END); simdisk_attach()
175 set_capacity(dev->gd, dev->size >> SECTOR_SHIFT); simdisk_attach()
176 dev->filename = filename; simdisk_attach()
177 pr_info("SIMDISK: %s=%s\n", dev->gd->disk_name, dev->filename); simdisk_attach()
181 spin_unlock(&dev->lock); simdisk_attach()
186 static int simdisk_detach(struct simdisk *dev) simdisk_detach() argument
190 spin_lock(&dev->lock); simdisk_detach()
192 if (dev->users != 0) { simdisk_detach()
194 } else if (dev->fd != -1) { simdisk_detach()
195 if (simc_close(dev->fd)) { simdisk_detach()
197 dev->filename, errno); simdisk_detach()
201 dev->gd->disk_name, dev->filename); simdisk_detach()
202 dev->fd = -1; simdisk_detach()
203 kfree(dev->filename); simdisk_detach()
204 dev->filename = NULL; simdisk_detach()
207 spin_unlock(&dev->lock); simdisk_detach()
214 struct simdisk *dev = PDE_DATA(file_inode(file)); proc_read_simdisk() local
215 const char *s = dev->filename; proc_read_simdisk()
231 struct simdisk *dev = PDE_DATA(file_inode(file)); proc_write_simdisk() local
241 err = simdisk_detach(dev); proc_write_simdisk()
251 err = simdisk_attach(dev, tmp); proc_write_simdisk()
266 static int __init simdisk_setup(struct simdisk *dev, int which, simdisk_setup() argument
271 dev->fd = -1; simdisk_setup()
272 dev->filename = NULL; simdisk_setup()
273 spin_lock_init(&dev->lock); simdisk_setup()
274 dev->users = 0; simdisk_setup()
276 dev->queue = blk_alloc_queue(GFP_KERNEL); simdisk_setup()
277 if (dev->queue == NULL) { simdisk_setup()
282 blk_queue_make_request(dev->queue, simdisk_make_request); simdisk_setup()
283 dev->queue->queuedata = dev; simdisk_setup()
285 dev->gd = alloc_disk(SIMDISK_MINORS); simdisk_setup()
286 if (dev->gd == NULL) { simdisk_setup()
290 dev->gd->major = simdisk_major; simdisk_setup()
291 dev->gd->first_minor = which; simdisk_setup()
292 dev->gd->fops = &simdisk_ops; simdisk_setup()
293 dev->gd->queue = dev->queue; simdisk_setup()
294 dev->gd->private_data = dev; simdisk_setup()
295 snprintf(dev->gd->disk_name, 32, "simdisk%d", which); simdisk_setup()
296 set_capacity(dev->gd, 0); simdisk_setup()
297 add_disk(dev->gd); simdisk_setup()
299 dev->procfile = proc_create_data(tmp, 0644, procdir, &fops, dev); simdisk_setup()
303 blk_cleanup_queue(dev->queue); simdisk_setup()
304 dev->queue = NULL; simdisk_setup()
306 simc_close(dev->fd); simdisk_setup()
352 static void simdisk_teardown(struct simdisk *dev, int which, simdisk_teardown() argument
357 simdisk_detach(dev); simdisk_teardown()
358 if (dev->gd) simdisk_teardown()
359 del_gendisk(dev->gd); simdisk_teardown()
360 if (dev->queue) simdisk_teardown()
361 blk_cleanup_queue(dev->queue); simdisk_teardown()
/linux-4.4.14/drivers/ps3/
H A Dps3stor_lib.c87 static int ps3stor_probe_access(struct ps3_storage_device *dev) ps3stor_probe_access() argument
93 if (dev->sbd.match_id == PS3_MATCH_ID_STOR_ROM) { ps3stor_probe_access()
95 dev->accessible_regions = 1; ps3stor_probe_access()
100 for (i = 0; i < dev->num_regions; i++) { ps3stor_probe_access()
101 dev_dbg(&dev->sbd.core, ps3stor_probe_access()
105 dev->region_idx = i; ps3stor_probe_access()
106 res = ps3stor_read_write_sectors(dev, dev->bounce_lpar, 0, 1, ps3stor_probe_access()
109 dev_dbg(&dev->sbd.core, "%s:%u: read failed, " ps3stor_probe_access()
115 dev_dbg(&dev->sbd.core, "%s:%u: region %u is accessible\n", ps3stor_probe_access()
117 set_bit(i, &dev->accessible_regions); ps3stor_probe_access()
125 n = hweight_long(dev->accessible_regions); ps3stor_probe_access()
127 dev_info(&dev->sbd.core, ps3stor_probe_access()
131 dev->region_idx = __ffs(dev->accessible_regions); ps3stor_probe_access()
132 dev_info(&dev->sbd.core, ps3stor_probe_access()
134 dev->region_idx, dev->regions[dev->region_idx].start, ps3stor_probe_access()
135 dev->regions[dev->region_idx].size); ps3stor_probe_access()
143 * @dev: Pointer to a struct ps3_storage_device
148 int ps3stor_setup(struct ps3_storage_device *dev, irq_handler_t handler) ps3stor_setup() argument
153 error = ps3stor_open_hv_device(&dev->sbd); ps3stor_setup()
155 dev_err(&dev->sbd.core, ps3stor_setup()
161 error = ps3_sb_event_receive_port_setup(&dev->sbd, PS3_BINDING_CPU_ANY, ps3stor_setup()
162 &dev->irq); ps3stor_setup()
164 dev_err(&dev->sbd.core, ps3stor_setup()
170 error = request_irq(dev->irq, handler, 0, ps3stor_setup()
171 dev->sbd.core.driver->name, dev); ps3stor_setup()
173 dev_err(&dev->sbd.core, "%s:%u: request_irq failed %d\n", ps3stor_setup()
178 alignment = min(__ffs(dev->bounce_size), ps3stor_setup()
179 __ffs((unsigned long)dev->bounce_buf)); ps3stor_setup()
181 dev_err(&dev->sbd.core, ps3stor_setup()
183 __func__, __LINE__, dev->bounce_size, dev->bounce_buf); ps3stor_setup()
190 dev->sbd.d_region = &dev->dma_region; ps3stor_setup()
191 ps3_dma_region_init(&dev->sbd, &dev->dma_region, page_size, ps3stor_setup()
192 PS3_DMA_OTHER, dev->bounce_buf, dev->bounce_size); ps3stor_setup()
193 res = ps3_dma_region_create(&dev->dma_region); ps3stor_setup()
195 dev_err(&dev->sbd.core, "%s:%u: cannot create DMA region\n", ps3stor_setup()
201 dev->bounce_lpar = ps3_mm_phys_to_lpar(__pa(dev->bounce_buf)); ps3stor_setup()
202 dev->bounce_dma = dma_map_single(&dev->sbd.core, dev->bounce_buf, ps3stor_setup()
203 dev->bounce_size, DMA_BIDIRECTIONAL); ps3stor_setup()
204 if (!dev->bounce_dma) { ps3stor_setup()
205 dev_err(&dev->sbd.core, "%s:%u: map DMA region failed\n", ps3stor_setup()
211 error = ps3stor_probe_access(dev); ps3stor_setup()
213 dev_err(&dev->sbd.core, "%s:%u: No accessible regions found\n", ps3stor_setup()
220 dma_unmap_single(&dev->sbd.core, dev->bounce_dma, dev->bounce_size, ps3stor_setup()
223 ps3_dma_region_free(&dev->dma_region); ps3stor_setup()
225 free_irq(dev->irq, dev); ps3stor_setup()
227 ps3_sb_event_receive_port_destroy(&dev->sbd, dev->irq); ps3stor_setup()
229 ps3stor_close_hv_device(&dev->sbd); ps3stor_setup()
238 * @dev: Pointer to a struct ps3_storage_device
240 void ps3stor_teardown(struct ps3_storage_device *dev) ps3stor_teardown() argument
244 dma_unmap_single(&dev->sbd.core, dev->bounce_dma, dev->bounce_size, ps3stor_teardown()
246 ps3_dma_region_free(&dev->dma_region); ps3stor_teardown()
248 free_irq(dev->irq, dev); ps3stor_teardown()
250 error = ps3_sb_event_receive_port_destroy(&dev->sbd, dev->irq); ps3stor_teardown()
252 dev_err(&dev->sbd.core, ps3stor_teardown()
256 error = ps3stor_close_hv_device(&dev->sbd); ps3stor_teardown()
258 dev_err(&dev->sbd.core, ps3stor_teardown()
267 * @dev: Pointer to a struct ps3_storage_device
276 u64 ps3stor_read_write_sectors(struct ps3_storage_device *dev, u64 lpar, ps3stor_read_write_sectors() argument
279 unsigned int region_id = dev->regions[dev->region_idx].id; ps3stor_read_write_sectors()
283 dev_dbg(&dev->sbd.core, "%s:%u: %s %llu sectors starting at %llu\n", ps3stor_read_write_sectors()
286 init_completion(&dev->done); ps3stor_read_write_sectors()
287 res = write ? lv1_storage_write(dev->sbd.dev_id, region_id, ps3stor_read_write_sectors()
289 &dev->tag) ps3stor_read_write_sectors()
290 : lv1_storage_read(dev->sbd.dev_id, region_id, ps3stor_read_write_sectors()
292 &dev->tag); ps3stor_read_write_sectors()
294 dev_dbg(&dev->sbd.core, "%s:%u: %s failed %d\n", __func__, ps3stor_read_write_sectors()
299 wait_for_completion(&dev->done); ps3stor_read_write_sectors()
300 if (dev->lv1_status) { ps3stor_read_write_sectors()
301 dev_dbg(&dev->sbd.core, "%s:%u: %s failed 0x%llx\n", __func__, ps3stor_read_write_sectors()
302 __LINE__, op, dev->lv1_status); ps3stor_read_write_sectors()
303 return dev->lv1_status; ps3stor_read_write_sectors()
306 dev_dbg(&dev->sbd.core, "%s:%u: %s completed\n", __func__, __LINE__, ps3stor_read_write_sectors()
316 * @dev: Pointer to a struct ps3_storage_device
326 u64 ps3stor_send_command(struct ps3_storage_device *dev, u64 cmd, u64 arg1, ps3stor_send_command() argument
331 dev_dbg(&dev->sbd.core, "%s:%u: send device command 0x%llx\n", __func__, ps3stor_send_command()
334 init_completion(&dev->done); ps3stor_send_command()
336 res = lv1_storage_send_device_command(dev->sbd.dev_id, cmd, arg1, ps3stor_send_command()
337 arg2, arg3, arg4, &dev->tag); ps3stor_send_command()
339 dev_err(&dev->sbd.core, ps3stor_send_command()
345 wait_for_completion(&dev->done); ps3stor_send_command()
346 if (dev->lv1_status) { ps3stor_send_command()
347 dev_dbg(&dev->sbd.core, "%s:%u: command 0x%llx failed 0x%llx\n", ps3stor_send_command()
348 __func__, __LINE__, cmd, dev->lv1_status); ps3stor_send_command()
349 return dev->lv1_status; ps3stor_send_command()
352 dev_dbg(&dev->sbd.core, "%s:%u: command 0x%llx completed\n", __func__, ps3stor_send_command()
/linux-4.4.14/drivers/staging/media/mn88472/
H A Dmn88472.c29 struct mn88472_dev *dev = i2c_get_clientdata(client); mn88472_set_frontend() local
36 dev_dbg(&client->dev, mn88472_set_frontend()
41 if (!dev->warm) { mn88472_set_frontend()
93 dev_dbg(&client->dev, "get_if_frequency=%d\n", if_frequency); mn88472_set_frontend()
97 tmp = div_u64(if_frequency * (u64)(1<<24) + (dev->xtal / 2), mn88472_set_frontend()
98 dev->xtal); mn88472_set_frontend()
103 ret = regmap_write(dev->regmap[2], 0xfb, 0x13); mn88472_set_frontend()
104 ret = regmap_write(dev->regmap[2], 0xef, 0x13); mn88472_set_frontend()
105 ret = regmap_write(dev->regmap[2], 0xf9, 0x13); mn88472_set_frontend()
109 ret = regmap_write(dev->regmap[2], 0x00, 0x66); mn88472_set_frontend()
112 ret = regmap_write(dev->regmap[2], 0x01, 0x00); mn88472_set_frontend()
115 ret = regmap_write(dev->regmap[2], 0x02, 0x01); mn88472_set_frontend()
118 ret = regmap_write(dev->regmap[2], 0x03, delivery_system_val); mn88472_set_frontend()
121 ret = regmap_write(dev->regmap[2], 0x04, bw_val2); mn88472_set_frontend()
126 ret = regmap_write(dev->regmap[2], 0x10 + i, if_val[i]); mn88472_set_frontend()
132 ret = regmap_write(dev->regmap[2], 0x13 + i, bw_val[i]); mn88472_set_frontend()
139 ret = regmap_write(dev->regmap[0], 0x07, 0x26); mn88472_set_frontend()
140 ret = regmap_write(dev->regmap[0], 0xb0, 0x0a); mn88472_set_frontend()
141 ret = regmap_write(dev->regmap[0], 0xb4, 0x00); mn88472_set_frontend()
142 ret = regmap_write(dev->regmap[0], 0xcd, 0x1f); mn88472_set_frontend()
143 ret = regmap_write(dev->regmap[0], 0xd4, 0x0a); mn88472_set_frontend()
144 ret = regmap_write(dev->regmap[0], 0xd6, 0x48); mn88472_set_frontend()
145 ret = regmap_write(dev->regmap[0], 0x00, 0xba); mn88472_set_frontend()
146 ret = regmap_write(dev->regmap[0], 0x01, 0x13); mn88472_set_frontend()
151 ret = regmap_write(dev->regmap[2], 0x2b, 0x13); mn88472_set_frontend()
152 ret = regmap_write(dev->regmap[2], 0x4f, 0x05); mn88472_set_frontend()
153 ret = regmap_write(dev->regmap[1], 0xf6, 0x05); mn88472_set_frontend()
154 ret = regmap_write(dev->regmap[0], 0xb0, 0x0a); mn88472_set_frontend()
155 ret = regmap_write(dev->regmap[0], 0xb4, 0xf6); mn88472_set_frontend()
156 ret = regmap_write(dev->regmap[0], 0xcd, 0x01); mn88472_set_frontend()
157 ret = regmap_write(dev->regmap[0], 0xd4, 0x09); mn88472_set_frontend()
158 ret = regmap_write(dev->regmap[0], 0xd6, 0x46); mn88472_set_frontend()
159 ret = regmap_write(dev->regmap[2], 0x30, 0x80); mn88472_set_frontend()
160 ret = regmap_write(dev->regmap[2], 0x32, 0x00); mn88472_set_frontend()
165 ret = regmap_write(dev->regmap[0], 0xb0, 0x0b); mn88472_set_frontend()
166 ret = regmap_write(dev->regmap[0], 0xb4, 0x00); mn88472_set_frontend()
167 ret = regmap_write(dev->regmap[0], 0xcd, 0x17); mn88472_set_frontend()
168 ret = regmap_write(dev->regmap[0], 0xd4, 0x09); mn88472_set_frontend()
169 ret = regmap_write(dev->regmap[0], 0xd6, 0x48); mn88472_set_frontend()
170 ret = regmap_write(dev->regmap[1], 0x00, 0xb0); mn88472_set_frontend()
179 ret = regmap_write(dev->regmap[0], 0x46, 0x00); mn88472_set_frontend()
180 ret = regmap_write(dev->regmap[0], 0xae, 0x00); mn88472_set_frontend()
182 switch (dev->ts_mode) { mn88472_set_frontend()
184 ret = regmap_write(dev->regmap[2], 0x08, 0x1d); mn88472_set_frontend()
187 ret = regmap_write(dev->regmap[2], 0x08, 0x00); mn88472_set_frontend()
190 dev_dbg(&client->dev, "ts_mode error: %d\n", dev->ts_mode); mn88472_set_frontend()
195 switch (dev->ts_clock) { mn88472_set_frontend()
197 ret = regmap_write(dev->regmap[0], 0xd9, 0xe3); mn88472_set_frontend()
200 ret = regmap_write(dev->regmap[0], 0xd9, 0xe1); mn88472_set_frontend()
203 dev_dbg(&client->dev, "ts_clock error: %d\n", dev->ts_clock); mn88472_set_frontend()
209 ret = regmap_write(dev->regmap[2], 0xf8, 0x9f); mn88472_set_frontend()
213 dev->delivery_system = c->delivery_system; mn88472_set_frontend()
217 dev_dbg(&client->dev, "failed=%d\n", ret); mn88472_set_frontend()
224 struct mn88472_dev *dev = i2c_get_clientdata(client); mn88472_read_status() local
232 if (!dev->warm) { mn88472_read_status()
239 ret = regmap_read(dev->regmap[0], 0x7F, &utmp); mn88472_read_status()
246 ret = regmap_read(dev->regmap[2], 0x92, &utmp); mn88472_read_status()
257 ret = regmap_read(dev->regmap[1], 0x84, &utmp); mn88472_read_status()
274 dev_dbg(&client->dev, "failed=%d\n", ret); mn88472_read_status()
281 struct mn88472_dev *dev = i2c_get_clientdata(client); mn88472_init() local
287 dev_dbg(&client->dev, "\n"); mn88472_init()
290 dev->warm = false; mn88472_init()
293 ret = regmap_write(dev->regmap[2], 0x05, 0x00); mn88472_init()
297 ret = regmap_bulk_write(dev->regmap[2], 0x0b, "\x00\x00", 2); mn88472_init()
302 ret = regmap_read(dev->regmap[0], 0xf5, &tmp); mn88472_init()
307 dev_info(&client->dev, "firmware already running\n"); mn88472_init()
308 dev->warm = true; mn88472_init()
313 ret = request_firmware(&fw, fw_file, &client->dev); mn88472_init()
315 dev_err(&client->dev, "firmare file '%s' not found\n", mn88472_init()
320 dev_info(&client->dev, "downloading firmware from file '%s'\n", mn88472_init()
323 ret = regmap_write(dev->regmap[0], 0xf5, 0x03); mn88472_init()
328 remaining -= (dev->i2c_wr_max - 1)) { mn88472_init()
330 if (len > (dev->i2c_wr_max - 1)) mn88472_init()
331 len = dev->i2c_wr_max - 1; mn88472_init()
333 ret = regmap_bulk_write(dev->regmap[0], 0xf6, mn88472_init()
336 dev_err(&client->dev, mn88472_init()
343 ret = regmap_read(dev->regmap[0], 0xf8, &tmp); mn88472_init()
345 dev_err(&client->dev, mn88472_init()
350 dev_err(&client->dev, mn88472_init()
354 dev_err(&client->dev, "firmware parity check succeeded=0x%x\n", tmp); mn88472_init()
356 ret = regmap_write(dev->regmap[0], 0xf5, 0x00); mn88472_init()
364 dev->warm = true; mn88472_init()
370 dev_dbg(&client->dev, "failed=%d\n", ret); mn88472_init()
377 struct mn88472_dev *dev = i2c_get_clientdata(client); mn88472_sleep() local
380 dev_dbg(&client->dev, "\n"); mn88472_sleep()
383 ret = regmap_write(dev->regmap[2], 0x0b, 0x30); mn88472_sleep()
388 ret = regmap_write(dev->regmap[2], 0x05, 0x3e); mn88472_sleep()
392 dev->delivery_system = SYS_UNDEFINED; mn88472_sleep()
396 dev_dbg(&client->dev, "failed=%d\n", ret); mn88472_sleep()
440 struct mn88472_config *config = client->dev.platform_data; mn88472_probe()
441 struct mn88472_dev *dev; mn88472_probe() local
449 dev_dbg(&client->dev, "\n"); mn88472_probe()
453 dev_err(&client->dev, "frontend pointer not defined\n"); mn88472_probe()
458 dev = kzalloc(sizeof(*dev), GFP_KERNEL); mn88472_probe()
459 if (dev == NULL) { mn88472_probe()
464 dev->i2c_wr_max = config->i2c_wr_max; mn88472_probe()
465 dev->xtal = config->xtal; mn88472_probe()
466 dev->ts_mode = config->ts_mode; mn88472_probe()
467 dev->ts_clock = config->ts_clock; mn88472_probe()
468 dev->client[0] = client; mn88472_probe()
469 dev->regmap[0] = regmap_init_i2c(dev->client[0], &regmap_config); mn88472_probe()
470 if (IS_ERR(dev->regmap[0])) { mn88472_probe()
471 ret = PTR_ERR(dev->regmap[0]); mn88472_probe()
476 ret = regmap_read(dev->regmap[0], 0x00, &utmp); mn88472_probe()
485 dev->client[1] = i2c_new_dummy(client->adapter, 0x1a); mn88472_probe()
486 if (dev->client[1] == NULL) { mn88472_probe()
488 dev_err(&client->dev, "I2C registration failed\n"); mn88472_probe()
492 dev->regmap[1] = regmap_init_i2c(dev->client[1], &regmap_config); mn88472_probe()
493 if (IS_ERR(dev->regmap[1])) { mn88472_probe()
494 ret = PTR_ERR(dev->regmap[1]); mn88472_probe()
497 i2c_set_clientdata(dev->client[1], dev); mn88472_probe()
499 dev->client[2] = i2c_new_dummy(client->adapter, 0x1c); mn88472_probe()
500 if (dev->client[2] == NULL) { mn88472_probe()
502 dev_err(&client->dev, "2nd I2C registration failed\n"); mn88472_probe()
506 dev->regmap[2] = regmap_init_i2c(dev->client[2], &regmap_config); mn88472_probe()
507 if (IS_ERR(dev->regmap[2])) { mn88472_probe()
508 ret = PTR_ERR(dev->regmap[2]); mn88472_probe()
511 i2c_set_clientdata(dev->client[2], dev); mn88472_probe()
514 memcpy(&dev->fe.ops, &mn88472_ops, sizeof(struct dvb_frontend_ops)); mn88472_probe()
515 dev->fe.demodulator_priv = client; mn88472_probe()
516 *config->fe = &dev->fe; mn88472_probe()
517 i2c_set_clientdata(client, dev); mn88472_probe()
519 dev_info(&client->dev, "Panasonic MN88472 successfully attached\n"); mn88472_probe()
523 i2c_unregister_device(dev->client[2]); mn88472_probe()
525 regmap_exit(dev->regmap[1]); mn88472_probe()
527 i2c_unregister_device(dev->client[1]); mn88472_probe()
529 regmap_exit(dev->regmap[0]); mn88472_probe()
531 kfree(dev); mn88472_probe()
533 dev_dbg(&client->dev, "failed=%d\n", ret); mn88472_probe()
539 struct mn88472_dev *dev = i2c_get_clientdata(client); mn88472_remove() local
541 dev_dbg(&client->dev, "\n"); mn88472_remove()
543 regmap_exit(dev->regmap[2]); mn88472_remove()
544 i2c_unregister_device(dev->client[2]); mn88472_remove()
546 regmap_exit(dev->regmap[1]); mn88472_remove()
547 i2c_unregister_device(dev->client[1]); mn88472_remove()
549 regmap_exit(dev->regmap[0]); mn88472_remove()
551 kfree(dev); mn88472_remove()
/linux-4.4.14/drivers/staging/rtl8192u/
H A Dr8180_93cx6.c23 static void eprom_cs(struct net_device *dev, short bit) eprom_cs() argument
27 read_nic_byte_E(dev, EPROM_CMD, &cmdreg); eprom_cs()
30 write_nic_byte_E(dev, EPROM_CMD, cmdreg | EPROM_CS_BIT); eprom_cs()
33 write_nic_byte_E(dev, EPROM_CMD, cmdreg & ~EPROM_CS_BIT); eprom_cs()
35 force_pci_posting(dev); eprom_cs()
40 static void eprom_ck_cycle(struct net_device *dev) eprom_ck_cycle() argument
44 read_nic_byte_E(dev, EPROM_CMD, &cmdreg); eprom_ck_cycle()
45 write_nic_byte_E(dev, EPROM_CMD, cmdreg | EPROM_CK_BIT); eprom_ck_cycle()
46 force_pci_posting(dev); eprom_ck_cycle()
49 read_nic_byte_E(dev, EPROM_CMD, &cmdreg); eprom_ck_cycle()
50 write_nic_byte_E(dev, EPROM_CMD, cmdreg & ~EPROM_CK_BIT); eprom_ck_cycle()
51 force_pci_posting(dev); eprom_ck_cycle()
56 static void eprom_w(struct net_device *dev, short bit) eprom_w() argument
60 read_nic_byte_E(dev, EPROM_CMD, &cmdreg); eprom_w()
62 write_nic_byte_E(dev, EPROM_CMD, cmdreg | EPROM_W_BIT); eprom_w()
64 write_nic_byte_E(dev, EPROM_CMD, cmdreg & ~EPROM_W_BIT); eprom_w()
66 force_pci_posting(dev); eprom_w()
71 static short eprom_r(struct net_device *dev) eprom_r() argument
75 read_nic_byte_E(dev, EPROM_CMD, &bit); eprom_r()
85 static void eprom_send_bits_string(struct net_device *dev, short b[], int len) eprom_send_bits_string() argument
90 eprom_w(dev, b[i]); eprom_send_bits_string()
91 eprom_ck_cycle(dev); eprom_send_bits_string()
96 u32 eprom_read(struct net_device *dev, u32 addr) eprom_read() argument
98 struct r8192_priv *priv = ieee80211_priv(dev); eprom_read()
107 write_nic_byte_E(dev, EPROM_CMD, eprom_read()
109 force_pci_posting(dev); eprom_read()
131 eprom_cs(dev, 1); eprom_read()
132 eprom_ck_cycle(dev); eprom_read()
133 eprom_send_bits_string(dev, read_cmd, 3); eprom_read()
134 eprom_send_bits_string(dev, addr_str, addr_len); eprom_read()
140 eprom_w(dev, 0); eprom_read()
146 eprom_ck_cycle(dev); eprom_read()
147 ret |= (eprom_r(dev)<<(15-i)); eprom_read()
150 eprom_cs(dev, 0); eprom_read()
151 eprom_ck_cycle(dev); eprom_read()
154 write_nic_byte_E(dev, EPROM_CMD, eprom_read()
/linux-4.4.14/net/wireless/
H A Dap.c10 struct net_device *dev, bool notify) __cfg80211_stop_ap()
12 struct wireless_dev *wdev = dev->ieee80211_ptr; __cfg80211_stop_ap()
20 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && __cfg80211_stop_ap()
21 dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) __cfg80211_stop_ap()
27 err = rdev_stop_ap(rdev, dev); __cfg80211_stop_ap()
32 rdev_set_qos_map(rdev, dev, NULL); __cfg80211_stop_ap()
41 struct net_device *dev, bool notify) cfg80211_stop_ap()
43 struct wireless_dev *wdev = dev->ieee80211_ptr; cfg80211_stop_ap()
47 err = __cfg80211_stop_ap(rdev, dev, notify); cfg80211_stop_ap()
9 __cfg80211_stop_ap(struct cfg80211_registered_device *rdev, struct net_device *dev, bool notify) __cfg80211_stop_ap() argument
40 cfg80211_stop_ap(struct cfg80211_registered_device *rdev, struct net_device *dev, bool notify) cfg80211_stop_ap() argument
/linux-4.4.14/arch/powerpc/platforms/44x/
H A Dvirtex_ml510.c8 static void ml510_ali_quirk(struct pci_dev *dev) ml510_ali_quirk() argument
11 pci_write_config_byte(dev, 0x58, 0x4c); ml510_ali_quirk()
13 pci_write_config_byte(dev, 0x44, 0x0d); ml510_ali_quirk()
15 pci_write_config_byte(dev, 0x75, 0x0f); ml510_ali_quirk()
17 pci_write_config_byte(dev, 0x09, 0xff); ml510_ali_quirk()
20 pci_write_config_byte(dev, 0x48, 0x00); ml510_ali_quirk()
22 pci_write_config_byte(dev, 0x4a, 0x00); ml510_ali_quirk()
24 pci_write_config_byte(dev, 0x4b, 0x60); ml510_ali_quirk()
26 pci_write_config_byte(dev, 0x74, 0x06); ml510_ali_quirk()
/linux-4.4.14/drivers/staging/media/mn88473/
H A Dmn88473.c29 struct mn88473_dev *dev = i2c_get_clientdata(client); mn88473_set_frontend() local
36 dev_dbg(&client->dev, mn88473_set_frontend()
46 if (!dev->warm) { mn88473_set_frontend()
89 dev_dbg(&client->dev, "get_if_frequency=%d\n", if_frequency); mn88473_set_frontend()
95 tmp = div_u64(if_frequency * (u64)(1<<24) + (dev->xtal / 2), mn88473_set_frontend()
96 dev->xtal); mn88473_set_frontend()
101 ret = regmap_write(dev->regmap[2], 0x05, 0x00); mn88473_set_frontend()
102 ret = regmap_write(dev->regmap[2], 0xfb, 0x13); mn88473_set_frontend()
103 ret = regmap_write(dev->regmap[2], 0xef, 0x13); mn88473_set_frontend()
104 ret = regmap_write(dev->regmap[2], 0xf9, 0x13); mn88473_set_frontend()
105 ret = regmap_write(dev->regmap[2], 0x00, 0x18); mn88473_set_frontend()
106 ret = regmap_write(dev->regmap[2], 0x01, 0x01); mn88473_set_frontend()
107 ret = regmap_write(dev->regmap[2], 0x02, 0x21); mn88473_set_frontend()
108 ret = regmap_write(dev->regmap[2], 0x03, delivery_system_val); mn88473_set_frontend()
109 ret = regmap_write(dev->regmap[2], 0x0b, 0x00); mn88473_set_frontend()
112 ret = regmap_write(dev->regmap[2], 0x10 + i, if_val[i]); mn88473_set_frontend()
118 ret = regmap_write(dev->regmap[2], 0x13 + i, bw_val[i]); mn88473_set_frontend()
123 ret = regmap_write(dev->regmap[2], 0x2d, 0x3b); mn88473_set_frontend()
124 ret = regmap_write(dev->regmap[2], 0x2e, 0x00); mn88473_set_frontend()
125 ret = regmap_write(dev->regmap[2], 0x56, 0x0d); mn88473_set_frontend()
126 ret = regmap_write(dev->regmap[0], 0x01, 0xba); mn88473_set_frontend()
127 ret = regmap_write(dev->regmap[0], 0x02, 0x13); mn88473_set_frontend()
128 ret = regmap_write(dev->regmap[0], 0x03, 0x80); mn88473_set_frontend()
129 ret = regmap_write(dev->regmap[0], 0x04, 0xba); mn88473_set_frontend()
130 ret = regmap_write(dev->regmap[0], 0x05, 0x91); mn88473_set_frontend()
131 ret = regmap_write(dev->regmap[0], 0x07, 0xe7); mn88473_set_frontend()
132 ret = regmap_write(dev->regmap[0], 0x08, 0x28); mn88473_set_frontend()
133 ret = regmap_write(dev->regmap[0], 0x0a, 0x1a); mn88473_set_frontend()
134 ret = regmap_write(dev->regmap[0], 0x13, 0x1f); mn88473_set_frontend()
135 ret = regmap_write(dev->regmap[0], 0x19, 0x03); mn88473_set_frontend()
136 ret = regmap_write(dev->regmap[0], 0x1d, 0xb0); mn88473_set_frontend()
137 ret = regmap_write(dev->regmap[0], 0x2a, 0x72); mn88473_set_frontend()
138 ret = regmap_write(dev->regmap[0], 0x2d, 0x00); mn88473_set_frontend()
139 ret = regmap_write(dev->regmap[0], 0x3c, 0x00); mn88473_set_frontend()
140 ret = regmap_write(dev->regmap[0], 0x3f, 0xf8); mn88473_set_frontend()
141 ret = regmap_write(dev->regmap[0], 0x40, 0xf4); mn88473_set_frontend()
142 ret = regmap_write(dev->regmap[0], 0x41, 0x08); mn88473_set_frontend()
143 ret = regmap_write(dev->regmap[0], 0xd2, 0x29); mn88473_set_frontend()
144 ret = regmap_write(dev->regmap[0], 0xd4, 0x55); mn88473_set_frontend()
145 ret = regmap_write(dev->regmap[1], 0x10, 0x10); mn88473_set_frontend()
146 ret = regmap_write(dev->regmap[1], 0x11, 0xab); mn88473_set_frontend()
147 ret = regmap_write(dev->regmap[1], 0x12, 0x0d); mn88473_set_frontend()
148 ret = regmap_write(dev->regmap[1], 0x13, 0xae); mn88473_set_frontend()
149 ret = regmap_write(dev->regmap[1], 0x14, 0x1d); mn88473_set_frontend()
150 ret = regmap_write(dev->regmap[1], 0x15, 0x9d); mn88473_set_frontend()
151 ret = regmap_write(dev->regmap[1], 0xbe, 0x08); mn88473_set_frontend()
152 ret = regmap_write(dev->regmap[2], 0x09, 0x08); mn88473_set_frontend()
153 ret = regmap_write(dev->regmap[2], 0x08, 0x1d); mn88473_set_frontend()
154 ret = regmap_write(dev->regmap[0], 0xb2, 0x37); mn88473_set_frontend()
155 ret = regmap_write(dev->regmap[0], 0xd7, 0x04); mn88473_set_frontend()
156 ret = regmap_write(dev->regmap[2], 0x32, 0x80); mn88473_set_frontend()
157 ret = regmap_write(dev->regmap[2], 0x36, 0x00); mn88473_set_frontend()
158 ret = regmap_write(dev->regmap[2], 0xf8, 0x9f); mn88473_set_frontend()
162 dev->delivery_system = c->delivery_system; mn88473_set_frontend()
166 dev_dbg(&client->dev, "failed=%d\n", ret); mn88473_set_frontend()
173 struct mn88473_dev *dev = i2c_get_clientdata(client); mn88473_read_status() local
181 if (!dev->warm) { mn88473_read_status()
188 ret = regmap_read(dev->regmap[0], 0x62, &utmp); mn88473_read_status()
199 ret = regmap_read(dev->regmap[2], 0x8B, &utmp); mn88473_read_status()
212 ret = regmap_read(dev->regmap[1], 0x85, &utmp); mn88473_read_status()
216 ret = regmap_read(dev->regmap[1], 0x89, &utmp); mn88473_read_status()
234 dev_dbg(&client->dev, "failed=%d\n", ret); mn88473_read_status()
241 struct mn88473_dev *dev = i2c_get_clientdata(client); mn88473_init() local
247 dev_dbg(&client->dev, "\n"); mn88473_init()
250 dev->warm = false; mn88473_init()
253 ret = regmap_read(dev->regmap[0], 0xf5, &tmp); mn88473_init()
258 dev_info(&client->dev, "firmware already running\n"); mn88473_init()
259 dev->warm = true; mn88473_init()
264 ret = request_firmware(&fw, fw_file, &client->dev); mn88473_init()
266 dev_err(&client->dev, "firmare file '%s' not found\n", fw_file); mn88473_init()
270 dev_info(&client->dev, "downloading firmware from file '%s'\n", mn88473_init()
273 ret = regmap_write(dev->regmap[0], 0xf5, 0x03); mn88473_init()
278 remaining -= (dev->i2c_wr_max - 1)) { mn88473_init()
280 if (len > (dev->i2c_wr_max - 1)) mn88473_init()
281 len = dev->i2c_wr_max - 1; mn88473_init()
283 ret = regmap_bulk_write(dev->regmap[0], 0xf6, mn88473_init()
286 dev_err(&client->dev, "firmware download failed=%d\n", mn88473_init()
293 ret = regmap_read(dev->regmap[0], 0xf8, &tmp); mn88473_init()
295 dev_err(&client->dev, mn88473_init()
300 dev_err(&client->dev, mn88473_init()
304 dev_err(&client->dev, "firmware parity check succeeded=0x%x\n", tmp); mn88473_init()
306 ret = regmap_write(dev->regmap[0], 0xf5, 0x00); mn88473_init()
314 dev->warm = true; mn88473_init()
321 dev_dbg(&client->dev, "failed=%d\n", ret); mn88473_init()
328 struct mn88473_dev *dev = i2c_get_clientdata(client); mn88473_sleep() local
331 dev_dbg(&client->dev, "\n"); mn88473_sleep()
333 ret = regmap_write(dev->regmap[2], 0x05, 0x3e); mn88473_sleep()
337 dev->delivery_system = SYS_UNDEFINED; mn88473_sleep()
341 dev_dbg(&client->dev, "failed=%d\n", ret); mn88473_sleep()
385 struct mn88473_config *config = client->dev.platform_data; mn88473_probe()
386 struct mn88473_dev *dev; mn88473_probe() local
394 dev_dbg(&client->dev, "\n"); mn88473_probe()
398 dev_err(&client->dev, "frontend pointer not defined\n"); mn88473_probe()
403 dev = kzalloc(sizeof(*dev), GFP_KERNEL); mn88473_probe()
404 if (dev == NULL) { mn88473_probe()
409 dev->i2c_wr_max = config->i2c_wr_max; mn88473_probe()
411 dev->xtal = 25000000; mn88473_probe()
413 dev->xtal = config->xtal; mn88473_probe()
414 dev->client[0] = client; mn88473_probe()
415 dev->regmap[0] = regmap_init_i2c(dev->client[0], &regmap_config); mn88473_probe()
416 if (IS_ERR(dev->regmap[0])) { mn88473_probe()
417 ret = PTR_ERR(dev->regmap[0]); mn88473_probe()
422 ret = regmap_read(dev->regmap[0], 0x00, &utmp); mn88473_probe()
431 dev->client[1] = i2c_new_dummy(client->adapter, 0x1a); mn88473_probe()
432 if (dev->client[1] == NULL) { mn88473_probe()
434 dev_err(&client->dev, "I2C registration failed\n"); mn88473_probe()
438 dev->regmap[1] = regmap_init_i2c(dev->client[1], &regmap_config); mn88473_probe()
439 if (IS_ERR(dev->regmap[1])) { mn88473_probe()
440 ret = PTR_ERR(dev->regmap[1]); mn88473_probe()
443 i2c_set_clientdata(dev->client[1], dev); mn88473_probe()
445 dev->client[2] = i2c_new_dummy(client->adapter, 0x1c); mn88473_probe()
446 if (dev->client[2] == NULL) { mn88473_probe()
448 dev_err(&client->dev, "2nd I2C registration failed\n"); mn88473_probe()
452 dev->regmap[2] = regmap_init_i2c(dev->client[2], &regmap_config); mn88473_probe()
453 if (IS_ERR(dev->regmap[2])) { mn88473_probe()
454 ret = PTR_ERR(dev->regmap[2]); mn88473_probe()
457 i2c_set_clientdata(dev->client[2], dev); mn88473_probe()
460 memcpy(&dev->fe.ops, &mn88473_ops, sizeof(struct dvb_frontend_ops)); mn88473_probe()
461 dev->fe.demodulator_priv = client; mn88473_probe()
462 *config->fe = &dev->fe; mn88473_probe()
463 i2c_set_clientdata(client, dev); mn88473_probe()
465 dev_info(&dev->client[0]->dev, "Panasonic MN88473 successfully attached\n"); mn88473_probe()
469 i2c_unregister_device(dev->client[2]); mn88473_probe()
471 regmap_exit(dev->regmap[1]); mn88473_probe()
473 i2c_unregister_device(dev->client[1]); mn88473_probe()
475 regmap_exit(dev->regmap[0]); mn88473_probe()
477 kfree(dev); mn88473_probe()
479 dev_dbg(&client->dev, "failed=%d\n", ret); mn88473_probe()
485 struct mn88473_dev *dev = i2c_get_clientdata(client); mn88473_remove() local
487 dev_dbg(&client->dev, "\n"); mn88473_remove()
489 regmap_exit(dev->regmap[2]); mn88473_remove()
490 i2c_unregister_device(dev->client[2]); mn88473_remove()
492 regmap_exit(dev->regmap[1]); mn88473_remove()
493 i2c_unregister_device(dev->client[1]); mn88473_remove()
495 regmap_exit(dev->regmap[0]); mn88473_remove()
497 kfree(dev); mn88473_remove()
/linux-4.4.14/drivers/scsi/aacraid/
H A Dsa.c49 struct aac_dev *dev = dev_id; aac_sa_intr() local
52 intstat = sa_readw(dev, DoorbellReg_p); aac_sa_intr()
57 mask = ~(sa_readw(dev, SaDbCSR.PRISETIRQMASK)); aac_sa_intr()
63 aac_printf(dev, sa_readl(dev, Mailbox5)); aac_sa_intr()
64 sa_writew(dev, DoorbellClrReg_p, PrintfReady); /* clear PrintfReady */ aac_sa_intr()
65 sa_writew(dev, DoorbellReg_s, PrintfDone); aac_sa_intr()
66 } else if (intstat & DOORBELL_1) { // dev -> Host Normal Command Ready aac_sa_intr()
67 sa_writew(dev, DoorbellClrReg_p, DOORBELL_1); aac_sa_intr()
68 aac_command_normal(&dev->queues->queue[HostNormCmdQueue]); aac_sa_intr()
69 } else if (intstat & DOORBELL_2) { // dev -> Host Normal Response Ready aac_sa_intr()
70 sa_writew(dev, DoorbellClrReg_p, DOORBELL_2); aac_sa_intr()
71 aac_response_normal(&dev->queues->queue[HostNormRespQueue]); aac_sa_intr()
72 } else if (intstat & DOORBELL_3) { // dev -> Host Normal Command Not Full aac_sa_intr()
73 sa_writew(dev, DoorbellClrReg_p, DOORBELL_3); aac_sa_intr()
74 } else if (intstat & DOORBELL_4) { // dev -> Host Normal Response Not Full aac_sa_intr()
75 sa_writew(dev, DoorbellClrReg_p, DOORBELL_4); aac_sa_intr()
84 * @dev: Which adapter to enable.
87 static void aac_sa_disable_interrupt (struct aac_dev *dev) aac_sa_disable_interrupt() argument
89 sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff); aac_sa_disable_interrupt()
94 * @dev: Which adapter to enable.
97 static void aac_sa_enable_interrupt (struct aac_dev *dev) aac_sa_enable_interrupt() argument
99 sa_writew(dev, SaDbCSR.PRICLEARIRQMASK, (PrintfReady | DOORBELL_1 | aac_sa_enable_interrupt()
105 * @dev: Adapter that notification is for
111 static void aac_sa_notify_adapter(struct aac_dev *dev, u32 event) aac_sa_notify_adapter() argument
116 sa_writew(dev, DoorbellReg_s,DOORBELL_1); aac_sa_notify_adapter()
119 sa_writew(dev, DoorbellReg_s,DOORBELL_4); aac_sa_notify_adapter()
122 sa_writew(dev, DoorbellReg_s,DOORBELL_2); aac_sa_notify_adapter()
125 sa_writew(dev, DoorbellReg_s,DOORBELL_3); aac_sa_notify_adapter()
129 sa_sync_cmd(dev, HOST_CRASHING, 0, 0, 0, 0, 0, 0, aac_sa_notify_adapter()
134 sa_writew(dev, DoorbellReg_s,DOORBELL_6); aac_sa_notify_adapter()
137 sa_writew(dev, DoorbellReg_s,DOORBELL_5); aac_sa_notify_adapter()
148 * @dev: Adapter
157 static int sa_sync_cmd(struct aac_dev *dev, u32 command, sa_sync_cmd() argument
166 sa_writel(dev, Mailbox0, command); sa_sync_cmd()
170 sa_writel(dev, Mailbox1, p1); sa_sync_cmd()
171 sa_writel(dev, Mailbox2, p2); sa_sync_cmd()
172 sa_writel(dev, Mailbox3, p3); sa_sync_cmd()
173 sa_writel(dev, Mailbox4, p4); sa_sync_cmd()
178 sa_writew(dev, DoorbellClrReg_p, DOORBELL_0); sa_sync_cmd()
182 sa_writew(dev, DoorbellReg_s, DOORBELL_0); sa_sync_cmd()
197 if(sa_readw(dev, DoorbellReg_p) & DOORBELL_0) { sa_sync_cmd()
209 sa_writew(dev, DoorbellClrReg_p, DOORBELL_0); sa_sync_cmd()
214 *ret = sa_readl(dev, Mailbox0); sa_sync_cmd()
216 *r1 = sa_readl(dev, Mailbox1); sa_sync_cmd()
218 *r2 = sa_readl(dev, Mailbox2); sa_sync_cmd()
220 *r3 = sa_readl(dev, Mailbox3); sa_sync_cmd()
222 *r4 = sa_readl(dev, Mailbox4); sa_sync_cmd()
228 * @dev: Which adapter to enable.
233 static void aac_sa_interrupt_adapter (struct aac_dev *dev) aac_sa_interrupt_adapter() argument
235 sa_sync_cmd(dev, BREAKPOINT_REQUEST, 0, 0, 0, 0, 0, 0, aac_sa_interrupt_adapter()
241 * @dev: Adapter
246 static void aac_sa_start_adapter(struct aac_dev *dev) aac_sa_start_adapter() argument
252 init = dev->init; aac_sa_start_adapter()
255 sa_sync_cmd(dev, INIT_STRUCT_BASE_ADDRESS, aac_sa_start_adapter()
256 (u32)(ulong)dev->init_pa, 0, 0, 0, 0, 0, aac_sa_start_adapter()
260 static int aac_sa_restart_adapter(struct aac_dev *dev, int bled) aac_sa_restart_adapter() argument
267 * @dev: device to check if healthy
272 static int aac_sa_check_health(struct aac_dev *dev) aac_sa_check_health() argument
274 long status = sa_readl(dev, Mailbox7); aac_sa_check_health()
302 static int aac_sa_ioremap(struct aac_dev * dev, u32 size) aac_sa_ioremap() argument
305 iounmap(dev->regs.sa); aac_sa_ioremap()
308 dev->base = dev->regs.sa = ioremap(dev->base_start, size); aac_sa_ioremap()
309 return (dev->base == NULL) ? -1 : 0; aac_sa_ioremap()
314 * @dev: device to configure
321 int aac_sa_init(struct aac_dev *dev) aac_sa_init() argument
328 instance = dev->id; aac_sa_init()
329 name = dev->name; aac_sa_init()
331 if (aac_sa_ioremap(dev, dev->base_size)) { aac_sa_init()
339 if (sa_readl(dev, Mailbox7) & SELF_TEST_FAILED) { aac_sa_init()
346 if (sa_readl(dev, Mailbox7) & KERNEL_PANIC) { aac_sa_init()
354 while (!(sa_readl(dev, Mailbox7) & KERNEL_UP_AND_RUNNING)) { aac_sa_init()
356 status = sa_readl(dev, Mailbox7); aac_sa_init()
368 dev->a_ops.adapter_interrupt = aac_sa_interrupt_adapter; aac_sa_init()
369 dev->a_ops.adapter_disable_int = aac_sa_disable_interrupt; aac_sa_init()
370 dev->a_ops.adapter_enable_int = aac_sa_enable_interrupt; aac_sa_init()
371 dev->a_ops.adapter_notify = aac_sa_notify_adapter; aac_sa_init()
372 dev->a_ops.adapter_sync_cmd = sa_sync_cmd; aac_sa_init()
373 dev->a_ops.adapter_check_health = aac_sa_check_health; aac_sa_init()
374 dev->a_ops.adapter_restart = aac_sa_restart_adapter; aac_sa_init()
375 dev->a_ops.adapter_start = aac_sa_start_adapter; aac_sa_init()
376 dev->a_ops.adapter_intr = aac_sa_intr; aac_sa_init()
377 dev->a_ops.adapter_deliver = aac_rx_deliver_producer; aac_sa_init()
378 dev->a_ops.adapter_ioremap = aac_sa_ioremap; aac_sa_init()
384 aac_adapter_disable_int(dev); aac_sa_init()
385 aac_adapter_enable_int(dev); aac_sa_init()
387 if(aac_init_adapter(dev) == NULL) aac_sa_init()
389 dev->sync_mode = 0; /* sync. mode not supported */ aac_sa_init()
390 if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, aac_sa_init()
391 IRQF_SHARED, "aacraid", (void *)dev) < 0) { aac_sa_init()
396 dev->dbg_base = dev->base_start; aac_sa_init()
397 dev->dbg_base_mapped = dev->base; aac_sa_init()
398 dev->dbg_size = dev->base_size; aac_sa_init()
400 aac_adapter_enable_int(dev); aac_sa_init()
406 aac_sa_start_adapter(dev); aac_sa_init()
410 aac_sa_disable_interrupt(dev); aac_sa_init()
411 free_irq(dev->pdev->irq, (void *)dev); aac_sa_init()
H A Dsrc.c47 static int aac_src_get_sync_status(struct aac_dev *dev);
52 struct aac_dev *dev; aac_src_intr_message() local
59 dev = ctx->dev; aac_src_intr_message()
62 if (dev->msi_enabled) { aac_src_intr_message()
65 bellbits = src_readl(dev, MUnit.ODR_MSI); aac_src_intr_message()
73 bellbits = src_readl(dev, MUnit.ODR_R); aac_src_intr_message()
76 src_writel(dev, MUnit.ODR_C, bellbits); aac_src_intr_message()
77 src_readl(dev, MUnit.ODR_C); aac_src_intr_message()
80 src_writel(dev, MUnit.ODR_C, bellbits); aac_src_intr_message()
81 src_readl(dev, MUnit.ODR_C); aac_src_intr_message()
96 if (!aac_sync_mode && !dev->msi_enabled) { aac_src_intr_message()
97 src_writel(dev, MUnit.ODR_C, bellbits); aac_src_intr_message()
98 src_readl(dev, MUnit.ODR_C); aac_src_intr_message()
101 if (dev->sync_fib) { aac_src_intr_message()
102 if (dev->sync_fib->callback) aac_src_intr_message()
103 dev->sync_fib->callback(dev->sync_fib->callback_data, aac_src_intr_message()
104 dev->sync_fib); aac_src_intr_message()
105 spin_lock_irqsave(&dev->sync_fib->event_lock, sflags); aac_src_intr_message()
106 if (dev->sync_fib->flags & FIB_CONTEXT_FLAG_WAIT) { aac_src_intr_message()
107 dev->management_fib_count--; aac_src_intr_message()
108 up(&dev->sync_fib->event_wait); aac_src_intr_message()
110 spin_unlock_irqrestore(&dev->sync_fib->event_lock, aac_src_intr_message()
112 spin_lock_irqsave(&dev->sync_lock, sflags); aac_src_intr_message()
113 if (!list_empty(&dev->sync_fib_list)) { aac_src_intr_message()
114 entry = dev->sync_fib_list.next; aac_src_intr_message()
115 dev->sync_fib = list_entry(entry, aac_src_intr_message()
121 dev->sync_fib = NULL; aac_src_intr_message()
123 spin_unlock_irqrestore(&dev->sync_lock, sflags); aac_src_intr_message()
125 aac_adapter_sync_cmd(dev, SEND_SYNCHRONOUS_FIB, aac_src_intr_message()
126 (u32)dev->sync_fib->hw_fib_pa, aac_src_intr_message()
131 if (!dev->msi_enabled) aac_src_intr_message()
138 aac_intr_normal(dev, 0, 2, 0, NULL); aac_src_intr_message()
139 if (dev->msi_enabled) aac_src_intr_message()
140 aac_src_access_devreg(dev, AAC_CLEAR_AIF_BIT); aac_src_intr_message()
145 index = dev->host_rrq_idx[vector_no]; aac_src_intr_message()
150 handle = (dev->host_rrq[index] & 0x7fffffff); aac_src_intr_message()
157 if (dev->msi_enabled && dev->max_msix > 1) aac_src_intr_message()
158 atomic_dec(&dev->rrq_outstanding[vector_no]); aac_src_intr_message()
159 dev->host_rrq[index++] = 0; aac_src_intr_message()
160 aac_intr_normal(dev, handle-1, 0, isFastResponse, NULL); aac_src_intr_message()
161 if (index == (vector_no + 1) * dev->vector_cap) aac_src_intr_message()
162 index = vector_no * dev->vector_cap; aac_src_intr_message()
163 dev->host_rrq_idx[vector_no] = index; aac_src_intr_message()
173 * @dev: Adapter
176 static void aac_src_disable_interrupt(struct aac_dev *dev) aac_src_disable_interrupt() argument
178 src_writel(dev, MUnit.OIMR, dev->OIMR = 0xffffffff); aac_src_disable_interrupt()
183 * @dev: Adapter
186 static void aac_src_enable_interrupt_message(struct aac_dev *dev) aac_src_enable_interrupt_message() argument
188 aac_src_access_devreg(dev, AAC_ENABLE_INTERRUPT); aac_src_enable_interrupt_message()
193 * @dev: Adapter
202 static int src_sync_cmd(struct aac_dev *dev, u32 command, src_sync_cmd() argument
213 writel(command, &dev->IndexRegs->Mailbox[0]); src_sync_cmd()
217 writel(p1, &dev->IndexRegs->Mailbox[1]); src_sync_cmd()
218 writel(p2, &dev->IndexRegs->Mailbox[2]); src_sync_cmd()
219 writel(p3, &dev->IndexRegs->Mailbox[3]); src_sync_cmd()
220 writel(p4, &dev->IndexRegs->Mailbox[4]); src_sync_cmd()
225 if (!dev->msi_enabled) src_sync_cmd()
226 src_writel(dev, src_sync_cmd()
233 src_writel(dev, MUnit.OIMR, dev->OIMR = 0xffffffff); src_sync_cmd()
239 src_readl(dev, MUnit.OIMR); src_sync_cmd()
244 src_writel(dev, MUnit.IDR, INBOUNDDOORBELL_0 << SRC_IDR_SHIFT); src_sync_cmd()
246 if (!dev->sync_mode || command != SEND_SYNCHRONOUS_FIB) { src_sync_cmd()
262 if (aac_src_get_sync_status(dev) & OUTBOUNDDOORBELL_0) { src_sync_cmd()
266 if (dev->msi_enabled) src_sync_cmd()
267 aac_src_access_devreg(dev, src_sync_cmd()
270 src_writel(dev, src_sync_cmd()
285 aac_adapter_enable_int(dev); src_sync_cmd()
292 *status = readl(&dev->IndexRegs->Mailbox[0]); src_sync_cmd()
294 *r1 = readl(&dev->IndexRegs->Mailbox[1]); src_sync_cmd()
296 *r2 = readl(&dev->IndexRegs->Mailbox[2]); src_sync_cmd()
298 *r3 = readl(&dev->IndexRegs->Mailbox[3]); src_sync_cmd()
300 *r4 = readl(&dev->IndexRegs->Mailbox[4]); src_sync_cmd()
302 dev->max_msix = src_sync_cmd()
303 readl(&dev->IndexRegs->Mailbox[5]) & 0xFFFF; src_sync_cmd()
307 if (!dev->msi_enabled) src_sync_cmd()
308 src_writel(dev, src_sync_cmd()
316 aac_adapter_enable_int(dev); src_sync_cmd()
322 * @dev: Adapter
327 static void aac_src_interrupt_adapter(struct aac_dev *dev) aac_src_interrupt_adapter() argument
329 src_sync_cmd(dev, BREAKPOINT_REQUEST, aac_src_interrupt_adapter()
336 * @dev: Adapter
343 static void aac_src_notify_adapter(struct aac_dev *dev, u32 event) aac_src_notify_adapter() argument
348 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
352 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
356 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
360 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
364 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
368 src_writel(dev, MUnit.ODR_C, aac_src_notify_adapter()
379 * @dev: Adapter
384 static void aac_src_start_adapter(struct aac_dev *dev) aac_src_start_adapter() argument
390 for (i = 0; i < dev->max_msix; i++) { aac_src_start_adapter()
391 dev->host_rrq_idx[i] = i * dev->vector_cap; aac_src_start_adapter()
392 atomic_set(&dev->rrq_outstanding[i], 0); aac_src_start_adapter()
394 dev->fibs_pushed_no = 0; aac_src_start_adapter()
396 init = dev->init; aac_src_start_adapter()
400 src_sync_cmd(dev, INIT_STRUCT_BASE_ADDRESS, (u32)(ulong)dev->init_pa, aac_src_start_adapter()
406 * @dev: device to check if healthy
411 static int aac_src_check_health(struct aac_dev *dev) aac_src_check_health() argument
413 u32 status = src_readl(dev, MUnit.OMR); aac_src_check_health()
445 struct aac_dev *dev = fib->dev; aac_src_deliver_message() local
446 struct aac_queue *q = &dev->queues->queue[AdapNormCmdQueue]; aac_src_deliver_message()
459 if (dev->msi_enabled && fib->hw_fib_va->header.Command != AifRequest && aac_src_deliver_message()
460 dev->max_msix > 1) { aac_src_deliver_message()
467 atomic_inc(&dev->rrq_outstanding[vector_no]); aac_src_deliver_message()
469 if (dev->comm_interface == AAC_COMM_MESSAGE_TYPE2) { aac_src_deliver_message()
503 src_writeq(dev, MUnit.IQ_L, (u64)address); aac_src_deliver_message()
505 spin_lock_irqsave(&fib->dev->iq_lock, flags); aac_src_deliver_message()
506 src_writel(dev, MUnit.IQ_H, upper_32_bits(address) & 0xffffffff); aac_src_deliver_message()
507 src_writel(dev, MUnit.IQ_L, address & 0xffffffff); aac_src_deliver_message()
508 spin_unlock_irqrestore(&fib->dev->iq_lock, flags); aac_src_deliver_message()
518 static int aac_src_ioremap(struct aac_dev *dev, u32 size) aac_src_ioremap() argument
521 iounmap(dev->regs.src.bar1); aac_src_ioremap()
522 dev->regs.src.bar1 = NULL; aac_src_ioremap()
523 iounmap(dev->regs.src.bar0); aac_src_ioremap()
524 dev->base = dev->regs.src.bar0 = NULL; aac_src_ioremap()
527 dev->regs.src.bar1 = ioremap(pci_resource_start(dev->pdev, 2), aac_src_ioremap()
529 dev->base = NULL; aac_src_ioremap()
530 if (dev->regs.src.bar1 == NULL) aac_src_ioremap()
532 dev->base = dev->regs.src.bar0 = ioremap(dev->base_start, size); aac_src_ioremap()
533 if (dev->base == NULL) { aac_src_ioremap()
534 iounmap(dev->regs.src.bar1); aac_src_ioremap()
535 dev->regs.src.bar1 = NULL; aac_src_ioremap()
538 dev->IndexRegs = &((struct src_registers __iomem *) aac_src_ioremap()
539 dev->base)->u.tupelo.IndexRegs; aac_src_ioremap()
548 static int aac_srcv_ioremap(struct aac_dev *dev, u32 size) aac_srcv_ioremap() argument
551 iounmap(dev->regs.src.bar0); aac_srcv_ioremap()
552 dev->base = dev->regs.src.bar0 = NULL; aac_srcv_ioremap()
555 dev->base = dev->regs.src.bar0 = ioremap(dev->base_start, size); aac_srcv_ioremap()
556 if (dev->base == NULL) aac_srcv_ioremap()
558 dev->IndexRegs = &((struct src_registers __iomem *) aac_srcv_ioremap()
559 dev->base)->u.denali.IndexRegs; aac_srcv_ioremap()
563 static int aac_src_restart_adapter(struct aac_dev *dev, int bled) aac_src_restart_adapter() argument
570 dev->name, dev->id, bled); aac_src_restart_adapter()
571 dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; aac_src_restart_adapter()
572 bled = aac_adapter_sync_cmd(dev, IOP_RESET_ALWAYS, aac_src_restart_adapter()
575 !dev->doorbell_mask) aac_src_restart_adapter()
577 else if (dev->doorbell_mask) { aac_src_restart_adapter()
578 reset_mask = dev->doorbell_mask; aac_src_restart_adapter()
583 if ((dev->pdev->device == PMC_DEVICE_S7 || aac_src_restart_adapter()
584 dev->pdev->device == PMC_DEVICE_S8 || aac_src_restart_adapter()
585 dev->pdev->device == PMC_DEVICE_S9) && dev->msi_enabled) { aac_src_restart_adapter()
586 aac_src_access_devreg(dev, AAC_ENABLE_INTX); aac_src_restart_adapter()
587 dev->msi_enabled = 0; aac_src_restart_adapter()
591 if (!bled && (dev->supplement_adapter_info.SupportedOptions2 & aac_src_restart_adapter()
593 src_writel(dev, MUnit.IDR, reset_mask); aac_src_restart_adapter()
596 src_writel(dev, MUnit.IDR, 0x100); aac_src_restart_adapter()
601 if (src_readl(dev, MUnit.OMR) & KERNEL_PANIC) aac_src_restart_adapter()
612 * @dev: Adapter
615 int aac_src_select_comm(struct aac_dev *dev, int comm) aac_src_select_comm() argument
619 dev->a_ops.adapter_intr = aac_src_intr_message; aac_src_select_comm()
620 dev->a_ops.adapter_deliver = aac_src_deliver_message; aac_src_select_comm()
630 * @dev: device to configure
634 int aac_src_init(struct aac_dev *dev) aac_src_init() argument
639 int instance = dev->id; aac_src_init()
640 const char *name = dev->name; aac_src_init()
642 dev->a_ops.adapter_ioremap = aac_src_ioremap; aac_src_init()
643 dev->a_ops.adapter_comm = aac_src_select_comm; aac_src_init()
645 dev->base_size = AAC_MIN_SRC_BAR0_SIZE; aac_src_init()
646 if (aac_adapter_ioremap(dev, dev->base_size)) { aac_src_init()
652 dev->a_ops.adapter_sync_cmd = src_sync_cmd; aac_src_init()
653 dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; aac_src_init()
655 !aac_src_restart_adapter(dev, 0)) aac_src_init()
660 status = src_readl(dev, MUnit.OMR); aac_src_init()
662 if (aac_src_restart_adapter(dev, aac_src_check_health(dev))) aac_src_init()
669 status = src_readl(dev, MUnit.OMR); aac_src_init()
672 dev->name, instance); aac_src_init()
680 dev->name, instance); aac_src_init()
687 while (!((status = src_readl(dev, MUnit.OMR)) & aac_src_init()
693 dev->name, instance, status); aac_src_init()
702 if (likely(!aac_src_restart_adapter(dev, aac_src_init()
703 aac_src_check_health(dev)))) aac_src_init()
714 dev->a_ops.adapter_interrupt = aac_src_interrupt_adapter; aac_src_init()
715 dev->a_ops.adapter_disable_int = aac_src_disable_interrupt; aac_src_init()
716 dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; aac_src_init()
717 dev->a_ops.adapter_notify = aac_src_notify_adapter; aac_src_init()
718 dev->a_ops.adapter_sync_cmd = src_sync_cmd; aac_src_init()
719 dev->a_ops.adapter_check_health = aac_src_check_health; aac_src_init()
720 dev->a_ops.adapter_restart = aac_src_restart_adapter; aac_src_init()
721 dev->a_ops.adapter_start = aac_src_start_adapter; aac_src_init()
727 aac_adapter_comm(dev, AAC_COMM_MESSAGE); aac_src_init()
728 aac_adapter_disable_int(dev); aac_src_init()
729 src_writel(dev, MUnit.ODR_C, 0xffffffff); aac_src_init()
730 aac_adapter_enable_int(dev); aac_src_init()
732 if (aac_init_adapter(dev) == NULL) aac_src_init()
734 if (dev->comm_interface != AAC_COMM_MESSAGE_TYPE1) aac_src_init()
737 dev->msi = !pci_enable_msi(dev->pdev); aac_src_init()
739 dev->aac_msix[0].vector_no = 0; aac_src_init()
740 dev->aac_msix[0].dev = dev; aac_src_init()
742 if (request_irq(dev->pdev->irq, dev->a_ops.adapter_intr, aac_src_init()
743 IRQF_SHARED, "aacraid", &(dev->aac_msix[0])) < 0) { aac_src_init()
745 if (dev->msi) aac_src_init()
746 pci_disable_msi(dev->pdev); aac_src_init()
752 dev->dbg_base = pci_resource_start(dev->pdev, 2); aac_src_init()
753 dev->dbg_base_mapped = dev->regs.src.bar1; aac_src_init()
754 dev->dbg_size = AAC_MIN_SRC_BAR1_SIZE; aac_src_init()
755 dev->a_ops.adapter_enable_int = aac_src_enable_interrupt_message; aac_src_init()
757 aac_adapter_enable_int(dev); aac_src_init()
759 if (!dev->sync_mode) { aac_src_init()
764 aac_src_start_adapter(dev); aac_src_init()
775 * @dev: device to configure
779 int aac_srcv_init(struct aac_dev *dev) aac_srcv_init() argument
784 int instance = dev->id; aac_srcv_init()
785 const char *name = dev->name; aac_srcv_init()
787 dev->a_ops.adapter_ioremap = aac_srcv_ioremap; aac_srcv_init()
788 dev->a_ops.adapter_comm = aac_src_select_comm; aac_srcv_init()
790 dev->base_size = AAC_MIN_SRCV_BAR0_SIZE; aac_srcv_init()
791 if (aac_adapter_ioremap(dev, dev->base_size)) { aac_srcv_init()
797 dev->a_ops.adapter_sync_cmd = src_sync_cmd; aac_srcv_init()
798 dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; aac_srcv_init()
800 !aac_src_restart_adapter(dev, 0)) aac_srcv_init()
806 status = src_readl(dev, MUnit.OMR); aac_srcv_init()
810 status = src_readl(dev, MUnit.OMR); aac_srcv_init()
813 dev->name, instance); aac_srcv_init()
827 status = src_readl(dev, MUnit.OMR); aac_srcv_init()
829 if (aac_src_restart_adapter(dev, aac_src_check_health(dev))) aac_srcv_init()
836 status = src_readl(dev, MUnit.OMR); aac_srcv_init()
838 printk(KERN_ERR "%s%d: adapter self-test failed.\n", dev->name, instance); aac_srcv_init()
845 printk(KERN_ERR "%s%d: adapter monitor panic.\n", dev->name, instance); aac_srcv_init()
852 while (!((status = src_readl(dev, MUnit.OMR)) & aac_srcv_init()
859 dev->name, instance, status); aac_srcv_init()
868 if (likely(!aac_src_restart_adapter(dev, aac_src_check_health(dev)))) aac_srcv_init()
879 dev->a_ops.adapter_interrupt = aac_src_interrupt_adapter; aac_srcv_init()
880 dev->a_ops.adapter_disable_int = aac_src_disable_interrupt; aac_srcv_init()
881 dev->a_ops.adapter_enable_int = aac_src_disable_interrupt; aac_srcv_init()
882 dev->a_ops.adapter_notify = aac_src_notify_adapter; aac_srcv_init()
883 dev->a_ops.adapter_sync_cmd = src_sync_cmd; aac_srcv_init()
884 dev->a_ops.adapter_check_health = aac_src_check_health; aac_srcv_init()
885 dev->a_ops.adapter_restart = aac_src_restart_adapter; aac_srcv_init()
886 dev->a_ops.adapter_start = aac_src_start_adapter; aac_srcv_init()
892 aac_adapter_comm(dev, AAC_COMM_MESSAGE); aac_srcv_init()
893 aac_adapter_disable_int(dev); aac_srcv_init()
894 src_writel(dev, MUnit.ODR_C, 0xffffffff); aac_srcv_init()
895 aac_adapter_enable_int(dev); aac_srcv_init()
897 if (aac_init_adapter(dev) == NULL) aac_srcv_init()
899 if (dev->comm_interface != AAC_COMM_MESSAGE_TYPE2) aac_srcv_init()
901 if (dev->msi_enabled) aac_srcv_init()
902 aac_src_access_devreg(dev, AAC_ENABLE_MSIX); aac_srcv_init()
904 if (aac_acquire_irq(dev)) aac_srcv_init()
907 dev->dbg_base = dev->base_start; aac_srcv_init()
908 dev->dbg_base_mapped = dev->base; aac_srcv_init()
909 dev->dbg_size = dev->base_size; aac_srcv_init()
910 dev->a_ops.adapter_enable_int = aac_src_enable_interrupt_message; aac_srcv_init()
912 aac_adapter_enable_int(dev); aac_srcv_init()
914 if (!dev->sync_mode) { aac_srcv_init()
919 aac_src_start_adapter(dev); aac_srcv_init()
928 void aac_src_access_devreg(struct aac_dev *dev, int mode) aac_src_access_devreg() argument
934 src_writel(dev, aac_src_access_devreg()
936 dev->OIMR = (dev->msi_enabled ? aac_src_access_devreg()
942 src_writel(dev, aac_src_access_devreg()
944 dev->OIMR = AAC_INT_DISABLE_ALL); aac_src_access_devreg()
949 val = src_readl(dev, MUnit.IDR); aac_src_access_devreg()
951 src_writel(dev, MUnit.IDR, val); aac_src_access_devreg()
952 src_readl(dev, MUnit.IDR); aac_src_access_devreg()
955 src_writel(dev, MUnit.IOAR, val); aac_src_access_devreg()
956 val = src_readl(dev, MUnit.OIMR); aac_src_access_devreg()
957 src_writel(dev, aac_src_access_devreg()
964 val = src_readl(dev, MUnit.IDR); aac_src_access_devreg()
966 src_writel(dev, MUnit.IDR, val); aac_src_access_devreg()
967 src_readl(dev, MUnit.IDR); aac_src_access_devreg()
972 val = src_readl(dev, MUnit.IDR); aac_src_access_devreg()
974 src_writel(dev, MUnit.IDR, val); aac_src_access_devreg()
975 src_readl(dev, MUnit.IDR); aac_src_access_devreg()
980 val = src_readl(dev, MUnit.IDR); aac_src_access_devreg()
982 src_writel(dev, MUnit.IDR, val); aac_src_access_devreg()
983 src_readl(dev, MUnit.IDR); aac_src_access_devreg()
988 val = src_readl(dev, MUnit.IDR); aac_src_access_devreg()
990 src_writel(dev, MUnit.IDR, val); aac_src_access_devreg()
991 src_readl(dev, MUnit.IDR); aac_src_access_devreg()
994 src_writel(dev, MUnit.IOAR, val); aac_src_access_devreg()
995 src_readl(dev, MUnit.IOAR); aac_src_access_devreg()
996 val = src_readl(dev, MUnit.OIMR); aac_src_access_devreg()
997 src_writel(dev, MUnit.OIMR, aac_src_access_devreg()
1006 static int aac_src_get_sync_status(struct aac_dev *dev) aac_src_get_sync_status() argument
1011 if (dev->msi_enabled) aac_src_get_sync_status()
1012 val = src_readl(dev, MUnit.ODR_MSI) & 0x1000 ? 1 : 0; aac_src_get_sync_status()
1014 val = src_readl(dev, MUnit.ODR_R) >> SRC_ODR_SHIFT; aac_src_get_sync_status()
H A Dnark.c43 static int aac_nark_ioremap(struct aac_dev * dev, u32 size) aac_nark_ioremap() argument
46 iounmap(dev->regs.rx); aac_nark_ioremap()
47 dev->regs.rx = NULL; aac_nark_ioremap()
48 iounmap(dev->base); aac_nark_ioremap()
49 dev->base = NULL; aac_nark_ioremap()
52 dev->base_start = pci_resource_start(dev->pdev, 2); aac_nark_ioremap()
53 dev->regs.rx = ioremap((u64)pci_resource_start(dev->pdev, 0) | aac_nark_ioremap()
54 ((u64)pci_resource_start(dev->pdev, 1) << 32), aac_nark_ioremap()
56 dev->base = NULL; aac_nark_ioremap()
57 if (dev->regs.rx == NULL) aac_nark_ioremap()
59 dev->base = ioremap(dev->base_start, size); aac_nark_ioremap()
60 if (dev->base == NULL) { aac_nark_ioremap()
61 iounmap(dev->regs.rx); aac_nark_ioremap()
62 dev->regs.rx = NULL; aac_nark_ioremap()
65 dev->IndexRegs = &((struct rx_registers __iomem *)dev->base)->IndexRegs; aac_nark_ioremap()
71 * @dev: device to configure
75 int aac_nark_init(struct aac_dev * dev) aac_nark_init() argument
80 dev->a_ops.adapter_ioremap = aac_nark_ioremap; aac_nark_init()
81 dev->a_ops.adapter_comm = aac_rx_select_comm; aac_nark_init()
83 return _aac_rx_init(dev); aac_nark_init()
/linux-4.4.14/drivers/net/ethernet/8390/
H A D8390.c8 int ei_open(struct net_device *dev) ei_open() argument
10 return __ei_open(dev); ei_open()
14 int ei_close(struct net_device *dev) ei_close() argument
16 return __ei_close(dev); ei_close()
20 netdev_tx_t ei_start_xmit(struct sk_buff *skb, struct net_device *dev) ei_start_xmit() argument
22 return __ei_start_xmit(skb, dev); ei_start_xmit()
26 struct net_device_stats *ei_get_stats(struct net_device *dev) ei_get_stats() argument
28 return __ei_get_stats(dev); ei_get_stats()
32 void ei_set_multicast_list(struct net_device *dev) ei_set_multicast_list() argument
34 __ei_set_multicast_list(dev); ei_set_multicast_list()
38 void ei_tx_timeout(struct net_device *dev) ei_tx_timeout() argument
40 __ei_tx_timeout(dev); ei_tx_timeout()
51 void ei_poll(struct net_device *dev) ei_poll() argument
53 __ei_poll(dev); ei_poll()
76 struct net_device *dev = ____alloc_ei_netdev(size); __alloc_ei_netdev() local
77 if (dev) __alloc_ei_netdev()
78 dev->netdev_ops = &ei_netdev_ops; __alloc_ei_netdev()
79 return dev; __alloc_ei_netdev()
83 void NS8390_init(struct net_device *dev, int startp) NS8390_init() argument
85 __NS8390_init(dev, startp); NS8390_init()
H A D8390p.c13 int eip_open(struct net_device *dev) eip_open() argument
15 return __ei_open(dev); eip_open()
19 int eip_close(struct net_device *dev) eip_close() argument
21 return __ei_close(dev); eip_close()
25 netdev_tx_t eip_start_xmit(struct sk_buff *skb, struct net_device *dev) eip_start_xmit() argument
27 return __ei_start_xmit(skb, dev); eip_start_xmit()
31 struct net_device_stats *eip_get_stats(struct net_device *dev) eip_get_stats() argument
33 return __ei_get_stats(dev); eip_get_stats()
37 void eip_set_multicast_list(struct net_device *dev) eip_set_multicast_list() argument
39 __ei_set_multicast_list(dev); eip_set_multicast_list()
43 void eip_tx_timeout(struct net_device *dev) eip_tx_timeout() argument
45 __ei_tx_timeout(dev); eip_tx_timeout()
56 void eip_poll(struct net_device *dev) eip_poll() argument
58 __ei_poll(dev); eip_poll()
81 struct net_device *dev = ____alloc_ei_netdev(size); __alloc_eip_netdev() local
82 if (dev) __alloc_eip_netdev()
83 dev->netdev_ops = &eip_netdev_ops; __alloc_eip_netdev()
84 return dev; __alloc_eip_netdev()
88 void NS8390p_init(struct net_device *dev, int startp) NS8390p_init() argument
90 __NS8390_init(dev, startp); NS8390p_init()
/linux-4.4.14/drivers/input/
H A Dinput-polldev.c25 static void input_polldev_queue_work(struct input_polled_dev *dev) input_polldev_queue_work() argument
29 delay = msecs_to_jiffies(dev->poll_interval); input_polldev_queue_work()
33 queue_delayed_work(system_freezable_wq, &dev->work, delay); input_polldev_queue_work()
38 struct input_polled_dev *dev = input_polled_device_work() local
41 dev->poll(dev); input_polled_device_work()
42 input_polldev_queue_work(dev); input_polled_device_work()
47 struct input_polled_dev *dev = input_get_drvdata(input); input_open_polled_device() local
49 if (dev->open) input_open_polled_device()
50 dev->open(dev); input_open_polled_device()
53 if (dev->poll_interval > 0) { input_open_polled_device()
54 dev->poll(dev); input_open_polled_device()
55 input_polldev_queue_work(dev); input_open_polled_device()
63 struct input_polled_dev *dev = input_get_drvdata(input); input_close_polled_device() local
65 cancel_delayed_work_sync(&dev->work); input_close_polled_device()
67 if (dev->close) input_close_polled_device()
68 dev->close(dev); input_close_polled_device()
73 static ssize_t input_polldev_get_poll(struct device *dev, input_polldev_get_poll() argument
76 struct input_polled_dev *polldev = dev_get_drvdata(dev); input_polldev_get_poll()
81 static ssize_t input_polldev_set_poll(struct device *dev, input_polldev_set_poll() argument
85 struct input_polled_dev *polldev = dev_get_drvdata(dev); input_polldev_set_poll()
119 static ssize_t input_polldev_get_max(struct device *dev, input_polldev_get_max() argument
122 struct input_polled_dev *polldev = dev_get_drvdata(dev); input_polldev_get_max()
129 static ssize_t input_polldev_get_min(struct device *dev, input_polldev_get_min() argument
132 struct input_polled_dev *polldev = dev_get_drvdata(dev); input_polldev_get_min()
163 struct input_polled_dev *dev; input_allocate_polled_device() local
165 dev = kzalloc(sizeof(struct input_polled_dev), GFP_KERNEL); input_allocate_polled_device()
166 if (!dev) input_allocate_polled_device()
169 dev->input = input_allocate_device(); input_allocate_polled_device()
170 if (!dev->input) { input_allocate_polled_device()
171 kfree(dev); input_allocate_polled_device()
175 return dev; input_allocate_polled_device()
183 static int devm_input_polldev_match(struct device *dev, void *res, void *data) devm_input_polldev_match() argument
190 static void devm_input_polldev_release(struct device *dev, void *res) devm_input_polldev_release() argument
195 dev_dbg(dev, "%s: dropping reference/freeing %s\n", devm_input_polldev_release()
196 __func__, dev_name(&polldev->input->dev)); devm_input_polldev_release()
202 static void devm_input_polldev_unregister(struct device *dev, void *res) devm_input_polldev_unregister() argument
207 dev_dbg(dev, "%s: unregistering device %s\n", devm_input_polldev_unregister()
208 __func__, dev_name(&polldev->input->dev)); devm_input_polldev_unregister()
220 * @dev: device owning the polled device being created
238 struct input_polled_dev *devm_input_allocate_polled_device(struct device *dev) devm_input_allocate_polled_device() argument
254 polldev->input->dev.parent = dev; devm_input_allocate_polled_device()
258 devres_add(dev, devres); devm_input_allocate_polled_device()
266 * @dev: device to free
271 void input_free_polled_device(struct input_polled_dev *dev) input_free_polled_device() argument
273 if (dev) { input_free_polled_device()
274 if (dev->devres_managed) input_free_polled_device()
275 WARN_ON(devres_destroy(dev->input->dev.parent, input_free_polled_device()
278 dev)); input_free_polled_device()
279 input_put_device(dev->input); input_free_polled_device()
280 kfree(dev); input_free_polled_device()
287 * @dev: device to register
295 int input_register_polled_device(struct input_polled_dev *dev) input_register_polled_device() argument
298 struct input_dev *input = dev->input; input_register_polled_device()
301 if (dev->devres_managed) { input_register_polled_device()
307 devres->polldev = dev; input_register_polled_device()
310 input_set_drvdata(input, dev); input_register_polled_device()
311 INIT_DELAYED_WORK(&dev->work, input_polled_device_work); input_register_polled_device()
313 if (!dev->poll_interval) input_register_polled_device()
314 dev->poll_interval = 500; input_register_polled_device()
315 if (!dev->poll_interval_max) input_register_polled_device()
316 dev->poll_interval_max = dev->poll_interval; input_register_polled_device()
321 input->dev.groups = input_polldev_attribute_groups; input_register_polled_device()
338 if (dev->devres_managed) { input_register_polled_device()
339 dev_dbg(input->dev.parent, "%s: registering %s with devres.\n", input_register_polled_device()
340 __func__, dev_name(&input->dev)); input_register_polled_device()
341 devres_add(input->dev.parent, devres); input_register_polled_device()
350 * @dev: device to unregister
356 void input_unregister_polled_device(struct input_polled_dev *dev) input_unregister_polled_device() argument
358 if (dev->devres_managed) input_unregister_polled_device()
359 WARN_ON(devres_destroy(dev->input->dev.parent, input_unregister_polled_device()
362 dev)); input_unregister_polled_device()
364 input_unregister_device(dev->input); input_unregister_polled_device()
/linux-4.4.14/drivers/nvdimm/
H A Dpfn_devs.c24 static void nd_pfn_release(struct device *dev) nd_pfn_release() argument
26 struct nd_region *nd_region = to_nd_region(dev->parent); nd_pfn_release()
27 struct nd_pfn *nd_pfn = to_nd_pfn(dev); nd_pfn_release()
29 dev_dbg(dev, "%s\n", __func__); nd_pfn_release()
30 nd_detach_ndns(&nd_pfn->dev, &nd_pfn->ndns); nd_pfn_release()
41 bool is_nd_pfn(struct device *dev) is_nd_pfn() argument
43 return dev ? dev->type == &nd_pfn_device_type : false; is_nd_pfn()
47 struct nd_pfn *to_nd_pfn(struct device *dev) to_nd_pfn() argument
49 struct nd_pfn *nd_pfn = container_of(dev, struct nd_pfn, dev); to_nd_pfn()
51 WARN_ON(!is_nd_pfn(dev)); to_nd_pfn()
56 static ssize_t mode_show(struct device *dev, mode_show() argument
59 struct nd_pfn *nd_pfn = to_nd_pfn(dev); mode_show()
71 static ssize_t mode_store(struct device *dev, mode_store() argument
74 struct nd_pfn *nd_pfn = to_nd_pfn(dev); mode_store()
77 device_lock(dev); mode_store()
78 nvdimm_bus_lock(dev); mode_store()
79 if (dev->driver) mode_store()
97 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, mode_store()
99 nvdimm_bus_unlock(dev); mode_store()
100 device_unlock(dev); mode_store()
106 static ssize_t uuid_show(struct device *dev, uuid_show() argument
109 struct nd_pfn *nd_pfn = to_nd_pfn(dev); uuid_show()
116 static ssize_t uuid_store(struct device *dev, uuid_store() argument
119 struct nd_pfn *nd_pfn = to_nd_pfn(dev); uuid_store()
122 device_lock(dev); uuid_store()
123 rc = nd_uuid_store(dev, &nd_pfn->uuid, buf, len); uuid_store()
124 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, uuid_store()
126 device_unlock(dev); uuid_store()
132 static ssize_t namespace_show(struct device *dev, namespace_show() argument
135 struct nd_pfn *nd_pfn = to_nd_pfn(dev); namespace_show()
138 nvdimm_bus_lock(dev); namespace_show()
140 ? dev_name(&nd_pfn->ndns->dev) : ""); namespace_show()
141 nvdimm_bus_unlock(dev); namespace_show()
145 static ssize_t namespace_store(struct device *dev, namespace_store() argument
148 struct nd_pfn *nd_pfn = to_nd_pfn(dev); namespace_store()
151 device_lock(dev); namespace_store()
152 nvdimm_bus_lock(dev); namespace_store()
153 rc = nd_namespace_store(dev, &nd_pfn->ndns, buf, len); namespace_store()
154 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, namespace_store()
156 nvdimm_bus_unlock(dev); namespace_store()
157 device_unlock(dev); namespace_store()
186 struct device *dev; __nd_pfn_create() local
189 if (!is_nd_pmem(&nd_region->dev)) __nd_pfn_create()
206 dev = &nd_pfn->dev; __nd_pfn_create()
207 dev_set_name(dev, "pfn%d.%d", nd_region->id, nd_pfn->id); __nd_pfn_create()
208 dev->parent = &nd_region->dev; __nd_pfn_create()
209 dev->type = &nd_pfn_device_type; __nd_pfn_create()
210 dev->groups = nd_pfn_attribute_groups; __nd_pfn_create()
211 device_initialize(&nd_pfn->dev); __nd_pfn_create()
212 if (ndns && !__nd_attach_ndns(&nd_pfn->dev, ndns, &nd_pfn->ndns)) { __nd_pfn_create()
213 dev_dbg(&ndns->dev, "%s failed, already claimed by %s\n", __nd_pfn_create()
215 put_device(dev); __nd_pfn_create()
218 return dev; __nd_pfn_create()
223 struct device *dev = __nd_pfn_create(nd_region, NULL, PFN_MODE_NONE, nd_pfn_create() local
226 if (dev) nd_pfn_create()
227 __nd_device_register(dev); nd_pfn_create()
228 return dev; nd_pfn_create()
241 if (!is_nd_pmem(nd_pfn->dev.parent)) nd_pfn_validate()
288 nsio = to_nd_namespace_io(&ndns->dev); nd_pfn_validate()
290 dev_err(&nd_pfn->dev, nd_pfn_validate()
292 dev_name(&ndns->dev)); nd_pfn_validate()
295 dev_err(&nd_pfn->dev, "pfn array size exceeds capacity of %s\n", nd_pfn_validate()
296 dev_name(&ndns->dev)); nd_pfn_validate()
307 struct device *dev; nd_pfn_probe() local
310 struct nd_region *nd_region = to_nd_region(ndns->dev.parent); nd_pfn_probe()
315 nvdimm_bus_lock(&ndns->dev); nd_pfn_probe()
316 dev = __nd_pfn_create(nd_region, NULL, PFN_MODE_NONE, ndns); nd_pfn_probe()
317 nvdimm_bus_unlock(&ndns->dev); nd_pfn_probe()
318 if (!dev) nd_pfn_probe()
320 dev_set_drvdata(dev, drvdata); nd_pfn_probe()
322 nd_pfn = to_nd_pfn(dev); nd_pfn_probe()
327 dev_dbg(&ndns->dev, "%s: pfn: %s\n", __func__, nd_pfn_probe()
328 rc == 0 ? dev_name(dev) : "<none>"); nd_pfn_probe()
330 __nd_detach_ndns(dev, &nd_pfn->ndns); nd_pfn_probe()
331 put_device(dev); nd_pfn_probe()
333 __nd_device_register(&nd_pfn->dev); nd_pfn_probe()
H A Dclaim.c20 void __nd_detach_ndns(struct device *dev, struct nd_namespace_common **_ndns) __nd_detach_ndns() argument
24 dev_WARN_ONCE(dev, !mutex_is_locked(&ndns->dev.mutex) __nd_detach_ndns()
25 || ndns->claim != dev, __nd_detach_ndns()
29 put_device(&ndns->dev); __nd_detach_ndns()
32 void nd_detach_ndns(struct device *dev, nd_detach_ndns() argument
39 get_device(&ndns->dev); nd_detach_ndns()
40 device_lock(&ndns->dev); nd_detach_ndns()
41 __nd_detach_ndns(dev, _ndns); nd_detach_ndns()
42 device_unlock(&ndns->dev); nd_detach_ndns()
43 put_device(&ndns->dev); nd_detach_ndns()
46 bool __nd_attach_ndns(struct device *dev, struct nd_namespace_common *attach, __nd_attach_ndns() argument
51 dev_WARN_ONCE(dev, !mutex_is_locked(&attach->dev.mutex) __nd_attach_ndns()
54 attach->claim = dev; __nd_attach_ndns()
56 get_device(&attach->dev); __nd_attach_ndns()
60 bool nd_attach_ndns(struct device *dev, struct nd_namespace_common *attach, nd_attach_ndns() argument
65 device_lock(&attach->dev); nd_attach_ndns()
66 claimed = __nd_attach_ndns(dev, attach, _ndns); nd_attach_ndns()
67 device_unlock(&attach->dev); nd_attach_ndns()
71 static int namespace_match(struct device *dev, void *data) namespace_match() argument
75 return strcmp(name, dev_name(dev)) == 0; namespace_match()
78 static bool is_idle(struct device *dev, struct nd_namespace_common *ndns) is_idle() argument
80 struct nd_region *nd_region = to_nd_region(dev->parent); is_idle()
83 if (is_nd_btt(dev)) is_idle()
85 else if (is_nd_pfn(dev)) is_idle()
88 if (seed == dev || ndns || dev->driver) is_idle()
93 static void nd_detach_and_reset(struct device *dev, nd_detach_and_reset() argument
97 nd_detach_ndns(dev, _ndns); nd_detach_and_reset()
98 if (is_idle(dev, *_ndns)) { nd_detach_and_reset()
99 nd_device_unregister(dev, ND_ASYNC); nd_detach_and_reset()
100 } else if (is_nd_btt(dev)) { nd_detach_and_reset()
101 struct nd_btt *nd_btt = to_nd_btt(dev); nd_detach_and_reset()
106 } else if (is_nd_pfn(dev)) { nd_detach_and_reset()
107 struct nd_pfn *nd_pfn = to_nd_pfn(dev); nd_detach_and_reset()
115 ssize_t nd_namespace_store(struct device *dev, nd_namespace_store() argument
123 if (dev->driver) { nd_namespace_store()
124 dev_dbg(dev, "%s: -EBUSY\n", __func__); nd_namespace_store()
142 nd_detach_and_reset(dev, _ndns); nd_namespace_store()
145 dev_dbg(dev, "namespace already set to: %s\n", nd_namespace_store()
146 dev_name(&ndns->dev)); nd_namespace_store()
151 found = device_find_child(dev->parent, name, namespace_match); nd_namespace_store()
153 dev_dbg(dev, "'%s' not found under %s\n", name, nd_namespace_store()
154 dev_name(dev->parent)); nd_namespace_store()
161 dev_dbg(dev, "%s too small to host\n", name); nd_namespace_store()
166 WARN_ON_ONCE(!is_nvdimm_bus_locked(dev)); nd_namespace_store()
167 if (!nd_attach_ndns(dev, ndns, _ndns)) { nd_namespace_store()
168 dev_dbg(dev, "%s already claimed\n", nd_namespace_store()
169 dev_name(&ndns->dev)); nd_namespace_store()
174 put_device(&ndns->dev); /* from device_find_child */ nd_namespace_store()
H A Dbtt_devs.c24 static void nd_btt_release(struct device *dev) nd_btt_release() argument
26 struct nd_region *nd_region = to_nd_region(dev->parent); nd_btt_release()
27 struct nd_btt *nd_btt = to_nd_btt(dev); nd_btt_release()
29 dev_dbg(dev, "%s\n", __func__); nd_btt_release()
30 nd_detach_ndns(&nd_btt->dev, &nd_btt->ndns); nd_btt_release()
41 bool is_nd_btt(struct device *dev) is_nd_btt() argument
43 return dev->type == &nd_btt_device_type; is_nd_btt()
47 struct nd_btt *to_nd_btt(struct device *dev) to_nd_btt() argument
49 struct nd_btt *nd_btt = container_of(dev, struct nd_btt, dev); to_nd_btt()
51 WARN_ON(!is_nd_btt(dev)); to_nd_btt()
59 static ssize_t sector_size_show(struct device *dev, sector_size_show() argument
62 struct nd_btt *nd_btt = to_nd_btt(dev); sector_size_show()
67 static ssize_t sector_size_store(struct device *dev, sector_size_store() argument
70 struct nd_btt *nd_btt = to_nd_btt(dev); sector_size_store()
73 device_lock(dev); sector_size_store()
74 nvdimm_bus_lock(dev); sector_size_store()
75 rc = nd_sector_size_store(dev, buf, &nd_btt->lbasize, sector_size_store()
77 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, sector_size_store()
79 nvdimm_bus_unlock(dev); sector_size_store()
80 device_unlock(dev); sector_size_store()
86 static ssize_t uuid_show(struct device *dev, uuid_show() argument
89 struct nd_btt *nd_btt = to_nd_btt(dev); uuid_show()
96 static ssize_t uuid_store(struct device *dev, uuid_store() argument
99 struct nd_btt *nd_btt = to_nd_btt(dev); uuid_store()
102 device_lock(dev); uuid_store()
103 rc = nd_uuid_store(dev, &nd_btt->uuid, buf, len); uuid_store()
104 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, uuid_store()
106 device_unlock(dev); uuid_store()
112 static ssize_t namespace_show(struct device *dev, namespace_show() argument
115 struct nd_btt *nd_btt = to_nd_btt(dev); namespace_show()
118 nvdimm_bus_lock(dev); namespace_show()
120 ? dev_name(&nd_btt->ndns->dev) : ""); namespace_show()
121 nvdimm_bus_unlock(dev); namespace_show()
125 static ssize_t namespace_store(struct device *dev, namespace_store() argument
128 struct nd_btt *nd_btt = to_nd_btt(dev); namespace_store()
131 device_lock(dev); namespace_store()
132 nvdimm_bus_lock(dev); namespace_store()
133 rc = nd_namespace_store(dev, &nd_btt->ndns, buf, len); namespace_store()
134 dev_dbg(dev, "%s: result: %zd wrote: %s%s", __func__, namespace_store()
136 nvdimm_bus_unlock(dev); namespace_store()
137 device_unlock(dev); namespace_store()
166 struct device *dev; __nd_btt_create() local
182 dev = &nd_btt->dev; __nd_btt_create()
183 dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id); __nd_btt_create()
184 dev->parent = &nd_region->dev; __nd_btt_create()
185 dev->type = &nd_btt_device_type; __nd_btt_create()
186 dev->groups = nd_btt_attribute_groups; __nd_btt_create()
187 device_initialize(&nd_btt->dev); __nd_btt_create()
188 if (ndns && !__nd_attach_ndns(&nd_btt->dev, ndns, &nd_btt->ndns)) { __nd_btt_create()
189 dev_dbg(&ndns->dev, "%s failed, already claimed by %s\n", __nd_btt_create()
191 put_device(dev); __nd_btt_create()
194 return dev; __nd_btt_create()
199 struct device *dev = __nd_btt_create(nd_region, 0, NULL, NULL); nd_btt_create() local
201 if (dev) nd_btt_create()
202 __nd_device_register(dev); nd_btt_create()
203 return dev; nd_btt_create()
227 const u8 *parent_uuid = nd_dev_to_uuid(&nd_btt->ndns->dev); nd_btt_arena_is_valid()
245 dev_info(&nd_btt->dev, "Found arena with an error flag\n"); nd_btt_arena_is_valid()
271 __nd_device_register(&nd_btt->dev); __nd_btt_probe()
279 struct device *dev; nd_btt_probe() local
281 struct nd_region *nd_region = to_nd_region(ndns->dev.parent); nd_btt_probe()
286 nvdimm_bus_lock(&ndns->dev); nd_btt_probe()
287 dev = __nd_btt_create(nd_region, 0, NULL, ndns); nd_btt_probe()
288 nvdimm_bus_unlock(&ndns->dev); nd_btt_probe()
289 if (!dev) nd_btt_probe()
291 dev_set_drvdata(dev, drvdata); nd_btt_probe()
293 rc = __nd_btt_probe(to_nd_btt(dev), ndns, btt_sb); nd_btt_probe()
295 dev_dbg(&ndns->dev, "%s: btt: %s\n", __func__, nd_btt_probe()
296 rc == 0 ? dev_name(dev) : "<none>"); nd_btt_probe()
298 struct nd_btt *nd_btt = to_nd_btt(dev); nd_btt_probe()
300 __nd_detach_ndns(dev, &nd_btt->ndns); nd_btt_probe()
301 put_device(dev); nd_btt_probe()
/linux-4.4.14/include/trace/events/
H A Drpm.h19 TP_PROTO(struct device *dev, int flags),
21 TP_ARGS(dev, flags),
24 __string( name, dev_name(dev) )
35 __assign_str(name, dev_name(dev));
38 &dev->power.usage_count);
39 __entry->disable_depth = dev->power.disable_depth;
40 __entry->runtime_auto = dev->power.runtime_auto;
41 __entry->request_pending = dev->power.request_pending;
42 __entry->irq_safe = dev->power.irq_safe;
44 &dev->power.child_count);
60 TP_PROTO(struct device *dev, int flags),
62 TP_ARGS(dev, flags)
66 TP_PROTO(struct device *dev, int flags),
68 TP_ARGS(dev, flags)
72 TP_PROTO(struct device *dev, int flags),
74 TP_ARGS(dev, flags)
78 TP_PROTO(struct device *dev, unsigned long ip, int ret),
79 TP_ARGS(dev, ip, ret),
82 __string( name, dev_name(dev))
88 __assign_str(name, dev_name(dev));
H A Djbd2.h20 __field( dev_t, dev )
25 __entry->dev = journal->j_fs_dev->bd_dev;
29 TP_printk("dev %d,%d result %d",
30 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->result)
40 __field( dev_t, dev )
46 __entry->dev = journal->j_fs_dev->bd_dev;
51 TP_printk("dev %d,%d transaction %d sync %d",
52 MAJOR(__entry->dev), MINOR(__entry->dev),
97 __field( dev_t, dev )
104 __entry->dev = journal->j_fs_dev->bd_dev;
110 TP_printk("dev %d,%d transaction %d sync %d head %d",
111 MAJOR(__entry->dev), MINOR(__entry->dev),
121 __field( dev_t, dev )
126 __entry->dev = inode->i_sb->s_dev;
130 TP_printk("dev %d,%d ino %lu",
131 MAJOR(__entry->dev), MINOR(__entry->dev),
136 TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
139 TP_ARGS(dev, tid, type, line_no, requested_blocks),
142 __field( dev_t, dev )
150 __entry->dev = dev;
157 TP_printk("dev %d,%d tid %lu type %u line_no %u "
159 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
164 TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
168 TP_ARGS(dev, tid, type, line_no, buffer_credits, requested_blocks),
171 __field( dev_t, dev )
180 __entry->dev = dev;
188 TP_printk("dev %d,%d tid %lu type %u line_no %u "
190 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
196 TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
200 TP_ARGS(dev, tid, type, line_no, interval, sync,
204 __field( dev_t, dev )
215 __entry->dev = dev;
225 TP_printk("dev %d,%d tid %lu type %u line_no %u interval %d "
227 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
234 TP_PROTO(dev_t dev, unsigned long tid,
237 TP_ARGS(dev, tid, stats),
240 __field( dev_t, dev )
254 __entry->dev = dev;
267 TP_printk("dev %d,%d tid %lu wait %u request_delay %u running %u "
270 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
282 TP_PROTO(dev_t dev, unsigned long tid,
285 TP_ARGS(dev, tid, stats),
288 __field( dev_t, dev )
297 __entry->dev = dev;
305 TP_printk("dev %d,%d tid %lu chp_time %u forced_to_close %u "
307 MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
320 __field( dev_t, dev )
328 __entry->dev = journal->j_fs_dev->bd_dev;
335 TP_printk("dev %d,%d from %u to %u offset %lu freed %lu",
336 MAJOR(__entry->dev), MINOR(__entry->dev),
348 __field( dev_t, dev )
353 __entry->dev = journal->j_fs_dev->bd_dev;
357 TP_printk("dev %d,%d write_op %x", MAJOR(__entry->dev),
358 MINOR(__entry->dev), __entry->write_op)
363 TP_PROTO(dev_t dev, unsigned long stall_ms),
365 TP_ARGS(dev, stall_ms),
368 __field( dev_t, dev )
373 __entry->dev = dev;
377 TP_printk("dev %d,%d stall_ms %lu",
378 MAJOR(__entry->dev), MINOR(__entry->dev),
H A Diommu.h20 TP_PROTO(int group_id, struct device *dev),
22 TP_ARGS(group_id, dev),
26 __string(device, dev_name(dev))
31 __assign_str(device, dev_name(dev));
41 TP_PROTO(int group_id, struct device *dev),
43 TP_ARGS(group_id, dev)
49 TP_PROTO(int group_id, struct device *dev),
51 TP_ARGS(group_id, dev)
56 TP_PROTO(struct device *dev),
58 TP_ARGS(dev),
61 __string(device, dev_name(dev))
65 __assign_str(device, dev_name(dev));
74 TP_PROTO(struct device *dev),
76 TP_ARGS(dev)
81 TP_PROTO(struct device *dev),
83 TP_ARGS(dev)
134 TP_PROTO(struct device *dev, unsigned long iova, int flags),
136 TP_ARGS(dev, iova, flags),
139 __string(device, dev_name(dev))
140 __string(driver, dev_driver_string(dev))
146 __assign_str(device, dev_name(dev));
147 __assign_str(driver, dev_driver_string(dev));
160 TP_PROTO(struct device *dev, unsigned long iova, int flags),
162 TP_ARGS(dev, iova, flags)
/linux-4.4.14/net/l3mdev/
H A Dl3mdev.c17 * @dev: targeted interface
20 int l3mdev_master_ifindex_rcu(struct net_device *dev) l3mdev_master_ifindex_rcu() argument
24 if (!dev) l3mdev_master_ifindex_rcu()
27 if (netif_is_l3_master(dev)) { l3mdev_master_ifindex_rcu()
28 ifindex = dev->ifindex; l3mdev_master_ifindex_rcu()
29 } else if (netif_is_l3_slave(dev)) { l3mdev_master_ifindex_rcu()
32 master = netdev_master_upper_dev_get_rcu(dev); l3mdev_master_ifindex_rcu()
44 * @dev: targeted interface
47 u32 l3mdev_fib_table_rcu(const struct net_device *dev) l3mdev_fib_table_rcu() argument
51 if (!dev) l3mdev_fib_table_rcu()
54 if (netif_is_l3_master(dev)) { l3mdev_fib_table_rcu()
55 if (dev->l3mdev_ops->l3mdev_fib_table) l3mdev_fib_table_rcu()
56 tb_id = dev->l3mdev_ops->l3mdev_fib_table(dev); l3mdev_fib_table_rcu()
57 } else if (netif_is_l3_slave(dev)) { l3mdev_fib_table_rcu()
61 struct net_device *_dev = (struct net_device *) dev; l3mdev_fib_table_rcu()
76 struct net_device *dev; l3mdev_fib_table_by_index() local
84 dev = dev_get_by_index_rcu(net, ifindex); l3mdev_fib_table_by_index()
85 if (dev) l3mdev_fib_table_by_index()
86 tb_id = l3mdev_fib_table_rcu(dev); l3mdev_fib_table_by_index()
/linux-4.4.14/drivers/input/mouse/
H A Damimouse.c40 struct input_dev *dev = data; amimouse_interrupt() local
62 input_report_rel(dev, REL_X, dx); amimouse_interrupt()
63 input_report_rel(dev, REL_Y, dy); amimouse_interrupt()
65 input_report_key(dev, BTN_LEFT, ciaa.pra & 0x40); amimouse_interrupt()
66 input_report_key(dev, BTN_MIDDLE, potgor & 0x0100); amimouse_interrupt()
67 input_report_key(dev, BTN_RIGHT, potgor & 0x0400); amimouse_interrupt()
69 input_sync(dev); amimouse_interrupt()
74 static int amimouse_open(struct input_dev *dev) amimouse_open() argument
85 dev); amimouse_open()
87 dev_err(&dev->dev, "Can't allocate irq %d\n", IRQ_AMIGA_VERTB); amimouse_open()
92 static void amimouse_close(struct input_dev *dev) amimouse_close() argument
94 free_irq(IRQ_AMIGA_VERTB, dev); amimouse_close()
100 struct input_dev *dev; amimouse_probe() local
102 dev = input_allocate_device(); amimouse_probe()
103 if (!dev) amimouse_probe()
106 dev->name = pdev->name; amimouse_probe()
107 dev->phys = "amimouse/input0"; amimouse_probe()
108 dev->id.bustype = BUS_AMIGA; amimouse_probe()
109 dev->id.vendor = 0x0001; amimouse_probe()
110 dev->id.product = 0x0002; amimouse_probe()
111 dev->id.version = 0x0100; amimouse_probe()
113 dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); amimouse_probe()
114 dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); amimouse_probe()
115 dev->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT) | amimouse_probe()
117 dev->open = amimouse_open; amimouse_probe()
118 dev->close = amimouse_close; amimouse_probe()
119 dev->dev.parent = &pdev->dev; amimouse_probe()
121 err = input_register_device(dev); amimouse_probe()
123 input_free_device(dev); amimouse_probe()
127 platform_set_drvdata(pdev, dev); amimouse_probe()
134 struct input_dev *dev = platform_get_drvdata(pdev); amimouse_remove() local
136 input_unregister_device(dev); amimouse_remove()
H A Dappletouch.c215 struct input_dev *input; /* input dev */
274 static int atp_geyser_init(struct atp *dev) atp_geyser_init() argument
276 struct usb_device *udev = dev->udev; atp_geyser_init()
284 dev_err(&dev->intf->dev, "Out of memory\n"); atp_geyser_init()
299 dev_err(&dev->intf->dev, "Failed to read mode from device.\n"); atp_geyser_init()
318 dev_err(&dev->intf->dev, "Failed to request geyser raw mode\n"); atp_geyser_init()
334 struct atp *dev = container_of(work, struct atp, work); atp_reinit() local
338 atp_geyser_init(dev); atp_reinit()
340 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); atp_reinit()
342 dev_err(&dev->intf->dev, atp_reinit()
347 static int atp_calculate_abs(struct atp *dev, int offset, int nb_sensors, atp_calculate_abs() argument
353 * Use offset to point xy_sensors at the first value in dev->xy_acc atp_calculate_abs()
356 int *xy_sensors = dev->xy_acc + offset; atp_calculate_abs()
405 memset(dev->smooth, 0, 4 * sizeof(dev->smooth[0])); atp_calculate_abs()
408 dev->smooth[i + 4] = xy_sensors[i] << ATP_SCALE; atp_calculate_abs()
409 memset(&dev->smooth[nb_sensors + 4], 0, 4 * sizeof(dev->smooth[0])); atp_calculate_abs()
413 dev->smooth_tmp[0] = (dev->smooth[0] + dev->smooth[1]) / 2; atp_calculate_abs()
417 dev->smooth_tmp[i] = (dev->smooth[i - 1] + atp_calculate_abs()
418 dev->smooth[i] * 2 + atp_calculate_abs()
419 dev->smooth[i + 1]) / 4; atp_calculate_abs()
422 dev->smooth_tmp[i] = (dev->smooth[i - 1] + dev->smooth[i]) / 2; atp_calculate_abs()
424 memcpy(dev->smooth, dev->smooth_tmp, sizeof(dev->smooth)); atp_calculate_abs()
432 if ((dev->smooth[i] >> ATP_SCALE) > 0) { atp_calculate_abs()
433 pcum += dev->smooth[i] * i; atp_calculate_abs()
434 psum += dev->smooth[i]; atp_calculate_abs()
461 struct atp *dev = urb->context; atp_status_check() local
462 struct usb_interface *intf = dev->intf; atp_status_check()
469 if (!dev->overflow_warned) { atp_status_check()
470 dev_warn(&intf->dev, atp_status_check()
472 dev->info->datalen, dev->urb->actual_length); atp_status_check()
473 dev->overflow_warned = true; atp_status_check()
479 dev_dbg(&intf->dev, atp_status_check()
485 dev_dbg(&intf->dev, atp_status_check()
492 if (dev->urb->actual_length != dev->info->datalen) { atp_status_check()
495 dev->data[0], dev->urb->actual_length); atp_status_check()
502 static void atp_detect_size(struct atp *dev) atp_detect_size() argument
507 for (i = dev->info->xsensors; i < ATP_XSENSORS; i++) { atp_detect_size()
508 if (dev->xy_cur[i]) { atp_detect_size()
510 dev_info(&dev->intf->dev, atp_detect_size()
513 input_set_abs_params(dev->input, ABS_X, 0, atp_detect_size()
514 (dev->info->xsensors_17 - 1) * atp_detect_size()
515 dev->info->xfact - 1, atp_detect_size()
516 dev->info->fuzz, 0); atp_detect_size()
533 struct atp *dev = urb->context; atp_complete_geyser_1_2() local
542 if (dev->info == &geyser2_info) { atp_complete_geyser_1_2()
543 memset(dev->xy_cur, 0, sizeof(dev->xy_cur)); atp_complete_geyser_1_2()
553 dev->xy_cur[i] = dev->data[j]; atp_complete_geyser_1_2()
554 dev->xy_cur[i + 1] = dev->data[j + 1]; atp_complete_geyser_1_2()
559 dev->xy_cur[ATP_XSENSORS + i] = dev->data[j]; atp_complete_geyser_1_2()
560 dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 1]; atp_complete_geyser_1_2()
565 dev->xy_cur[i + 0] = dev->data[5 * i + 2]; atp_complete_geyser_1_2()
566 dev->xy_cur[i + 8] = dev->data[5 * i + 4]; atp_complete_geyser_1_2()
567 dev->xy_cur[i + 16] = dev->data[5 * i + 42]; atp_complete_geyser_1_2()
569 dev->xy_cur[i + 24] = dev->data[5 * i + 44]; atp_complete_geyser_1_2()
572 dev->xy_cur[ATP_XSENSORS + i] = dev->data[5 * i + 1]; atp_complete_geyser_1_2()
573 dev->xy_cur[ATP_XSENSORS + i + 8] = dev->data[5 * i + 3]; atp_complete_geyser_1_2()
577 dbg_dump("sample", dev->xy_cur); atp_complete_geyser_1_2()
579 if (!dev->valid) { atp_complete_geyser_1_2()
581 dev->valid = true; atp_complete_geyser_1_2()
582 dev->x_old = dev->y_old = -1; atp_complete_geyser_1_2()
585 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); atp_complete_geyser_1_2()
588 if (unlikely(!dev->size_detect_done)) { atp_complete_geyser_1_2()
589 atp_detect_size(dev); atp_complete_geyser_1_2()
590 dev->size_detect_done = 1; atp_complete_geyser_1_2()
597 signed char change = dev->xy_old[i] - dev->xy_cur[i]; atp_complete_geyser_1_2()
598 dev->xy_acc[i] -= change; atp_complete_geyser_1_2()
601 if (dev->xy_acc[i] < 0) atp_complete_geyser_1_2()
602 dev->xy_acc[i] = 0; atp_complete_geyser_1_2()
605 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); atp_complete_geyser_1_2()
607 dbg_dump("accumulator", dev->xy_acc); atp_complete_geyser_1_2()
609 x = atp_calculate_abs(dev, 0, ATP_XSENSORS, atp_complete_geyser_1_2()
610 dev->info->xfact, &x_z, &x_f); atp_complete_geyser_1_2()
611 y = atp_calculate_abs(dev, ATP_XSENSORS, ATP_YSENSORS, atp_complete_geyser_1_2()
612 dev->info->yfact, &y_z, &y_f); atp_complete_geyser_1_2()
613 key = dev->data[dev->info->datalen - 1] & ATP_STATUS_BUTTON; atp_complete_geyser_1_2()
617 if (x && y && fingers == dev->fingers_old) { atp_complete_geyser_1_2()
618 if (dev->x_old != -1) { atp_complete_geyser_1_2()
619 x = (dev->x_old * 7 + x) >> 3; atp_complete_geyser_1_2()
620 y = (dev->y_old * 7 + y) >> 3; atp_complete_geyser_1_2()
621 dev->x_old = x; atp_complete_geyser_1_2()
622 dev->y_old = y; atp_complete_geyser_1_2()
629 input_report_key(dev->input, BTN_TOUCH, 1); atp_complete_geyser_1_2()
630 input_report_abs(dev->input, ABS_X, x); atp_complete_geyser_1_2()
631 input_report_abs(dev->input, ABS_Y, y); atp_complete_geyser_1_2()
632 input_report_abs(dev->input, ABS_PRESSURE, atp_complete_geyser_1_2()
634 atp_report_fingers(dev->input, fingers); atp_complete_geyser_1_2()
636 dev->x_old = x; atp_complete_geyser_1_2()
637 dev->y_old = y; atp_complete_geyser_1_2()
641 dev->x_old = dev->y_old = -1; atp_complete_geyser_1_2()
642 dev->fingers_old = 0; atp_complete_geyser_1_2()
643 input_report_key(dev->input, BTN_TOUCH, 0); atp_complete_geyser_1_2()
644 input_report_abs(dev->input, ABS_PRESSURE, 0); atp_complete_geyser_1_2()
645 atp_report_fingers(dev->input, 0); atp_complete_geyser_1_2()
648 memset(dev->xy_acc, 0, sizeof(dev->xy_acc)); atp_complete_geyser_1_2()
651 if (fingers != dev->fingers_old) atp_complete_geyser_1_2()
652 dev->x_old = dev->y_old = -1; atp_complete_geyser_1_2()
653 dev->fingers_old = fingers; atp_complete_geyser_1_2()
655 input_report_key(dev->input, BTN_LEFT, key); atp_complete_geyser_1_2()
656 input_sync(dev->input); atp_complete_geyser_1_2()
659 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); atp_complete_geyser_1_2()
661 dev_err(&dev->intf->dev, atp_complete_geyser_1_2()
673 struct atp *dev = urb->context; atp_complete_geyser_3_4() local
690 dev->xy_cur[i] = dev->data[j + 1]; atp_complete_geyser_3_4()
691 dev->xy_cur[i + 1] = dev->data[j + 2]; atp_complete_geyser_3_4()
695 dev->xy_cur[ATP_XSENSORS + i] = dev->data[j + 1]; atp_complete_geyser_3_4()
696 dev->xy_cur[ATP_XSENSORS + i + 1] = dev->data[j + 2]; atp_complete_geyser_3_4()
699 dbg_dump("sample", dev->xy_cur); atp_complete_geyser_3_4()
702 if (dev->data[dev->info->datalen - 1] & ATP_STATUS_BASE_UPDATE) { atp_complete_geyser_3_4()
706 memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old)); atp_complete_geyser_3_4()
712 dev->xy_acc[i] = dev->xy_cur[i] - dev->xy_old[i]; atp_complete_geyser_3_4()
715 if (dev->xy_acc[i] > 127) atp_complete_geyser_3_4()
716 dev->xy_acc[i] -= 256; atp_complete_geyser_3_4()
718 if (dev->xy_acc[i] < -127) atp_complete_geyser_3_4()
719 dev->xy_acc[i] += 256; atp_complete_geyser_3_4()
722 if (dev->xy_acc[i] < 0) atp_complete_geyser_3_4()
723 dev->xy_acc[i] = 0; atp_complete_geyser_3_4()
726 dbg_dump("accumulator", dev->xy_acc); atp_complete_geyser_3_4()
728 x = atp_calculate_abs(dev, 0, ATP_XSENSORS, atp_complete_geyser_3_4()
729 dev->info->xfact, &x_z, &x_f); atp_complete_geyser_3_4()
730 y = atp_calculate_abs(dev, ATP_XSENSORS, ATP_YSENSORS, atp_complete_geyser_3_4()
731 dev->info->yfact, &y_z, &y_f); atp_complete_geyser_3_4()
733 key = dev->data[dev->info->datalen - 1] & ATP_STATUS_BUTTON; atp_complete_geyser_3_4()
737 if (x && y && fingers == dev->fingers_old) { atp_complete_geyser_3_4()
738 if (dev->x_old != -1) { atp_complete_geyser_3_4()
739 x = (dev->x_old * 7 + x) >> 3; atp_complete_geyser_3_4()
740 y = (dev->y_old * 7 + y) >> 3; atp_complete_geyser_3_4()
741 dev->x_old = x; atp_complete_geyser_3_4()
742 dev->y_old = y; atp_complete_geyser_3_4()
749 input_report_key(dev->input, BTN_TOUCH, 1); atp_complete_geyser_3_4()
750 input_report_abs(dev->input, ABS_X, x); atp_complete_geyser_3_4()
751 input_report_abs(dev->input, ABS_Y, y); atp_complete_geyser_3_4()
752 input_report_abs(dev->input, ABS_PRESSURE, atp_complete_geyser_3_4()
754 atp_report_fingers(dev->input, fingers); atp_complete_geyser_3_4()
756 dev->x_old = x; atp_complete_geyser_3_4()
757 dev->y_old = y; atp_complete_geyser_3_4()
761 dev->x_old = dev->y_old = -1; atp_complete_geyser_3_4()
762 dev->fingers_old = 0; atp_complete_geyser_3_4()
763 input_report_key(dev->input, BTN_TOUCH, 0); atp_complete_geyser_3_4()
764 input_report_abs(dev->input, ABS_PRESSURE, 0); atp_complete_geyser_3_4()
765 atp_report_fingers(dev->input, 0); atp_complete_geyser_3_4()
768 memset(dev->xy_acc, 0, sizeof(dev->xy_acc)); atp_complete_geyser_3_4()
771 if (fingers != dev->fingers_old) atp_complete_geyser_3_4()
772 dev->x_old = dev->y_old = -1; atp_complete_geyser_3_4()
773 dev->fingers_old = fingers; atp_complete_geyser_3_4()
775 input_report_key(dev->input, BTN_LEFT, key); atp_complete_geyser_3_4()
776 input_sync(dev->input); atp_complete_geyser_3_4()
790 dev->idlecount++; atp_complete_geyser_3_4()
791 if (dev->idlecount == 10) { atp_complete_geyser_3_4()
792 dev->x_old = dev->y_old = -1; atp_complete_geyser_3_4()
793 dev->idlecount = 0; atp_complete_geyser_3_4()
794 schedule_work(&dev->work); atp_complete_geyser_3_4()
799 dev->idlecount = 0; atp_complete_geyser_3_4()
802 retval = usb_submit_urb(dev->urb, GFP_ATOMIC); atp_complete_geyser_3_4()
804 dev_err(&dev->intf->dev, atp_complete_geyser_3_4()
811 struct atp *dev = input_get_drvdata(input); atp_open() local
813 if (usb_submit_urb(dev->urb, GFP_ATOMIC)) atp_open()
816 dev->open = 1; atp_open()
822 struct atp *dev = input_get_drvdata(input); atp_close() local
824 usb_kill_urb(dev->urb); atp_close()
825 cancel_work_sync(&dev->work); atp_close()
826 dev->open = 0; atp_close()
829 static int atp_handle_geyser(struct atp *dev) atp_handle_geyser() argument
831 if (dev->info != &fountain_info) { atp_handle_geyser()
833 if (atp_geyser_init(dev)) atp_handle_geyser()
836 dev_info(&dev->intf->dev, "Geyser mode initialized.\n"); atp_handle_geyser()
845 struct atp *dev; atp_probe() local
866 dev_err(&iface->dev, "Could not find int-in endpoint\n"); atp_probe()
871 dev = kzalloc(sizeof(struct atp), GFP_KERNEL); atp_probe()
873 if (!dev || !input_dev) { atp_probe()
874 dev_err(&iface->dev, "Out of memory\n"); atp_probe()
878 dev->udev = udev; atp_probe()
879 dev->intf = iface; atp_probe()
880 dev->input = input_dev; atp_probe()
881 dev->info = info; atp_probe()
882 dev->overflow_warned = false; atp_probe()
884 dev->urb = usb_alloc_urb(0, GFP_KERNEL); atp_probe()
885 if (!dev->urb) atp_probe()
888 dev->data = usb_alloc_coherent(dev->udev, dev->info->datalen, GFP_KERNEL, atp_probe()
889 &dev->urb->transfer_dma); atp_probe()
890 if (!dev->data) atp_probe()
893 usb_fill_int_urb(dev->urb, udev, atp_probe()
895 dev->data, dev->info->datalen, atp_probe()
896 dev->info->callback, dev, 1); atp_probe()
898 error = atp_handle_geyser(dev); atp_probe()
902 usb_make_path(udev, dev->phys, sizeof(dev->phys)); atp_probe()
903 strlcat(dev->phys, "/input0", sizeof(dev->phys)); atp_probe()
906 input_dev->phys = dev->phys; atp_probe()
907 usb_to_input_id(dev->udev, &input_dev->id); atp_probe()
908 input_dev->dev.parent = &iface->dev; atp_probe()
910 input_set_drvdata(input_dev, dev); atp_probe()
918 (dev->info->xsensors - 1) * dev->info->xfact - 1, atp_probe()
919 dev->info->fuzz, 0); atp_probe()
921 (dev->info->ysensors - 1) * dev->info->yfact - 1, atp_probe()
922 dev->info->fuzz, 0); atp_probe()
932 error = input_register_device(dev->input); atp_probe()
937 usb_set_intfdata(iface, dev); atp_probe()
939 INIT_WORK(&dev->work, atp_reinit); atp_probe()
944 usb_free_coherent(dev->udev, dev->info->datalen, atp_probe()
945 dev->data, dev->urb->transfer_dma); atp_probe()
947 usb_free_urb(dev->urb); atp_probe()
950 kfree(dev); atp_probe()
957 struct atp *dev = usb_get_intfdata(iface); atp_disconnect() local
960 if (dev) { atp_disconnect()
961 usb_kill_urb(dev->urb); atp_disconnect()
962 input_unregister_device(dev->input); atp_disconnect()
963 usb_free_coherent(dev->udev, dev->info->datalen, atp_disconnect()
964 dev->data, dev->urb->transfer_dma); atp_disconnect()
965 usb_free_urb(dev->urb); atp_disconnect()
966 kfree(dev); atp_disconnect()
968 dev_info(&iface->dev, "input: appletouch disconnected\n"); atp_disconnect()
971 static int atp_recover(struct atp *dev) atp_recover() argument
975 error = atp_handle_geyser(dev); atp_recover()
979 if (dev->open && usb_submit_urb(dev->urb, GFP_ATOMIC)) atp_recover()
987 struct atp *dev = usb_get_intfdata(iface); atp_suspend() local
989 usb_kill_urb(dev->urb); atp_suspend()
995 struct atp *dev = usb_get_intfdata(iface); atp_resume() local
997 if (dev->open && usb_submit_urb(dev->urb, GFP_ATOMIC)) atp_resume()
1005 struct atp *dev = usb_get_intfdata(iface); atp_reset_resume() local
1007 return atp_recover(dev); atp_reset_resume()
/linux-4.4.14/arch/sh/drivers/dma/
H A Ddma-sysfs.c26 static ssize_t dma_show_devices(struct device *dev, dma_show_devices() argument
61 static ssize_t dma_show_dev_id(struct device *dev, dma_show_dev_id() argument
64 struct dma_channel *channel = to_dma_channel(dev); dma_show_dev_id()
68 static ssize_t dma_store_dev_id(struct device *dev, dma_store_dev_id() argument
72 struct dma_channel *channel = to_dma_channel(dev); dma_store_dev_id()
79 static ssize_t dma_store_config(struct device *dev, dma_store_config() argument
83 struct dma_channel *channel = to_dma_channel(dev); dma_store_config()
94 static ssize_t dma_show_mode(struct device *dev, dma_show_mode() argument
97 struct dma_channel *channel = to_dma_channel(dev); dma_show_mode()
101 static ssize_t dma_store_mode(struct device *dev, dma_store_mode() argument
105 struct dma_channel *channel = to_dma_channel(dev); dma_store_mode()
113 static ssize_t dma_show_##field(struct device *dev, \
116 struct dma_channel *channel = to_dma_channel(dev); \
126 struct device *dev = &chan->dev; dma_create_sysfs_files() local
130 dev->id = chan->vchan; dma_create_sysfs_files()
131 dev->bus = &dma_subsys; dma_create_sysfs_files()
133 ret = device_register(dev); dma_create_sysfs_files()
137 ret |= device_create_file(dev, &dev_attr_dev_id); dma_create_sysfs_files()
138 ret |= device_create_file(dev, &dev_attr_count); dma_create_sysfs_files()
139 ret |= device_create_file(dev, &dev_attr_mode); dma_create_sysfs_files()
140 ret |= device_create_file(dev, &dev_attr_flags); dma_create_sysfs_files()
141 ret |= device_create_file(dev, &dev_attr_config); dma_create_sysfs_files()
144 dev_err(&info->pdev->dev, "Failed creating attrs\n"); dma_create_sysfs_files()
149 return sysfs_create_link(&info->pdev->dev.kobj, &dev->kobj, name); dma_create_sysfs_files()
154 struct device *dev = &chan->dev; dma_remove_sysfs_files() local
157 device_remove_file(dev, &dev_attr_dev_id); dma_remove_sysfs_files()
158 device_remove_file(dev, &dev_attr_count); dma_remove_sysfs_files()
159 device_remove_file(dev, &dev_attr_mode); dma_remove_sysfs_files()
160 device_remove_file(dev, &dev_attr_flags); dma_remove_sysfs_files()
161 device_remove_file(dev, &dev_attr_config); dma_remove_sysfs_files()
164 sysfs_remove_link(&info->pdev->dev.kobj, name); dma_remove_sysfs_files()
166 device_unregister(dev); dma_remove_sysfs_files()
/linux-4.4.14/drivers/media/usb/msi2500/
H A Dmsi2500.c122 struct device *dev; member in struct:msi2500_dev
160 struct msi2500_dev *dev) msi2500_get_next_fill_buf()
165 spin_lock_irqsave(&dev->queued_bufs_lock, flags); msi2500_get_next_fill_buf()
166 if (list_empty(&dev->queued_bufs)) msi2500_get_next_fill_buf()
169 buf = list_entry(dev->queued_bufs.next, struct msi2500_frame_buf, list); msi2500_get_next_fill_buf()
172 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); msi2500_get_next_fill_buf()
258 static int msi2500_convert_stream(struct msi2500_dev *dev, u8 *dst, u8 *src, msi2500_convert_stream() argument
270 if (i == 0 && dev->next_sample != sample[0]) { msi2500_convert_stream()
271 dev_dbg_ratelimited(dev->dev, msi2500_convert_stream()
273 sample[0] - dev->next_sample, msi2500_convert_stream()
274 src_len, dev->next_sample, msi2500_convert_stream()
282 dev_dbg_ratelimited(dev->dev, "%*ph\n", 12, &src[4]); msi2500_convert_stream()
286 switch (dev->pixelformat) { msi2500_convert_stream()
298 dev->next_sample = sample[i] + 504; msi2500_convert_stream()
320 dev->next_sample = sample[i] + 252; msi2500_convert_stream()
325 dev_dbg_ratelimited(dev->dev, "%*ph\n", 24, &src[1000]); msi2500_convert_stream()
330 dev->next_sample = sample[i] + 384; msi2500_convert_stream()
337 dev->next_sample = sample[i] + 504; msi2500_convert_stream()
344 dev->next_sample = sample[i] + 336; msi2500_convert_stream()
351 dev->next_sample = sample[i] + 252; msi2500_convert_stream()
359 if (unlikely(time_is_before_jiffies(dev->jiffies_next))) { msi2500_convert_stream()
362 dev->jiffies_next + msecs_to_jiffies(MSECS)); msi2500_convert_stream()
363 unsigned int samples = dev->next_sample - dev->sample; msi2500_convert_stream()
365 dev->jiffies_next = jiffies + msecs_to_jiffies(MSECS); msi2500_convert_stream()
366 dev->sample = dev->next_sample; msi2500_convert_stream()
367 dev_dbg(dev->dev, "size=%u samples=%u msecs=%u sample rate=%lu\n", msi2500_convert_stream()
381 struct msi2500_dev *dev = (struct msi2500_dev *)urb->context; msi2500_isoc_handler() local
389 dev_dbg(dev->dev, "URB (%p) unlinked %ssynchronuously\n", msi2500_isoc_handler()
395 dev_dbg(dev->dev, "called with status %d\n", urb->status); msi2500_isoc_handler()
397 if (++dev->isoc_errors > MAX_ISOC_ERRORS) msi2500_isoc_handler()
398 dev_dbg(dev->dev, "Too many ISOC errors, bailing out\n"); msi2500_isoc_handler()
402 dev->isoc_errors = 0; msi2500_isoc_handler()
412 dev_dbg_ratelimited(dev->dev, msi2500_isoc_handler()
426 fbuf = msi2500_get_next_fill_buf(dev); msi2500_isoc_handler()
428 dev->vb_full++; msi2500_isoc_handler()
429 dev_dbg_ratelimited(dev->dev, msi2500_isoc_handler()
431 dev->vb_full); msi2500_isoc_handler()
437 flen = msi2500_convert_stream(dev, ptr, iso_buf, flen); msi2500_isoc_handler()
445 dev_dbg(dev->dev, "Error (%d) re-submitting urb\n", i); msi2500_isoc_handler()
448 static void msi2500_iso_stop(struct msi2500_dev *dev) msi2500_iso_stop() argument
452 dev_dbg(dev->dev, "\n"); msi2500_iso_stop()
456 if (dev->urbs[i]) { msi2500_iso_stop()
457 dev_dbg(dev->dev, "Unlinking URB %p\n", dev->urbs[i]); msi2500_iso_stop()
458 usb_kill_urb(dev->urbs[i]); msi2500_iso_stop()
463 static void msi2500_iso_free(struct msi2500_dev *dev) msi2500_iso_free() argument
467 dev_dbg(dev->dev, "\n"); msi2500_iso_free()
471 if (dev->urbs[i]) { msi2500_iso_free()
472 dev_dbg(dev->dev, "Freeing URB\n"); msi2500_iso_free()
473 if (dev->urbs[i]->transfer_buffer) { msi2500_iso_free()
474 usb_free_coherent(dev->udev, msi2500_iso_free()
475 dev->urbs[i]->transfer_buffer_length, msi2500_iso_free()
476 dev->urbs[i]->transfer_buffer, msi2500_iso_free()
477 dev->urbs[i]->transfer_dma); msi2500_iso_free()
479 usb_free_urb(dev->urbs[i]); msi2500_iso_free()
480 dev->urbs[i] = NULL; msi2500_iso_free()
486 static void msi2500_isoc_cleanup(struct msi2500_dev *dev) msi2500_isoc_cleanup() argument
488 dev_dbg(dev->dev, "\n"); msi2500_isoc_cleanup()
490 msi2500_iso_stop(dev); msi2500_isoc_cleanup()
491 msi2500_iso_free(dev); msi2500_isoc_cleanup()
495 static int msi2500_isoc_init(struct msi2500_dev *dev) msi2500_isoc_init() argument
500 dev_dbg(dev->dev, "\n"); msi2500_isoc_init()
502 dev->isoc_errors = 0; msi2500_isoc_init()
504 ret = usb_set_interface(dev->udev, 0, 1); msi2500_isoc_init()
512 dev_err(dev->dev, "Failed to allocate urb %d\n", i); msi2500_isoc_init()
513 msi2500_isoc_cleanup(dev); msi2500_isoc_init()
516 dev->urbs[i] = urb; msi2500_isoc_init()
517 dev_dbg(dev->dev, "Allocated URB at 0x%p\n", urb); msi2500_isoc_init()
520 urb->dev = dev->udev; msi2500_isoc_init()
521 urb->pipe = usb_rcvisocpipe(dev->udev, 0x81); msi2500_isoc_init()
523 urb->transfer_buffer = usb_alloc_coherent(dev->udev, msi2500_isoc_init()
527 dev_err(dev->dev, msi2500_isoc_init()
529 msi2500_isoc_cleanup(dev); msi2500_isoc_init()
534 urb->context = dev; msi2500_isoc_init()
545 ret = usb_submit_urb(dev->urbs[i], GFP_KERNEL); msi2500_isoc_init()
547 dev_err(dev->dev, msi2500_isoc_init()
550 msi2500_isoc_cleanup(dev); msi2500_isoc_init()
553 dev_dbg(dev->dev, "URB 0x%p submitted.\n", dev->urbs[i]); msi2500_isoc_init()
561 static void msi2500_cleanup_queued_bufs(struct msi2500_dev *dev) msi2500_cleanup_queued_bufs() argument
565 dev_dbg(dev->dev, "\n"); msi2500_cleanup_queued_bufs()
567 spin_lock_irqsave(&dev->queued_bufs_lock, flags); msi2500_cleanup_queued_bufs()
568 while (!list_empty(&dev->queued_bufs)) { msi2500_cleanup_queued_bufs()
571 buf = list_entry(dev->queued_bufs.next, msi2500_cleanup_queued_bufs()
576 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); msi2500_cleanup_queued_bufs()
583 struct msi2500_dev *dev = msi2500_disconnect() local
586 dev_dbg(dev->dev, "\n"); msi2500_disconnect()
588 mutex_lock(&dev->vb_queue_lock); msi2500_disconnect()
589 mutex_lock(&dev->v4l2_lock); msi2500_disconnect()
591 dev->udev = NULL; msi2500_disconnect()
592 v4l2_device_disconnect(&dev->v4l2_dev); msi2500_disconnect()
593 video_unregister_device(&dev->vdev); msi2500_disconnect()
594 spi_unregister_master(dev->master); msi2500_disconnect()
595 mutex_unlock(&dev->v4l2_lock); msi2500_disconnect()
596 mutex_unlock(&dev->vb_queue_lock); msi2500_disconnect()
598 v4l2_device_put(&dev->v4l2_dev); msi2500_disconnect()
604 struct msi2500_dev *dev = video_drvdata(file); msi2500_querycap() local
606 dev_dbg(dev->dev, "\n"); msi2500_querycap()
609 strlcpy(cap->card, dev->vdev.name, sizeof(cap->card)); msi2500_querycap()
610 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); msi2500_querycap()
624 struct msi2500_dev *dev = vb2_get_drv_priv(vq); msi2500_queue_setup() local
626 dev_dbg(dev->dev, "nbuffers=%d\n", *nbuffers); msi2500_queue_setup()
631 sizes[0] = PAGE_ALIGN(dev->buffersize); msi2500_queue_setup()
632 dev_dbg(dev->dev, "nbuffers=%d sizes[0]=%d\n", *nbuffers, sizes[0]); msi2500_queue_setup()
639 struct msi2500_dev *dev = vb2_get_drv_priv(vb->vb2_queue); msi2500_buf_queue() local
646 if (unlikely(!dev->udev)) { msi2500_buf_queue()
651 spin_lock_irqsave(&dev->queued_bufs_lock, flags); msi2500_buf_queue()
652 list_add_tail(&buf->list, &dev->queued_bufs); msi2500_buf_queue()
653 spin_unlock_irqrestore(&dev->queued_bufs_lock, flags); msi2500_buf_queue()
672 static int msi2500_ctrl_msg(struct msi2500_dev *dev, u8 cmd, u32 data) msi2500_ctrl_msg() argument
680 msi2500_dbg_usb_control_msg(dev->dev, request, requesttype, msi2500_ctrl_msg()
682 ret = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), request, msi2500_ctrl_msg()
685 dev_err(dev->dev, "failed %d, cmd %02x, data %04x\n", msi2500_ctrl_msg()
691 static int msi2500_set_usb_adc(struct msi2500_dev *dev) msi2500_set_usb_adc() argument
699 f_sr = dev->f_adc; msi2500_set_usb_adc()
702 bandwidth_auto = v4l2_ctrl_find(&dev->hdl, msi2500_set_usb_adc()
705 bandwidth = v4l2_ctrl_find(&dev->hdl, msi2500_set_usb_adc()
707 v4l2_ctrl_s_ctrl(bandwidth, dev->f_adc); msi2500_set_usb_adc()
711 switch (dev->pixelformat) { msi2500_set_usb_adc()
796 dev_dbg(dev->dev, "div_out=%u f_vco=%u\n", div_out, f_vco); msi2500_set_usb_adc()
810 dev_dbg(dev->dev, msi2500_set_usb_adc()
814 ret = msi2500_ctrl_msg(dev, CMD_WREG, 0x00608008); msi2500_set_usb_adc()
818 ret = msi2500_ctrl_msg(dev, CMD_WREG, 0x00000c05); msi2500_set_usb_adc()
822 ret = msi2500_ctrl_msg(dev, CMD_WREG, 0x00020000); msi2500_set_usb_adc()
826 ret = msi2500_ctrl_msg(dev, CMD_WREG, 0x00480102); msi2500_set_usb_adc()
830 ret = msi2500_ctrl_msg(dev, CMD_WREG, 0x00f38008); msi2500_set_usb_adc()
834 ret = msi2500_ctrl_msg(dev, CMD_WREG, reg7); msi2500_set_usb_adc()
838 ret = msi2500_ctrl_msg(dev, CMD_WREG, reg4); msi2500_set_usb_adc()
842 ret = msi2500_ctrl_msg(dev, CMD_WREG, reg3); msi2500_set_usb_adc()
851 struct msi2500_dev *dev = vb2_get_drv_priv(vq); msi2500_start_streaming() local
854 dev_dbg(dev->dev, "\n"); msi2500_start_streaming()
856 if (!dev->udev) msi2500_start_streaming()
859 if (mutex_lock_interruptible(&dev->v4l2_lock)) msi2500_start_streaming()
863 v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 1); msi2500_start_streaming()
865 ret = msi2500_set_usb_adc(dev); msi2500_start_streaming()
867 ret = msi2500_isoc_init(dev); msi2500_start_streaming()
869 msi2500_cleanup_queued_bufs(dev); msi2500_start_streaming()
871 ret = msi2500_ctrl_msg(dev, CMD_START_STREAMING, 0); msi2500_start_streaming()
873 mutex_unlock(&dev->v4l2_lock); msi2500_start_streaming()
880 struct msi2500_dev *dev = vb2_get_drv_priv(vq); msi2500_stop_streaming() local
882 dev_dbg(dev->dev, "\n"); msi2500_stop_streaming()
884 mutex_lock(&dev->v4l2_lock); msi2500_stop_streaming()
886 if (dev->udev) msi2500_stop_streaming()
887 msi2500_isoc_cleanup(dev); msi2500_stop_streaming()
889 msi2500_cleanup_queued_bufs(dev); msi2500_stop_streaming()
893 if (!msi2500_ctrl_msg(dev, CMD_STOP_STREAMING, 0)) { msi2500_stop_streaming()
895 msi2500_ctrl_msg(dev, CMD_WREG, 0x01000003); msi2500_stop_streaming()
899 v4l2_subdev_call(dev->v4l2_subdev, core, s_power, 0); msi2500_stop_streaming()
901 mutex_unlock(&dev->v4l2_lock); msi2500_stop_streaming()
916 struct msi2500_dev *dev = video_drvdata(file); msi2500_enum_fmt_sdr_cap() local
918 dev_dbg(dev->dev, "index=%d\n", f->index); msi2500_enum_fmt_sdr_cap()
920 if (f->index >= dev->num_formats) msi2500_enum_fmt_sdr_cap()
932 struct msi2500_dev *dev = video_drvdata(file); msi2500_g_fmt_sdr_cap() local
934 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", msi2500_g_fmt_sdr_cap()
935 (char *)&dev->pixelformat); msi2500_g_fmt_sdr_cap()
937 f->fmt.sdr.pixelformat = dev->pixelformat; msi2500_g_fmt_sdr_cap()
938 f->fmt.sdr.buffersize = dev->buffersize; msi2500_g_fmt_sdr_cap()
947 struct msi2500_dev *dev = video_drvdata(file); msi2500_s_fmt_sdr_cap() local
948 struct vb2_queue *q = &dev->vb_queue; msi2500_s_fmt_sdr_cap()
951 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", msi2500_s_fmt_sdr_cap()
958 for (i = 0; i < dev->num_formats; i++) { msi2500_s_fmt_sdr_cap()
960 dev->pixelformat = formats[i].pixelformat; msi2500_s_fmt_sdr_cap()
961 dev->buffersize = formats[i].buffersize; msi2500_s_fmt_sdr_cap()
967 dev->pixelformat = formats[0].pixelformat; msi2500_s_fmt_sdr_cap()
968 dev->buffersize = formats[0].buffersize; msi2500_s_fmt_sdr_cap()
978 struct msi2500_dev *dev = video_drvdata(file); msi2500_try_fmt_sdr_cap() local
981 dev_dbg(dev->dev, "pixelformat fourcc %4.4s\n", msi2500_try_fmt_sdr_cap()
985 for (i = 0; i < dev->num_formats; i++) { msi2500_try_fmt_sdr_cap()
1001 struct msi2500_dev *dev = video_drvdata(file); msi2500_s_tuner() local
1004 dev_dbg(dev->dev, "index=%d\n", v->index); msi2500_s_tuner()
1009 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, s_tuner, v); msi2500_s_tuner()
1018 struct msi2500_dev *dev = video_drvdata(file); msi2500_g_tuner() local
1021 dev_dbg(dev->dev, "index=%d\n", v->index); msi2500_g_tuner()
1031 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, g_tuner, v); msi2500_g_tuner()
1042 struct msi2500_dev *dev = video_drvdata(file); msi2500_g_frequency() local
1045 dev_dbg(dev->dev, "tuner=%d type=%d\n", f->tuner, f->type); msi2500_g_frequency()
1048 f->frequency = dev->f_adc; msi2500_g_frequency()
1052 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, g_frequency, f); msi2500_g_frequency()
1063 struct msi2500_dev *dev = video_drvdata(file); msi2500_s_frequency() local
1066 dev_dbg(dev->dev, "tuner=%d type=%d frequency=%u\n", msi2500_s_frequency()
1070 dev->f_adc = clamp_t(unsigned int, f->frequency, msi2500_s_frequency()
1073 dev_dbg(dev->dev, "ADC frequency=%u Hz\n", dev->f_adc); msi2500_s_frequency()
1074 ret = msi2500_set_usb_adc(dev); msi2500_s_frequency()
1076 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, s_frequency, f); msi2500_s_frequency()
1087 struct msi2500_dev *dev = video_drvdata(file); msi2500_enum_freq_bands() local
1090 dev_dbg(dev->dev, "tuner=%d type=%d index=%d\n", msi2500_enum_freq_bands()
1101 ret = v4l2_subdev_call(dev->v4l2_subdev, tuner, msi2500_enum_freq_bands()
1159 struct msi2500_dev *dev = container_of(v, struct msi2500_dev, v4l2_dev); msi2500_video_release() local
1161 v4l2_ctrl_handler_free(&dev->hdl); msi2500_video_release()
1162 v4l2_device_unregister(&dev->v4l2_dev); msi2500_video_release()
1163 kfree(dev); msi2500_video_release()
1169 struct msi2500_dev *dev = spi_master_get_devdata(master); msi2500_transfer_one_message() local
1175 dev_dbg(dev->dev, "msg=%*ph\n", t->len, t->tx_buf); msi2500_transfer_one_message()
1180 ret = msi2500_ctrl_msg(dev, CMD_WREG, data); msi2500_transfer_one_message()
1191 struct msi2500_dev *dev; msi2500_probe() local
1202 dev = kzalloc(sizeof(*dev), GFP_KERNEL); msi2500_probe()
1203 if (!dev) { msi2500_probe()
1208 mutex_init(&dev->v4l2_lock); msi2500_probe()
1209 mutex_init(&dev->vb_queue_lock); msi2500_probe()
1210 spin_lock_init(&dev->queued_bufs_lock); msi2500_probe()
1211 INIT_LIST_HEAD(&dev->queued_bufs); msi2500_probe()
1212 dev->dev = &intf->dev; msi2500_probe()
1213 dev->udev = interface_to_usbdev(intf); msi2500_probe()
1214 dev->f_adc = bands[0].rangelow; msi2500_probe()
1215 dev->pixelformat = formats[0].pixelformat; msi2500_probe()
1216 dev->buffersize = formats[0].buffersize; msi2500_probe()
1217 dev->num_formats = NUM_FORMATS; msi2500_probe()
1219 dev->num_formats -= 2; msi2500_probe()
1222 dev->vb_queue.type = V4L2_BUF_TYPE_SDR_CAPTURE; msi2500_probe()
1223 dev->vb_queue.io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ; msi2500_probe()
1224 dev->vb_queue.drv_priv = dev; msi2500_probe()
1225 dev->vb_queue.buf_struct_size = sizeof(struct msi2500_frame_buf); msi2500_probe()
1226 dev->vb_queue.ops = &msi2500_vb2_ops; msi2500_probe()
1227 dev->vb_queue.mem_ops = &vb2_vmalloc_memops; msi2500_probe()
1228 dev->vb_queue.timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; msi2500_probe()
1229 ret = vb2_queue_init(&dev->vb_queue); msi2500_probe()
1231 dev_err(dev->dev, "Could not initialize vb2 queue\n"); msi2500_probe()
1236 dev->vdev = msi2500_template; msi2500_probe()
1237 dev->vdev.queue = &dev->vb_queue; msi2500_probe()
1238 dev->vdev.queue->lock = &dev->vb_queue_lock; msi2500_probe()
1239 video_set_drvdata(&dev->vdev, dev); msi2500_probe()
1242 dev->v4l2_dev.release = msi2500_video_release; msi2500_probe()
1243 ret = v4l2_device_register(&intf->dev, &dev->v4l2_dev); msi2500_probe()
1245 dev_err(dev->dev, "Failed to register v4l2-device (%d)\n", ret); msi2500_probe()
1250 master = spi_alloc_master(dev->dev, 0); msi2500_probe()
1256 dev->master = master; msi2500_probe()
1260 spi_master_set_devdata(master, dev); msi2500_probe()
1268 sd = v4l2_spi_new_subdev(&dev->v4l2_dev, master, &board_info); msi2500_probe()
1269 dev->v4l2_subdev = sd; msi2500_probe()
1271 dev_err(dev->dev, "cannot get v4l2 subdevice\n"); msi2500_probe()
1277 v4l2_ctrl_handler_init(&dev->hdl, 0); msi2500_probe()
1278 if (dev->hdl.error) { msi2500_probe()
1279 ret = dev->hdl.error; msi2500_probe()
1280 dev_err(dev->dev, "Could not initialize controls\n"); msi2500_probe()
1285 v4l2_ctrl_add_handler(&dev->hdl, sd->ctrl_handler, NULL); msi2500_probe()
1287 dev->v4l2_dev.ctrl_handler = &dev->hdl; msi2500_probe()
1288 dev->vdev.v4l2_dev = &dev->v4l2_dev; msi2500_probe()
1289 dev->vdev.lock = &dev->v4l2_lock; msi2500_probe()
1291 ret = video_register_device(&dev->vdev, VFL_TYPE_SDR, -1); msi2500_probe()
1293 dev_err(dev->dev, msi2500_probe()
1297 dev_info(dev->dev, "Registered as %s\n", msi2500_probe()
1298 video_device_node_name(&dev->vdev)); msi2500_probe()
1299 dev_notice(dev->dev, msi2500_probe()
1303 v4l2_ctrl_handler_free(&dev->hdl); msi2500_probe()
1305 spi_unregister_master(dev->master); msi2500_probe()
1307 v4l2_device_unregister(&dev->v4l2_dev); msi2500_probe()
1309 kfree(dev); msi2500_probe()
159 msi2500_get_next_fill_buf( struct msi2500_dev *dev) msi2500_get_next_fill_buf() argument
/linux-4.4.14/drivers/media/usb/tm6000/
H A Dtm6000-core.c35 int tm6000_read_write_usb(struct tm6000_core *dev, u8 req_type, u8 req, tm6000_read_write_usb() argument
49 mutex_lock(&dev->usb_lock); tm6000_read_write_usb()
52 pipe = usb_rcvctrlpipe(dev->udev, 0); tm6000_read_write_usb()
54 pipe = usb_sndctrlpipe(dev->udev, 0); tm6000_read_write_usb()
59 printk(KERN_DEBUG "(dev %p, pipe %08x): ", dev->udev, pipe); tm6000_read_write_usb()
74 ret = usb_control_msg(dev->udev, pipe, req, req_type, value, index, tm6000_read_write_usb()
96 if (dev->quirks & TM6000_QUIRK_NO_USB_DELAY) tm6000_read_write_usb()
110 mutex_unlock(&dev->usb_lock); tm6000_read_write_usb()
114 int tm6000_set_reg(struct tm6000_core *dev, u8 req, u16 value, u16 index) tm6000_set_reg() argument
117 tm6000_read_write_usb(dev, USB_DIR_OUT | USB_TYPE_VENDOR, tm6000_set_reg()
122 int tm6000_get_reg(struct tm6000_core *dev, u8 req, u16 value, u16 index) tm6000_get_reg() argument
127 rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR, req, tm6000_get_reg()
137 int tm6000_set_reg_mask(struct tm6000_core *dev, u8 req, u16 value, tm6000_set_reg_mask() argument
144 rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR, req, tm6000_set_reg_mask()
155 return tm6000_read_write_usb(dev, USB_DIR_OUT | USB_TYPE_VENDOR, tm6000_set_reg_mask()
160 int tm6000_get_reg16(struct tm6000_core *dev, u8 req, u16 value, u16 index) tm6000_get_reg16() argument
165 rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR, req, tm6000_get_reg16()
174 int tm6000_get_reg32(struct tm6000_core *dev, u8 req, u16 value, u16 index) tm6000_get_reg32() argument
179 rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR, req, tm6000_get_reg32()
188 int tm6000_i2c_reset(struct tm6000_core *dev, u16 tsleep) tm6000_i2c_reset() argument
192 rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_CLK, 0); tm6000_i2c_reset()
198 rc = tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_CLK, 1); tm6000_i2c_reset()
204 void tm6000_set_fourcc_format(struct tm6000_core *dev) tm6000_set_fourcc_format() argument
206 if (dev->dev_type == TM6010) { tm6000_set_fourcc_format()
209 val = tm6000_get_reg(dev, TM6010_REQ07_RCC_ACTIVE_IF, 0) & 0xfc; tm6000_set_fourcc_format()
210 if (dev->fourcc == V4L2_PIX_FMT_UYVY) tm6000_set_fourcc_format()
211 tm6000_set_reg(dev, TM6010_REQ07_RCC_ACTIVE_IF, val); tm6000_set_fourcc_format()
213 tm6000_set_reg(dev, TM6010_REQ07_RCC_ACTIVE_IF, val | 1); tm6000_set_fourcc_format()
215 if (dev->fourcc == V4L2_PIX_FMT_UYVY) tm6000_set_fourcc_format()
216 tm6000_set_reg(dev, TM6010_REQ07_RC1_TRESHOLD, 0xd0); tm6000_set_fourcc_format()
218 tm6000_set_reg(dev, TM6010_REQ07_RC1_TRESHOLD, 0x90); tm6000_set_fourcc_format()
222 static void tm6000_set_vbi(struct tm6000_core *dev) tm6000_set_vbi() argument
229 * if (dev->norm & V4L2_STD_525_60) tm6000_set_vbi()
232 if (dev->dev_type == TM6010) { tm6000_set_vbi()
233 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); tm6000_set_vbi()
234 tm6000_set_reg(dev, TM6010_REQ07_R41_TELETEXT_VBI_CODE1, 0x27); tm6000_set_vbi()
235 tm6000_set_reg(dev, TM6010_REQ07_R42_VBI_DATA_HIGH_LEVEL, 0x55); tm6000_set_vbi()
236 tm6000_set_reg(dev, TM6010_REQ07_R43_VBI_DATA_TYPE_LINE7, 0x66); tm6000_set_vbi()
237 tm6000_set_reg(dev, TM6010_REQ07_R44_VBI_DATA_TYPE_LINE8, 0x66); tm6000_set_vbi()
238 tm6000_set_reg(dev, TM6010_REQ07_R45_VBI_DATA_TYPE_LINE9, 0x66); tm6000_set_vbi()
239 tm6000_set_reg(dev, tm6000_set_vbi()
241 tm6000_set_reg(dev, tm6000_set_vbi()
243 tm6000_set_reg(dev, tm6000_set_vbi()
245 tm6000_set_reg(dev, tm6000_set_vbi()
247 tm6000_set_reg(dev, tm6000_set_vbi()
249 tm6000_set_reg(dev, tm6000_set_vbi()
251 tm6000_set_reg(dev, tm6000_set_vbi()
253 tm6000_set_reg(dev, tm6000_set_vbi()
255 tm6000_set_reg(dev, tm6000_set_vbi()
257 tm6000_set_reg(dev, tm6000_set_vbi()
259 tm6000_set_reg(dev, tm6000_set_vbi()
261 tm6000_set_reg(dev, tm6000_set_vbi()
263 tm6000_set_reg(dev, tm6000_set_vbi()
265 tm6000_set_reg(dev, tm6000_set_vbi()
267 tm6000_set_reg(dev, tm6000_set_vbi()
269 tm6000_set_reg(dev, tm6000_set_vbi()
271 tm6000_set_reg(dev, tm6000_set_vbi()
273 tm6000_set_reg(dev, tm6000_set_vbi()
275 tm6000_set_reg(dev, TM6010_REQ07_R58_VBI_CAPTION_DTO1, 0x35); tm6000_set_vbi()
276 tm6000_set_reg(dev, TM6010_REQ07_R59_VBI_CAPTION_DTO0, 0xa0); tm6000_set_vbi()
277 tm6000_set_reg(dev, TM6010_REQ07_R5A_VBI_TELETEXT_DTO1, 0x11); tm6000_set_vbi()
278 tm6000_set_reg(dev, TM6010_REQ07_R5B_VBI_TELETEXT_DTO0, 0x4c); tm6000_set_vbi()
279 tm6000_set_reg(dev, TM6010_REQ07_R40_TELETEXT_VBI_CODE0, 0x01); tm6000_set_vbi()
280 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x00); tm6000_set_vbi()
284 int tm6000_init_analog_mode(struct tm6000_core *dev) tm6000_init_analog_mode() argument
288 if (dev->dev_type == TM6010) { tm6000_init_analog_mode()
291 if (!dev->radio) tm6000_init_analog_mode()
295 tm6000_set_reg_mask(dev, TM6010_REQ07_RCC_ACTIVE_IF, tm6000_init_analog_mode()
298 tm6000_set_reg_mask(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, tm6000_init_analog_mode()
302 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); tm6000_init_analog_mode()
304 if (dev->scaler) tm6000_init_analog_mode()
306 tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x20); tm6000_init_analog_mode()
308 tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x80); tm6000_init_analog_mode()
310 tm6000_set_reg(dev, TM6010_REQ07_RC3_HSTART1, 0x88); tm6000_init_analog_mode()
311 tm6000_set_reg(dev, TM6000_REQ07_RDA_CLK_SEL, 0x23); tm6000_init_analog_mode()
312 tm6000_set_reg(dev, TM6010_REQ07_RD1_ADDR_FOR_REQ1, 0xc0); tm6000_init_analog_mode()
313 tm6000_set_reg(dev, TM6010_REQ07_RD2_ADDR_FOR_REQ2, 0xd8); tm6000_init_analog_mode()
314 tm6000_set_reg(dev, TM6010_REQ07_RD6_ENDP_REQ1_REQ2, 0x06); tm6000_init_analog_mode()
315 tm6000_set_reg(dev, TM6000_REQ07_RDF_PWDOWN_ACLK, 0x1f); tm6000_init_analog_mode()
318 tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x08); tm6000_init_analog_mode()
319 tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x00); tm6000_init_analog_mode()
321 tm6000_set_fourcc_format(dev); tm6000_init_analog_mode()
324 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x00); tm6000_init_analog_mode()
340 f.frequency = dev->freq; tm6000_init_analog_mode()
341 v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f); tm6000_init_analog_mode()
344 tm6000_set_standard(dev); tm6000_init_analog_mode()
345 tm6000_set_vbi(dev); tm6000_init_analog_mode()
346 tm6000_set_audio_bitrate(dev, 48000); tm6000_init_analog_mode()
349 if (dev->gpio.dvb_led) { tm6000_init_analog_mode()
350 tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, tm6000_init_analog_mode()
351 dev->gpio.dvb_led, 0x01); tm6000_init_analog_mode()
357 int tm6000_init_digital_mode(struct tm6000_core *dev) tm6000_init_digital_mode() argument
359 if (dev->dev_type == TM6010) { tm6000_init_digital_mode()
361 tm6000_set_reg_mask(dev, TM6010_REQ07_RCC_ACTIVE_IF, tm6000_init_digital_mode()
364 tm6000_set_reg_mask(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, tm6000_init_digital_mode()
367 tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, 0x28); tm6000_init_digital_mode()
368 tm6000_set_reg(dev, TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xfc); tm6000_init_digital_mode()
369 tm6000_set_reg(dev, TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0xff); tm6000_init_digital_mode()
371 tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x08); tm6000_init_digital_mode()
372 tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x00); tm6000_init_digital_mode()
373 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); tm6000_init_digital_mode()
374 tm6000_set_reg(dev, TM6000_REQ07_RDF_PWDOWN_ACLK, 0x08); tm6000_init_digital_mode()
375 tm6000_set_reg(dev, TM6000_REQ07_RE2_VADC_STATUS_CTL, 0x0c); tm6000_init_digital_mode()
376 tm6000_set_reg(dev, TM6000_REQ07_RE8_VADC_PWDOWN_CTL, 0xff); tm6000_init_digital_mode()
377 tm6000_set_reg(dev, TM6000_REQ07_REB_VADC_AADC_MODE, 0xd8); tm6000_init_digital_mode()
378 tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x40); tm6000_init_digital_mode()
379 tm6000_set_reg(dev, TM6010_REQ07_RC1_TRESHOLD, 0xd0); tm6000_init_digital_mode()
380 tm6000_set_reg(dev, TM6010_REQ07_RC3_HSTART1, 0x09); tm6000_init_digital_mode()
381 tm6000_set_reg(dev, TM6000_REQ07_RDA_CLK_SEL, 0x37); tm6000_init_digital_mode()
382 tm6000_set_reg(dev, TM6010_REQ07_RD1_ADDR_FOR_REQ1, 0xd8); tm6000_init_digital_mode()
383 tm6000_set_reg(dev, TM6010_REQ07_RD2_ADDR_FOR_REQ2, 0xc0); tm6000_init_digital_mode()
384 tm6000_set_reg(dev, TM6010_REQ07_RD6_ENDP_REQ1_REQ2, 0x60); tm6000_init_digital_mode()
386 tm6000_set_reg(dev, TM6000_REQ07_RE2_VADC_STATUS_CTL, 0x0c); tm6000_init_digital_mode()
387 tm6000_set_reg(dev, TM6000_REQ07_RE8_VADC_PWDOWN_CTL, 0xff); tm6000_init_digital_mode()
388 tm6000_set_reg(dev, TM6000_REQ07_REB_VADC_AADC_MODE, 0x08); tm6000_init_digital_mode()
391 tm6000_set_reg(dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00); tm6000_init_digital_mode()
393 tm6000_set_reg(dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x01); tm6000_init_digital_mode()
395 tm6000_set_reg(dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00); tm6000_init_digital_mode()
400 if (dev->gpio.dvb_led) { tm6000_init_digital_mode()
401 tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, tm6000_init_digital_mode()
402 dev->gpio.dvb_led, 0x00); tm6000_init_digital_mode()
568 int tm6000_init(struct tm6000_core *dev) tm6000_init() argument
574 board = tm6000_get_reg32(dev, REQ_40_GET_VERSION, 0, 0); tm6000_init()
579 if (dev->dev_type != TM6000) tm6000_init()
580 dev->dev_type = TM6000; tm6000_init()
584 if (dev->dev_type != TM6010) tm6000_init()
585 dev->dev_type = TM6010; tm6000_init()
593 if (dev->dev_type == TM6010) { tm6000_init()
603 rc = tm6000_set_reg(dev, tab[i].req, tab[i].reg, tab[i].val); tm6000_init()
614 rc = tm6000_cards_setup(dev); tm6000_init()
620 int tm6000_set_audio_bitrate(struct tm6000_core *dev, int bitrate) tm6000_set_audio_bitrate() argument
630 dev->audio_bitrate = bitrate; tm6000_set_audio_bitrate()
635 dev->audio_bitrate = bitrate; tm6000_set_audio_bitrate()
643 if (dev->dev_type == TM6010) { tm6000_set_audio_bitrate()
644 val = tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, areg_0a); tm6000_set_audio_bitrate()
648 val = tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, tm6000_set_audio_bitrate()
653 val = tm6000_set_reg_mask(dev, TM6000_REQ07_REB_VADC_AADC_MODE, tm6000_set_audio_bitrate()
662 int tm6000_set_audio_rinput(struct tm6000_core *dev) tm6000_set_audio_rinput() argument
664 if (dev->dev_type == TM6010) { tm6000_set_audio_rinput()
669 switch (dev->rinput.amux) { tm6000_set_audio_rinput()
686 dev->name); tm6000_set_audio_rinput()
691 tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, tm6000_set_audio_rinput()
694 tm6000_set_reg_mask(dev, TM6010_REQ07_R07_OUTPUT_CONTROL, tm6000_set_audio_rinput()
699 switch (dev->rinput.amux) { tm6000_set_audio_rinput()
708 dev->name); tm6000_set_audio_rinput()
713 tm6000_set_reg_mask(dev, TM6000_REQ07_REB_VADC_AADC_MODE, tm6000_set_audio_rinput()
719 static void tm6010_set_mute_sif(struct tm6000_core *dev, u8 mute) tm6010_set_mute_sif() argument
726 tm6000_set_reg_mask(dev, TM6010_REQ08_R0A_A_I2S_MOD, mute_reg, 0x08); tm6010_set_mute_sif()
729 static void tm6010_set_mute_adc(struct tm6000_core *dev, u8 mute) tm6010_set_mute_adc() argument
736 if (dev->dev_type == TM6010) { tm6010_set_mute_adc()
737 tm6000_set_reg_mask(dev, TM6010_REQ08_RF2_LEFT_CHANNEL_VOL, tm6010_set_mute_adc()
739 tm6000_set_reg_mask(dev, TM6010_REQ08_RF3_RIGHT_CHANNEL_VOL, tm6010_set_mute_adc()
742 tm6000_set_reg_mask(dev, TM6000_REQ07_REC_VADC_AADC_LVOL, tm6010_set_mute_adc()
744 tm6000_set_reg_mask(dev, TM6000_REQ07_RED_VADC_AADC_RVOL, tm6010_set_mute_adc()
749 int tm6000_tvaudio_set_mute(struct tm6000_core *dev, u8 mute) tm6000_tvaudio_set_mute() argument
753 if (dev->radio) tm6000_tvaudio_set_mute()
754 mux = dev->rinput.amux; tm6000_tvaudio_set_mute()
756 mux = dev->vinput[dev->input].amux; tm6000_tvaudio_set_mute()
761 if (dev->dev_type == TM6010) tm6000_tvaudio_set_mute()
762 tm6010_set_mute_sif(dev, mute); tm6000_tvaudio_set_mute()
766 " configuration.\n", dev->name); tm6000_tvaudio_set_mute()
772 tm6010_set_mute_adc(dev, mute); tm6000_tvaudio_set_mute()
781 static void tm6010_set_volume_sif(struct tm6000_core *dev, int vol) tm6010_set_volume_sif() argument
790 tm6000_set_reg(dev, TM6010_REQ08_R07_A_LEFT_VOL, vol_reg); tm6010_set_volume_sif()
791 tm6000_set_reg(dev, TM6010_REQ08_R08_A_RIGHT_VOL, vol_reg); tm6010_set_volume_sif()
794 static void tm6010_set_volume_adc(struct tm6000_core *dev, int vol) tm6010_set_volume_adc() argument
800 if (dev->dev_type == TM6010) { tm6010_set_volume_adc()
801 tm6000_set_reg(dev, TM6010_REQ08_RF2_LEFT_CHANNEL_VOL, vol_reg); tm6010_set_volume_adc()
802 tm6000_set_reg(dev, TM6010_REQ08_RF3_RIGHT_CHANNEL_VOL, vol_reg); tm6010_set_volume_adc()
804 tm6000_set_reg(dev, TM6000_REQ07_REC_VADC_AADC_LVOL, vol_reg); tm6010_set_volume_adc()
805 tm6000_set_reg(dev, TM6000_REQ07_RED_VADC_AADC_RVOL, vol_reg); tm6010_set_volume_adc()
809 void tm6000_set_volume(struct tm6000_core *dev, int vol) tm6000_set_volume() argument
813 if (dev->radio) { tm6000_set_volume()
814 mux = dev->rinput.amux; tm6000_set_volume()
817 mux = dev->vinput[dev->input].amux; tm6000_set_volume()
822 if (dev->dev_type == TM6010) tm6000_set_volume()
823 tm6010_set_volume_sif(dev, vol); tm6000_set_volume()
827 " configuration.\n", dev->name); tm6000_set_volume()
831 tm6010_set_volume_adc(dev, vol); tm6000_set_volume()
845 void tm6000_remove_from_devlist(struct tm6000_core *dev) tm6000_remove_from_devlist() argument
848 list_del(&dev->devlist); tm6000_remove_from_devlist()
852 void tm6000_add_into_devlist(struct tm6000_core *dev) tm6000_add_into_devlist() argument
855 list_add_tail(&dev->devlist, &tm6000_devlist); tm6000_add_into_devlist()
865 int tm6000_call_fillbuf(struct tm6000_core *dev, enum tm6000_ops_type type, tm6000_call_fillbuf() argument
875 ops->fillbuf(dev, buf, size); tm6000_call_fillbuf()
884 struct tm6000_core *dev = NULL; tm6000_register_extension() local
888 list_for_each_entry(dev, &tm6000_devlist, devlist) { tm6000_register_extension()
889 ops->init(dev); tm6000_register_extension()
891 dev->name, ops->name); tm6000_register_extension()
900 struct tm6000_core *dev = NULL; tm6000_unregister_extension() local
903 list_for_each_entry(dev, &tm6000_devlist, devlist) tm6000_unregister_extension()
904 ops->fini(dev); tm6000_unregister_extension()
912 void tm6000_init_extension(struct tm6000_core *dev) tm6000_init_extension() argument
920 ops->init(dev); tm6000_init_extension()
926 void tm6000_close_extension(struct tm6000_core *dev) tm6000_close_extension() argument
934 ops->fini(dev); tm6000_close_extension()
/linux-4.4.14/drivers/net/wireless/realtek/rtl818x/rtl8187/
H A Drtl8225.c25 static void rtl8225_write_bitbang(struct ieee80211_hw *dev, u8 addr, u16 data) rtl8225_write_bitbang() argument
27 struct rtl8187_priv *priv = dev->priv; rtl8225_write_bitbang()
68 static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data) rtl8225_write_8051() argument
70 struct rtl8187_priv *priv = dev->priv; rtl8225_write_8051()
107 static void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data) rtl8225_write() argument
109 struct rtl8187_priv *priv = dev->priv; rtl8225_write()
112 rtl8225_write_8051(dev, addr, cpu_to_le16(data)); rtl8225_write()
114 rtl8225_write_bitbang(dev, addr, data); rtl8225_write()
117 static u16 rtl8225_read(struct ieee80211_hw *dev, u8 addr) rtl8225_read() argument
119 struct rtl8187_priv *priv = dev->priv; rtl8225_read()
281 static void rtl8225_rf_set_tx_power(struct ieee80211_hw *dev, int channel) rtl8225_rf_set_tx_power() argument
283 struct rtl8187_priv *priv = dev->priv; rtl8225_rf_set_tx_power()
307 rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++); rtl8225_rf_set_tx_power()
322 rtl8225_write_phy_ofdm(dev, 2, 0x42); rtl8225_rf_set_tx_power()
323 rtl8225_write_phy_ofdm(dev, 6, 0x00); rtl8225_rf_set_tx_power()
324 rtl8225_write_phy_ofdm(dev, 8, 0x00); rtl8225_rf_set_tx_power()
331 rtl8225_write_phy_ofdm(dev, 5, *tmp); rtl8225_rf_set_tx_power()
332 rtl8225_write_phy_ofdm(dev, 7, *tmp); rtl8225_rf_set_tx_power()
337 static void rtl8225_rf_init(struct ieee80211_hw *dev) rtl8225_rf_init() argument
339 struct rtl8187_priv *priv = dev->priv; rtl8225_rf_init()
342 rtl8225_write(dev, 0x0, 0x067); rtl8225_rf_init()
343 rtl8225_write(dev, 0x1, 0xFE0); rtl8225_rf_init()
344 rtl8225_write(dev, 0x2, 0x44D); rtl8225_rf_init()
345 rtl8225_write(dev, 0x3, 0x441); rtl8225_rf_init()
346 rtl8225_write(dev, 0x4, 0x486); rtl8225_rf_init()
347 rtl8225_write(dev, 0x5, 0xBC0); rtl8225_rf_init()
348 rtl8225_write(dev, 0x6, 0xAE6); rtl8225_rf_init()
349 rtl8225_write(dev, 0x7, 0x82A); rtl8225_rf_init()
350 rtl8225_write(dev, 0x8, 0x01F); rtl8225_rf_init()
351 rtl8225_write(dev, 0x9, 0x334); rtl8225_rf_init()
352 rtl8225_write(dev, 0xA, 0xFD4); rtl8225_rf_init()
353 rtl8225_write(dev, 0xB, 0x391); rtl8225_rf_init()
354 rtl8225_write(dev, 0xC, 0x050); rtl8225_rf_init()
355 rtl8225_write(dev, 0xD, 0x6DB); rtl8225_rf_init()
356 rtl8225_write(dev, 0xE, 0x029); rtl8225_rf_init()
357 rtl8225_write(dev, 0xF, 0x914); msleep(100); rtl8225_rf_init()
359 rtl8225_write(dev, 0x2, 0xC4D); msleep(200); rtl8225_rf_init()
360 rtl8225_write(dev, 0x2, 0x44D); msleep(200); rtl8225_rf_init()
362 if (!(rtl8225_read(dev, 6) & (1 << 7))) { rtl8225_rf_init()
363 rtl8225_write(dev, 0x02, 0x0c4d); rtl8225_rf_init()
365 rtl8225_write(dev, 0x02, 0x044d); rtl8225_rf_init()
367 if (!(rtl8225_read(dev, 6) & (1 << 7))) rtl8225_rf_init()
368 wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n", rtl8225_rf_init()
369 rtl8225_read(dev, 6)); rtl8225_rf_init()
372 rtl8225_write(dev, 0x0, 0x127); rtl8225_rf_init()
375 rtl8225_write(dev, 0x1, i + 1); rtl8225_rf_init()
376 rtl8225_write(dev, 0x2, rtl8225bcd_rxgain[i]); rtl8225_rf_init()
379 rtl8225_write(dev, 0x0, 0x027); rtl8225_rf_init()
380 rtl8225_write(dev, 0x0, 0x22F); rtl8225_rf_init()
383 rtl8225_write_phy_ofdm(dev, 0xB, rtl8225_agc[i]); rtl8225_rf_init()
384 rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i); rtl8225_rf_init()
389 rtl8225_write_phy_ofdm(dev, 0x00, 0x01); rtl8225_rf_init()
390 rtl8225_write_phy_ofdm(dev, 0x01, 0x02); rtl8225_rf_init()
391 rtl8225_write_phy_ofdm(dev, 0x02, 0x42); rtl8225_rf_init()
392 rtl8225_write_phy_ofdm(dev, 0x03, 0x00); rtl8225_rf_init()
393 rtl8225_write_phy_ofdm(dev, 0x04, 0x00); rtl8225_rf_init()
394 rtl8225_write_phy_ofdm(dev, 0x05, 0x00); rtl8225_rf_init()
395 rtl8225_write_phy_ofdm(dev, 0x06, 0x40); rtl8225_rf_init()
396 rtl8225_write_phy_ofdm(dev, 0x07, 0x00); rtl8225_rf_init()
397 rtl8225_write_phy_ofdm(dev, 0x08, 0x40); rtl8225_rf_init()
398 rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); rtl8225_rf_init()
399 rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); rtl8225_rf_init()
400 rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); rtl8225_rf_init()
401 rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); rtl8225_rf_init()
402 rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); rtl8225_rf_init()
403 rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); rtl8225_rf_init()
404 rtl8225_write_phy_ofdm(dev, 0x10, 0x84); rtl8225_rf_init()
405 rtl8225_write_phy_ofdm(dev, 0x11, 0x06); rtl8225_rf_init()
406 rtl8225_write_phy_ofdm(dev, 0x12, 0x20); rtl8225_rf_init()
407 rtl8225_write_phy_ofdm(dev, 0x13, 0x20); rtl8225_rf_init()
408 rtl8225_write_phy_ofdm(dev, 0x14, 0x00); rtl8225_rf_init()
409 rtl8225_write_phy_ofdm(dev, 0x15, 0x40); rtl8225_rf_init()
410 rtl8225_write_phy_ofdm(dev, 0x16, 0x00); rtl8225_rf_init()
411 rtl8225_write_phy_ofdm(dev, 0x17, 0x40); rtl8225_rf_init()
412 rtl8225_write_phy_ofdm(dev, 0x18, 0xef); rtl8225_rf_init()
413 rtl8225_write_phy_ofdm(dev, 0x19, 0x19); rtl8225_rf_init()
414 rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); rtl8225_rf_init()
415 rtl8225_write_phy_ofdm(dev, 0x1b, 0x76); rtl8225_rf_init()
416 rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); rtl8225_rf_init()
417 rtl8225_write_phy_ofdm(dev, 0x1e, 0x95); rtl8225_rf_init()
418 rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); rtl8225_rf_init()
419 rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); rtl8225_rf_init()
420 rtl8225_write_phy_ofdm(dev, 0x21, 0x27); rtl8225_rf_init()
421 rtl8225_write_phy_ofdm(dev, 0x22, 0x16); rtl8225_rf_init()
422 rtl8225_write_phy_ofdm(dev, 0x24, 0x46); rtl8225_rf_init()
423 rtl8225_write_phy_ofdm(dev, 0x25, 0x20); rtl8225_rf_init()
424 rtl8225_write_phy_ofdm(dev, 0x26, 0x90); rtl8225_rf_init()
425 rtl8225_write_phy_ofdm(dev, 0x27, 0x88); rtl8225_rf_init()
427 rtl8225_write_phy_ofdm(dev, 0x0d, rtl8225_gain[2 * 4]); rtl8225_rf_init()
428 rtl8225_write_phy_ofdm(dev, 0x1b, rtl8225_gain[2 * 4 + 2]); rtl8225_rf_init()
429 rtl8225_write_phy_ofdm(dev, 0x1d, rtl8225_gain[2 * 4 + 3]); rtl8225_rf_init()
430 rtl8225_write_phy_ofdm(dev, 0x23, rtl8225_gain[2 * 4 + 1]); rtl8225_rf_init()
432 rtl8225_write_phy_cck(dev, 0x00, 0x98); rtl8225_rf_init()
433 rtl8225_write_phy_cck(dev, 0x03, 0x20); rtl8225_rf_init()
434 rtl8225_write_phy_cck(dev, 0x04, 0x7e); rtl8225_rf_init()
435 rtl8225_write_phy_cck(dev, 0x05, 0x12); rtl8225_rf_init()
436 rtl8225_write_phy_cck(dev, 0x06, 0xfc); rtl8225_rf_init()
437 rtl8225_write_phy_cck(dev, 0x07, 0x78); rtl8225_rf_init()
438 rtl8225_write_phy_cck(dev, 0x08, 0x2e); rtl8225_rf_init()
439 rtl8225_write_phy_cck(dev, 0x10, 0x9b); rtl8225_rf_init()
440 rtl8225_write_phy_cck(dev, 0x11, 0x88); rtl8225_rf_init()
441 rtl8225_write_phy_cck(dev, 0x12, 0x47); rtl8225_rf_init()
442 rtl8225_write_phy_cck(dev, 0x13, 0xd0); rtl8225_rf_init()
443 rtl8225_write_phy_cck(dev, 0x19, 0x00); rtl8225_rf_init()
444 rtl8225_write_phy_cck(dev, 0x1a, 0xa0); rtl8225_rf_init()
445 rtl8225_write_phy_cck(dev, 0x1b, 0x08); rtl8225_rf_init()
446 rtl8225_write_phy_cck(dev, 0x40, 0x86); rtl8225_rf_init()
447 rtl8225_write_phy_cck(dev, 0x41, 0x8d); rtl8225_rf_init()
448 rtl8225_write_phy_cck(dev, 0x42, 0x15); rtl8225_rf_init()
449 rtl8225_write_phy_cck(dev, 0x43, 0x18); rtl8225_rf_init()
450 rtl8225_write_phy_cck(dev, 0x44, 0x1f); rtl8225_rf_init()
451 rtl8225_write_phy_cck(dev, 0x45, 0x1e); rtl8225_rf_init()
452 rtl8225_write_phy_cck(dev, 0x46, 0x1a); rtl8225_rf_init()
453 rtl8225_write_phy_cck(dev, 0x47, 0x15); rtl8225_rf_init()
454 rtl8225_write_phy_cck(dev, 0x48, 0x10); rtl8225_rf_init()
455 rtl8225_write_phy_cck(dev, 0x49, 0x0a); rtl8225_rf_init()
456 rtl8225_write_phy_cck(dev, 0x4a, 0x05); rtl8225_rf_init()
457 rtl8225_write_phy_cck(dev, 0x4b, 0x02); rtl8225_rf_init()
458 rtl8225_write_phy_cck(dev, 0x4c, 0x05); rtl8225_rf_init()
462 rtl8225_rf_set_tx_power(dev, 1); rtl8225_rf_init()
465 rtl8225_write_phy_cck(dev, 0x10, 0x9b); /* B: 0xDB */ rtl8225_rf_init()
466 rtl8225_write_phy_ofdm(dev, 0x26, 0x90); /* B: 0x10 */ rtl8225_rf_init()
473 rtl8225_write(dev, 0x0c, 0x50); rtl8225_rf_init()
474 rtl8225_write_phy_ofdm(dev, 0x0d, rtl8225_gain[2 * 4]); rtl8225_rf_init()
475 rtl8225_write_phy_ofdm(dev, 0x1b, rtl8225_gain[2 * 4 + 2]); rtl8225_rf_init()
476 rtl8225_write_phy_ofdm(dev, 0x1d, rtl8225_gain[2 * 4 + 3]); rtl8225_rf_init()
477 rtl8225_write_phy_ofdm(dev, 0x23, rtl8225_gain[2 * 4 + 1]); rtl8225_rf_init()
478 rtl8225_write_phy_cck(dev, 0x41, rtl8225_threshold[2]); rtl8225_rf_init()
532 static void rtl8225z2_rf_set_tx_power(struct ieee80211_hw *dev, int channel) rtl8225z2_rf_set_tx_power() argument
534 struct rtl8187_priv *priv = dev->priv; rtl8225z2_rf_set_tx_power()
560 rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++); rtl8225z2_rf_set_tx_power()
577 rtl8225_write_phy_ofdm(dev, 2, 0x42); rtl8225z2_rf_set_tx_power()
578 rtl8225_write_phy_ofdm(dev, 5, 0x00); rtl8225z2_rf_set_tx_power()
579 rtl8225_write_phy_ofdm(dev, 6, 0x40); rtl8225z2_rf_set_tx_power()
580 rtl8225_write_phy_ofdm(dev, 7, 0x00); rtl8225z2_rf_set_tx_power()
581 rtl8225_write_phy_ofdm(dev, 8, 0x40); rtl8225z2_rf_set_tx_power()
588 static void rtl8225z2_b_rf_set_tx_power(struct ieee80211_hw *dev, int channel) rtl8225z2_b_rf_set_tx_power() argument
590 struct rtl8187_priv *priv = dev->priv; rtl8225z2_b_rf_set_tx_power()
636 rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++); rtl8225z2_b_rf_set_tx_power()
646 rtl8225_write_phy_ofdm(dev, 0x87, 0x60); rtl8225z2_b_rf_set_tx_power()
647 rtl8225_write_phy_ofdm(dev, 0x89, 0x60); rtl8225z2_b_rf_set_tx_power()
649 rtl8225_write_phy_ofdm(dev, 0x87, 0x5c); rtl8225z2_b_rf_set_tx_power()
650 rtl8225_write_phy_ofdm(dev, 0x89, 0x5c); rtl8225z2_b_rf_set_tx_power()
654 rtl8225_write_phy_ofdm(dev, 0x87, 0x5c); rtl8225z2_b_rf_set_tx_power()
655 rtl8225_write_phy_ofdm(dev, 0x89, 0x5c); rtl8225z2_b_rf_set_tx_power()
657 rtl8225_write_phy_ofdm(dev, 0x87, 0x54); rtl8225z2_b_rf_set_tx_power()
658 rtl8225_write_phy_ofdm(dev, 0x89, 0x54); rtl8225z2_b_rf_set_tx_power()
660 rtl8225_write_phy_ofdm(dev, 0x87, 0x50); rtl8225z2_b_rf_set_tx_power()
661 rtl8225_write_phy_ofdm(dev, 0x89, 0x50); rtl8225z2_b_rf_set_tx_power()
692 static void rtl8225z2_rf_init(struct ieee80211_hw *dev) rtl8225z2_rf_init() argument
694 struct rtl8187_priv *priv = dev->priv; rtl8225z2_rf_init()
697 rtl8225_write(dev, 0x0, 0x2BF); rtl8225z2_rf_init()
698 rtl8225_write(dev, 0x1, 0xEE0); rtl8225z2_rf_init()
699 rtl8225_write(dev, 0x2, 0x44D); rtl8225z2_rf_init()
700 rtl8225_write(dev, 0x3, 0x441); rtl8225z2_rf_init()
701 rtl8225_write(dev, 0x4, 0x8C3); rtl8225z2_rf_init()
702 rtl8225_write(dev, 0x5, 0xC72); rtl8225z2_rf_init()
703 rtl8225_write(dev, 0x6, 0x0E6); rtl8225z2_rf_init()
704 rtl8225_write(dev, 0x7, 0x82A); rtl8225z2_rf_init()
705 rtl8225_write(dev, 0x8, 0x03F); rtl8225z2_rf_init()
706 rtl8225_write(dev, 0x9, 0x335); rtl8225z2_rf_init()
707 rtl8225_write(dev, 0xa, 0x9D4); rtl8225z2_rf_init()
708 rtl8225_write(dev, 0xb, 0x7BB); rtl8225z2_rf_init()
709 rtl8225_write(dev, 0xc, 0x850); rtl8225z2_rf_init()
710 rtl8225_write(dev, 0xd, 0xCDF); rtl8225z2_rf_init()
711 rtl8225_write(dev, 0xe, 0x02B); rtl8225z2_rf_init()
712 rtl8225_write(dev, 0xf, 0x114); rtl8225z2_rf_init()
715 rtl8225_write(dev, 0x0, 0x1B7); rtl8225z2_rf_init()
718 rtl8225_write(dev, 0x1, i + 1); rtl8225z2_rf_init()
719 rtl8225_write(dev, 0x2, rtl8225z2_rxgain[i]); rtl8225z2_rf_init()
722 rtl8225_write(dev, 0x3, 0x080); rtl8225z2_rf_init()
723 rtl8225_write(dev, 0x5, 0x004); rtl8225z2_rf_init()
724 rtl8225_write(dev, 0x0, 0x0B7); rtl8225z2_rf_init()
725 rtl8225_write(dev, 0x2, 0xc4D); rtl8225z2_rf_init()
728 rtl8225_write(dev, 0x2, 0x44D); rtl8225z2_rf_init()
731 if (!(rtl8225_read(dev, 6) & (1 << 7))) { rtl8225z2_rf_init()
732 rtl8225_write(dev, 0x02, 0x0C4D); rtl8225z2_rf_init()
734 rtl8225_write(dev, 0x02, 0x044D); rtl8225z2_rf_init()
736 if (!(rtl8225_read(dev, 6) & (1 << 7))) rtl8225z2_rf_init()
737 wiphy_warn(dev->wiphy, "RF Calibration Failed! %x\n", rtl8225z2_rf_init()
738 rtl8225_read(dev, 6)); rtl8225z2_rf_init()
743 rtl8225_write(dev, 0x0, 0x2BF); rtl8225z2_rf_init()
746 rtl8225_write_phy_ofdm(dev, 0xB, rtl8225_agc[i]); rtl8225z2_rf_init()
747 rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i); rtl8225z2_rf_init()
752 rtl8225_write_phy_ofdm(dev, 0x00, 0x01); rtl8225z2_rf_init()
753 rtl8225_write_phy_ofdm(dev, 0x01, 0x02); rtl8225z2_rf_init()
754 rtl8225_write_phy_ofdm(dev, 0x02, 0x42); rtl8225z2_rf_init()
755 rtl8225_write_phy_ofdm(dev, 0x03, 0x00); rtl8225z2_rf_init()
756 rtl8225_write_phy_ofdm(dev, 0x04, 0x00); rtl8225z2_rf_init()
757 rtl8225_write_phy_ofdm(dev, 0x05, 0x00); rtl8225z2_rf_init()
758 rtl8225_write_phy_ofdm(dev, 0x06, 0x40); rtl8225z2_rf_init()
759 rtl8225_write_phy_ofdm(dev, 0x07, 0x00); rtl8225z2_rf_init()
760 rtl8225_write_phy_ofdm(dev, 0x08, 0x40); rtl8225z2_rf_init()
761 rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); rtl8225z2_rf_init()
762 rtl8225_write_phy_ofdm(dev, 0x0a, 0x08); rtl8225z2_rf_init()
763 rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); rtl8225z2_rf_init()
764 rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); rtl8225z2_rf_init()
765 rtl8225_write_phy_ofdm(dev, 0x0d, 0x43); rtl8225z2_rf_init()
766 rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); rtl8225z2_rf_init()
767 rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); rtl8225z2_rf_init()
768 rtl8225_write_phy_ofdm(dev, 0x10, 0x84); rtl8225z2_rf_init()
769 rtl8225_write_phy_ofdm(dev, 0x11, 0x07); rtl8225z2_rf_init()
770 rtl8225_write_phy_ofdm(dev, 0x12, 0x20); rtl8225z2_rf_init()
771 rtl8225_write_phy_ofdm(dev, 0x13, 0x20); rtl8225z2_rf_init()
772 rtl8225_write_phy_ofdm(dev, 0x14, 0x00); rtl8225z2_rf_init()
773 rtl8225_write_phy_ofdm(dev, 0x15, 0x40); rtl8225z2_rf_init()
774 rtl8225_write_phy_ofdm(dev, 0x16, 0x00); rtl8225z2_rf_init()
775 rtl8225_write_phy_ofdm(dev, 0x17, 0x40); rtl8225z2_rf_init()
776 rtl8225_write_phy_ofdm(dev, 0x18, 0xef); rtl8225z2_rf_init()
777 rtl8225_write_phy_ofdm(dev, 0x19, 0x19); rtl8225z2_rf_init()
778 rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); rtl8225z2_rf_init()
779 rtl8225_write_phy_ofdm(dev, 0x1b, 0x15); rtl8225z2_rf_init()
780 rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); rtl8225z2_rf_init()
781 rtl8225_write_phy_ofdm(dev, 0x1d, 0xc5); rtl8225z2_rf_init()
782 rtl8225_write_phy_ofdm(dev, 0x1e, 0x95); rtl8225z2_rf_init()
783 rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); rtl8225z2_rf_init()
784 rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); rtl8225z2_rf_init()
785 rtl8225_write_phy_ofdm(dev, 0x21, 0x17); rtl8225z2_rf_init()
786 rtl8225_write_phy_ofdm(dev, 0x22, 0x16); rtl8225z2_rf_init()
787 rtl8225_write_phy_ofdm(dev, 0x23, 0x80); rtl8225z2_rf_init()
788 rtl8225_write_phy_ofdm(dev, 0x24, 0x46); rtl8225z2_rf_init()
789 rtl8225_write_phy_ofdm(dev, 0x25, 0x00); rtl8225z2_rf_init()
790 rtl8225_write_phy_ofdm(dev, 0x26, 0x90); rtl8225z2_rf_init()
791 rtl8225_write_phy_ofdm(dev, 0x27, 0x88); rtl8225z2_rf_init()
793 rtl8225_write_phy_ofdm(dev, 0x0b, rtl8225z2_gain_bg[4 * 3]); rtl8225z2_rf_init()
794 rtl8225_write_phy_ofdm(dev, 0x1b, rtl8225z2_gain_bg[4 * 3 + 1]); rtl8225z2_rf_init()
795 rtl8225_write_phy_ofdm(dev, 0x1d, rtl8225z2_gain_bg[4 * 3 + 2]); rtl8225z2_rf_init()
796 rtl8225_write_phy_ofdm(dev, 0x21, 0x37); rtl8225z2_rf_init()
798 rtl8225_write_phy_cck(dev, 0x00, 0x98); rtl8225z2_rf_init()
799 rtl8225_write_phy_cck(dev, 0x03, 0x20); rtl8225z2_rf_init()
800 rtl8225_write_phy_cck(dev, 0x04, 0x7e); rtl8225z2_rf_init()
801 rtl8225_write_phy_cck(dev, 0x05, 0x12); rtl8225z2_rf_init()
802 rtl8225_write_phy_cck(dev, 0x06, 0xfc); rtl8225z2_rf_init()
803 rtl8225_write_phy_cck(dev, 0x07, 0x78); rtl8225z2_rf_init()
804 rtl8225_write_phy_cck(dev, 0x08, 0x2e); rtl8225z2_rf_init()
805 rtl8225_write_phy_cck(dev, 0x10, 0x9b); rtl8225z2_rf_init()
806 rtl8225_write_phy_cck(dev, 0x11, 0x88); rtl8225z2_rf_init()
807 rtl8225_write_phy_cck(dev, 0x12, 0x47); rtl8225z2_rf_init()
808 rtl8225_write_phy_cck(dev, 0x13, 0xd0); rtl8225z2_rf_init()
809 rtl8225_write_phy_cck(dev, 0x19, 0x00); rtl8225z2_rf_init()
810 rtl8225_write_phy_cck(dev, 0x1a, 0xa0); rtl8225z2_rf_init()
811 rtl8225_write_phy_cck(dev, 0x1b, 0x08); rtl8225z2_rf_init()
812 rtl8225_write_phy_cck(dev, 0x40, 0x86); rtl8225z2_rf_init()
813 rtl8225_write_phy_cck(dev, 0x41, 0x8d); rtl8225z2_rf_init()
814 rtl8225_write_phy_cck(dev, 0x42, 0x15); rtl8225z2_rf_init()
815 rtl8225_write_phy_cck(dev, 0x43, 0x18); rtl8225z2_rf_init()
816 rtl8225_write_phy_cck(dev, 0x44, 0x36); rtl8225z2_rf_init()
817 rtl8225_write_phy_cck(dev, 0x45, 0x35); rtl8225z2_rf_init()
818 rtl8225_write_phy_cck(dev, 0x46, 0x2e); rtl8225z2_rf_init()
819 rtl8225_write_phy_cck(dev, 0x47, 0x25); rtl8225z2_rf_init()
820 rtl8225_write_phy_cck(dev, 0x48, 0x1c); rtl8225z2_rf_init()
821 rtl8225_write_phy_cck(dev, 0x49, 0x12); rtl8225z2_rf_init()
822 rtl8225_write_phy_cck(dev, 0x4a, 0x09); rtl8225z2_rf_init()
823 rtl8225_write_phy_cck(dev, 0x4b, 0x04); rtl8225z2_rf_init()
824 rtl8225_write_phy_cck(dev, 0x4c, 0x05); rtl8225z2_rf_init()
828 rtl8225z2_rf_set_tx_power(dev, 1); rtl8225z2_rf_init()
831 rtl8225_write_phy_cck(dev, 0x10, 0x9b); /* B: 0xDB */ rtl8225z2_rf_init()
832 rtl8225_write_phy_ofdm(dev, 0x26, 0x90); /* B: 0x10 */ rtl8225z2_rf_init()
839 static void rtl8225z2_b_rf_init(struct ieee80211_hw *dev) rtl8225z2_b_rf_init() argument
841 struct rtl8187_priv *priv = dev->priv; rtl8225z2_b_rf_init()
844 rtl8225_write(dev, 0x0, 0x0B7); rtl8225z2_b_rf_init()
845 rtl8225_write(dev, 0x1, 0xEE0); rtl8225z2_b_rf_init()
846 rtl8225_write(dev, 0x2, 0x44D); rtl8225z2_b_rf_init()
847 rtl8225_write(dev, 0x3, 0x441); rtl8225z2_b_rf_init()
848 rtl8225_write(dev, 0x4, 0x8C3); rtl8225z2_b_rf_init()
849 rtl8225_write(dev, 0x5, 0xC72); rtl8225z2_b_rf_init()
850 rtl8225_write(dev, 0x6, 0x0E6); rtl8225z2_b_rf_init()
851 rtl8225_write(dev, 0x7, 0x82A); rtl8225z2_b_rf_init()
852 rtl8225_write(dev, 0x8, 0x03F); rtl8225z2_b_rf_init()
853 rtl8225_write(dev, 0x9, 0x335); rtl8225z2_b_rf_init()
854 rtl8225_write(dev, 0xa, 0x9D4); rtl8225z2_b_rf_init()
855 rtl8225_write(dev, 0xb, 0x7BB); rtl8225z2_b_rf_init()
856 rtl8225_write(dev, 0xc, 0x850); rtl8225z2_b_rf_init()
857 rtl8225_write(dev, 0xd, 0xCDF); rtl8225z2_b_rf_init()
858 rtl8225_write(dev, 0xe, 0x02B); rtl8225z2_b_rf_init()
859 rtl8225_write(dev, 0xf, 0x114); rtl8225z2_b_rf_init()
861 rtl8225_write(dev, 0x0, 0x1B7); rtl8225z2_b_rf_init()
864 rtl8225_write(dev, 0x1, i + 1); rtl8225z2_b_rf_init()
865 rtl8225_write(dev, 0x2, rtl8225z2_rxgain[i]); rtl8225z2_b_rf_init()
868 rtl8225_write(dev, 0x3, 0x080); rtl8225z2_b_rf_init()
869 rtl8225_write(dev, 0x5, 0x004); rtl8225z2_b_rf_init()
870 rtl8225_write(dev, 0x0, 0x0B7); rtl8225z2_b_rf_init()
872 rtl8225_write(dev, 0x2, 0xC4D); rtl8225z2_b_rf_init()
874 rtl8225_write(dev, 0x2, 0x44D); rtl8225z2_b_rf_init()
875 rtl8225_write(dev, 0x0, 0x2BF); rtl8225z2_b_rf_init()
881 rtl8225_write_phy_ofdm(dev, 0x80, 0x12); rtl8225z2_b_rf_init()
883 rtl8225_write_phy_ofdm(dev, 0xF, rtl8225z2_agc[i]); rtl8225z2_b_rf_init()
884 rtl8225_write_phy_ofdm(dev, 0xE, 0x80 + i); rtl8225z2_b_rf_init()
885 rtl8225_write_phy_ofdm(dev, 0xE, 0); rtl8225z2_b_rf_init()
887 rtl8225_write_phy_ofdm(dev, 0x80, 0x10); rtl8225z2_b_rf_init()
890 rtl8225_write_phy_ofdm(dev, i, rtl8225z2_ofdm[i]); rtl8225z2_b_rf_init()
892 rtl8225_write_phy_ofdm(dev, 0x97, 0x46); rtl8225z2_b_rf_init()
893 rtl8225_write_phy_ofdm(dev, 0xa4, 0xb6); rtl8225z2_b_rf_init()
894 rtl8225_write_phy_ofdm(dev, 0x85, 0xfc); rtl8225z2_b_rf_init()
895 rtl8225_write_phy_cck(dev, 0xc1, 0x88); rtl8225z2_b_rf_init()
898 static void rtl8225_rf_stop(struct ieee80211_hw *dev) rtl8225_rf_stop() argument
900 rtl8225_write(dev, 0x4, 0x1f); rtl8225_rf_stop()
903 static void rtl8225_rf_set_channel(struct ieee80211_hw *dev, rtl8225_rf_set_channel() argument
906 struct rtl8187_priv *priv = dev->priv; rtl8225_rf_set_channel()
911 rtl8225_rf_set_tx_power(dev, chan); rtl8225_rf_set_channel()
913 rtl8225z2_rf_set_tx_power(dev, chan); rtl8225_rf_set_channel()
915 rtl8225z2_b_rf_set_tx_power(dev, chan); rtl8225_rf_set_channel()
917 rtl8225_write(dev, 0x7, rtl8225_chan[chan - 1]); rtl8225_rf_set_channel()
942 const struct rtl818x_rf_ops * rtl8187_detect_rf(struct ieee80211_hw *dev) rtl8187_detect_rf() argument
945 struct rtl8187_priv *priv = dev->priv; rtl8187_detect_rf()
948 rtl8225_write(dev, 0, 0x1B7); rtl8187_detect_rf()
950 reg8 = rtl8225_read(dev, 8); rtl8187_detect_rf()
951 reg9 = rtl8225_read(dev, 9); rtl8187_detect_rf()
953 rtl8225_write(dev, 0, 0x0B7); rtl8187_detect_rf()
/linux-4.4.14/drivers/scsi/libsas/
H A Dsas_discover.c39 void sas_init_dev(struct domain_device *dev) sas_init_dev() argument
41 switch (dev->dev_type) { sas_init_dev()
43 INIT_LIST_HEAD(&dev->ssp_dev.eh_list_node); sas_init_dev()
47 INIT_LIST_HEAD(&dev->ex_dev.children); sas_init_dev()
48 mutex_init(&dev->ex_dev.cmd_mutex); sas_init_dev()
70 struct domain_device *dev; sas_get_port_device() local
73 dev = sas_alloc_device(); sas_get_port_device()
74 if (!dev) sas_get_port_device()
80 sas_put_device(dev); sas_get_port_device()
85 memcpy(dev->frame_rcvd, phy->frame_rcvd, min(sizeof(dev->frame_rcvd), sas_get_port_device()
90 if (dev->frame_rcvd[0] == 0x34 && port->oob_mode == SATA_OOB_MODE) { sas_get_port_device()
92 (struct dev_to_host_fis *) dev->frame_rcvd; sas_get_port_device()
96 dev->dev_type = SAS_SATA_PM; sas_get_port_device()
98 dev->dev_type = SAS_SATA_DEV; sas_get_port_device()
99 dev->tproto = SAS_PROTOCOL_SATA; sas_get_port_device()
102 (struct sas_identify_frame *) dev->frame_rcvd; sas_get_port_device()
103 dev->dev_type = id->dev_type; sas_get_port_device()
104 dev->iproto = id->initiator_bits; sas_get_port_device()
105 dev->tproto = id->target_bits; sas_get_port_device()
108 sas_init_dev(dev); sas_get_port_device()
110 dev->port = port; sas_get_port_device()
111 switch (dev->dev_type) { sas_get_port_device()
113 rc = sas_ata_init(dev); sas_get_port_device()
131 printk("ERROR: Unidentified device type %d\n", dev->dev_type); sas_get_port_device()
137 sas_put_device(dev); sas_get_port_device()
142 memcpy(dev->sas_addr, port->attached_sas_addr, SAS_ADDR_SIZE); sas_get_port_device()
143 sas_fill_in_rphy(dev, rphy); sas_get_port_device()
144 sas_hash_addr(dev->hashed_sas_addr, dev->sas_addr); sas_get_port_device()
145 port->port_dev = dev; sas_get_port_device()
146 dev->linkrate = port->linkrate; sas_get_port_device()
147 dev->min_linkrate = port->linkrate; sas_get_port_device()
148 dev->max_linkrate = port->linkrate; sas_get_port_device()
149 dev->pathways = port->num_phys; sas_get_port_device()
154 sas_device_set_phy(dev, port->port); sas_get_port_device()
156 dev->rphy = rphy; sas_get_port_device()
157 get_device(&dev->rphy->dev); sas_get_port_device()
159 if (dev_is_sata(dev) || dev->dev_type == SAS_END_DEVICE) sas_get_port_device()
160 list_add_tail(&dev->disco_list_node, &port->disco_list); sas_get_port_device()
163 list_add_tail(&dev->dev_list_node, &port->dev_list); sas_get_port_device()
169 sas_phy_set_target(phy, dev); sas_get_port_device()
177 int sas_notify_lldd_dev_found(struct domain_device *dev) sas_notify_lldd_dev_found() argument
180 struct sas_ha_struct *sas_ha = dev->port->ha; sas_notify_lldd_dev_found()
187 res = i->dft->lldd_dev_found(dev); sas_notify_lldd_dev_found()
191 dev_name(sas_ha->dev), sas_notify_lldd_dev_found()
192 SAS_ADDR(dev->sas_addr), res); sas_notify_lldd_dev_found()
194 set_bit(SAS_DEV_FOUND, &dev->state); sas_notify_lldd_dev_found()
195 kref_get(&dev->kref); sas_notify_lldd_dev_found()
200 void sas_notify_lldd_dev_gone(struct domain_device *dev) sas_notify_lldd_dev_gone() argument
202 struct sas_ha_struct *sas_ha = dev->port->ha; sas_notify_lldd_dev_gone()
209 if (test_and_clear_bit(SAS_DEV_FOUND, &dev->state)) { sas_notify_lldd_dev_gone()
210 i->dft->lldd_dev_gone(dev); sas_notify_lldd_dev_gone()
211 sas_put_device(dev); sas_notify_lldd_dev_gone()
217 struct domain_device *dev, *n; sas_probe_devices() local
224 list_for_each_entry(dev, &port->disco_list, disco_list_node) { sas_probe_devices()
226 list_add_tail(&dev->dev_list_node, &port->dev_list); sas_probe_devices()
232 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) { sas_probe_devices()
235 err = sas_rphy_add(dev->rphy); sas_probe_devices()
237 sas_fail_probe(dev, __func__, err); sas_probe_devices()
239 list_del_init(&dev->disco_list_node); sas_probe_devices()
246 struct domain_device *dev; sas_suspend_devices() local
260 list_for_each_entry(dev, &port->dev_list, dev_list_node) sas_suspend_devices()
261 sas_notify_lldd_dev_gone(dev); sas_suspend_devices()
290 int sas_discover_end_dev(struct domain_device *dev) sas_discover_end_dev() argument
294 res = sas_notify_lldd_dev_found(dev); sas_discover_end_dev()
297 sas_discover_event(dev->port, DISCE_PROBE); sas_discover_end_dev()
306 struct domain_device *dev = container_of(kref, typeof(*dev), kref); sas_free_device() local
308 put_device(&dev->rphy->dev); sas_free_device()
309 dev->rphy = NULL; sas_free_device()
311 if (dev->parent) sas_free_device()
312 sas_put_device(dev->parent); sas_free_device()
314 sas_port_put_phy(dev->phy); sas_free_device()
315 dev->phy = NULL; sas_free_device()
318 if (dev->dev_type == SAS_EDGE_EXPANDER_DEVICE || dev->dev_type == SAS_FANOUT_EXPANDER_DEVICE) sas_free_device()
319 kfree(dev->ex_dev.ex_phy); sas_free_device()
321 if (dev_is_sata(dev) && dev->sata_dev.ap) { sas_free_device()
322 ata_sas_port_destroy(dev->sata_dev.ap); sas_free_device()
323 dev->sata_dev.ap = NULL; sas_free_device()
326 kfree(dev); sas_free_device()
329 static void sas_unregister_common_dev(struct asd_sas_port *port, struct domain_device *dev) sas_unregister_common_dev() argument
333 sas_notify_lldd_dev_gone(dev); sas_unregister_common_dev()
334 if (!dev->parent) sas_unregister_common_dev()
335 dev->port->port_dev = NULL; sas_unregister_common_dev()
337 list_del_init(&dev->siblings); sas_unregister_common_dev()
340 list_del_init(&dev->dev_list_node); sas_unregister_common_dev()
341 if (dev_is_sata(dev)) sas_unregister_common_dev()
342 sas_ata_end_eh(dev->sata_dev.ap); sas_unregister_common_dev()
346 if (dev->dev_type == SAS_END_DEVICE && sas_unregister_common_dev()
347 !list_empty(&dev->ssp_dev.eh_list_node)) { sas_unregister_common_dev()
348 list_del_init(&dev->ssp_dev.eh_list_node); sas_unregister_common_dev()
353 sas_put_device(dev); sas_unregister_common_dev()
358 struct domain_device *dev, *n; sas_destruct_devices() local
364 list_for_each_entry_safe(dev, n, &port->destroy_list, disco_list_node) { sas_destruct_devices()
365 list_del_init(&dev->disco_list_node); sas_destruct_devices()
367 sas_remove_children(&dev->rphy->dev); sas_destruct_devices()
368 sas_rphy_delete(dev->rphy); sas_destruct_devices()
369 sas_unregister_common_dev(port, dev); sas_destruct_devices()
373 void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *dev) sas_unregister_dev() argument
375 if (!test_bit(SAS_DEV_DESTROY, &dev->state) && sas_unregister_dev()
376 !list_empty(&dev->disco_list_node)) { sas_unregister_dev()
378 list_del_init(&dev->disco_list_node); sas_unregister_dev()
379 sas_rphy_free(dev->rphy); sas_unregister_dev()
380 sas_unregister_common_dev(port, dev); sas_unregister_dev()
384 if (!test_and_set_bit(SAS_DEV_DESTROY, &dev->state)) { sas_unregister_dev()
385 sas_rphy_unlink(dev->rphy); sas_unregister_dev()
386 list_move_tail(&dev->disco_list_node, &port->destroy_list); sas_unregister_dev()
387 sas_discover_event(dev->port, DISCE_DESTRUCT); sas_unregister_dev()
393 struct domain_device *dev, *n; sas_unregister_domain_devices() local
395 list_for_each_entry_safe_reverse(dev, n, &port->dev_list, dev_list_node) { sas_unregister_domain_devices()
397 set_bit(SAS_DEV_GONE, &dev->state); sas_unregister_domain_devices()
398 sas_unregister_dev(port, dev); sas_unregister_domain_devices()
401 list_for_each_entry_safe(dev, n, &port->disco_list, disco_list_node) sas_unregister_domain_devices()
402 sas_unregister_dev(port, dev); sas_unregister_domain_devices()
408 void sas_device_set_phy(struct domain_device *dev, struct sas_port *port) sas_device_set_phy() argument
413 if (!dev) sas_device_set_phy()
416 ha = dev->port->ha; sas_device_set_phy()
422 sas_port_put_phy(dev->phy); sas_device_set_phy()
423 dev->phy = new_phy; sas_device_set_phy()
441 struct domain_device *dev; sas_discover_domain() local
454 dev = port->port_dev; sas_discover_domain()
459 switch (dev->dev_type) { sas_discover_domain()
461 error = sas_discover_end_dev(dev); sas_discover_domain()
465 error = sas_discover_root_expander(dev); sas_discover_domain()
470 error = sas_discover_sata(dev); sas_discover_domain()
478 SAS_DPRINTK("unhandled device %d\n", dev->dev_type); sas_discover_domain()
483 sas_rphy_free(dev->rphy); sas_discover_domain()
484 list_del_init(&dev->disco_list_node); sas_discover_domain()
486 list_del_init(&dev->dev_list_node); sas_discover_domain()
489 sas_put_device(dev); sas_discover_domain()
/linux-4.4.14/drivers/pnp/pnpacpi/
H A Dcore.c56 static int pnpacpi_get_resources(struct pnp_dev *dev) pnpacpi_get_resources() argument
58 pnp_dbg(&dev->dev, "get resources\n"); pnpacpi_get_resources()
59 return pnpacpi_parse_allocated_resource(dev); pnpacpi_get_resources()
62 static int pnpacpi_set_resources(struct pnp_dev *dev) pnpacpi_set_resources() argument
68 pnp_dbg(&dev->dev, "set resources\n"); pnpacpi_set_resources()
70 acpi_dev = ACPI_COMPANION(&dev->dev); pnpacpi_set_resources()
72 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); pnpacpi_set_resources()
76 if (WARN_ON_ONCE(acpi_dev != dev->data)) pnpacpi_set_resources()
77 dev->data = acpi_dev; pnpacpi_set_resources()
83 ret = pnpacpi_build_resource_template(dev, &buffer); pnpacpi_set_resources()
87 ret = pnpacpi_encode_resources(dev, &buffer); pnpacpi_set_resources()
103 static int pnpacpi_disable_resources(struct pnp_dev *dev) pnpacpi_disable_resources() argument
108 dev_dbg(&dev->dev, "disable resources\n"); pnpacpi_disable_resources()
110 acpi_dev = ACPI_COMPANION(&dev->dev); pnpacpi_disable_resources()
112 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); pnpacpi_disable_resources()
116 /* acpi_unregister_gsi(pnp_irq(dev, 0)); */ pnpacpi_disable_resources()
129 static bool pnpacpi_can_wakeup(struct pnp_dev *dev) pnpacpi_can_wakeup() argument
131 struct acpi_device *acpi_dev = ACPI_COMPANION(&dev->dev); pnpacpi_can_wakeup()
134 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); pnpacpi_can_wakeup()
141 static int pnpacpi_suspend(struct pnp_dev *dev, pm_message_t state) pnpacpi_suspend() argument
143 struct acpi_device *acpi_dev = ACPI_COMPANION(&dev->dev); pnpacpi_suspend()
147 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); pnpacpi_suspend()
151 if (device_can_wakeup(&dev->dev)) { pnpacpi_suspend()
152 error = acpi_pm_device_sleep_wake(&dev->dev, pnpacpi_suspend()
153 device_may_wakeup(&dev->dev)); pnpacpi_suspend()
159 int power_state = acpi_pm_device_sleep_state(&dev->dev, NULL, pnpacpi_suspend()
177 static int pnpacpi_resume(struct pnp_dev *dev) pnpacpi_resume() argument
179 struct acpi_device *acpi_dev = ACPI_COMPANION(&dev->dev); pnpacpi_resume()
183 dev_dbg(&dev->dev, "ACPI device not found in %s!\n", __func__); pnpacpi_resume()
187 if (device_may_wakeup(&dev->dev)) pnpacpi_resume()
188 acpi_pm_device_sleep_wake(&dev->dev, false); pnpacpi_resume()
224 struct pnp_dev *dev; pnpacpi_add_device() local
247 dev = pnp_alloc_dev(&pnpacpi_protocol, num, pnpid); pnpacpi_add_device()
248 if (!dev) pnpacpi_add_device()
251 ACPI_COMPANION_SET(&dev->dev, device); pnpacpi_add_device()
252 dev->data = device; pnpacpi_add_device()
254 dev->active = device->status.enabled; pnpacpi_add_device()
256 dev->capabilities |= PNP_CONFIGURABLE; pnpacpi_add_device()
257 dev->capabilities |= PNP_READ; pnpacpi_add_device()
258 if (device->flags.dynamic_status && (dev->capabilities & PNP_CONFIGURABLE)) pnpacpi_add_device()
259 dev->capabilities |= PNP_WRITE; pnpacpi_add_device()
261 dev->capabilities |= PNP_REMOVABLE; pnpacpi_add_device()
263 dev->capabilities |= PNP_DISABLE; pnpacpi_add_device()
266 strncpy(dev->name, acpi_device_name(device), sizeof(dev->name)); pnpacpi_add_device()
268 strncpy(dev->name, acpi_device_bid(device), sizeof(dev->name)); pnpacpi_add_device()
270 if (dev->active) pnpacpi_add_device()
271 pnpacpi_parse_allocated_resource(dev); pnpacpi_add_device()
273 if (dev->capabilities & PNP_CONFIGURABLE) pnpacpi_add_device()
274 pnpacpi_parse_resource_option_data(dev); pnpacpi_add_device()
281 pnp_add_id(dev, id->id); pnpacpi_add_device()
285 if (!dev->active) pnpacpi_add_device()
286 pnp_init_resources(dev); pnpacpi_add_device()
288 error = pnp_add_device(dev); pnpacpi_add_device()
290 put_device(&dev->dev); pnpacpi_add_device()
/linux-4.4.14/drivers/input/keyboard/
H A Dadp5520-keys.c24 static void adp5520_keys_report_event(struct adp5520_keys *dev, adp5520_keys_report_event() argument
31 input_report_key(dev->input, dev->keycode[i], value); adp5520_keys_report_event()
33 input_sync(dev->input); adp5520_keys_report_event()
39 struct adp5520_keys *dev; adp5520_keys_notifier() local
43 dev = container_of(nb, struct adp5520_keys, notifier); adp5520_keys_notifier()
46 adp5520_read(dev->master, ADP5520_KP_INT_STAT_1, &reg_val_lo); adp5520_keys_notifier()
47 adp5520_read(dev->master, ADP5520_KP_INT_STAT_2, &reg_val_hi); adp5520_keys_notifier()
51 adp5520_read(dev->master, ADP5520_KP_INT_STAT_1, &reg_val_lo); adp5520_keys_notifier()
52 adp5520_read(dev->master, ADP5520_KP_INT_STAT_2, &reg_val_hi); adp5520_keys_notifier()
54 adp5520_keys_report_event(dev, keymask, 1); adp5520_keys_notifier()
58 adp5520_read(dev->master, ADP5520_KR_INT_STAT_1, &reg_val_lo); adp5520_keys_notifier()
59 adp5520_read(dev->master, ADP5520_KR_INT_STAT_2, &reg_val_hi); adp5520_keys_notifier()
63 adp5520_read(dev->master, ADP5520_KR_INT_STAT_1, &reg_val_lo); adp5520_keys_notifier()
64 adp5520_read(dev->master, ADP5520_KR_INT_STAT_2, &reg_val_hi); adp5520_keys_notifier()
66 adp5520_keys_report_event(dev, keymask, 0); adp5520_keys_notifier()
74 struct adp5520_keys_platform_data *pdata = dev_get_platdata(&pdev->dev); adp5520_keys_probe()
76 struct adp5520_keys *dev; adp5520_keys_probe() local
81 dev_err(&pdev->dev, "only ADP5520 supports Keypad\n"); adp5520_keys_probe()
86 dev_err(&pdev->dev, "missing platform data\n"); adp5520_keys_probe()
93 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); adp5520_keys_probe()
94 if (!dev) { adp5520_keys_probe()
95 dev_err(&pdev->dev, "failed to alloc memory\n"); adp5520_keys_probe()
99 input = devm_input_allocate_device(&pdev->dev); adp5520_keys_probe()
103 dev->master = pdev->dev.parent; adp5520_keys_probe()
104 dev->input = input; adp5520_keys_probe()
108 input->dev.parent = &pdev->dev; adp5520_keys_probe()
110 input_set_drvdata(input, dev); adp5520_keys_probe()
117 input->keycodesize = sizeof(dev->keycode[0]); adp5520_keys_probe()
119 input->keycode = dev->keycode; adp5520_keys_probe()
121 memcpy(dev->keycode, pdata->keymap, adp5520_keys_probe()
131 __set_bit(dev->keycode[i], input->keybit); adp5520_keys_probe()
136 dev_err(&pdev->dev, "unable to register input device\n"); adp5520_keys_probe()
142 ret = adp5520_set_bits(dev->master, ADP5520_GPIO_CFG_1, en_mask); adp5520_keys_probe()
151 ret |= adp5520_set_bits(dev->master, ADP5520_LED_CONTROL, adp5520_keys_probe()
154 ret |= adp5520_set_bits(dev->master, ADP5520_GPIO_PULLUP, adp5520_keys_probe()
158 dev_err(&pdev->dev, "failed to write\n"); adp5520_keys_probe()
162 dev->notifier.notifier_call = adp5520_keys_notifier; adp5520_keys_probe()
163 ret = adp5520_register_notifier(dev->master, &dev->notifier, adp5520_keys_probe()
166 dev_err(&pdev->dev, "failed to register notifier\n"); adp5520_keys_probe()
170 platform_set_drvdata(pdev, dev); adp5520_keys_probe()
176 struct adp5520_keys *dev = platform_get_drvdata(pdev); adp5520_keys_remove() local
178 adp5520_unregister_notifier(dev->master, &dev->notifier, adp5520_keys_remove()
/linux-4.4.14/drivers/usb/gadget/udc/
H A Dgr_udc.c102 dev_dbg(ep->dev->dev, "%s: 0x%p, %d bytes data%s:\n", str, req, buflen, gr_dbgprint_request()
108 static void gr_dbgprint_devreq(struct gr_udc *dev, u8 type, u8 request, gr_dbgprint_devreq() argument
111 dev_vdbg(dev->dev, "REQ: %02x.%02x v%04x i%04x l%04x\n", gr_dbgprint_devreq()
119 static void gr_dbgprint_devreq(struct gr_udc *dev, u8 type, u8 request, gr_dbgprint_devreq() argument
189 struct gr_udc *dev = seq->private; gr_seq_show() local
190 u32 control = gr_read32(&dev->regs->control); gr_seq_show()
191 u32 status = gr_read32(&dev->regs->status); gr_seq_show()
195 usb_state_string(dev->gadget.state)); gr_seq_show()
199 seq_printf(seq, "ep0state = %s\n", gr_ep0state_string(dev->ep0state)); gr_seq_show()
200 seq_printf(seq, "irq_enabled = %d\n", dev->irq_enabled); gr_seq_show()
201 seq_printf(seq, "remote_wakeup = %d\n", dev->remote_wakeup); gr_seq_show()
202 seq_printf(seq, "test_mode = %d\n", dev->test_mode); gr_seq_show()
205 list_for_each_entry(ep, &dev->ep_list, ep_list) gr_seq_show()
224 static void gr_dfs_create(struct gr_udc *dev) gr_dfs_create() argument
228 dev->dfs_root = debugfs_create_dir(dev_name(dev->dev), NULL); gr_dfs_create()
229 dev->dfs_state = debugfs_create_file(name, 0444, dev->dfs_root, dev, gr_dfs_create()
233 static void gr_dfs_delete(struct gr_udc *dev) gr_dfs_delete() argument
236 debugfs_remove(dev->dfs_state); gr_dfs_delete()
237 debugfs_remove(dev->dfs_root); gr_dfs_delete()
242 static void gr_dfs_create(struct gr_udc *dev) {} gr_dfs_delete() argument
243 static void gr_dfs_delete(struct gr_udc *dev) {} gr_dfs_delete() argument
256 dma_desc = dma_pool_alloc(ep->dev->desc_pool, gfp_flags, &paddr); gr_alloc_dma_desc()
258 dev_err(ep->dev->dev, "Could not allocate from DMA pool\n"); gr_alloc_dma_desc()
268 static inline void gr_free_dma_desc(struct gr_udc *dev, gr_free_dma_desc() argument
271 dma_pool_free(dev->desc_pool, desc, (dma_addr_t)desc->paddr); gr_free_dma_desc()
275 static void gr_free_dma_desc_chain(struct gr_udc *dev, struct gr_request *req) gr_free_dma_desc_chain() argument
287 gr_free_dma_desc(dev, desc); gr_free_dma_desc_chain()
295 static void gr_ep0_setup(struct gr_udc *dev, struct gr_request *req);
301 * Must be called with dev->lock held and irqs disabled.
305 __releases(&dev->lock)
306 __acquires(&dev->lock)
308 struct gr_udc *dev; variable in typeref:struct:gr_udc
317 dev = ep->dev;
318 usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in);
319 gr_free_dma_desc_chain(dev, req);
335 dev_dbg(ep->dev->dev, "Overflow for ep %s\n",
351 if (req == dev->ep0reqo && !status) {
353 gr_ep0_setup(dev, req);
355 dev_err(dev->dev,
358 spin_unlock(&dev->lock);
362 spin_lock(&dev->lock);
383 * Must be called with dev->lock held and with !ep->stopped.
425 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
440 * Must be called with dev->lock held.
529 gr_free_dma_desc_chain(ep->dev, req); gr_setup_out_desc_list()
591 gr_free_dma_desc_chain(ep->dev, req); gr_setup_in_desc_list()
596 /* Must be called with dev->lock held */ gr_queue()
599 struct gr_udc *dev = ep->dev; gr_queue() local
603 dev_err(dev->dev, "No ep descriptor for %s\n", ep->ep.name); gr_queue()
608 dev_err(dev->dev, gr_queue()
614 if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) { gr_queue()
615 dev_err(dev->dev, "-ESHUTDOWN"); gr_queue()
620 if (dev->ep0state == GR_EP0_SUSPEND) { gr_queue()
621 dev_err(dev->dev, "-EBUSY"); gr_queue()
626 ret = usb_gadget_map_request(&dev->gadget, &req->req, ep->is_in); gr_queue()
628 dev_err(dev->dev, "usb_gadget_map_request"); gr_queue()
653 * Must be called with dev->lock held.
670 * Must be called with dev->lock held and irqs disabled.
689 * Must be called with dev->lock held.
705 * Must be called with dev->lock held.
707 static void gr_control_stall(struct gr_udc *dev) gr_control_stall() argument
711 epctrl = gr_read32(&dev->epo[0].regs->epctrl); gr_control_stall()
712 gr_write32(&dev->epo[0].regs->epctrl, epctrl | GR_EPCTRL_CS); gr_control_stall()
713 epctrl = gr_read32(&dev->epi[0].regs->epctrl); gr_control_stall()
714 gr_write32(&dev->epi[0].regs->epctrl, epctrl | GR_EPCTRL_CS); gr_control_stall()
716 dev->ep0state = GR_EP0_STALL; gr_control_stall()
722 * Must be called with dev->lock held.
739 gr_control_stall(ep->dev); gr_ep_halt_wedge()
740 dev_dbg(ep->dev->dev, "EP: stall ep0\n"); gr_ep_halt_wedge()
746 dev_dbg(ep->dev->dev, "EP: %s halt %s\n", gr_ep_halt_wedge()
769 /* Must be called with dev->lock held */ gr_set_ep0state()
770 static inline void gr_set_ep0state(struct gr_udc *dev, enum gr_ep0state value) gr_set_ep0state() argument
772 if (dev->ep0state != value) gr_set_ep0state()
773 dev_vdbg(dev->dev, "STATE: ep0state=%s\n", gr_set_ep0state()
775 dev->ep0state = value; gr_set_ep0state()
781 * Must be called with dev->lock held.
783 static void gr_disable_interrupts_and_pullup(struct gr_udc *dev) gr_disable_interrupts_and_pullup() argument
785 gr_write32(&dev->regs->control, 0); gr_disable_interrupts_and_pullup()
787 dev->irq_enabled = 0; gr_disable_interrupts_and_pullup()
793 * Must be called with dev->lock held and irqs disabled.
795 static void gr_stop_activity(struct gr_udc *dev) gr_stop_activity() argument
799 list_for_each_entry(ep, &dev->ep_list, ep_list) gr_stop_activity()
802 gr_disable_interrupts_and_pullup(dev); gr_stop_activity()
804 gr_set_ep0state(dev, GR_EP0_DISCONNECT); gr_stop_activity()
805 usb_gadget_set_state(&dev->gadget, USB_STATE_NOTATTACHED); gr_stop_activity()
815 struct gr_udc *dev; gr_ep0_testmode_complete() local
819 dev = ep->dev; gr_ep0_testmode_complete()
821 spin_lock(&dev->lock); gr_ep0_testmode_complete()
823 control = gr_read32(&dev->regs->control); gr_ep0_testmode_complete()
824 control |= GR_CONTROL_TM | (dev->test_mode << GR_CONTROL_TS_POS); gr_ep0_testmode_complete()
825 gr_write32(&dev->regs->control, control); gr_ep0_testmode_complete()
827 spin_unlock(&dev->lock); gr_ep0_testmode_complete()
838 * Must be called with dev->lock held.
840 static int gr_ep0_respond(struct gr_udc *dev, u8 *buf, int length, gr_ep0_respond() argument
844 u8 *reqbuf = dev->ep0reqi->req.buf; gr_ep0_respond()
850 dev->ep0reqi->req.length = length; gr_ep0_respond()
851 dev->ep0reqi->req.complete = complete; gr_ep0_respond()
853 status = gr_queue_int(&dev->epi[0], dev->ep0reqi, GFP_ATOMIC); gr_ep0_respond()
855 dev_err(dev->dev, gr_ep0_respond()
864 * Must be called with dev->lock held.
866 static inline int gr_ep0_respond_u16(struct gr_udc *dev, u16 response) gr_ep0_respond_u16() argument
870 return gr_ep0_respond(dev, (u8 *)&le_response, 2, gr_ep0_respond_u16()
877 * Must be called with dev->lock held.
879 static inline int gr_ep0_respond_empty(struct gr_udc *dev) gr_ep0_respond_empty() argument
881 return gr_ep0_respond(dev, NULL, 0, gr_ep0_dummy_complete); gr_ep0_respond_empty()
889 * Must be called with dev->lock held.
891 static void gr_set_address(struct gr_udc *dev, u8 address) gr_set_address() argument
895 control = gr_read32(&dev->regs->control) & ~GR_CONTROL_UA_MASK; gr_set_address()
898 gr_write32(&dev->regs->control, control); gr_set_address()
905 * Must be called with dev->lock held.
907 static int gr_device_request(struct gr_udc *dev, u8 type, u8 request, gr_device_request() argument
915 dev_dbg(dev->dev, "STATUS: address %d\n", value & 0xff); gr_device_request()
916 gr_set_address(dev, value & 0xff); gr_device_request()
918 usb_gadget_set_state(&dev->gadget, USB_STATE_ADDRESS); gr_device_request()
920 usb_gadget_set_state(&dev->gadget, USB_STATE_DEFAULT); gr_device_request()
921 return gr_ep0_respond_empty(dev); gr_device_request()
925 response = 0x0001 | (dev->remote_wakeup ? 0x0002 : 0); gr_device_request()
926 return gr_ep0_respond_u16(dev, response); gr_device_request()
932 dev->remote_wakeup = 1; gr_device_request()
933 return gr_ep0_respond_empty(dev); gr_device_request()
939 dev->test_mode = test; gr_device_request()
940 return gr_ep0_respond(dev, NULL, 0, gr_device_request()
950 dev->remote_wakeup = 0; gr_device_request()
951 return gr_ep0_respond_empty(dev); gr_device_request()
963 * Must be called with dev->lock held.
965 static int gr_interface_request(struct gr_udc *dev, u8 type, u8 request, gr_interface_request() argument
968 if (dev->gadget.state != USB_STATE_CONFIGURED) gr_interface_request()
979 return gr_ep0_respond_u16(dev, 0x0000); gr_interface_request()
997 * Must be called with dev->lock held.
999 static int gr_endpoint_request(struct gr_udc *dev, u8 type, u8 request, gr_endpoint_request() argument
1008 if ((is_in && epnum >= dev->nepi) || (!is_in && epnum >= dev->nepo)) gr_endpoint_request()
1011 if (dev->gadget.state != USB_STATE_CONFIGURED && epnum != 0) gr_endpoint_request()
1014 ep = (is_in ? &dev->epi[epnum] : &dev->epo[epnum]); gr_endpoint_request()
1019 return gr_ep0_respond_u16(dev, halted ? 0x0001 : 0); gr_endpoint_request()
1026 status = gr_ep0_respond_empty(dev); gr_endpoint_request()
1038 status = gr_ep0_respond_empty(dev); gr_endpoint_request()
1047 /* Must be called with dev->lock held */ gr_ep0out_requeue()
1048 static void gr_ep0out_requeue(struct gr_udc *dev) gr_ep0out_requeue() argument
1050 int ret = gr_queue_int(&dev->epo[0], dev->ep0reqo, GFP_ATOMIC); gr_ep0out_requeue()
1053 dev_err(dev->dev, "Could not queue ep0out setup request: %d\n", gr_ep0out_requeue()
1060 * Must be called with dev->lock held and irqs disabled
1062 static void gr_ep0_setup(struct gr_udc *dev, struct gr_request *req)
1063 __releases(&dev->lock)
1064 __acquires(&dev->lock)
1080 if (dev->ep0state == GR_EP0_STALL) {
1081 gr_set_ep0state(dev, GR_EP0_SETUP);
1086 if (dev->ep0state == GR_EP0_ISTATUS) {
1087 gr_set_ep0state(dev, GR_EP0_SETUP);
1089 dev_dbg(dev->dev,
1094 } else if (dev->ep0state != GR_EP0_SETUP) {
1095 dev_info(dev->dev,
1097 gr_ep0state_string(dev->ep0state));
1098 gr_control_stall(dev); variable
1099 gr_set_ep0state(dev, GR_EP0_SETUP);
1102 dev_dbg(dev->dev, "Unexpected ZLP at state %s\n",
1103 gr_ep0state_string(dev->ep0state));
1117 gr_dbgprint_devreq(dev, type, request, value, index, length);
1122 gr_set_ep0state(dev, GR_EP0_IDATA);
1124 gr_set_ep0state(dev, GR_EP0_ODATA);
1131 status = gr_device_request(dev, type, request,
1135 status = gr_endpoint_request(dev, type, request,
1139 status = gr_interface_request(dev, type, request,
1146 spin_unlock(&dev->lock);
1148 dev_vdbg(dev->dev, "DELEGATE\n");
1149 status = dev->driver->setup(&dev->gadget, &u.ctrl);
1151 spin_lock(&dev->lock);
1156 dev_vdbg(dev->dev, "STALL\n");
1157 gr_control_stall(dev); variable
1163 dev_dbg(dev->dev, "STATUS: deconfigured\n");
1164 usb_gadget_set_state(&dev->gadget, USB_STATE_ADDRESS);
1167 dev_dbg(dev->dev, "STATUS: configured: %d\n", value);
1168 usb_gadget_set_state(&dev->gadget,
1174 if (dev->ep0state == GR_EP0_ODATA)
1175 gr_set_ep0state(dev, GR_EP0_OSTATUS);
1176 else if (dev->ep0state == GR_EP0_IDATA)
1177 gr_set_ep0state(dev, GR_EP0_ISTATUS);
1179 gr_set_ep0state(dev, GR_EP0_SETUP);
1182 gr_ep0out_requeue(dev); variable
1188 /* Must be called with dev->lock held and irqs disabled */ gr_vbus_connected()
1189 static void gr_vbus_connected(struct gr_udc *dev, u32 status) gr_vbus_connected() argument
1193 dev->gadget.speed = GR_SPEED(status); gr_vbus_connected()
1194 usb_gadget_set_state(&dev->gadget, USB_STATE_POWERED); gr_vbus_connected()
1199 gr_write32(&dev->regs->control, control); gr_vbus_connected()
1202 /* Must be called with dev->lock held */ gr_enable_vbus_detect()
1203 static void gr_enable_vbus_detect(struct gr_udc *dev) gr_enable_vbus_detect() argument
1207 dev->irq_enabled = 1; gr_enable_vbus_detect()
1209 gr_write32(&dev->regs->control, GR_CONTROL_VI); gr_enable_vbus_detect()
1212 status = gr_read32(&dev->regs->status); gr_enable_vbus_detect()
1214 gr_vbus_connected(dev, status); gr_enable_vbus_detect()
1217 /* Must be called with dev->lock held and irqs disabled */ gr_vbus_disconnected()
1218 static void gr_vbus_disconnected(struct gr_udc *dev) gr_vbus_disconnected() argument
1220 gr_stop_activity(dev); gr_vbus_disconnected()
1223 if (dev->driver && dev->driver->disconnect) { gr_vbus_disconnected()
1224 spin_unlock(&dev->lock); gr_vbus_disconnected()
1226 dev->driver->disconnect(&dev->gadget); gr_vbus_disconnected()
1228 spin_lock(&dev->lock); gr_vbus_disconnected()
1231 gr_enable_vbus_detect(dev); gr_vbus_disconnected()
1234 /* Must be called with dev->lock held and irqs disabled */ gr_udc_usbreset()
1235 static void gr_udc_usbreset(struct gr_udc *dev, u32 status) gr_udc_usbreset() argument
1237 gr_set_address(dev, 0); gr_udc_usbreset()
1238 gr_set_ep0state(dev, GR_EP0_SETUP); gr_udc_usbreset()
1239 usb_gadget_set_state(&dev->gadget, USB_STATE_DEFAULT); gr_udc_usbreset()
1240 dev->gadget.speed = GR_SPEED(status); gr_udc_usbreset()
1242 gr_ep_nuke(&dev->epo[0]); gr_udc_usbreset()
1243 gr_ep_nuke(&dev->epi[0]); gr_udc_usbreset()
1244 dev->epo[0].stopped = 0; gr_udc_usbreset()
1245 dev->epi[0].stopped = 0; gr_udc_usbreset()
1246 gr_ep0out_requeue(dev); gr_udc_usbreset()
1255 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
1280 * Must be called with dev->lock held, irqs disabled and with !ep->stopped.
1288 struct gr_udc *dev = ep->dev; gr_handle_out_ep() local
1307 if ((ep == &dev->epo[0]) && (dev->ep0state == GR_EP0_OSTATUS)) { gr_handle_out_ep()
1312 * ep0_setup that can change dev->ep0state. gr_handle_out_ep()
1314 gr_ep0_respond_empty(dev); gr_handle_out_ep()
1315 gr_set_ep0state(dev, GR_EP0_SETUP); gr_handle_out_ep()
1334 * Must be called with dev->lock held and irqs disabled.
1336 static int gr_handle_state_changes(struct gr_udc *dev) gr_handle_state_changes() argument
1338 u32 status = gr_read32(&dev->regs->status); gr_handle_state_changes()
1340 int powstate = !(dev->gadget.state == USB_STATE_NOTATTACHED || gr_handle_state_changes()
1341 dev->gadget.state == USB_STATE_ATTACHED); gr_handle_state_changes()
1345 dev_dbg(dev->dev, "STATUS: vbus valid detected\n"); gr_handle_state_changes()
1346 gr_vbus_connected(dev, status); gr_handle_state_changes()
1352 dev_dbg(dev->dev, "STATUS: vbus invalid detected\n"); gr_handle_state_changes()
1353 gr_vbus_disconnected(dev); gr_handle_state_changes()
1359 dev_dbg(dev->dev, "STATUS: USB reset - speed is %s\n", gr_handle_state_changes()
1361 gr_write32(&dev->regs->status, GR_STATUS_UR); gr_handle_state_changes()
1362 gr_udc_usbreset(dev, status); gr_handle_state_changes()
1367 if (dev->gadget.speed != GR_SPEED(status)) { gr_handle_state_changes()
1368 dev_dbg(dev->dev, "STATUS: USB Speed change to %s\n", gr_handle_state_changes()
1370 dev->gadget.speed = GR_SPEED(status); gr_handle_state_changes()
1375 if ((dev->ep0state != GR_EP0_SUSPEND) && !(status & GR_STATUS_SU)) { gr_handle_state_changes()
1376 dev_dbg(dev->dev, "STATUS: USB suspend\n"); gr_handle_state_changes()
1377 gr_set_ep0state(dev, GR_EP0_SUSPEND); gr_handle_state_changes()
1378 dev->suspended_from = dev->gadget.state; gr_handle_state_changes()
1379 usb_gadget_set_state(&dev->gadget, USB_STATE_SUSPENDED); gr_handle_state_changes()
1381 if ((dev->gadget.speed != USB_SPEED_UNKNOWN) && gr_handle_state_changes()
1382 dev->driver && dev->driver->suspend) { gr_handle_state_changes()
1383 spin_unlock(&dev->lock); gr_handle_state_changes()
1385 dev->driver->suspend(&dev->gadget); gr_handle_state_changes()
1387 spin_lock(&dev->lock); gr_handle_state_changes()
1393 if ((dev->ep0state == GR_EP0_SUSPEND) && (status & GR_STATUS_SU)) { gr_handle_state_changes()
1394 dev_dbg(dev->dev, "STATUS: USB resume\n"); gr_handle_state_changes()
1395 if (dev->suspended_from == USB_STATE_POWERED) gr_handle_state_changes()
1396 gr_set_ep0state(dev, GR_EP0_DISCONNECT); gr_handle_state_changes()
1398 gr_set_ep0state(dev, GR_EP0_SETUP); gr_handle_state_changes()
1399 usb_gadget_set_state(&dev->gadget, dev->suspended_from); gr_handle_state_changes()
1401 if ((dev->gadget.speed != USB_SPEED_UNKNOWN) && gr_handle_state_changes()
1402 dev->driver && dev->driver->resume) { gr_handle_state_changes()
1403 spin_unlock(&dev->lock); gr_handle_state_changes()
1405 dev->driver->resume(&dev->gadget); gr_handle_state_changes()
1407 spin_lock(&dev->lock); gr_handle_state_changes()
1418 struct gr_udc *dev = _dev; gr_irq_handler() local
1424 spin_lock_irqsave(&dev->lock, flags); gr_irq_handler()
1426 if (!dev->irq_enabled) gr_irq_handler()
1434 for (i = 0; i < dev->nepi; i++) { gr_irq_handler()
1435 ep = &dev->epi[i]; gr_irq_handler()
1441 for (i = 0; i < dev->nepo; i++) { gr_irq_handler()
1442 ep = &dev->epo[i]; gr_irq_handler()
1448 handled = gr_handle_state_changes(dev) || handled; gr_irq_handler()
1455 list_for_each_entry(ep, &dev->ep_list, ep_list) { gr_irq_handler()
1457 dev_err(dev->dev, gr_irq_handler()
1466 spin_unlock_irqrestore(&dev->lock, flags); gr_irq_handler()
1474 struct gr_udc *dev = _dev; gr_irq() local
1476 if (!dev->irq_enabled) gr_irq()
1489 struct gr_udc *dev; gr_ep_enable() local
1501 dev = ep->dev; gr_ep_enable()
1504 if (ep == &dev->epo[0] || ep == &dev->epi[0]) gr_ep_enable()
1507 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) gr_ep_enable()
1520 if ((!ep->is_in && ep->num >= dev->nepo) || gr_ep_enable()
1521 (ep->is_in && ep->num >= dev->nepi)) gr_ep_enable()
1533 dev_err(dev->dev, "Unknown transfer type for %s\n", gr_ep_enable()
1546 dev_err(dev->dev, gr_ep_enable()
1551 dev_err(dev->dev, gr_ep_enable()
1555 dev_err(dev->dev, "Hw buffer size %d < max payload %d * %d\n", gr_ep_enable()
1559 dev_err(dev->dev, "Max payload cannot be set to 0\n"); gr_ep_enable()
1562 dev_err(dev->dev, "Requested max payload %d > limit %d\n", gr_ep_enable()
1567 spin_lock(&ep->dev->lock); gr_ep_enable()
1570 spin_unlock(&ep->dev->lock); gr_ep_enable()
1612 spin_unlock(&ep->dev->lock); gr_ep_enable()
1614 dev_dbg(ep->dev->dev, "EP: %s enabled - %s with %d bytes/buffer\n", gr_ep_enable()
1623 struct gr_udc *dev; gr_ep_disable() local
1630 dev = ep->dev; gr_ep_disable()
1633 if (ep == &dev->epo[0] || ep == &dev->epi[0]) gr_ep_disable()
1636 if (dev->ep0state == GR_EP0_SUSPEND) gr_ep_disable()
1639 dev_dbg(ep->dev->dev, "EP: disable %s\n", ep->ep.name); gr_ep_disable()
1641 spin_lock_irqsave(&dev->lock, flags); gr_ep_disable()
1647 spin_unlock_irqrestore(&dev->lock, flags); gr_ep_disable()
1677 struct gr_udc *dev; gr_queue_ext() local
1685 dev = ep->dev; gr_queue_ext()
1687 spin_lock(&ep->dev->lock); gr_queue_ext()
1695 if ((ep == &dev->epi[0]) && (dev->ep0state == GR_EP0_ODATA)) { gr_queue_ext()
1696 ep = &dev->epo[0]; gr_queue_ext()
1697 ep->ep.driver_data = dev->epi[0].ep.driver_data; gr_queue_ext()
1705 spin_unlock(&ep->dev->lock); gr_queue_ext()
1715 struct gr_udc *dev; gr_dequeue() local
1722 dev = ep->dev; gr_dequeue()
1723 if (!dev->driver) gr_dequeue()
1727 if (dev->ep0state == GR_EP0_SUSPEND) gr_dequeue()
1730 spin_lock_irqsave(&dev->lock, flags); gr_dequeue()
1757 spin_unlock_irqrestore(&dev->lock, flags); gr_dequeue()
1772 spin_lock(&ep->dev->lock); gr_set_halt_wedge()
1783 spin_unlock(&ep->dev->lock); gr_set_halt_wedge()
1834 dev_vdbg(ep->dev->dev, "EP: flush fifo %s\n", ep->ep.name); gr_fifo_flush()
1836 spin_lock(&ep->dev->lock); gr_fifo_flush()
1842 spin_unlock(&ep->dev->lock); gr_fifo_flush()
1866 struct gr_udc *dev; gr_get_frame() local
1870 dev = container_of(_gadget, struct gr_udc, gadget); gr_get_frame()
1871 return gr_read32(&dev->regs->status) & GR_STATUS_FN_MASK; gr_get_frame()
1876 struct gr_udc *dev; gr_wakeup() local
1880 dev = container_of(_gadget, struct gr_udc, gadget); gr_wakeup()
1883 if (!dev->remote_wakeup) gr_wakeup()
1886 spin_lock(&dev->lock); gr_wakeup()
1888 gr_write32(&dev->regs->control, gr_wakeup()
1889 gr_read32(&dev->regs->control) | GR_CONTROL_RW); gr_wakeup()
1891 spin_unlock(&dev->lock); gr_wakeup()
1898 struct gr_udc *dev; gr_pullup() local
1903 dev = container_of(_gadget, struct gr_udc, gadget); gr_pullup()
1905 spin_lock(&dev->lock); gr_pullup()
1907 control = gr_read32(&dev->regs->control); gr_pullup()
1912 gr_write32(&dev->regs->control, control); gr_pullup()
1914 spin_unlock(&dev->lock); gr_pullup()
1922 struct gr_udc *dev = to_gr_udc(gadget); gr_udc_start() local
1924 spin_lock(&dev->lock); gr_udc_start()
1928 dev->driver = driver; gr_udc_start()
1931 gr_enable_vbus_detect(dev); gr_udc_start()
1933 spin_unlock(&dev->lock); gr_udc_start()
1940 struct gr_udc *dev = to_gr_udc(gadget); gr_udc_stop() local
1943 spin_lock_irqsave(&dev->lock, flags); gr_udc_stop()
1945 dev->driver = NULL; gr_udc_stop()
1946 gr_stop_activity(dev); gr_udc_stop()
1948 spin_unlock_irqrestore(&dev->lock, flags); gr_udc_stop()
1977 /* Must be called with dev->lock held */ gr_ep_init()
1978 static int gr_ep_init(struct gr_udc *dev, int num, int is_in, u32 maxplimit) gr_ep_init() argument
1986 ep = &dev->epi[num]; gr_ep_init()
1988 ep->regs = &dev->regs->epi[num]; gr_ep_init()
1990 ep = &dev->epo[num]; gr_ep_init()
1992 ep->regs = &dev->regs->epo[num]; gr_ep_init()
1998 ep->dev = dev; gr_ep_init()
2004 buf = devm_kzalloc(dev->dev, PAGE_SIZE, GFP_DMA | GFP_ATOMIC); gr_ep_init()
2015 dev->ep0reqi = req; /* Complete gets set as used */ gr_ep_init()
2017 dev->ep0reqo = req; /* Completion treated separately */ gr_ep_init()
2025 list_add_tail(&ep->ep.ep_list, &dev->gadget.ep_list); gr_ep_init()
2031 list_add_tail(&ep->ep_list, &dev->ep_list); gr_ep_init()
2038 ep->tailbuf = dma_alloc_coherent(dev->dev, ep->ep.maxpacket_limit, gr_ep_init()
2046 /* Must be called with dev->lock held */ gr_udc_init()
2047 static int gr_udc_init(struct gr_udc *dev) gr_udc_init() argument
2049 struct device_node *np = dev->dev->of_node; gr_udc_init()
2056 gr_set_address(dev, 0); gr_udc_init()
2058 INIT_LIST_HEAD(&dev->gadget.ep_list); gr_udc_init()
2059 dev->gadget.speed = USB_SPEED_UNKNOWN; gr_udc_init()
2060 dev->gadget.ep0 = &dev->epi[0].ep; gr_udc_init()
2062 INIT_LIST_HEAD(&dev->ep_list); gr_udc_init()
2063 gr_set_ep0state(dev, GR_EP0_DISCONNECT); gr_udc_init()
2065 for (i = 0; i < dev->nepo; i++) { gr_udc_init()
2068 ret = gr_ep_init(dev, i, 0, bufsize); gr_udc_init()
2073 for (i = 0; i < dev->nepi; i++) { gr_udc_init()
2076 ret = gr_ep_init(dev, i, 1, bufsize); gr_udc_init()
2082 dev->remote_wakeup = 0; gr_udc_init()
2087 gr_write32(&dev->epo[0].regs->epctrl, epctrl_val); gr_udc_init()
2088 gr_write32(&dev->epi[0].regs->epctrl, epctrl_val | GR_EPCTRL_PI); gr_udc_init()
2089 gr_write32(&dev->epo[0].regs->dmactrl, dmactrl_val); gr_udc_init()
2090 gr_write32(&dev->epi[0].regs->dmactrl, dmactrl_val); gr_udc_init()
2095 static void gr_ep_remove(struct gr_udc *dev, int num, int is_in) gr_ep_remove() argument
2100 ep = &dev->epi[num]; gr_ep_remove()
2102 ep = &dev->epo[num]; gr_ep_remove()
2105 dma_free_coherent(dev->dev, ep->ep.maxpacket_limit, gr_ep_remove()
2111 struct gr_udc *dev = platform_get_drvdata(pdev); gr_remove() local
2114 if (dev->added) gr_remove()
2115 usb_del_gadget_udc(&dev->gadget); /* Shuts everything down */ gr_remove()
2116 if (dev->driver) gr_remove()
2119 gr_dfs_delete(dev); gr_remove()
2120 dma_pool_destroy(dev->desc_pool); gr_remove()
2123 gr_free_request(&dev->epi[0].ep, &dev->ep0reqi->req); gr_remove()
2124 gr_free_request(&dev->epo[0].ep, &dev->ep0reqo->req); gr_remove()
2126 for (i = 0; i < dev->nepo; i++) gr_remove()
2127 gr_ep_remove(dev, i, 0); gr_remove()
2128 for (i = 0; i < dev->nepi; i++) gr_remove()
2129 gr_ep_remove(dev, i, 1); gr_remove()
2133 static int gr_request_irq(struct gr_udc *dev, int irq) gr_request_irq() argument
2135 return devm_request_threaded_irq(dev->dev, irq, gr_irq, gr_irq_handler, gr_request_irq()
2136 IRQF_SHARED, driver_name, dev); gr_request_irq()
2141 struct gr_udc *dev; gr_probe() local
2147 dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); gr_probe()
2148 if (!dev) gr_probe()
2150 dev->dev = &pdev->dev; gr_probe()
2153 regs = devm_ioremap_resource(dev->dev, res); gr_probe()
2157 dev->irq = platform_get_irq(pdev, 0); gr_probe()
2158 if (dev->irq <= 0) { gr_probe()
2159 dev_err(dev->dev, "No irq found\n"); gr_probe()
2164 dev->irqi = platform_get_irq(pdev, 1); gr_probe()
2165 if (dev->irqi > 0) { gr_probe()
2166 dev->irqo = platform_get_irq(pdev, 2); gr_probe()
2167 if (dev->irqo <= 0) { gr_probe()
2168 dev_err(dev->dev, "Found irqi but not irqo\n"); gr_probe()
2172 dev->irqi = 0; gr_probe()
2175 dev->gadget.name = driver_name; gr_probe()
2176 dev->gadget.max_speed = USB_SPEED_HIGH; gr_probe()
2177 dev->gadget.ops = &gr_ops; gr_probe()
2179 spin_lock_init(&dev->lock); gr_probe()
2180 dev->regs = regs; gr_probe()
2182 platform_set_drvdata(pdev, dev); gr_probe()
2185 status = gr_read32(&dev->regs->status); gr_probe()
2186 dev->nepi = ((status & GR_STATUS_NEPI_MASK) >> GR_STATUS_NEPI_POS) + 1; gr_probe()
2187 dev->nepo = ((status & GR_STATUS_NEPO_MASK) >> GR_STATUS_NEPO_POS) + 1; gr_probe()
2190 dev_err(dev->dev, "Slave mode cores are not supported\n"); gr_probe()
2197 dev->desc_pool = dma_pool_create("desc_pool", dev->dev, gr_probe()
2199 if (!dev->desc_pool) { gr_probe()
2200 dev_err(dev->dev, "Could not allocate DMA pool"); gr_probe()
2204 spin_lock(&dev->lock); gr_probe()
2207 retval = usb_add_gadget_udc(dev->dev, &dev->gadget); gr_probe()
2209 dev_err(dev->dev, "Could not add gadget udc"); gr_probe()
2212 dev->added = 1; gr_probe()
2214 retval = gr_udc_init(dev); gr_probe()
2218 gr_dfs_create(dev); gr_probe()
2221 gr_disable_interrupts_and_pullup(dev); gr_probe()
2223 retval = gr_request_irq(dev, dev->irq); gr_probe()
2225 dev_err(dev->dev, "Failed to request irq %d\n", dev->irq); gr_probe()
2229 if (dev->irqi) { gr_probe()
2230 retval = gr_request_irq(dev, dev->irqi); gr_probe()
2232 dev_err(dev->dev, "Failed to request irqi %d\n", gr_probe()
2233 dev->irqi); gr_probe()
2236 retval = gr_request_irq(dev, dev->irqo); gr_probe()
2238 dev_err(dev->dev, "Failed to request irqo %d\n", gr_probe()
2239 dev->irqo); gr_probe()
2244 if (dev->irqi) gr_probe()
2245 dev_info(dev->dev, "regs: %p, irqs %d, %d, %d\n", dev->regs, gr_probe()
2246 dev->irq, dev->irqi, dev->irqo); gr_probe()
2248 dev_info(dev->dev, "regs: %p, irq %d\n", dev->regs, dev->irq); gr_probe()
2251 spin_unlock(&dev->lock); gr_probe()
H A Dnet2272.c130 dev_dbg(ep->dev->dev, "%s %s %02x !NAK\n", assert_out_naking()
191 struct net2272 *dev; net2272_enable() local
201 dev = ep->dev; net2272_enable()
202 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) net2272_enable()
207 spin_lock_irqsave(&dev->lock, flags); net2272_enable()
224 if ((dev->gadget.speed == USB_SPEED_HIGH && max != 512) || net2272_enable()
225 (dev->gadget.speed == USB_SPEED_FULL && max > 64)) { net2272_enable()
226 spin_unlock_irqrestore(&dev->lock, flags); net2272_enable()
244 tmp = (1 << ep->num) | net2272_read(dev, IRQENB0); net2272_enable()
245 net2272_write(dev, IRQENB0, tmp); net2272_enable()
253 dev_dbg(dev->dev, "enabled %s (ep%d%s-%s) max %04x cfg %02x\n", net2272_enable()
258 spin_unlock_irqrestore(&dev->lock, flags); net2272_enable()
317 spin_lock_irqsave(&ep->dev->lock, flags); net2272_disable()
321 dev_vdbg(ep->dev->dev, "disabled %s\n", _ep->name); net2272_disable()
323 spin_unlock_irqrestore(&ep->dev->lock, flags); net2272_disable()
366 struct net2272 *dev; net2272_done() local
370 if (ep->dev->protocol_stall) { net2272_done()
384 dev = ep->dev; net2272_done()
386 usb_gadget_unmap_request(&dev->gadget, &req->req, net2272_done()
390 dev_vdbg(dev->dev, "complete %s req %p stat %d len %u/%u buf %p\n", net2272_done()
396 spin_unlock(&dev->lock); net2272_done()
398 spin_lock(&dev->lock); net2272_done()
406 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA); net2272_write_packet()
414 dev_vdbg(ep->dev->dev, "write packet %s req %p max %u len %u avail %u\n", net2272_write_packet()
430 tmp = net2272_read(ep->dev, LOCCTL); net2272_write_packet()
431 net2272_write(ep->dev, LOCCTL, tmp & ~(1 << DATA_WIDTH)); net2272_write_packet()
433 net2272_write(ep->dev, LOCCTL, tmp); net2272_write_packet()
446 dev_vdbg(ep->dev->dev, "write_fifo %s actual %d len %d\n", net2272_write_fifo()
514 u16 __iomem *ep_data = net2272_reg_addr(ep->dev, EP_DATA); net2272_read_packet()
520 dev_vdbg(ep->dev->dev, "read packet %s req %p len %u avail %u\n", net2272_read_packet()
562 dev_vdbg(ep->dev->dev, "read_fifo %s actual %d len %d\n", net2272_read_fifo()
581 dev_err(ep->dev->dev, net2272_read_fifo()
641 net2272_request_dma(struct net2272 *dev, unsigned ep, u32 buf, net2272_request_dma() argument
644 dev_vdbg(dev->dev, "request_dma ep %d buf %08x len %d dir %d\n", net2272_request_dma()
648 if (dev->dma_busy) net2272_request_dma()
657 dev->dma_busy = 1; net2272_request_dma()
662 switch (dev->dev_id) { net2272_request_dma()
674 dev->rdk1.plx9054_base_addr + DMAMODE0); net2272_request_dma()
676 writel(0x100000, dev->rdk1.plx9054_base_addr + DMALADR0); net2272_request_dma()
677 writel(buf, dev->rdk1.plx9054_base_addr + DMAPADR0); net2272_request_dma()
678 writel(len, dev->rdk1.plx9054_base_addr + DMASIZ0); net2272_request_dma()
681 dev->rdk1.plx9054_base_addr + DMADPR0); net2272_request_dma()
683 readl(dev->rdk1.plx9054_base_addr + INTCSR), net2272_request_dma()
684 dev->rdk1.plx9054_base_addr + INTCSR); net2272_request_dma()
690 net2272_write(dev, DMAREQ, net2272_request_dma()
694 (dev->dma_eot_polarity << EOT_POLARITY) | net2272_request_dma()
695 (dev->dma_dack_polarity << DACK_POLARITY) | net2272_request_dma()
696 (dev->dma_dreq_polarity << DREQ_POLARITY) | net2272_request_dma()
699 (void) net2272_read(dev, SCRATCH); net2272_request_dma()
705 net2272_start_dma(struct net2272 *dev) net2272_start_dma() argument
709 switch (dev->dev_id) { net2272_start_dma()
712 dev->rdk1.plx9054_base_addr + DMACSR0); net2272_start_dma()
734 dev_vdbg(ep->dev->dev, "kick_dma %s req %p dma %08llx\n", net2272_kick_dma()
740 if (ep->dev->dma_busy) net2272_kick_dma()
752 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 0)) net2272_kick_dma()
762 if (net2272_request_dma(ep->dev, ep->num, req->req.dma, size, 1)) net2272_kick_dma()
781 net2272_write(ep->dev, DMAREQ, net2272_kick_dma()
785 (ep->dev->dma_eot_polarity << EOT_POLARITY) | net2272_kick_dma()
786 (ep->dev->dma_dack_polarity << DACK_POLARITY) | net2272_kick_dma()
787 (ep->dev->dma_dreq_polarity << DREQ_POLARITY) | net2272_kick_dma()
797 net2272_start_dma(ep->dev); net2272_kick_dma()
802 static void net2272_cancel_dma(struct net2272 *dev) net2272_cancel_dma() argument
805 switch (dev->dev_id) { net2272_cancel_dma()
807 writeb(0, dev->rdk1.plx9054_base_addr + DMACSR0); net2272_cancel_dma()
808 writeb(1 << CHANNEL_ABORT, dev->rdk1.plx9054_base_addr + DMACSR0); net2272_cancel_dma()
809 while (!(readb(dev->rdk1.plx9054_base_addr + DMACSR0) & net2272_cancel_dma()
815 dev->rdk1.plx9054_base_addr + DMACSR0); net2272_cancel_dma()
820 dev->dma_busy = 0; net2272_cancel_dma()
830 struct net2272 *dev; net2272_queue() local
842 dev = ep->dev; net2272_queue()
843 if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) net2272_queue()
848 status = usb_gadget_map_request(&dev->gadget, _req, net2272_queue()
854 dev_vdbg(dev->dev, "%s queue req %p, len %d buf %p dma %08llx %s\n", net2272_queue()
858 spin_lock_irqsave(&dev->lock, flags); net2272_queue()
868 dev_vdbg(dev->dev, "%s status ack\n", ep->ep.name); net2272_queue()
878 dev_dbg(dev->dev, "WARNING: returning ZLP short packet termination!\n"); net2272_queue()
920 spin_unlock_irqrestore(&dev->lock, flags); net2272_queue()
955 spin_lock_irqsave(&ep->dev->lock, flags); net2272_dequeue()
965 spin_unlock_irqrestore(&ep->dev->lock, flags); net2272_dequeue()
971 dev_dbg(ep->dev->dev, "unlink (%s) pio\n", _ep->name); net2272_dequeue()
977 spin_unlock_irqrestore(&ep->dev->lock, flags); net2272_dequeue()
993 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) net2272_set_halt_and_wedge()
998 spin_lock_irqsave(&ep->dev->lock, flags); net2272_set_halt_and_wedge()
1004 dev_vdbg(ep->dev->dev, "%s %s %s\n", _ep->name, net2272_set_halt_and_wedge()
1010 ep->dev->protocol_stall = 1; net2272_set_halt_and_wedge()
1020 spin_unlock_irqrestore(&ep->dev->lock, flags); net2272_set_halt_and_wedge()
1048 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) net2272_fifo_status()
1068 if (!ep->dev->driver || ep->dev->gadget.speed == USB_SPEED_UNKNOWN) net2272_fifo_flush()
1095 struct net2272 *dev; net2272_get_frame() local
1101 dev = container_of(_gadget, struct net2272, gadget); net2272_get_frame()
1102 spin_lock_irqsave(&dev->lock, flags); net2272_get_frame()
1104 ret = net2272_read(dev, FRAME1) << 8; net2272_get_frame()
1105 ret |= net2272_read(dev, FRAME0); net2272_get_frame()
1107 spin_unlock_irqrestore(&dev->lock, flags); net2272_get_frame()
1114 struct net2272 *dev; net2272_wakeup() local
1120 dev = container_of(_gadget, struct net2272, gadget); net2272_wakeup()
1122 spin_lock_irqsave(&dev->lock, flags); net2272_wakeup()
1123 tmp = net2272_read(dev, USBCTL0); net2272_wakeup()
1125 net2272_write(dev, USBCTL1, (1 << GENERATE_RESUME)); net2272_wakeup()
1127 spin_unlock_irqrestore(&dev->lock, flags); net2272_wakeup()
1146 struct net2272 *dev; net2272_pullup() local
1152 dev = container_of(_gadget, struct net2272, gadget); net2272_pullup()
1154 spin_lock_irqsave(&dev->lock, flags); net2272_pullup()
1155 tmp = net2272_read(dev, USBCTL0); net2272_pullup()
1156 dev->softconnect = (is_on != 0); net2272_pullup()
1161 net2272_write(dev, USBCTL0, tmp); net2272_pullup()
1162 spin_unlock_irqrestore(&dev->lock, flags); net2272_pullup()
1185 struct net2272 *dev; registers_show() local
1193 dev = dev_get_drvdata(_dev); registers_show()
1196 spin_lock_irqsave(&dev->lock, flags); registers_show()
1198 if (dev->driver) registers_show()
1199 s = dev->driver->driver.name; registers_show()
1208 driver_name, driver_vers, dev->chiprev, registers_show()
1209 net2272_read(dev, LOCCTL), registers_show()
1210 net2272_read(dev, IRQENB0), registers_show()
1211 net2272_read(dev, IRQENB1), registers_show()
1212 net2272_read(dev, IRQSTAT0), registers_show()
1213 net2272_read(dev, IRQSTAT1)); registers_show()
1218 t1 = net2272_read(dev, DMAREQ); registers_show()
1229 t1 = net2272_read(dev, USBCTL1); registers_show()
1233 else if (dev->gadget.speed == USB_SPEED_UNKNOWN) registers_show()
1241 net2272_read(dev, USBCTL0), t1, registers_show()
1242 net2272_read(dev, OURADDR), s); registers_show()
1250 ep = &dev->ep[i]; registers_show()
1303 spin_unlock_irqrestore(&dev->lock, flags); registers_show()
1312 net2272_set_fifo_mode(struct net2272 *dev, int mode) net2272_set_fifo_mode() argument
1316 tmp = net2272_read(dev, LOCCTL) & 0x3f; net2272_set_fifo_mode()
1318 net2272_write(dev, LOCCTL, tmp); net2272_set_fifo_mode()
1320 INIT_LIST_HEAD(&dev->gadget.ep_list); net2272_set_fifo_mode()
1323 list_add_tail(&dev->ep[1].ep.ep_list, &dev->gadget.ep_list); net2272_set_fifo_mode()
1327 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); net2272_set_fifo_mode()
1328 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 512; net2272_set_fifo_mode()
1331 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); net2272_set_fifo_mode()
1332 dev->ep[1].fifo_size = 1024; net2272_set_fifo_mode()
1333 dev->ep[2].fifo_size = 512; net2272_set_fifo_mode()
1336 list_add_tail(&dev->ep[2].ep.ep_list, &dev->gadget.ep_list); net2272_set_fifo_mode()
1337 dev->ep[1].fifo_size = dev->ep[2].fifo_size = 1024; net2272_set_fifo_mode()
1340 dev->ep[1].fifo_size = 1024; net2272_set_fifo_mode()
1345 list_add_tail(&dev->ep[3].ep.ep_list, &dev->gadget.ep_list); net2272_set_fifo_mode()
1346 dev->ep[3].fifo_size = 512; net2272_set_fifo_mode()
1352 net2272_usb_reset(struct net2272 *dev) net2272_usb_reset() argument
1354 dev->gadget.speed = USB_SPEED_UNKNOWN; net2272_usb_reset()
1356 net2272_cancel_dma(dev); net2272_usb_reset()
1358 net2272_write(dev, IRQENB0, 0); net2272_usb_reset()
1359 net2272_write(dev, IRQENB1, 0); net2272_usb_reset()
1362 net2272_write(dev, IRQSTAT0, 0xff); net2272_usb_reset()
1363 net2272_write(dev, IRQSTAT1, ~(1 << SUSPEND_REQUEST_INTERRUPT)); net2272_usb_reset()
1365 net2272_write(dev, DMAREQ, net2272_usb_reset()
1369 (dev->dma_eot_polarity << EOT_POLARITY) | net2272_usb_reset()
1370 (dev->dma_dack_polarity << DACK_POLARITY) | net2272_usb_reset()
1371 (dev->dma_dreq_polarity << DREQ_POLARITY) | net2272_usb_reset()
1374 net2272_cancel_dma(dev); net2272_usb_reset()
1375 net2272_set_fifo_mode(dev, (fifo_mode <= 3) ? fifo_mode : 0); net2272_usb_reset()
1381 net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) | (1 << DATA_WIDTH)); net2272_usb_reset()
1382 net2272_write(dev, LOCCTL1, (dma_mode << DMA_MODE)); net2272_usb_reset()
1386 net2272_usb_reinit(struct net2272 *dev) net2272_usb_reinit() argument
1392 struct net2272_ep *ep = &dev->ep[i]; net2272_usb_reinit()
1395 ep->dev = dev; net2272_usb_reinit()
1419 usb_ep_set_maxpacket_limit(&dev->ep[0].ep, 64); net2272_usb_reinit()
1421 dev->gadget.ep0 = &dev->ep[0].ep; net2272_usb_reinit()
1422 dev->ep[0].stopped = 0; net2272_usb_reinit()
1423 INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); net2272_usb_reinit()
1427 net2272_ep0_start(struct net2272 *dev) net2272_ep0_start() argument
1429 struct net2272_ep *ep0 = &dev->ep[0]; net2272_ep0_start()
1437 net2272_write(dev, USBCTL0, net2272_ep0_start()
1438 (dev->softconnect << USB_DETECT_ENABLE) | net2272_ep0_start()
1441 net2272_write(dev, IRQENB0, net2272_ep0_start()
1445 net2272_write(dev, IRQENB1, net2272_ep0_start()
1460 struct net2272 *dev; net2272_start() local
1467 dev = container_of(_gadget, struct net2272, gadget); net2272_start()
1470 dev->ep[i].irqs = 0; net2272_start()
1472 dev->softconnect = 1; net2272_start()
1474 dev->driver = driver; net2272_start()
1479 net2272_ep0_start(dev); net2272_start()
1485 stop_activity(struct net2272 *dev, struct usb_gadget_driver *driver) stop_activity() argument
1490 if (dev->gadget.speed == USB_SPEED_UNKNOWN) stop_activity()
1496 net2272_usb_reset(dev); stop_activity()
1498 net2272_dequeue_all(&dev->ep[i]); stop_activity()
1502 spin_unlock(&dev->lock); stop_activity()
1503 driver->disconnect(&dev->gadget); stop_activity()
1504 spin_lock(&dev->lock); stop_activity()
1507 net2272_usb_reinit(dev); stop_activity()
1512 struct net2272 *dev; net2272_stop() local
1515 dev = container_of(_gadget, struct net2272, gadget); net2272_stop()
1517 spin_lock_irqsave(&dev->lock, flags); net2272_stop()
1518 stop_activity(dev, NULL); net2272_stop()
1519 spin_unlock_irqrestore(&dev->lock, flags); net2272_stop()
1521 dev->driver = NULL; net2272_stop()
1541 dev_vdbg(ep->dev->dev, "handle_dma %s req %p\n", ep->ep.name, req); net2272_handle_dma()
1544 net2272_write(ep->dev, DMAREQ, net2272_handle_dma()
1548 | (ep->dev->dma_eot_polarity << EOT_POLARITY) net2272_handle_dma()
1549 | (ep->dev->dma_dack_polarity << DACK_POLARITY) net2272_handle_dma()
1550 | (ep->dev->dma_dreq_polarity << DREQ_POLARITY) net2272_handle_dma()
1553 ep->dev->dma_busy = 0; net2272_handle_dma()
1579 if (net2272_read(ep->dev, IRQSTAT0) & net2272_handle_dma()
1582 net2272_cancel_dma(ep->dev); net2272_handle_dma()
1623 dev_vdbg(ep->dev->dev, "%s ack ep_stat0 %02x, ep_stat1 %02x, req %p\n", net2272_handle_ep()
1643 net2272_get_ep_by_addr(struct net2272 *dev, u16 wIndex) net2272_get_ep_by_addr() argument
1648 return &dev->ep[0]; net2272_get_ep_by_addr()
1650 list_for_each_entry(ep, &dev->gadget.ep_list, ep.ep_list) { net2272_get_ep_by_addr()
1683 net2272_set_test_mode(struct net2272 *dev, int mode) net2272_set_test_mode() argument
1690 net2272_write(dev, IRQENB0, 0x00); net2272_set_test_mode()
1691 net2272_write(dev, IRQENB1, 0x00); net2272_set_test_mode()
1694 net2272_write(dev, XCVRDIAG, 1 << FORCE_HIGH_SPEED); net2272_set_test_mode()
1696 net2272_write(dev, PAGESEL, 0); net2272_set_test_mode()
1697 net2272_write(dev, EP_STAT0, 1 << DATA_PACKET_TRANSMITTED_INTERRUPT); net2272_set_test_mode()
1698 net2272_write(dev, EP_RSPCLR, net2272_set_test_mode()
1701 net2272_write(dev, EP_CFG, 1 << ENDPOINT_DIRECTION); net2272_set_test_mode()
1702 net2272_write(dev, EP_STAT1, 1 << BUFFER_FLUSH); net2272_set_test_mode()
1705 while (!(net2272_read(dev, EP_STAT0) & net2272_set_test_mode()
1710 net2272_write(dev, USBTEST, mode); net2272_set_test_mode()
1715 net2272_write(dev, LOCCTL, net2272_read(dev, LOCCTL) & net2272_set_test_mode()
1719 net2272_write(dev, EP_DATA, net2272_test_packet[i]); net2272_set_test_mode()
1722 net2272_write(dev, EP_TRANSFER0, 0); net2272_set_test_mode()
1727 net2272_handle_stat0_irqs(struct net2272 *dev, u8 stat) net2272_handle_stat0_irqs() argument
1741 if (dev->gadget.speed == USB_SPEED_UNKNOWN) { net2272_handle_stat0_irqs()
1742 if (net2272_read(dev, USBCTL1) & (1 << USB_HIGH_SPEED)) net2272_handle_stat0_irqs()
1743 dev->gadget.speed = USB_SPEED_HIGH; net2272_handle_stat0_irqs()
1745 dev->gadget.speed = USB_SPEED_FULL; net2272_handle_stat0_irqs()
1746 dev_dbg(dev->dev, "%s\n", net2272_handle_stat0_irqs()
1747 usb_speed_string(dev->gadget.speed)); net2272_handle_stat0_irqs()
1750 ep = &dev->ep[0]; net2272_handle_stat0_irqs()
1762 dev->protocol_stall = 0; net2272_handle_stat0_irqs()
1787 net2272_write(dev, PAGESEL, 0); net2272_handle_stat0_irqs()
1788 net2272_write(dev, EP_TRANSFER2, 0xff); net2272_handle_stat0_irqs()
1789 net2272_write(dev, EP_TRANSFER1, 0xff); net2272_handle_stat0_irqs()
1790 net2272_write(dev, EP_TRANSFER0, 0xff); net2272_handle_stat0_irqs()
1792 u.raw[0] = net2272_read(dev, SETUP0); net2272_handle_stat0_irqs()
1793 u.raw[1] = net2272_read(dev, SETUP1); net2272_handle_stat0_irqs()
1794 u.raw[2] = net2272_read(dev, SETUP2); net2272_handle_stat0_irqs()
1795 u.raw[3] = net2272_read(dev, SETUP3); net2272_handle_stat0_irqs()
1796 u.raw[4] = net2272_read(dev, SETUP4); net2272_handle_stat0_irqs()
1797 u.raw[5] = net2272_read(dev, SETUP5); net2272_handle_stat0_irqs()
1798 u.raw[6] = net2272_read(dev, SETUP6); net2272_handle_stat0_irqs()
1799 u.raw[7] = net2272_read(dev, SETUP7); net2272_handle_stat0_irqs()
1809 net2272_write(dev, IRQSTAT0, 1 << SETUP_PACKET_INTERRUPT); net2272_handle_stat0_irqs()
1836 e = net2272_get_ep_by_addr(dev, u.r.wIndex); net2272_handle_stat0_irqs()
1845 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); net2272_handle_stat0_irqs()
1846 writew(status, net2272_reg_addr(dev, EP_DATA)); net2272_handle_stat0_irqs()
1847 set_fifo_bytecount(&dev->ep[0], 0); net2272_handle_stat0_irqs()
1849 dev_vdbg(dev->dev, "%s stat %02x\n", net2272_handle_stat0_irqs()
1855 if (dev->gadget.is_selfpowered) net2272_handle_stat0_irqs()
1859 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); net2272_handle_stat0_irqs()
1860 writew(status, net2272_reg_addr(dev, EP_DATA)); net2272_handle_stat0_irqs()
1861 set_fifo_bytecount(&dev->ep[0], 0); net2272_handle_stat0_irqs()
1863 dev_vdbg(dev->dev, "device stat %02x\n", status); net2272_handle_stat0_irqs()
1870 net2272_ep_write(&dev->ep[0], EP_IRQENB, 0); net2272_handle_stat0_irqs()
1871 writew(status, net2272_reg_addr(dev, EP_DATA)); net2272_handle_stat0_irqs()
1872 set_fifo_bytecount(&dev->ep[0], 0); net2272_handle_stat0_irqs()
1874 dev_vdbg(dev->dev, "interface status %02x\n", status); net2272_handle_stat0_irqs()
1888 e = net2272_get_ep_by_addr(dev, u.r.wIndex); net2272_handle_stat0_irqs()
1892 dev_vdbg(dev->dev, "%s wedged, halt not cleared\n", net2272_handle_stat0_irqs()
1895 dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name); net2272_handle_stat0_irqs()
1906 net2272_set_test_mode(dev, (u.r.wIndex >> 8)); net2272_handle_stat0_irqs()
1908 dev_vdbg(dev->dev, "test mode: %d\n", u.r.wIndex); net2272_handle_stat0_irqs()
1915 e = net2272_get_ep_by_addr(dev, u.r.wIndex); net2272_handle_stat0_irqs()
1920 dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name); net2272_handle_stat0_irqs()
1924 net2272_write(dev, OURADDR, u.r.wValue & 0xff); net2272_handle_stat0_irqs()
1930 dev_vdbg(dev->dev, "setup %02x.%02x v%04x i%04x " net2272_handle_stat0_irqs()
1935 spin_unlock(&dev->lock); net2272_handle_stat0_irqs()
1936 tmp = dev->driver->setup(&dev->gadget, &u.r); net2272_handle_stat0_irqs()
1937 spin_lock(&dev->lock); net2272_handle_stat0_irqs()
1943 dev_vdbg(dev->dev, "req %02x.%02x protocol STALL; stat %d\n", net2272_handle_stat0_irqs()
1945 dev->protocol_stall = 1; net2272_handle_stat0_irqs()
1949 net2272_cancel_dma(dev); net2272_handle_stat0_irqs()
1950 net2272_write(dev, IRQSTAT0, 1 << DMA_DONE_INTERRUPT); net2272_handle_stat0_irqs()
1952 num = (net2272_read(dev, DMAREQ) & (1 << DMA_ENDPOINT_SELECT)) net2272_handle_stat0_irqs()
1955 ep = &dev->ep[num]; net2272_handle_stat0_irqs()
1972 ep = &dev->ep[num]; net2272_handle_stat0_irqs()
1980 dev_dbg(dev->dev, "unhandled irqstat0 %02x\n", stat); net2272_handle_stat0_irqs()
1984 net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat) net2272_handle_stat1_irqs() argument
2000 net2272_write(dev, IRQSTAT1, tmp); net2272_handle_stat1_irqs()
2001 if (dev->gadget.speed != USB_SPEED_UNKNOWN) { net2272_handle_stat1_irqs()
2003 (net2272_read(dev, USBCTL1) & net2272_handle_stat1_irqs()
2006 dev_dbg(dev->dev, "disconnect %s\n", net2272_handle_stat1_irqs()
2007 dev->driver->driver.name); net2272_handle_stat1_irqs()
2009 (net2272_read(dev, USBCTL1) & mask) net2272_handle_stat1_irqs()
2012 dev_dbg(dev->dev, "reset %s\n", net2272_handle_stat1_irqs()
2013 dev->driver->driver.name); net2272_handle_stat1_irqs()
2017 stop_activity(dev, dev->driver); net2272_handle_stat1_irqs()
2018 net2272_ep0_start(dev); net2272_handle_stat1_irqs()
2019 spin_unlock(&dev->lock); net2272_handle_stat1_irqs()
2022 (&dev->gadget, dev->driver); net2272_handle_stat1_irqs()
2024 (dev->driver->disconnect) net2272_handle_stat1_irqs()
2025 (&dev->gadget); net2272_handle_stat1_irqs()
2026 spin_lock(&dev->lock); net2272_handle_stat1_irqs()
2038 net2272_write(dev, IRQSTAT1, tmp); net2272_handle_stat1_irqs()
2040 if (dev->driver->suspend) net2272_handle_stat1_irqs()
2041 dev->driver->suspend(&dev->gadget); net2272_handle_stat1_irqs()
2044 dev_dbg(dev->dev, "Suspend disabled, ignoring\n"); net2272_handle_stat1_irqs()
2047 if (dev->driver->resume) net2272_handle_stat1_irqs()
2048 dev->driver->resume(&dev->gadget); net2272_handle_stat1_irqs()
2055 net2272_write(dev, IRQSTAT1, stat); net2272_handle_stat1_irqs()
2064 dev_dbg(dev->dev, "unhandled irqstat1 %02x\n", stat); net2272_handle_stat1_irqs()
2069 struct net2272 *dev = _dev; net2272_irq() local
2076 spin_lock(&dev->lock); net2272_irq()
2078 intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR); net2272_irq()
2082 dev->rdk1.plx9054_base_addr + INTCSR); net2272_irq()
2083 net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1)); net2272_irq()
2084 net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0)); net2272_irq()
2085 intcsr = readl(dev->rdk1.plx9054_base_addr + INTCSR); net2272_irq()
2087 dev->rdk1.plx9054_base_addr + INTCSR); net2272_irq()
2091 dev->rdk1.plx9054_base_addr + DMACSR0); net2272_irq()
2093 dmareq = net2272_read(dev, DMAREQ); net2272_irq()
2095 net2272_handle_dma(&dev->ep[2]); net2272_irq()
2097 net2272_handle_dma(&dev->ep[1]); net2272_irq()
2102 intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT); net2272_irq()
2104 spin_unlock(&dev->lock); net2272_irq()
2111 net2272_handle_stat1_irqs(dev, net2272_read(dev, IRQSTAT1)); net2272_irq()
2112 net2272_handle_stat0_irqs(dev, net2272_read(dev, IRQSTAT0)); net2272_irq()
2114 spin_unlock(&dev->lock); net2272_irq()
2119 static int net2272_present(struct net2272 *dev) net2272_present() argument
2134 refval = net2272_read(dev, SCRATCH); net2272_present()
2136 net2272_write(dev, SCRATCH, ii); net2272_present()
2137 val = net2272_read(dev, SCRATCH); net2272_present()
2139 dev_dbg(dev->dev, net2272_present()
2147 net2272_write(dev, SCRATCH, refval); net2272_present()
2150 refval = net2272_read(dev, CHIPREV_2272); net2272_present()
2152 net2272_write(dev, CHIPREV_2272, ii); net2272_present()
2153 val = net2272_read(dev, CHIPREV_2272); net2272_present()
2155 dev_dbg(dev->dev, net2272_present()
2170 val = net2272_read(dev, CHIPREV_LEGACY); net2272_present()
2176 dev_dbg(dev->dev, net2272_present()
2188 val = net2272_read(dev, CHIPREV_2272); net2272_present()
2195 dev_dbg(dev->dev, net2272_present()
2203 dev_dbg(dev->dev, net2272_present()
2221 struct net2272 *dev = dev_get_drvdata(_dev); net2272_gadget_release() local
2222 kfree(dev); net2272_gadget_release()
2228 net2272_remove(struct net2272 *dev) net2272_remove() argument
2230 usb_del_gadget_udc(&dev->gadget); net2272_remove()
2231 free_irq(dev->irq, dev); net2272_remove()
2232 iounmap(dev->base_addr); net2272_remove()
2233 device_remove_file(dev->dev, &dev_attr_registers); net2272_remove()
2235 dev_info(dev->dev, "unbind\n"); net2272_remove()
2238 static struct net2272 *net2272_probe_init(struct device *dev, unsigned int irq) net2272_probe_init() argument
2243 dev_dbg(dev, "No IRQ!\n"); net2272_probe_init()
2254 ret->dev = dev; net2272_probe_init()
2265 net2272_probe_fin(struct net2272 *dev, unsigned int irqflags) net2272_probe_fin() argument
2270 if (net2272_present(dev)) { net2272_probe_fin()
2271 dev_warn(dev->dev, "2272 not found!\n"); net2272_probe_fin()
2276 net2272_usb_reset(dev); net2272_probe_fin()
2277 net2272_usb_reinit(dev); net2272_probe_fin()
2279 ret = request_irq(dev->irq, net2272_irq, irqflags, driver_name, dev); net2272_probe_fin()
2281 dev_err(dev->dev, "request interrupt %i failed\n", dev->irq); net2272_probe_fin()
2285 dev->chiprev = net2272_read(dev, CHIPREV_2272); net2272_probe_fin()
2288 dev_info(dev->dev, "%s\n", driver_desc); net2272_probe_fin()
2289 dev_info(dev->dev, "irq %i, mem %p, chip rev %04x, dma %s\n", net2272_probe_fin()
2290 dev->irq, dev->base_addr, dev->chiprev, net2272_probe_fin()
2292 dev_info(dev->dev, "version: %s\n", driver_vers); net2272_probe_fin()
2294 ret = device_create_file(dev->dev, &dev_attr_registers); net2272_probe_fin()
2298 ret = usb_add_gadget_udc_release(dev->dev, &dev->gadget, net2272_probe_fin()
2306 device_remove_file(dev->dev, &dev_attr_registers); net2272_probe_fin()
2308 free_irq(dev->irq, dev); net2272_probe_fin()
2321 net2272_rdk1_probe(struct pci_dev *pdev, struct net2272 *dev) net2272_rdk1_probe() argument
2343 dev_dbg(dev->dev, "controller already in use\n"); net2272_rdk1_probe()
2351 dev_dbg(dev->dev, "can't map memory\n"); net2272_rdk1_probe()
2357 dev->rdk1.plx9054_base_addr = mem_mapped_addr[0]; net2272_rdk1_probe()
2358 dev->rdk1.epld_base_addr = mem_mapped_addr[2]; net2272_rdk1_probe()
2359 dev->base_addr = mem_mapped_addr[3]; net2272_rdk1_probe()
2362 tmp = readl(dev->rdk1.plx9054_base_addr + LBRD1); net2272_rdk1_probe()
2364 dev->rdk1.plx9054_base_addr + LBRD1); net2272_rdk1_probe()
2367 writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) | net2272_rdk1_probe()
2370 dev->rdk1.plx9054_base_addr + INTCSR); net2272_rdk1_probe()
2373 dev->rdk1.plx9054_base_addr + DMACSR0); net2272_rdk1_probe()
2383 dev->base_addr + EPLD_IO_CONTROL_REGISTER); net2272_rdk1_probe()
2386 writeb(readb(dev->base_addr + EPLD_IO_CONTROL_REGISTER) & net2272_rdk1_probe()
2388 dev->base_addr + EPLD_IO_CONTROL_REGISTER); net2272_rdk1_probe()
2404 net2272_rdk2_probe(struct pci_dev *pdev, struct net2272 *dev) net2272_rdk2_probe() argument
2421 dev_dbg(dev->dev, "controller already in use\n"); net2272_rdk2_probe()
2429 dev_dbg(dev->dev, "can't map memory\n"); net2272_rdk2_probe()
2435 dev->rdk2.fpga_base_addr = mem_mapped_addr[0]; net2272_rdk2_probe()
2436 dev->base_addr = mem_mapped_addr[1]; net2272_rdk2_probe()
2440 writel((1 << CHIP_RESET), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK); net2272_rdk2_probe()
2442 writel((1 << BUS_WIDTH), dev->rdk2.fpga_base_addr + RDK2_LOCCTLRDK); net2272_rdk2_probe()
2444 dev_info(dev->dev, "RDK2 FPGA version %08x\n", net2272_rdk2_probe()
2445 readl(dev->rdk2.fpga_base_addr + RDK2_FPGAREV)); net2272_rdk2_probe()
2447 writel((1 << NET2272_PCI_IRQ), dev->rdk2.fpga_base_addr + RDK2_IRQENB); net2272_rdk2_probe()
2464 struct net2272 *dev; net2272_pci_probe() local
2467 dev = net2272_probe_init(&pdev->dev, pdev->irq); net2272_pci_probe()
2468 if (IS_ERR(dev)) net2272_pci_probe()
2469 return PTR_ERR(dev); net2272_pci_probe()
2470 dev->dev_id = pdev->device; net2272_pci_probe()
2480 case PCI_DEVICE_ID_RDK1: ret = net2272_rdk1_probe(pdev, dev); break; net2272_pci_probe()
2481 case PCI_DEVICE_ID_RDK2: ret = net2272_rdk2_probe(pdev, dev); break; net2272_pci_probe()
2487 ret = net2272_probe_fin(dev, 0); net2272_pci_probe()
2491 pci_set_drvdata(pdev, dev); net2272_pci_probe()
2498 kfree(dev); net2272_pci_probe()
2504 net2272_rdk1_remove(struct pci_dev *pdev, struct net2272 *dev) net2272_rdk1_remove() argument
2509 writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) & net2272_rdk1_remove()
2511 dev->rdk1.plx9054_base_addr + INTCSR); net2272_rdk1_remove()
2514 iounmap(dev->rdk1.plx9054_base_addr); net2272_rdk1_remove()
2515 iounmap(dev->rdk1.epld_base_addr); net2272_rdk1_remove()
2526 net2272_rdk2_remove(struct pci_dev *pdev, struct net2272 *dev) net2272_rdk2_remove() argument
2531 writel(readl(dev->rdk1.plx9054_base_addr + INTCSR) & net2272_rdk2_remove()
2533 dev->rdk1.plx9054_base_addr + INTCSR); net2272_rdk2_remove()
2537 iounmap(dev->rdk2.fpga_base_addr); net2272_rdk2_remove()
2547 struct net2272 *dev = pci_get_drvdata(pdev); net2272_pci_remove() local
2549 net2272_remove(dev); net2272_pci_remove()
2552 case PCI_DEVICE_ID_RDK1: net2272_rdk1_remove(pdev, dev); break; net2272_pci_remove()
2553 case PCI_DEVICE_ID_RDK2: net2272_rdk2_remove(pdev, dev); break; net2272_pci_remove()
2559 kfree(dev); net2272_pci_remove()
2612 struct net2272 *dev; net2272_plat_probe() local
2622 dev_err(&pdev->dev, "must provide irq/base addr"); net2272_plat_probe()
2626 dev = net2272_probe_init(&pdev->dev, irq_res->start); net2272_plat_probe()
2627 if (IS_ERR(dev)) net2272_plat_probe()
2628 return PTR_ERR(dev); net2272_plat_probe()
2643 dev->base_shift = iomem_bus->start; net2272_plat_probe()
2646 dev_dbg(dev->dev, "get request memory region!\n"); net2272_plat_probe()
2650 dev->base_addr = ioremap_nocache(base, len); net2272_plat_probe()
2651 if (!dev->base_addr) { net2272_plat_probe()
2652 dev_dbg(dev->dev, "can't map memory\n"); net2272_plat_probe()
2657 ret = net2272_probe_fin(dev, IRQF_TRIGGER_LOW); net2272_plat_probe()
2661 platform_set_drvdata(pdev, dev); net2272_plat_probe()
2662 dev_info(&pdev->dev, "running in 16-bit, %sbyte swap local bus mode\n", net2272_plat_probe()
2663 (net2272_read(dev, LOCCTL) & (1 << BYTE_SWAP)) ? "" : "no "); net2272_plat_probe()
2668 iounmap(dev->base_addr); net2272_plat_probe()
2678 struct net2272 *dev = platform_get_drvdata(pdev); net2272_plat_remove() local
2680 net2272_remove(dev); net2272_plat_remove()
2685 kfree(dev); net2272_plat_remove()
/linux-4.4.14/drivers/media/platform/exynos4-is/
H A Dfimc-lite-reg.c23 void flite_hw_reset(struct fimc_lite *dev) flite_hw_reset() argument
28 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_reset()
30 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_reset()
33 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_reset()
40 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_reset()
43 void flite_hw_clear_pending_irq(struct fimc_lite *dev) flite_hw_clear_pending_irq() argument
45 u32 cfg = readl(dev->regs + FLITE_REG_CISTATUS); flite_hw_clear_pending_irq()
47 writel(cfg, dev->regs + FLITE_REG_CISTATUS); flite_hw_clear_pending_irq()
50 u32 flite_hw_get_interrupt_source(struct fimc_lite *dev) flite_hw_get_interrupt_source() argument
52 u32 intsrc = readl(dev->regs + FLITE_REG_CISTATUS); flite_hw_get_interrupt_source()
56 void flite_hw_clear_last_capture_end(struct fimc_lite *dev) flite_hw_clear_last_capture_end() argument
59 u32 cfg = readl(dev->regs + FLITE_REG_CISTATUS2); flite_hw_clear_last_capture_end()
61 writel(cfg, dev->regs + FLITE_REG_CISTATUS2); flite_hw_clear_last_capture_end()
64 void flite_hw_set_interrupt_mask(struct fimc_lite *dev) flite_hw_set_interrupt_mask() argument
69 if (atomic_read(&dev->out_path) == FIMC_IO_DMA) { flite_hw_set_interrupt_mask()
80 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_interrupt_mask()
83 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_interrupt_mask()
86 void flite_hw_capture_start(struct fimc_lite *dev) flite_hw_capture_start() argument
88 u32 cfg = readl(dev->regs + FLITE_REG_CIIMGCPT); flite_hw_capture_start()
90 writel(cfg, dev->regs + FLITE_REG_CIIMGCPT); flite_hw_capture_start()
93 void flite_hw_capture_stop(struct fimc_lite *dev) flite_hw_capture_stop() argument
95 u32 cfg = readl(dev->regs + FLITE_REG_CIIMGCPT); flite_hw_capture_stop()
97 writel(cfg, dev->regs + FLITE_REG_CIIMGCPT); flite_hw_capture_stop()
104 void flite_hw_set_test_pattern(struct fimc_lite *dev, bool on) flite_hw_set_test_pattern() argument
106 u32 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_test_pattern()
111 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_test_pattern()
130 void flite_hw_set_source_format(struct fimc_lite *dev, struct flite_frame *f) flite_hw_set_source_format() argument
142 v4l2_err(&dev->ve.vdev, flite_hw_set_source_format()
147 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_source_format()
150 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_source_format()
152 cfg = readl(dev->regs + FLITE_REG_CISRCSIZE); flite_hw_set_source_format()
157 writel(cfg, dev->regs + FLITE_REG_CISRCSIZE); flite_hw_set_source_format()
161 void flite_hw_set_window_offset(struct fimc_lite *dev, struct flite_frame *f) flite_hw_set_window_offset() argument
166 cfg = readl(dev->regs + FLITE_REG_CIWDOFST); flite_hw_set_window_offset()
170 writel(cfg, dev->regs + FLITE_REG_CIWDOFST); flite_hw_set_window_offset()
176 writel(cfg, dev->regs + FLITE_REG_CIWDOFST2); flite_hw_set_window_offset()
180 static void flite_hw_set_camera_port(struct fimc_lite *dev, int id) flite_hw_set_camera_port() argument
182 u32 cfg = readl(dev->regs + FLITE_REG_CIGENERAL); flite_hw_set_camera_port()
187 writel(cfg, dev->regs + FLITE_REG_CIGENERAL); flite_hw_set_camera_port()
191 void flite_hw_set_camera_bus(struct fimc_lite *dev, flite_hw_set_camera_bus() argument
194 u32 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_camera_bus()
215 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_camera_bus()
217 flite_hw_set_camera_port(dev, si->mux_id); flite_hw_set_camera_bus()
220 static void flite_hw_set_pack12(struct fimc_lite *dev, int on) flite_hw_set_pack12() argument
222 u32 cfg = readl(dev->regs + FLITE_REG_CIODMAFMT); flite_hw_set_pack12()
229 writel(cfg, dev->regs + FLITE_REG_CIODMAFMT); flite_hw_set_pack12()
232 static void flite_hw_set_out_order(struct fimc_lite *dev, struct flite_frame *f) flite_hw_set_out_order() argument
240 u32 cfg = readl(dev->regs + FLITE_REG_CIODMAFMT); flite_hw_set_out_order()
247 writel(cfg | pixcode[i][1], dev->regs + FLITE_REG_CIODMAFMT); flite_hw_set_out_order()
250 void flite_hw_set_dma_window(struct fimc_lite *dev, struct flite_frame *f) flite_hw_set_dma_window() argument
255 cfg = readl(dev->regs + FLITE_REG_CIOCAN); flite_hw_set_dma_window()
258 writel(cfg, dev->regs + FLITE_REG_CIOCAN); flite_hw_set_dma_window()
261 cfg = readl(dev->regs + FLITE_REG_CIOOFF); flite_hw_set_dma_window()
264 writel(cfg, dev->regs + FLITE_REG_CIOOFF); flite_hw_set_dma_window()
267 void flite_hw_set_dma_buffer(struct fimc_lite *dev, struct flite_buffer *buf) flite_hw_set_dma_buffer() argument
272 if (dev->dd->max_dma_bufs == 1) flite_hw_set_dma_buffer()
278 writel(buf->paddr, dev->regs + FLITE_REG_CIOSA); flite_hw_set_dma_buffer()
280 writel(buf->paddr, dev->regs + FLITE_REG_CIOSAN(index - 1)); flite_hw_set_dma_buffer()
282 cfg = readl(dev->regs + FLITE_REG_CIFCNTSEQ); flite_hw_set_dma_buffer()
284 writel(cfg, dev->regs + FLITE_REG_CIFCNTSEQ); flite_hw_set_dma_buffer()
287 void flite_hw_mask_dma_buffer(struct fimc_lite *dev, u32 index) flite_hw_mask_dma_buffer() argument
291 if (dev->dd->max_dma_bufs == 1) flite_hw_mask_dma_buffer()
294 cfg = readl(dev->regs + FLITE_REG_CIFCNTSEQ); flite_hw_mask_dma_buffer()
296 writel(cfg, dev->regs + FLITE_REG_CIFCNTSEQ); flite_hw_mask_dma_buffer()
300 void flite_hw_set_output_dma(struct fimc_lite *dev, struct flite_frame *f, flite_hw_set_output_dma() argument
303 u32 cfg = readl(dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_output_dma()
307 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_output_dma()
312 writel(cfg, dev->regs + FLITE_REG_CIGCTRL); flite_hw_set_output_dma()
314 flite_hw_set_out_order(dev, f); flite_hw_set_output_dma()
315 flite_hw_set_dma_window(dev, f); flite_hw_set_output_dma()
316 flite_hw_set_pack12(dev, 0); flite_hw_set_output_dma()
319 void flite_hw_dump_regs(struct fimc_lite *dev, const char *label) flite_hw_dump_regs() argument
342 v4l2_info(&dev->subdev, "--- %s ---\n", label); flite_hw_dump_regs()
345 u32 cfg = readl(dev->regs + registers[i].offset); flite_hw_dump_regs()
346 v4l2_info(&dev->subdev, "%9s: 0x%08x\n", flite_hw_dump_regs()
/linux-4.4.14/net/core/
H A Dlink_watch.c40 static unsigned char default_operstate(const struct net_device *dev) default_operstate() argument
42 if (!netif_carrier_ok(dev)) default_operstate()
43 return (dev->ifindex != dev_get_iflink(dev) ? default_operstate()
46 if (netif_dormant(dev)) default_operstate()
53 static void rfc2863_policy(struct net_device *dev) rfc2863_policy() argument
55 unsigned char operstate = default_operstate(dev); rfc2863_policy()
57 if (operstate == dev->operstate) rfc2863_policy()
62 switch(dev->link_mode) { rfc2863_policy()
73 dev->operstate = operstate; rfc2863_policy()
79 void linkwatch_init_dev(struct net_device *dev) linkwatch_init_dev() argument
82 if (!netif_carrier_ok(dev) || netif_dormant(dev)) linkwatch_init_dev()
83 rfc2863_policy(dev); linkwatch_init_dev()
87 static bool linkwatch_urgent_event(struct net_device *dev) linkwatch_urgent_event() argument
89 if (!netif_running(dev)) linkwatch_urgent_event()
92 if (dev->ifindex != dev_get_iflink(dev)) linkwatch_urgent_event()
95 if (dev->priv_flags & IFF_TEAM_PORT) linkwatch_urgent_event()
98 return netif_carrier_ok(dev) && qdisc_tx_changing(dev); linkwatch_urgent_event()
102 static void linkwatch_add_event(struct net_device *dev) linkwatch_add_event() argument
107 if (list_empty(&dev->link_watch_list)) { linkwatch_add_event()
108 list_add_tail(&dev->link_watch_list, &lweventlist); linkwatch_add_event()
109 dev_hold(dev); linkwatch_add_event()
144 static void linkwatch_do_dev(struct net_device *dev) linkwatch_do_dev() argument
155 clear_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state); linkwatch_do_dev()
157 rfc2863_policy(dev); linkwatch_do_dev()
158 if (dev->flags & IFF_UP) { linkwatch_do_dev()
159 if (netif_carrier_ok(dev)) linkwatch_do_dev()
160 dev_activate(dev); linkwatch_do_dev()
162 dev_deactivate(dev); linkwatch_do_dev()
164 netdev_state_change(dev); linkwatch_do_dev()
166 dev_put(dev); linkwatch_do_dev()
171 struct net_device *dev; __linkwatch_run_queue() local
194 dev = list_first_entry(&wrk, struct net_device, link_watch_list); __linkwatch_run_queue()
195 list_del_init(&dev->link_watch_list); __linkwatch_run_queue()
197 if (urgent_only && !linkwatch_urgent_event(dev)) { __linkwatch_run_queue()
198 list_add_tail(&dev->link_watch_list, &lweventlist); __linkwatch_run_queue()
202 linkwatch_do_dev(dev); __linkwatch_run_queue()
211 void linkwatch_forget_dev(struct net_device *dev) linkwatch_forget_dev() argument
217 if (!list_empty(&dev->link_watch_list)) { linkwatch_forget_dev()
218 list_del_init(&dev->link_watch_list); linkwatch_forget_dev()
223 linkwatch_do_dev(dev); linkwatch_forget_dev()
242 void linkwatch_fire_event(struct net_device *dev) linkwatch_fire_event() argument
244 bool urgent = linkwatch_urgent_event(dev); linkwatch_fire_event()
246 if (!test_and_set_bit(__LINK_STATE_LINKWATCH_PENDING, &dev->state)) { linkwatch_fire_event()
247 linkwatch_add_event(dev); linkwatch_fire_event()
/linux-4.4.14/arch/arm/mach-footbridge/
H A Dcats-pci.c19 static u8 cats_no_swizzle(struct pci_dev *dev, u8 *pin) cats_no_swizzle() argument
24 static int __init cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) cats_map_irq() argument
26 if (dev->irq >= 255) cats_map_irq()
29 if (dev->irq >= 128) cats_map_irq()
30 return dev->irq & 0x1f; cats_map_irq()
32 if (dev->irq >= 1 && dev->irq <= 4) cats_map_irq()
33 return irqmap_cats[dev->irq - 1]; cats_map_irq()
35 if (dev->irq != 0) cats_map_irq()
37 dev->bus->number, dev->devfn, dev->irq); cats_map_irq()
/linux-4.4.14/drivers/usb/gadget/function/
H A Df_printer.c266 struct printer_dev *dev = ep->driver_data; rx_complete() local
270 spin_lock_irqsave(&dev->lock, flags); rx_complete()
279 list_add_tail(&req->list, &dev->rx_buffers); rx_complete()
280 DBG(dev, "G_Printer : rx length %d\n", req->actual); rx_complete()
282 list_add(&req->list, &dev->rx_reqs); rx_complete()
289 VDBG(dev, "rx shutdown, code %d\n", status); rx_complete()
290 list_add(&req->list, &dev->rx_reqs); rx_complete()
295 DBG(dev, "rx %s reset\n", ep->name); rx_complete()
296 list_add(&req->list, &dev->rx_reqs); rx_complete()
304 DBG(dev, "rx status %d\n", status); rx_complete()
305 list_add(&req->list, &dev->rx_reqs); rx_complete()
309 wake_up_interruptible(&dev->rx_wait); rx_complete()
310 spin_unlock_irqrestore(&dev->lock, flags); rx_complete()
315 struct printer_dev *dev = ep->driver_data; tx_complete() local
319 VDBG(dev, "tx err %d\n", req->status); tx_complete()
328 spin_lock(&dev->lock); tx_complete()
333 list_add(&req->list, &dev->tx_reqs); tx_complete()
334 wake_up_interruptible(&dev->tx_wait); tx_complete()
335 if (likely(list_empty(&dev->tx_reqs_active))) tx_complete()
336 wake_up_interruptible(&dev->tx_flush_wait); tx_complete()
338 spin_unlock(&dev->lock); tx_complete()
346 struct printer_dev *dev; printer_open() local
350 dev = container_of(inode->i_cdev, struct printer_dev, printer_cdev); printer_open()
352 spin_lock_irqsave(&dev->lock, flags); printer_open()
354 if (!dev->printer_cdev_open) { printer_open()
355 dev->printer_cdev_open = 1; printer_open()
356 fd->private_data = dev; printer_open()
359 dev->printer_status |= PRINTER_SELECTED; printer_open()
362 spin_unlock_irqrestore(&dev->lock, flags); printer_open()
364 DBG(dev, "printer_open returned %x\n", ret); printer_open()
371 struct printer_dev *dev = fd->private_data; printer_close() local
374 spin_lock_irqsave(&dev->lock, flags); printer_close()
375 dev->printer_cdev_open = 0; printer_close()
378 dev->printer_status &= ~PRINTER_SELECTED; printer_close()
379 spin_unlock_irqrestore(&dev->lock, flags); printer_close()
381 DBG(dev, "printer_close\n"); printer_close()
388 setup_rx_reqs(struct printer_dev *dev) setup_rx_reqs() argument
392 while (likely(!list_empty(&dev->rx_reqs))) { setup_rx_reqs()
395 req = container_of(dev->rx_reqs.next, setup_rx_reqs()
409 spin_unlock(&dev->lock); setup_rx_reqs()
410 error = usb_ep_queue(dev->out_ep, req, GFP_ATOMIC); setup_rx_reqs()
411 spin_lock(&dev->lock); setup_rx_reqs()
413 DBG(dev, "rx submit --> %d\n", error); setup_rx_reqs()
414 list_add(&req->list, &dev->rx_reqs); setup_rx_reqs()
417 /* if the req is empty, then add it into dev->rx_reqs_active. */ setup_rx_reqs()
419 list_add(&req->list, &dev->rx_reqs_active); setup_rx_reqs()
426 struct printer_dev *dev = fd->private_data; printer_read() local
441 DBG(dev, "printer_read trying to read %d bytes\n", (int)len); printer_read()
443 mutex_lock(&dev->lock_printer_io); printer_read()
444 spin_lock_irqsave(&dev->lock, flags); printer_read()
449 dev->reset_printer = 0; printer_read()
451 setup_rx_reqs(dev); printer_read()
454 current_rx_req = dev->current_rx_req; printer_read()
455 current_rx_bytes = dev->current_rx_bytes; printer_read()
456 current_rx_buf = dev->current_rx_buf; printer_read()
457 dev->current_rx_req = NULL; printer_read()
458 dev->current_rx_bytes = 0; printer_read()
459 dev->current_rx_buf = NULL; printer_read()
468 (likely(list_empty(&dev->rx_buffers)))) { printer_read()
470 spin_unlock_irqrestore(&dev->lock, flags); printer_read()
477 mutex_unlock(&dev->lock_printer_io); printer_read()
482 wait_event_interruptible(dev->rx_wait, printer_read()
483 (likely(!list_empty(&dev->rx_buffers)))); printer_read()
484 spin_lock_irqsave(&dev->lock, flags); printer_read()
488 while ((current_rx_bytes || likely(!list_empty(&dev->rx_buffers))) printer_read()
491 req = container_of(dev->rx_buffers.next, printer_read()
500 list_add(&req->list, &dev->rx_reqs); printer_read()
506 spin_unlock_irqrestore(&dev->lock, flags); printer_read()
518 spin_lock_irqsave(&dev->lock, flags); printer_read()
521 if (dev->reset_printer) { printer_read()
522 list_add(&current_rx_req->list, &dev->rx_reqs); printer_read()
523 spin_unlock_irqrestore(&dev->lock, flags); printer_read()
524 mutex_unlock(&dev->lock_printer_io); printer_read()
537 list_add(&current_rx_req->list, &dev->rx_reqs); printer_read()
544 dev->current_rx_req = current_rx_req; printer_read()
545 dev->current_rx_bytes = current_rx_bytes; printer_read()
546 dev->current_rx_buf = current_rx_buf; printer_read()
548 spin_unlock_irqrestore(&dev->lock, flags); printer_read()
549 mutex_unlock(&dev->lock_printer_io); printer_read()
551 DBG(dev, "printer_read returned %d bytes\n", (int)bytes_copied); printer_read()
562 struct printer_dev *dev = fd->private_data; printer_write() local
568 DBG(dev, "printer_write trying to send %d bytes\n", (int)len); printer_write()
573 mutex_lock(&dev->lock_printer_io); printer_write()
574 spin_lock_irqsave(&dev->lock, flags); printer_write()
577 dev->reset_printer = 0; printer_write()
580 if (likely(list_empty(&dev->tx_reqs))) { printer_write()
582 spin_unlock_irqrestore(&dev->lock, flags); printer_write()
589 mutex_unlock(&dev->lock_printer_io); printer_write()
594 wait_event_interruptible(dev->tx_wait, printer_write()
595 (likely(!list_empty(&dev->tx_reqs)))); printer_write()
596 spin_lock_irqsave(&dev->lock, flags); printer_write()
599 while (likely(!list_empty(&dev->tx_reqs)) && len) { printer_write()
606 req = container_of(dev->tx_reqs.next, struct usb_request, printer_write()
621 req->zero = ((len % dev->in_ep->maxpacket) == 0); printer_write()
624 spin_unlock_irqrestore(&dev->lock, flags); printer_write()
627 list_add(&req->list, &dev->tx_reqs); printer_write()
628 mutex_unlock(&dev->lock_printer_io); printer_write()
636 spin_lock_irqsave(&dev->lock, flags); printer_write()
639 if (dev->reset_printer) { printer_write()
640 list_add(&req->list, &dev->tx_reqs); printer_write()
641 spin_unlock_irqrestore(&dev->lock, flags); printer_write()
642 mutex_unlock(&dev->lock_printer_io); printer_write()
646 if (usb_ep_queue(dev->in_ep, req, GFP_ATOMIC)) { printer_write()
647 list_add(&req->list, &dev->tx_reqs); printer_write()
648 spin_unlock_irqrestore(&dev->lock, flags); printer_write()
649 mutex_unlock(&dev->lock_printer_io); printer_write()
653 list_add(&req->list, &dev->tx_reqs_active); printer_write()
657 spin_unlock_irqrestore(&dev->lock, flags); printer_write()
658 mutex_unlock(&dev->lock_printer_io); printer_write()
660 DBG(dev, "printer_write sent %d bytes\n", (int)bytes_copied); printer_write()
671 struct printer_dev *dev = fd->private_data; printer_fsync() local
677 spin_lock_irqsave(&dev->lock, flags); printer_fsync()
678 tx_list_empty = (likely(list_empty(&dev->tx_reqs))); printer_fsync()
679 spin_unlock_irqrestore(&dev->lock, flags); printer_fsync()
683 wait_event_interruptible(dev->tx_flush_wait, printer_fsync()
684 (likely(list_empty(&dev->tx_reqs_active)))); printer_fsync()
694 struct printer_dev *dev = fd->private_data; printer_poll() local
698 mutex_lock(&dev->lock_printer_io); printer_poll()
699 spin_lock_irqsave(&dev->lock, flags); printer_poll()
700 setup_rx_reqs(dev); printer_poll()
701 spin_unlock_irqrestore(&dev->lock, flags); printer_poll()
702 mutex_unlock(&dev->lock_printer_io); printer_poll()
704 poll_wait(fd, &dev->rx_wait, wait); printer_poll()
705 poll_wait(fd, &dev->tx_wait, wait); printer_poll()
707 spin_lock_irqsave(&dev->lock, flags); printer_poll()
708 if (likely(!list_empty(&dev->tx_reqs))) printer_poll()
711 if (likely(dev->current_rx_bytes) || printer_poll()
712 likely(!list_empty(&dev->rx_buffers))) printer_poll()
715 spin_unlock_irqrestore(&dev->lock, flags); printer_poll()
723 struct printer_dev *dev = fd->private_data; printer_ioctl() local
727 DBG(dev, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code, arg); printer_ioctl()
731 spin_lock_irqsave(&dev->lock, flags); printer_ioctl()
735 status = (int)dev->printer_status; printer_ioctl()
738 dev->printer_status = (u8)arg; printer_ioctl()
742 DBG(dev, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n", printer_ioctl()
747 spin_unlock_irqrestore(&dev->lock, flags); printer_ioctl()
768 set_printer_interface(struct printer_dev *dev) set_printer_interface() argument
772 dev->in_ep->desc = ep_desc(dev->gadget, &fs_ep_in_desc, &hs_ep_in_desc, set_printer_interface()
774 dev->in_ep->driver_data = dev; set_printer_interface()
776 dev->out_ep->desc = ep_desc(dev->gadget, &fs_ep_out_desc, set_printer_interface()
778 dev->out_ep->driver_data = dev; set_printer_interface()
780 result = usb_ep_enable(dev->in_ep); set_printer_interface()
782 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); set_printer_interface()
786 result = usb_ep_enable(dev->out_ep); set_printer_interface()
788 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); set_printer_interface()
795 (void) usb_ep_disable(dev->in_ep); set_printer_interface()
796 (void) usb_ep_disable(dev->out_ep); set_printer_interface()
797 dev->in_ep->desc = NULL; set_printer_interface()
798 dev->out_ep->desc = NULL; set_printer_interface()
805 static void printer_reset_interface(struct printer_dev *dev) printer_reset_interface() argument
809 if (dev->interface < 0) printer_reset_interface()
812 DBG(dev, "%s\n", __func__); printer_reset_interface()
814 if (dev->in_ep->desc) printer_reset_interface()
815 usb_ep_disable(dev->in_ep); printer_reset_interface()
817 if (dev->out_ep->desc) printer_reset_interface()
818 usb_ep_disable(dev->out_ep); printer_reset_interface()
820 spin_lock_irqsave(&dev->lock, flags); printer_reset_interface()
821 dev->in_ep->desc = NULL; printer_reset_interface()
822 dev->out_ep->desc = NULL; printer_reset_interface()
823 dev->interface = -1; printer_reset_interface()
824 spin_unlock_irqrestore(&dev->lock, flags); printer_reset_interface()
828 static int set_interface(struct printer_dev *dev, unsigned number) set_interface() argument
833 printer_reset_interface(dev); set_interface()
835 result = set_printer_interface(dev); set_interface()
837 printer_reset_interface(dev); set_interface()
839 dev->interface = number; set_interface()
842 INFO(dev, "Using interface %x\n", number); set_interface()
847 static void printer_soft_reset(struct printer_dev *dev) printer_soft_reset() argument
851 INFO(dev, "Received Printer Reset Request\n"); printer_soft_reset()
853 if (usb_ep_disable(dev->in_ep)) printer_soft_reset()
854 DBG(dev, "Failed to disable USB in_ep\n"); printer_soft_reset()
855 if (usb_ep_disable(dev->out_ep)) printer_soft_reset()
856 DBG(dev, "Failed to disable USB out_ep\n"); printer_soft_reset()
858 if (dev->current_rx_req != NULL) { printer_soft_reset()
859 list_add(&dev->current_rx_req->list, &dev->rx_reqs); printer_soft_reset()
860 dev->current_rx_req = NULL; printer_soft_reset()
862 dev->current_rx_bytes = 0; printer_soft_reset()
863 dev->current_rx_buf = NULL; printer_soft_reset()
864 dev->reset_printer = 1; printer_soft_reset()
866 while (likely(!(list_empty(&dev->rx_buffers)))) { printer_soft_reset()
867 req = container_of(dev->rx_buffers.next, struct usb_request, printer_soft_reset()
870 list_add(&req->list, &dev->rx_reqs); printer_soft_reset()
873 while (likely(!(list_empty(&dev->rx_reqs_active)))) { printer_soft_reset()
874 req = container_of(dev->rx_buffers.next, struct usb_request, printer_soft_reset()
877 list_add(&req->list, &dev->rx_reqs); printer_soft_reset()
880 while (likely(!(list_empty(&dev->tx_reqs_active)))) { printer_soft_reset()
881 req = container_of(dev->tx_reqs_active.next, printer_soft_reset()
884 list_add(&req->list, &dev->tx_reqs); printer_soft_reset()
887 if (usb_ep_enable(dev->in_ep)) printer_soft_reset()
888 DBG(dev, "Failed to enable USB in_ep\n"); printer_soft_reset()
889 if (usb_ep_enable(dev->out_ep)) printer_soft_reset()
890 DBG(dev, "Failed to enable USB out_ep\n"); printer_soft_reset()
892 wake_up_interruptible(&dev->rx_wait); printer_soft_reset()
893 wake_up_interruptible(&dev->tx_wait); printer_soft_reset()
894 wake_up_interruptible(&dev->tx_flush_wait); printer_soft_reset()
902 struct printer_dev *dev = func_to_printer(f); gprinter_req_match() local
931 return w_index == dev->interface; gprinter_req_match()
941 struct printer_dev *dev = func_to_printer(f); printer_func_setup() local
949 DBG(dev, "ctrl req%02x.%02x v%04x i%04x l%d\n", printer_func_setup()
957 if ((wIndex>>8) != dev->interface) printer_func_setup()
960 value = (dev->pnp_string[0] << 8) | dev->pnp_string[1]; printer_func_setup()
961 memcpy(req->buf, dev->pnp_string, value); printer_func_setup()
962 DBG(dev, "1284 PNP String: %x %s\n", value, printer_func_setup()
963 &dev->pnp_string[2]); printer_func_setup()
968 if (wIndex != dev->interface) printer_func_setup()
971 *(u8 *)req->buf = dev->printer_status; printer_func_setup()
977 if (wIndex != dev->interface) printer_func_setup()
980 printer_soft_reset(dev); printer_func_setup()
992 VDBG(dev, printer_func_setup()
1004 ERROR(dev, "%s:%d Error!\n", __func__, __LINE__); printer_func_setup()
1015 struct printer_dev *dev = func_to_printer(f); printer_func_bind() local
1032 dev->gadget = gadget; printer_func_bind()
1038 dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n", printer_func_bind()
1058 dev->in_ep = in_ep; printer_func_bind()
1059 dev->out_ep = out_ep; printer_func_bind()
1062 for (i = 0; i < dev->q_len; i++) { printer_func_bind()
1063 req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL); printer_func_bind()
1066 list_add(&req->list, &dev->tx_reqs); printer_func_bind()
1069 for (i = 0; i < dev->q_len; i++) { printer_func_bind()
1070 req = printer_req_alloc(dev->out_ep, USB_BUFSIZE, GFP_KERNEL); printer_func_bind()
1073 list_add(&req->list, &dev->rx_reqs); printer_func_bind()
1077 devt = MKDEV(major, dev->minor); printer_func_bind()
1079 NULL, "g_printer%d", dev->minor); printer_func_bind()
1081 ERROR(dev, "Failed to create device: g_printer\n"); printer_func_bind()
1090 cdev_init(&dev->printer_cdev, &printer_io_operations); printer_func_bind()
1091 dev->printer_cdev.owner = THIS_MODULE; printer_func_bind()
1092 ret = cdev_add(&dev->printer_cdev, devt, 1); printer_func_bind()
1094 ERROR(dev, "Failed to open char device\n"); printer_func_bind()
1104 while (!list_empty(&dev->rx_reqs)) { printer_func_bind()
1105 req = container_of(dev->rx_reqs.next, struct usb_request, list); printer_func_bind()
1107 printer_req_free(dev->out_ep, req); printer_func_bind()
1111 while (!list_empty(&dev->tx_reqs)) { printer_func_bind()
1112 req = container_of(dev->tx_reqs.next, struct usb_request, list); printer_func_bind()
1114 printer_req_free(dev->in_ep, req); printer_func_bind()
1124 struct printer_dev *dev = func_to_printer(f); printer_func_set_alt() local
1128 ret = set_interface(dev, intf); printer_func_set_alt()
1135 struct printer_dev *dev = func_to_printer(f); printer_func_disable() local
1137 DBG(dev, "%s\n", __func__); printer_func_disable()
1139 printer_reset_interface(dev); printer_func_disable()
1323 struct printer_dev *dev = func_to_printer(f); gprinter_free() local
1327 kfree(dev); gprinter_free()
1336 struct printer_dev *dev; printer_func_unbind() local
1339 dev = func_to_printer(f); printer_func_unbind()
1341 device_destroy(usb_gadget_class, MKDEV(major, dev->minor)); printer_func_unbind()
1344 cdev_del(&dev->printer_cdev); printer_func_unbind()
1347 WARN_ON(!list_empty(&dev->tx_reqs_active)); printer_func_unbind()
1348 WARN_ON(!list_empty(&dev->rx_reqs_active)); printer_func_unbind()
1351 while (!list_empty(&dev->tx_reqs)) { printer_func_unbind()
1352 req = container_of(dev->tx_reqs.next, struct usb_request, printer_func_unbind()
1355 printer_req_free(dev->in_ep, req); printer_func_unbind()
1358 if (dev->current_rx_req != NULL) printer_func_unbind()
1359 printer_req_free(dev->out_ep, dev->current_rx_req); printer_func_unbind()
1361 while (!list_empty(&dev->rx_reqs)) { printer_func_unbind()
1362 req = container_of(dev->rx_reqs.next, printer_func_unbind()
1365 printer_req_free(dev->out_ep, req); printer_func_unbind()
1368 while (!list_empty(&dev->rx_buffers)) { printer_func_unbind()
1369 req = container_of(dev->rx_buffers.next, printer_func_unbind()
1372 printer_req_free(dev->out_ep, req); printer_func_unbind()
1379 struct printer_dev *dev; gprinter_alloc() local
1390 dev = kzalloc(sizeof(*dev), GFP_KERNEL); gprinter_alloc()
1391 if (!dev) { gprinter_alloc()
1397 dev->minor = opts->minor; gprinter_alloc()
1398 dev->pnp_string = opts->pnp_string; gprinter_alloc()
1399 dev->q_len = opts->q_len; gprinter_alloc()
1402 dev->function.name = "printer"; gprinter_alloc()
1403 dev->function.bind = printer_func_bind; gprinter_alloc()
1404 dev->function.setup = printer_func_setup; gprinter_alloc()
1405 dev->function.unbind = printer_func_unbind; gprinter_alloc()
1406 dev->function.set_alt = printer_func_set_alt; gprinter_alloc()
1407 dev->function.disable = printer_func_disable; gprinter_alloc()
1408 dev->function.req_match = gprinter_req_match; gprinter_alloc()
1409 dev->function.free_func = gprinter_free; gprinter_alloc()
1411 INIT_LIST_HEAD(&dev->tx_reqs); gprinter_alloc()
1412 INIT_LIST_HEAD(&dev->rx_reqs); gprinter_alloc()
1413 INIT_LIST_HEAD(&dev->rx_buffers); gprinter_alloc()
1414 INIT_LIST_HEAD(&dev->tx_reqs_active); gprinter_alloc()
1415 INIT_LIST_HEAD(&dev->rx_reqs_active); gprinter_alloc()
1417 spin_lock_init(&dev->lock); gprinter_alloc()
1418 mutex_init(&dev->lock_printer_io); gprinter_alloc()
1419 init_waitqueue_head(&dev->rx_wait); gprinter_alloc()
1420 init_waitqueue_head(&dev->tx_wait); gprinter_alloc()
1421 init_waitqueue_head(&dev->tx_flush_wait); gprinter_alloc()
1423 dev->interface = -1; gprinter_alloc()
1424 dev->printer_cdev_open = 0; gprinter_alloc()
1425 dev->printer_status = PRINTER_NOT_ERROR; gprinter_alloc()
1426 dev->current_rx_req = NULL; gprinter_alloc()
1427 dev->current_rx_bytes = 0; gprinter_alloc()
1428 dev->current_rx_buf = NULL; gprinter_alloc()
1430 return &dev->function; gprinter_alloc()
/linux-4.4.14/drivers/mfd/
H A Dabx500-core.c19 struct device *dev; member in struct:abx500_device_entry
22 static void lookup_ops(struct device *dev, struct abx500_ops **ops) lookup_ops() argument
28 if (dev_entry->dev == dev) { lookup_ops()
35 int abx500_register_ops(struct device *dev, struct abx500_ops *ops) abx500_register_ops() argument
39 dev_entry = devm_kzalloc(dev, abx500_register_ops()
43 dev_err(dev, "register_ops kzalloc failed"); abx500_register_ops()
46 dev_entry->dev = dev; abx500_register_ops()
54 void abx500_remove_ops(struct device *dev) abx500_remove_ops() argument
59 if (dev_entry->dev == dev) abx500_remove_ops()
64 int abx500_set_register_interruptible(struct device *dev, u8 bank, u8 reg, abx500_set_register_interruptible() argument
69 lookup_ops(dev->parent, &ops); abx500_set_register_interruptible()
71 return ops->set_register(dev, bank, reg, value); abx500_set_register_interruptible()
77 int abx500_get_register_interruptible(struct device *dev, u8 bank, u8 reg, abx500_get_register_interruptible() argument
82 lookup_ops(dev->parent, &ops); abx500_get_register_interruptible()
84 return ops->get_register(dev, bank, reg, value); abx500_get_register_interruptible()
90 int abx500_get_register_page_interruptible(struct device *dev, u8 bank, abx500_get_register_page_interruptible() argument
95 lookup_ops(dev->parent, &ops); abx500_get_register_page_interruptible()
97 return ops->get_register_page(dev, bank, abx500_get_register_page_interruptible()
104 int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank, abx500_mask_and_set_register_interruptible() argument
109 lookup_ops(dev->parent, &ops); abx500_mask_and_set_register_interruptible()
111 return ops->mask_and_set_register(dev, bank, abx500_mask_and_set_register_interruptible()
118 int abx500_get_chip_id(struct device *dev) abx500_get_chip_id() argument
122 lookup_ops(dev->parent, &ops); abx500_get_chip_id()
124 return ops->get_chip_id(dev); abx500_get_chip_id()
130 int abx500_event_registers_startup_state_get(struct device *dev, u8 *event) abx500_event_registers_startup_state_get() argument
134 lookup_ops(dev->parent, &ops); abx500_event_registers_startup_state_get()
136 return ops->event_registers_startup_state_get(dev, event); abx500_event_registers_startup_state_get()
142 int abx500_startup_irq_enabled(struct device *dev, unsigned int irq) abx500_startup_irq_enabled() argument
146 lookup_ops(dev->parent, &ops); abx500_startup_irq_enabled()
148 return ops->startup_irq_enabled(dev, irq); abx500_startup_irq_enabled()
/linux-4.4.14/drivers/connector/
H A Dcn_queue.c35 cn_queue_alloc_callback_entry(struct cn_queue_dev *dev, const char *name, cn_queue_alloc_callback_entry() argument
50 atomic_inc(&dev->refcnt); cn_queue_alloc_callback_entry()
51 cbq->pdev = dev; cn_queue_alloc_callback_entry()
73 int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name, cn_queue_add_callback() argument
81 cbq = cn_queue_alloc_callback_entry(dev, name, id, callback); cn_queue_add_callback()
85 spin_lock_bh(&dev->queue_lock); cn_queue_add_callback()
86 list_for_each_entry(__cbq, &dev->queue_list, callback_entry) { cn_queue_add_callback()
93 list_add_tail(&cbq->callback_entry, &dev->queue_list); cn_queue_add_callback()
94 spin_unlock_bh(&dev->queue_lock); cn_queue_add_callback()
107 void cn_queue_del_callback(struct cn_queue_dev *dev, struct cb_id *id) cn_queue_del_callback() argument
112 spin_lock_bh(&dev->queue_lock); cn_queue_del_callback()
113 list_for_each_entry_safe(cbq, n, &dev->queue_list, callback_entry) { cn_queue_del_callback()
120 spin_unlock_bh(&dev->queue_lock); cn_queue_del_callback()
128 struct cn_queue_dev *dev; cn_queue_alloc_dev() local
130 dev = kzalloc(sizeof(*dev), GFP_KERNEL); cn_queue_alloc_dev()
131 if (!dev) cn_queue_alloc_dev()
134 snprintf(dev->name, sizeof(dev->name), "%s", name); cn_queue_alloc_dev()
135 atomic_set(&dev->refcnt, 0); cn_queue_alloc_dev()
136 INIT_LIST_HEAD(&dev->queue_list); cn_queue_alloc_dev()
137 spin_lock_init(&dev->queue_lock); cn_queue_alloc_dev()
139 dev->nls = nls; cn_queue_alloc_dev()
141 return dev; cn_queue_alloc_dev()
144 void cn_queue_free_dev(struct cn_queue_dev *dev) cn_queue_free_dev() argument
148 spin_lock_bh(&dev->queue_lock); cn_queue_free_dev()
149 list_for_each_entry_safe(cbq, n, &dev->queue_list, callback_entry) cn_queue_free_dev()
151 spin_unlock_bh(&dev->queue_lock); cn_queue_free_dev()
153 while (atomic_read(&dev->refcnt)) { cn_queue_free_dev()
155 dev->name, atomic_read(&dev->refcnt)); cn_queue_free_dev()
159 kfree(dev); cn_queue_free_dev()
160 dev = NULL; cn_queue_free_dev()
/linux-4.4.14/drivers/net/ethernet/dec/tulip/
H A D21142.c32 struct net_device *dev = tp->dev; t21142_media_task() local
43 dev_info(&dev->dev, "21143 negotiation status %08x, %s\n", t21142_media_task()
44 csr12, medianame[dev->if_port]); t21142_media_task()
45 if (tulip_media_cap[dev->if_port] & MediaIsMII) { t21142_media_task()
46 if (tulip_check_duplex(dev) < 0) { t21142_media_task()
47 netif_carrier_off(dev); t21142_media_task()
50 netif_carrier_on(dev); t21142_media_task()
56 dev_info(&dev->dev, t21142_media_task()
58 medianame[dev->if_port], csr12); t21142_media_task()
61 } else if (dev->if_port == 3) { t21142_media_task()
64 dev_info(&dev->dev, t21142_media_task()
67 t21142_start_nway(dev); t21142_media_task()
73 dev_info(&dev->dev, t21142_media_task()
78 dev->if_port = 0; t21142_media_task()
81 iowrite16(t21142_csr15[dev->if_port], ioaddr + CSR15); t21142_media_task()
82 iowrite32(t21142_csr13[dev->if_port], ioaddr + CSR13); t21142_media_task()
86 dev->if_port = 3; t21142_media_task()
93 dev_info(&dev->dev, "Testing new 21143 media %s\n", t21142_media_task()
94 medianame[dev->if_port]); t21142_media_task()
111 void t21142_start_nway(struct net_device *dev) t21142_start_nway() argument
113 struct tulip_private *tp = netdev_priv(dev); t21142_start_nway()
118 dev->if_port = 0; t21142_start_nway()
122 netdev_dbg(dev, "Restarting 21143 autonegotiation, csr14=%08x\n", t21142_start_nway()
139 void t21142_lnk_change(struct net_device *dev, int csr5) t21142_lnk_change() argument
141 struct tulip_private *tp = netdev_priv(dev); t21142_lnk_change()
150 dev_info(&dev->dev, t21142_lnk_change()
161 if (!(csr12 & 0x8000)) dev->if_port = 0; t21142_lnk_change()
162 else if (negotiated & 0x0100) dev->if_port = 5; t21142_lnk_change()
163 else if (negotiated & 0x0080) dev->if_port = 3; t21142_lnk_change()
164 else if (negotiated & 0x0040) dev->if_port = 4; t21142_lnk_change()
165 else if (negotiated & 0x0020) dev->if_port = 0; t21142_lnk_change()
169 dev->if_port = 3; t21142_lnk_change()
171 tp->full_duplex = (tulip_media_cap[dev->if_port] & MediaAlwaysFD) ? 1:0; t21142_lnk_change()
175 dev_info(&dev->dev, t21142_lnk_change()
177 medianame[dev->if_port], t21142_lnk_change()
181 dev_info(&dev->dev, t21142_lnk_change()
183 medianame[dev->if_port], csr12); t21142_lnk_change()
189 if (tp->mtable->mleaf[i].media == dev->if_port) { t21142_lnk_change()
192 tulip_select_media(dev, startup); t21142_lnk_change()
198 tp->csr6 = (dev->if_port & 1 ? 0x838E0000 : 0x82420000) | (tp->csr6 & 0x20ff); t21142_lnk_change()
206 netdev_dbg(dev, " Restarting Tx and Rx, CSR5 is %08x\n", t21142_lnk_change()
211 netdev_dbg(dev, " Setting CSR6 %08x/%x CSR12 %08x\n", t21142_lnk_change()
215 (dev->if_port == 3 || dev->if_port == 5) && t21142_lnk_change()
220 t21142_start_nway(dev); t21142_lnk_change()
223 } else if (dev->if_port == 3 || dev->if_port == 5) { t21142_lnk_change()
225 dev_info(&dev->dev, "21143 %s link beat %s\n", t21142_lnk_change()
226 medianame[dev->if_port], t21142_lnk_change()
230 t21142_start_nway(dev); t21142_lnk_change()
233 } else if (dev->if_port == 5) t21142_lnk_change()
235 } else if (dev->if_port == 0 || dev->if_port == 4) { t21142_lnk_change()
237 dev_info(&dev->dev, "21143 10baseT link beat good\n"); t21142_lnk_change()
240 dev_info(&dev->dev, "21143 10mbps sensed media\n"); t21142_lnk_change()
241 dev->if_port = 0; t21142_lnk_change()
244 dev_info(&dev->dev, "21143 using NWay-set %s, csr6 %08x\n", t21142_lnk_change()
245 medianame[dev->if_port], tp->csr6); t21142_lnk_change()
248 dev_info(&dev->dev, "21143 100baseTx sensed media\n"); t21142_lnk_change()
249 dev->if_port = 3; t21142_lnk_change()
/linux-4.4.14/drivers/crypto/amcc/
H A Dcrypto4xx_core.c49 static void crypto4xx_hw_init(struct crypto4xx_device *dev) crypto4xx_hw_init() argument
59 writel(PPC4XX_BYTE_ORDER, dev->ce_base + CRYPTO4XX_BYTE_ORDER_CFG); crypto4xx_hw_init()
70 writel(pe_dma_cfg.w, dev->ce_base + CRYPTO4XX_PE_DMA_CFG); crypto4xx_hw_init()
77 writel(pe_dma_cfg.w, dev->ce_base + CRYPTO4XX_PE_DMA_CFG); crypto4xx_hw_init()
78 writel(dev->pdr_pa, dev->ce_base + CRYPTO4XX_PDR_BASE); crypto4xx_hw_init()
79 writel(dev->pdr_pa, dev->ce_base + CRYPTO4XX_RDR_BASE); crypto4xx_hw_init()
80 writel(PPC4XX_PRNG_CTRL_AUTO_EN, dev->ce_base + CRYPTO4XX_PRNG_CTRL); crypto4xx_hw_init()
82 writel(rand_num, dev->ce_base + CRYPTO4XX_PRNG_SEED_L); crypto4xx_hw_init()
84 writel(rand_num, dev->ce_base + CRYPTO4XX_PRNG_SEED_H); crypto4xx_hw_init()
88 writel(ring_size.w, dev->ce_base + CRYPTO4XX_RING_SIZE); crypto4xx_hw_init()
90 writel(ring_ctrl.w, dev->ce_base + CRYPTO4XX_RING_CTRL); crypto4xx_hw_init()
91 device_ctrl = readl(dev->ce_base + CRYPTO4XX_DEVICE_CTRL); crypto4xx_hw_init()
93 writel(device_ctrl, dev->ce_base + CRYPTO4XX_DEVICE_CTRL); crypto4xx_hw_init()
94 writel(dev->gdr_pa, dev->ce_base + CRYPTO4XX_GATH_RING_BASE); crypto4xx_hw_init()
95 writel(dev->sdr_pa, dev->ce_base + CRYPTO4XX_SCAT_RING_BASE); crypto4xx_hw_init()
99 writel(part_ring_size.w, dev->ce_base + CRYPTO4XX_PART_RING_SIZE); crypto4xx_hw_init()
100 writel(PPC4XX_SD_BUFFER_SIZE, dev->ce_base + CRYPTO4XX_PART_RING_CFG); crypto4xx_hw_init()
104 writel(io_threshold.w, dev->ce_base + CRYPTO4XX_IO_THRESHOLD); crypto4xx_hw_init()
105 writel(0, dev->ce_base + CRYPTO4XX_PDR_BASE_UADDR); crypto4xx_hw_init()
106 writel(0, dev->ce_base + CRYPTO4XX_RDR_BASE_UADDR); crypto4xx_hw_init()
107 writel(0, dev->ce_base + CRYPTO4XX_PKT_SRC_UADDR); crypto4xx_hw_init()
108 writel(0, dev->ce_base + CRYPTO4XX_PKT_DEST_UADDR); crypto4xx_hw_init()
109 writel(0, dev->ce_base + CRYPTO4XX_SA_UADDR); crypto4xx_hw_init()
110 writel(0, dev->ce_base + CRYPTO4XX_GATH_RING_BASE_UADDR); crypto4xx_hw_init()
111 writel(0, dev->ce_base + CRYPTO4XX_SCAT_RING_BASE_UADDR); crypto4xx_hw_init()
118 writel(pe_dma_cfg.w, dev->ce_base + CRYPTO4XX_PE_DMA_CFG); crypto4xx_hw_init()
120 writel(PPC4XX_INTERRUPT_CLR, dev->ce_base + CRYPTO4XX_INT_CLR); crypto4xx_hw_init()
121 writel(PPC4XX_INT_DESCR_CNT, dev->ce_base + CRYPTO4XX_INT_DESCR_CNT); crypto4xx_hw_init()
122 writel(PPC4XX_INT_DESCR_CNT, dev->ce_base + CRYPTO4XX_INT_DESCR_CNT); crypto4xx_hw_init()
123 writel(PPC4XX_INT_CFG, dev->ce_base + CRYPTO4XX_INT_CFG); crypto4xx_hw_init()
124 writel(PPC4XX_PD_DONE_INT, dev->ce_base + CRYPTO4XX_INT_EN); crypto4xx_hw_init()
129 ctx->sa_in = dma_alloc_coherent(ctx->dev->core_dev->device, size * 4, crypto4xx_alloc_sa()
134 ctx->sa_out = dma_alloc_coherent(ctx->dev->core_dev->device, size * 4, crypto4xx_alloc_sa()
137 dma_free_coherent(ctx->dev->core_dev->device, crypto4xx_alloc_sa()
153 dma_free_coherent(ctx->dev->core_dev->device, ctx->sa_len * 4, crypto4xx_free_sa()
156 dma_free_coherent(ctx->dev->core_dev->device, ctx->sa_len * 4, crypto4xx_free_sa()
166 ctx->state_record = dma_alloc_coherent(ctx->dev->core_dev->device, crypto4xx_alloc_state_record()
179 dma_free_coherent(ctx->dev->core_dev->device, crypto4xx_free_state_record()
191 static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev) crypto4xx_build_pdr() argument
195 dev->pdr = dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_pdr()
197 &dev->pdr_pa, GFP_ATOMIC); crypto4xx_build_pdr()
198 if (!dev->pdr) crypto4xx_build_pdr()
201 dev->pdr_uinfo = kzalloc(sizeof(struct pd_uinfo) * PPC4XX_NUM_PD, crypto4xx_build_pdr()
203 if (!dev->pdr_uinfo) { crypto4xx_build_pdr()
204 dma_free_coherent(dev->core_dev->device, crypto4xx_build_pdr()
206 dev->pdr, crypto4xx_build_pdr()
207 dev->pdr_pa); crypto4xx_build_pdr()
210 memset(dev->pdr, 0, sizeof(struct ce_pd) * PPC4XX_NUM_PD); crypto4xx_build_pdr()
211 dev->shadow_sa_pool = dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_pdr()
213 &dev->shadow_sa_pool_pa, crypto4xx_build_pdr()
215 if (!dev->shadow_sa_pool) crypto4xx_build_pdr()
218 dev->shadow_sr_pool = dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_pdr()
220 &dev->shadow_sr_pool_pa, GFP_ATOMIC); crypto4xx_build_pdr()
221 if (!dev->shadow_sr_pool) crypto4xx_build_pdr()
224 pd_uinfo = (struct pd_uinfo *) (dev->pdr_uinfo + crypto4xx_build_pdr()
228 pd_uinfo->sa_va = dev->shadow_sa_pool + 256 * i; crypto4xx_build_pdr()
229 pd_uinfo->sa_pa = dev->shadow_sa_pool_pa + 256 * i; crypto4xx_build_pdr()
232 pd_uinfo->sr_va = dev->shadow_sr_pool + crypto4xx_build_pdr()
234 pd_uinfo->sr_pa = dev->shadow_sr_pool_pa + crypto4xx_build_pdr()
241 static void crypto4xx_destroy_pdr(struct crypto4xx_device *dev) crypto4xx_destroy_pdr() argument
243 if (dev->pdr != NULL) crypto4xx_destroy_pdr()
244 dma_free_coherent(dev->core_dev->device, crypto4xx_destroy_pdr()
246 dev->pdr, dev->pdr_pa); crypto4xx_destroy_pdr()
247 if (dev->shadow_sa_pool) crypto4xx_destroy_pdr()
248 dma_free_coherent(dev->core_dev->device, 256 * PPC4XX_NUM_PD, crypto4xx_destroy_pdr()
249 dev->shadow_sa_pool, dev->shadow_sa_pool_pa); crypto4xx_destroy_pdr()
250 if (dev->shadow_sr_pool) crypto4xx_destroy_pdr()
251 dma_free_coherent(dev->core_dev->device, crypto4xx_destroy_pdr()
253 dev->shadow_sr_pool, dev->shadow_sr_pool_pa); crypto4xx_destroy_pdr()
255 kfree(dev->pdr_uinfo); crypto4xx_destroy_pdr()
258 static u32 crypto4xx_get_pd_from_pdr_nolock(struct crypto4xx_device *dev) crypto4xx_get_pd_from_pdr_nolock() argument
263 retval = dev->pdr_head; crypto4xx_get_pd_from_pdr_nolock()
264 tmp = (dev->pdr_head + 1) % PPC4XX_NUM_PD; crypto4xx_get_pd_from_pdr_nolock()
266 if (tmp == dev->pdr_tail) crypto4xx_get_pd_from_pdr_nolock()
269 dev->pdr_head = tmp; crypto4xx_get_pd_from_pdr_nolock()
274 static u32 crypto4xx_put_pd_to_pdr(struct crypto4xx_device *dev, u32 idx) crypto4xx_put_pd_to_pdr() argument
279 pd_uinfo = (struct pd_uinfo *)(dev->pdr_uinfo + crypto4xx_put_pd_to_pdr()
281 spin_lock_irqsave(&dev->core_dev->lock, flags); crypto4xx_put_pd_to_pdr()
282 if (dev->pdr_tail != PPC4XX_LAST_PD) crypto4xx_put_pd_to_pdr()
283 dev->pdr_tail++; crypto4xx_put_pd_to_pdr()
285 dev->pdr_tail = 0; crypto4xx_put_pd_to_pdr()
287 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_put_pd_to_pdr()
292 static struct ce_pd *crypto4xx_get_pdp(struct crypto4xx_device *dev, crypto4xx_get_pdp() argument
295 *pd_dma = dev->pdr_pa + sizeof(struct ce_pd) * idx; crypto4xx_get_pdp()
297 return dev->pdr + sizeof(struct ce_pd) * idx; crypto4xx_get_pdp()
305 static u32 crypto4xx_build_gdr(struct crypto4xx_device *dev) crypto4xx_build_gdr() argument
307 dev->gdr = dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_gdr()
309 &dev->gdr_pa, GFP_ATOMIC); crypto4xx_build_gdr()
310 if (!dev->gdr) crypto4xx_build_gdr()
313 memset(dev->gdr, 0, sizeof(struct ce_gd) * PPC4XX_NUM_GD); crypto4xx_build_gdr()
318 static inline void crypto4xx_destroy_gdr(struct crypto4xx_device *dev) crypto4xx_destroy_gdr() argument
320 dma_free_coherent(dev->core_dev->device, crypto4xx_destroy_gdr()
322 dev->gdr, dev->gdr_pa); crypto4xx_destroy_gdr()
329 u32 crypto4xx_get_n_gd(struct crypto4xx_device *dev, int n) crypto4xx_get_n_gd() argument
336 retval = dev->gdr_head; crypto4xx_get_n_gd()
337 tmp = (dev->gdr_head + n) % PPC4XX_NUM_GD; crypto4xx_get_n_gd()
338 if (dev->gdr_head > dev->gdr_tail) { crypto4xx_get_n_gd()
339 if (tmp < dev->gdr_head && tmp >= dev->gdr_tail) crypto4xx_get_n_gd()
341 } else if (dev->gdr_head < dev->gdr_tail) { crypto4xx_get_n_gd()
342 if (tmp < dev->gdr_head || tmp >= dev->gdr_tail) crypto4xx_get_n_gd()
345 dev->gdr_head = tmp; crypto4xx_get_n_gd()
350 static u32 crypto4xx_put_gd_to_gdr(struct crypto4xx_device *dev) crypto4xx_put_gd_to_gdr() argument
354 spin_lock_irqsave(&dev->core_dev->lock, flags); crypto4xx_put_gd_to_gdr()
355 if (dev->gdr_tail == dev->gdr_head) { crypto4xx_put_gd_to_gdr()
356 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_put_gd_to_gdr()
360 if (dev->gdr_tail != PPC4XX_LAST_GD) crypto4xx_put_gd_to_gdr()
361 dev->gdr_tail++; crypto4xx_put_gd_to_gdr()
363 dev->gdr_tail = 0; crypto4xx_put_gd_to_gdr()
365 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_put_gd_to_gdr()
370 static inline struct ce_gd *crypto4xx_get_gdp(struct crypto4xx_device *dev, crypto4xx_get_gdp() argument
373 *gd_dma = dev->gdr_pa + sizeof(struct ce_gd) * idx; crypto4xx_get_gdp()
375 return (struct ce_gd *) (dev->gdr + sizeof(struct ce_gd) * idx); crypto4xx_get_gdp()
383 static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev) crypto4xx_build_sdr() argument
389 dev->sdr = dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_sdr()
391 &dev->sdr_pa, GFP_ATOMIC); crypto4xx_build_sdr()
392 if (!dev->sdr) crypto4xx_build_sdr()
395 dev->scatter_buffer_size = PPC4XX_SD_BUFFER_SIZE; crypto4xx_build_sdr()
396 dev->scatter_buffer_va = crypto4xx_build_sdr()
397 dma_alloc_coherent(dev->core_dev->device, crypto4xx_build_sdr()
398 dev->scatter_buffer_size * PPC4XX_NUM_SD, crypto4xx_build_sdr()
399 &dev->scatter_buffer_pa, GFP_ATOMIC); crypto4xx_build_sdr()
400 if (!dev->scatter_buffer_va) { crypto4xx_build_sdr()
401 dma_free_coherent(dev->core_dev->device, crypto4xx_build_sdr()
403 dev->sdr, dev->sdr_pa); crypto4xx_build_sdr()
407 sd_array = dev->sdr; crypto4xx_build_sdr()
410 sd_array[i].ptr = dev->scatter_buffer_pa + crypto4xx_build_sdr()
411 dev->scatter_buffer_size * i; crypto4xx_build_sdr()
417 static void crypto4xx_destroy_sdr(struct crypto4xx_device *dev) crypto4xx_destroy_sdr() argument
419 if (dev->sdr != NULL) crypto4xx_destroy_sdr()
420 dma_free_coherent(dev->core_dev->device, crypto4xx_destroy_sdr()
422 dev->sdr, dev->sdr_pa); crypto4xx_destroy_sdr()
424 if (dev->scatter_buffer_va != NULL) crypto4xx_destroy_sdr()
425 dma_free_coherent(dev->core_dev->device, crypto4xx_destroy_sdr()
426 dev->scatter_buffer_size * PPC4XX_NUM_SD, crypto4xx_destroy_sdr()
427 dev->scatter_buffer_va, crypto4xx_destroy_sdr()
428 dev->scatter_buffer_pa); crypto4xx_destroy_sdr()
435 static u32 crypto4xx_get_n_sd(struct crypto4xx_device *dev, int n) crypto4xx_get_n_sd() argument
443 retval = dev->sdr_head; crypto4xx_get_n_sd()
444 tmp = (dev->sdr_head + n) % PPC4XX_NUM_SD; crypto4xx_get_n_sd()
445 if (dev->sdr_head > dev->gdr_tail) { crypto4xx_get_n_sd()
446 if (tmp < dev->sdr_head && tmp >= dev->sdr_tail) crypto4xx_get_n_sd()
448 } else if (dev->sdr_head < dev->sdr_tail) { crypto4xx_get_n_sd()
449 if (tmp < dev->sdr_head || tmp >= dev->sdr_tail) crypto4xx_get_n_sd()
452 dev->sdr_head = tmp; crypto4xx_get_n_sd()
457 static u32 crypto4xx_put_sd_to_sdr(struct crypto4xx_device *dev) crypto4xx_put_sd_to_sdr() argument
461 spin_lock_irqsave(&dev->core_dev->lock, flags); crypto4xx_put_sd_to_sdr()
462 if (dev->sdr_tail == dev->sdr_head) { crypto4xx_put_sd_to_sdr()
463 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_put_sd_to_sdr()
466 if (dev->sdr_tail != PPC4XX_LAST_SD) crypto4xx_put_sd_to_sdr()
467 dev->sdr_tail++; crypto4xx_put_sd_to_sdr()
469 dev->sdr_tail = 0; crypto4xx_put_sd_to_sdr()
470 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_put_sd_to_sdr()
475 static inline struct ce_sd *crypto4xx_get_sdp(struct crypto4xx_device *dev, crypto4xx_get_sdp() argument
478 *sd_dma = dev->sdr_pa + sizeof(struct ce_sd) * idx; crypto4xx_get_sdp()
480 return (struct ce_sd *)(dev->sdr + sizeof(struct ce_sd) * idx); crypto4xx_get_sdp()
483 static u32 crypto4xx_fill_one_page(struct crypto4xx_device *dev, crypto4xx_fill_one_page() argument
489 if (*length > dev->scatter_buffer_size) { crypto4xx_fill_one_page()
491 dev->scatter_buffer_va + crypto4xx_fill_one_page()
492 *idx * dev->scatter_buffer_size + *offset, crypto4xx_fill_one_page()
493 dev->scatter_buffer_size); crypto4xx_fill_one_page()
495 *length -= dev->scatter_buffer_size; crypto4xx_fill_one_page()
496 *nbytes -= dev->scatter_buffer_size; crypto4xx_fill_one_page()
501 *addr = *addr + dev->scatter_buffer_size; crypto4xx_fill_one_page()
503 } else if (*length < dev->scatter_buffer_size) { crypto4xx_fill_one_page()
505 dev->scatter_buffer_va + crypto4xx_fill_one_page()
506 *idx * dev->scatter_buffer_size + *offset, *length); crypto4xx_fill_one_page()
507 if ((*offset + *length) == dev->scatter_buffer_size) { crypto4xx_fill_one_page()
521 len = (*nbytes <= dev->scatter_buffer_size) ? crypto4xx_fill_one_page()
522 (*nbytes) : dev->scatter_buffer_size; crypto4xx_fill_one_page()
524 dev->scatter_buffer_va + crypto4xx_fill_one_page()
525 *idx * dev->scatter_buffer_size + *offset, crypto4xx_fill_one_page()
539 static void crypto4xx_copy_pkt_to_dst(struct crypto4xx_device *dev, crypto4xx_copy_pkt_to_dst() argument
560 addr = dma_map_page(dev->core_dev->device, sg_page(sg), crypto4xx_copy_pkt_to_dst()
565 while (crypto4xx_fill_one_page(dev, &addr, &len, crypto4xx_copy_pkt_to_dst()
572 len = (nbytes <= (dev->scatter_buffer_size - offset)) ? crypto4xx_copy_pkt_to_dst()
573 nbytes : (dev->scatter_buffer_size - offset); crypto4xx_copy_pkt_to_dst()
575 while (crypto4xx_fill_one_page(dev, &addr, &len, crypto4xx_copy_pkt_to_dst()
583 while (crypto4xx_fill_one_page(dev, &addr, crypto4xx_copy_pkt_to_dst()
607 static void crypto4xx_ret_sg_desc(struct crypto4xx_device *dev, crypto4xx_ret_sg_desc() argument
613 crypto4xx_put_gd_to_gdr(dev); crypto4xx_ret_sg_desc()
619 crypto4xx_put_sd_to_sdr(dev); crypto4xx_ret_sg_desc()
626 static u32 crypto4xx_ablkcipher_done(struct crypto4xx_device *dev, crypto4xx_ablkcipher_done() argument
639 crypto4xx_copy_pkt_to_dst(dev, pd, pd_uinfo, ablk_req->nbytes, crypto4xx_ablkcipher_done()
643 addr = dma_map_page(dev->core_dev->device, sg_page(dst), crypto4xx_ablkcipher_done()
646 crypto4xx_ret_sg_desc(dev, pd_uinfo); crypto4xx_ablkcipher_done()
653 static u32 crypto4xx_ahash_done(struct crypto4xx_device *dev, crypto4xx_ahash_done() argument
664 crypto4xx_ret_sg_desc(dev, pd_uinfo); crypto4xx_ahash_done()
672 static u32 crypto4xx_pd_done(struct crypto4xx_device *dev, u32 idx) crypto4xx_pd_done() argument
677 pd = dev->pdr + sizeof(struct ce_pd)*idx; crypto4xx_pd_done()
678 pd_uinfo = dev->pdr_uinfo + sizeof(struct pd_uinfo)*idx; crypto4xx_pd_done()
681 return crypto4xx_ablkcipher_done(dev, pd_uinfo, pd); crypto4xx_pd_done()
683 return crypto4xx_ahash_done(dev, pd_uinfo); crypto4xx_pd_done()
724 crypto4xx_destroy_pdr(core_dev->dev); crypto4xx_stop_all()
725 crypto4xx_destroy_gdr(core_dev->dev); crypto4xx_stop_all()
726 crypto4xx_destroy_sdr(core_dev->dev); crypto4xx_stop_all()
727 iounmap(core_dev->dev->ce_base); crypto4xx_stop_all()
728 kfree(core_dev->dev); crypto4xx_stop_all()
732 void crypto4xx_return_pd(struct crypto4xx_device *dev, crypto4xx_return_pd() argument
737 dev->pdr_head = pd_entry; crypto4xx_return_pd()
766 struct crypto4xx_device *dev = ctx->dev; crypto4xx_build_pd() local
806 spin_lock_irqsave(&dev->core_dev->lock, flags); crypto4xx_build_pd()
808 fst_gd = crypto4xx_get_n_gd(dev, num_gd); crypto4xx_build_pd()
810 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_build_pd()
815 fst_sd = crypto4xx_get_n_sd(dev, num_sd); crypto4xx_build_pd()
818 dev->gdr_head = fst_gd; crypto4xx_build_pd()
819 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_build_pd()
823 pd_entry = crypto4xx_get_pd_from_pdr_nolock(dev); crypto4xx_build_pd()
826 dev->gdr_head = fst_gd; crypto4xx_build_pd()
828 dev->sdr_head = fst_sd; crypto4xx_build_pd()
829 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_build_pd()
832 spin_unlock_irqrestore(&dev->core_dev->lock, flags); crypto4xx_build_pd()
834 pd_uinfo = (struct pd_uinfo *)(dev->pdr_uinfo + crypto4xx_build_pd()
836 pd = crypto4xx_get_pdp(dev, &pd_dma, pd_entry); crypto4xx_build_pd()
870 gd = crypto4xx_get_gdp(dev, &gd_dma, gd_idx); crypto4xx_build_pd()
879 addr = dma_map_page(dev->core_dev->device, sg_page(sg), crypto4xx_build_pd()
889 gd = crypto4xx_get_gdp(dev, &gd_dma, gd_idx); crypto4xx_build_pd()
893 pd->src = (u32)dma_map_page(dev->core_dev->device, sg_page(src), crypto4xx_build_pd()
919 pd->dest = (u32)dma_map_page(dev->core_dev->device, crypto4xx_build_pd()
931 sd = crypto4xx_get_sdp(dev, &sd_dma, sd_idx); crypto4xx_build_pd()
944 sd = crypto4xx_get_sdp(dev, &sd_dma, sd_idx); crypto4xx_build_pd()
965 writel(1, dev->ce_base + CRYPTO4XX_INT_DESCR_RD); crypto4xx_build_pd()
978 ctx->dev = amcc_alg->dev; crypto4xx_alg_init()
1020 alg->dev = sec_dev; crypto4xx_register_alg()
1063 struct device *dev = (struct device *)data; crypto4xx_bh_tasklet_cb() local
1064 struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev); crypto4xx_bh_tasklet_cb()
1069 while (core_dev->dev->pdr_head != core_dev->dev->pdr_tail) { crypto4xx_bh_tasklet_cb()
1070 tail = core_dev->dev->pdr_tail; crypto4xx_bh_tasklet_cb()
1071 pd_uinfo = core_dev->dev->pdr_uinfo + crypto4xx_bh_tasklet_cb()
1073 pd = core_dev->dev->pdr + sizeof(struct ce_pd) * tail; crypto4xx_bh_tasklet_cb()
1078 crypto4xx_pd_done(core_dev->dev, tail); crypto4xx_bh_tasklet_cb()
1079 crypto4xx_put_pd_to_pdr(core_dev->dev, tail); crypto4xx_bh_tasklet_cb()
1093 struct device *dev = (struct device *)data; crypto4xx_ce_interrupt_handler() local
1094 struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev); crypto4xx_ce_interrupt_handler()
1096 if (!core_dev->dev->ce_base) crypto4xx_ce_interrupt_handler()
1100 core_dev->dev->ce_base + CRYPTO4XX_INT_CLR); crypto4xx_ce_interrupt_handler()
1142 struct device *dev = &ofdev->dev; crypto4xx_probe() local
1145 rc = of_address_to_resource(ofdev->dev.of_node, 0, &res); crypto4xx_probe()
1175 dev_set_drvdata(dev, core_dev); crypto4xx_probe()
1177 core_dev->dev = kzalloc(sizeof(struct crypto4xx_device), GFP_KERNEL); crypto4xx_probe()
1178 if (!core_dev->dev) crypto4xx_probe()
1181 core_dev->dev->core_dev = core_dev; crypto4xx_probe()
1182 core_dev->device = dev; crypto4xx_probe()
1184 INIT_LIST_HEAD(&core_dev->dev->alg_list); crypto4xx_probe()
1185 rc = crypto4xx_build_pdr(core_dev->dev); crypto4xx_probe()
1189 rc = crypto4xx_build_gdr(core_dev->dev); crypto4xx_probe()
1193 rc = crypto4xx_build_sdr(core_dev->dev); crypto4xx_probe()
1199 (unsigned long) dev); crypto4xx_probe()
1202 core_dev->irq = irq_of_parse_and_map(ofdev->dev.of_node, 0); crypto4xx_probe()
1204 core_dev->dev->name, dev); crypto4xx_probe()
1208 core_dev->dev->ce_base = of_iomap(ofdev->dev.of_node, 0); crypto4xx_probe()
1209 if (!core_dev->dev->ce_base) { crypto4xx_probe()
1210 dev_err(dev, "failed to of_iomap\n"); crypto4xx_probe()
1216 crypto4xx_hw_init(core_dev->dev); crypto4xx_probe()
1219 rc = crypto4xx_register_alg(core_dev->dev, crypto4xx_alg, crypto4xx_probe()
1227 iounmap(core_dev->dev->ce_base); crypto4xx_probe()
1229 free_irq(core_dev->irq, dev); crypto4xx_probe()
1233 crypto4xx_destroy_sdr(core_dev->dev); crypto4xx_probe()
1235 crypto4xx_destroy_gdr(core_dev->dev); crypto4xx_probe()
1237 crypto4xx_destroy_pdr(core_dev->dev); crypto4xx_probe()
1239 kfree(core_dev->dev); crypto4xx_probe()
1248 struct device *dev = &ofdev->dev; crypto4xx_remove() local
1249 struct crypto4xx_core_device *core_dev = dev_get_drvdata(dev); crypto4xx_remove()
1251 free_irq(core_dev->irq, dev); crypto4xx_remove()
1256 crypto4xx_unregister_alg(core_dev->dev); crypto4xx_remove()
/linux-4.4.14/drivers/net/ethernet/mellanox/mlx4/
H A Dmain.c171 int mlx4_check_port_params(struct mlx4_dev *dev, mlx4_check_port_params() argument
176 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_DPDP)) { mlx4_check_port_params()
177 for (i = 0; i < dev->caps.num_ports - 1; i++) { mlx4_check_port_params()
179 mlx4_err(dev, "Only same port types supported on this HCA, aborting\n"); mlx4_check_port_params()
185 for (i = 0; i < dev->caps.num_ports; i++) { mlx4_check_port_params()
186 if (!(port_type[i] & dev->caps.supported_type[i+1])) { mlx4_check_port_params()
187 mlx4_err(dev, "Requested port type for port %d is not supported on this HCA\n", mlx4_check_port_params()
195 static void mlx4_set_port_mask(struct mlx4_dev *dev) mlx4_set_port_mask() argument
199 for (i = 1; i <= dev->caps.num_ports; ++i) mlx4_set_port_mask()
200 dev->caps.port_mask[i] = dev->caps.port_type[i]; mlx4_set_port_mask()
207 static int mlx4_query_func(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) mlx4_query_func() argument
212 if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS) { mlx4_query_func()
213 err = mlx4_QUERY_FUNC(dev, &func, 0); mlx4_query_func()
215 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n"); mlx4_query_func()
226 static void mlx4_enable_cqe_eqe_stride(struct mlx4_dev *dev) mlx4_enable_cqe_eqe_stride() argument
228 struct mlx4_caps *dev_cap = &dev->caps; mlx4_enable_cqe_eqe_stride()
246 mlx4_dbg(dev, "Enabling CQE stride cacheLine supported\n"); mlx4_enable_cqe_eqe_stride()
251 if (mlx4_is_master(dev)) mlx4_enable_cqe_eqe_stride()
255 mlx4_dbg(dev, "Disabling CQE stride, cacheLine size unsupported\n"); mlx4_enable_cqe_eqe_stride()
261 static int _mlx4_dev_port(struct mlx4_dev *dev, int port, _mlx4_dev_port() argument
264 dev->caps.vl_cap[port] = port_cap->max_vl; _mlx4_dev_port()
265 dev->caps.ib_mtu_cap[port] = port_cap->ib_mtu; _mlx4_dev_port()
266 dev->phys_caps.gid_phys_table_len[port] = port_cap->max_gids; _mlx4_dev_port()
267 dev->phys_caps.pkey_phys_table_len[port] = port_cap->max_pkeys; _mlx4_dev_port()
271 dev->caps.gid_table_len[port] = port_cap->max_gids; _mlx4_dev_port()
272 dev->caps.pkey_table_len[port] = port_cap->max_pkeys; _mlx4_dev_port()
273 dev->caps.port_width_cap[port] = port_cap->max_port_width; _mlx4_dev_port()
274 dev->caps.eth_mtu_cap[port] = port_cap->eth_mtu; _mlx4_dev_port()
275 dev->caps.def_mac[port] = port_cap->def_mac; _mlx4_dev_port()
276 dev->caps.supported_type[port] = port_cap->supported_port_types; _mlx4_dev_port()
277 dev->caps.suggested_type[port] = port_cap->suggested_type; _mlx4_dev_port()
278 dev->caps.default_sense[port] = port_cap->default_sense; _mlx4_dev_port()
279 dev->caps.trans_type[port] = port_cap->trans_type; _mlx4_dev_port()
280 dev->caps.vendor_oui[port] = port_cap->vendor_oui; _mlx4_dev_port()
281 dev->caps.wavelength[port] = port_cap->wavelength; _mlx4_dev_port()
282 dev->caps.trans_code[port] = port_cap->trans_code; _mlx4_dev_port()
287 static int mlx4_dev_port(struct mlx4_dev *dev, int port, mlx4_dev_port() argument
292 err = mlx4_QUERY_PORT(dev, port, port_cap); mlx4_dev_port()
295 mlx4_err(dev, "QUERY_PORT command failed.\n"); mlx4_dev_port()
300 static inline void mlx4_enable_ignore_fcs(struct mlx4_dev *dev) mlx4_enable_ignore_fcs() argument
302 if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_IGNORE_FCS)) mlx4_enable_ignore_fcs()
305 if (mlx4_is_mfunc(dev)) { mlx4_enable_ignore_fcs()
306 mlx4_dbg(dev, "SRIOV mode - Disabling Ignore FCS"); mlx4_enable_ignore_fcs()
307 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_IGNORE_FCS; mlx4_enable_ignore_fcs()
311 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_FCS_KEEP)) { mlx4_enable_ignore_fcs()
312 mlx4_dbg(dev, mlx4_enable_ignore_fcs()
314 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_IGNORE_FCS; mlx4_enable_ignore_fcs()
320 static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) mlx4_dev_cap() argument
325 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); mlx4_dev_cap()
327 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting\n"); mlx4_dev_cap()
330 mlx4_dev_cap_dump(dev, dev_cap); mlx4_dev_cap()
333 mlx4_err(dev, "HCA minimum page size of %d bigger than kernel PAGE_SIZE of %ld, aborting\n", mlx4_dev_cap()
338 mlx4_err(dev, "HCA has %d ports, but we only support %d, aborting\n", mlx4_dev_cap()
343 if (dev_cap->uar_size > pci_resource_len(dev->persist->pdev, 2)) { mlx4_dev_cap()
344 mlx4_err(dev, "HCA reported UAR size of 0x%x bigger than PCI resource 2 size of 0x%llx, aborting\n", mlx4_dev_cap()
347 pci_resource_len(dev->persist->pdev, 2)); mlx4_dev_cap()
351 dev->caps.num_ports = dev_cap->num_ports; mlx4_dev_cap()
352 dev->caps.num_sys_eqs = dev_cap->num_sys_eqs; mlx4_dev_cap()
353 dev->phys_caps.num_phys_eqs = dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS ? mlx4_dev_cap()
354 dev->caps.num_sys_eqs : mlx4_dev_cap()
356 for (i = 1; i <= dev->caps.num_ports; ++i) { mlx4_dev_cap()
357 err = _mlx4_dev_port(dev, i, dev_cap->port_cap + i); mlx4_dev_cap()
359 mlx4_err(dev, "QUERY_PORT command failed, aborting\n"); mlx4_dev_cap()
364 dev->caps.uar_page_size = PAGE_SIZE; mlx4_dev_cap()
365 dev->caps.num_uars = dev_cap->uar_size / PAGE_SIZE; mlx4_dev_cap()
366 dev->caps.local_ca_ack_delay = dev_cap->local_ca_ack_delay; mlx4_dev_cap()
367 dev->caps.bf_reg_size = dev_cap->bf_reg_size; mlx4_dev_cap()
368 dev->caps.bf_regs_per_page = dev_cap->bf_regs_per_page; mlx4_dev_cap()
369 dev->caps.max_sq_sg = dev_cap->max_sq_sg; mlx4_dev_cap()
370 dev->caps.max_rq_sg = dev_cap->max_rq_sg; mlx4_dev_cap()
371 dev->caps.max_wqes = dev_cap->max_qp_sz; mlx4_dev_cap()
372 dev->caps.max_qp_init_rdma = dev_cap->max_requester_per_qp; mlx4_dev_cap()
373 dev->caps.max_srq_wqes = dev_cap->max_srq_sz; mlx4_dev_cap()
374 dev->caps.max_srq_sge = dev_cap->max_rq_sg - 1; mlx4_dev_cap()
375 dev->caps.reserved_srqs = dev_cap->reserved_srqs; mlx4_dev_cap()
376 dev->caps.max_sq_desc_sz = dev_cap->max_sq_desc_sz; mlx4_dev_cap()
377 dev->caps.max_rq_desc_sz = dev_cap->max_rq_desc_sz; mlx4_dev_cap()
383 dev->caps.max_cqes = dev_cap->max_cq_sz - 1; mlx4_dev_cap()
384 dev->caps.reserved_cqs = dev_cap->reserved_cqs; mlx4_dev_cap()
385 dev->caps.reserved_eqs = dev_cap->reserved_eqs; mlx4_dev_cap()
386 dev->caps.reserved_mtts = dev_cap->reserved_mtts; mlx4_dev_cap()
387 dev->caps.reserved_mrws = dev_cap->reserved_mrws; mlx4_dev_cap()
390 dev->caps.reserved_uars = max_t(int, 128, dev_cap->reserved_uars); mlx4_dev_cap()
391 dev->caps.reserved_pds = dev_cap->reserved_pds; mlx4_dev_cap()
392 dev->caps.reserved_xrcds = (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) ? mlx4_dev_cap()
394 dev->caps.max_xrcds = (dev->caps.flags & MLX4_DEV_CAP_FLAG_XRC) ? mlx4_dev_cap()
396 dev->caps.mtt_entry_sz = dev_cap->mtt_entry_sz; mlx4_dev_cap()
398 dev->caps.max_msg_sz = dev_cap->max_msg_sz; mlx4_dev_cap()
399 dev->caps.page_size_cap = ~(u32) (dev_cap->min_page_sz - 1); mlx4_dev_cap()
400 dev->caps.flags = dev_cap->flags; mlx4_dev_cap()
401 dev->caps.flags2 = dev_cap->flags2; mlx4_dev_cap()
402 dev->caps.bmme_flags = dev_cap->bmme_flags; mlx4_dev_cap()
403 dev->caps.reserved_lkey = dev_cap->reserved_lkey; mlx4_dev_cap()
404 dev->caps.stat_rate_support = dev_cap->stat_rate_support; mlx4_dev_cap()
405 dev->caps.max_gso_sz = dev_cap->max_gso_sz; mlx4_dev_cap()
406 dev->caps.max_rss_tbl_sz = dev_cap->max_rss_tbl_sz; mlx4_dev_cap()
408 if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PHV_EN) { mlx4_dev_cap()
412 err = mlx4_QUERY_HCA(dev, &hca_param); mlx4_dev_cap()
420 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_PHV_EN; mlx4_dev_cap()
424 if (mlx4_priv(dev)->pci_dev_data & MLX4_PCI_DEV_FORCE_SENSE_PORT) mlx4_dev_cap()
425 dev->caps.flags |= MLX4_DEV_CAP_FLAG_SENSE_SUPPORT; mlx4_dev_cap()
427 if (mlx4_is_mfunc(dev)) mlx4_dev_cap()
428 dev->caps.flags &= ~MLX4_DEV_CAP_FLAG_SENSE_SUPPORT; mlx4_dev_cap()
431 dev->caps.log_num_macs = MLX4_MIN_LOG_NUM_MAC; mlx4_dev_cap()
432 dev->caps.log_num_vlans = MLX4_MIN_LOG_NUM_VLANS; mlx4_dev_cap()
434 dev->caps.log_num_macs = log_num_mac; mlx4_dev_cap()
435 dev->caps.log_num_vlans = MLX4_LOG_NUM_VLANS; mlx4_dev_cap()
438 for (i = 1; i <= dev->caps.num_ports; ++i) { mlx4_dev_cap()
439 dev->caps.port_type[i] = MLX4_PORT_TYPE_NONE; mlx4_dev_cap()
440 if (dev->caps.supported_type[i]) { mlx4_dev_cap()
442 if (dev->caps.supported_type[i] == MLX4_PORT_TYPE_ETH) mlx4_dev_cap()
443 dev->caps.port_type[i] = MLX4_PORT_TYPE_ETH; mlx4_dev_cap()
445 else if (dev->caps.supported_type[i] == mlx4_dev_cap()
447 dev->caps.port_type[i] = MLX4_PORT_TYPE_IB; mlx4_dev_cap()
453 dev->caps.port_type[i] = dev->caps.suggested_type[i] ? mlx4_dev_cap()
456 dev->caps.port_type[i] = port_type_array[i - 1]; mlx4_dev_cap()
465 mlx4_priv(dev)->sense.sense_allowed[i] = mlx4_dev_cap()
466 ((dev->caps.supported_type[i] == MLX4_PORT_TYPE_AUTO) && mlx4_dev_cap()
467 (dev->caps.flags & MLX4_DEV_CAP_FLAG_DPDP) && mlx4_dev_cap()
468 (dev->caps.flags & MLX4_DEV_CAP_FLAG_SENSE_SUPPORT)); mlx4_dev_cap()
475 if (mlx4_priv(dev)->sense.sense_allowed[i] && dev->caps.default_sense[i]) { mlx4_dev_cap()
477 dev->caps.possible_type[i] = MLX4_PORT_TYPE_AUTO; mlx4_dev_cap()
478 mlx4_SENSE_PORT(dev, i, &sensed_port); mlx4_dev_cap()
480 dev->caps.port_type[i] = sensed_port; mlx4_dev_cap()
482 dev->caps.possible_type[i] = dev->caps.port_type[i]; mlx4_dev_cap()
485 if (dev->caps.log_num_macs > dev_cap->port_cap[i].log_max_macs) { mlx4_dev_cap()
486 dev->caps.log_num_macs = dev_cap->port_cap[i].log_max_macs; mlx4_dev_cap()
487 mlx4_warn(dev, "Requested number of MACs is too much for port %d, reducing to %d\n", mlx4_dev_cap()
488 i, 1 << dev->caps.log_num_macs); mlx4_dev_cap()
490 if (dev->caps.log_num_vlans > dev_cap->port_cap[i].log_max_vlans) { mlx4_dev_cap()
491 dev->caps.log_num_vlans = dev_cap->port_cap[i].log_max_vlans; mlx4_dev_cap()
492 mlx4_warn(dev, "Requested number of VLANs is too much for port %d, reducing to %d\n", mlx4_dev_cap()
493 i, 1 << dev->caps.log_num_vlans); mlx4_dev_cap()
497 if (mlx4_is_master(dev) && (dev->caps.num_ports == 2) && mlx4_dev_cap()
500 mlx4_warn(dev, mlx4_dev_cap()
502 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_QOS_VPP; mlx4_dev_cap()
505 dev->caps.max_counters = dev_cap->max_counters; mlx4_dev_cap()
507 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW] = dev_cap->reserved_qps; mlx4_dev_cap()
508 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_ETH_ADDR] = mlx4_dev_cap()
509 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FC_ADDR] = mlx4_dev_cap()
510 (1 << dev->caps.log_num_macs) * mlx4_dev_cap()
511 (1 << dev->caps.log_num_vlans) * mlx4_dev_cap()
512 dev->caps.num_ports; mlx4_dev_cap()
513 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FC_EXCH] = MLX4_NUM_FEXCH; mlx4_dev_cap()
516 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FS_EN) mlx4_dev_cap()
517 dev->caps.dmfs_high_rate_qpn_base = dev_cap->dmfs_high_rate_qpn_base; mlx4_dev_cap()
519 dev->caps.dmfs_high_rate_qpn_base = mlx4_dev_cap()
520 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW]; mlx4_dev_cap()
523 dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_FS_EN) { mlx4_dev_cap()
524 dev->caps.dmfs_high_rate_qpn_range = dev_cap->dmfs_high_rate_qpn_range; mlx4_dev_cap()
525 dev->caps.dmfs_high_steer_mode = MLX4_STEERING_DMFS_A0_DEFAULT; mlx4_dev_cap()
526 dev->caps.flags2 |= MLX4_DEV_CAP_FLAG2_FS_A0; mlx4_dev_cap()
528 dev->caps.dmfs_high_steer_mode = MLX4_STEERING_DMFS_A0_NOT_SUPPORTED; mlx4_dev_cap()
529 dev->caps.dmfs_high_rate_qpn_base = mlx4_dev_cap()
530 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW]; mlx4_dev_cap()
531 dev->caps.dmfs_high_rate_qpn_range = MLX4_A0_STEERING_TABLE_SIZE; mlx4_dev_cap()
534 dev->caps.rl_caps = dev_cap->rl_caps; mlx4_dev_cap()
536 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_RSS_RAW_ETH] = mlx4_dev_cap()
537 dev->caps.dmfs_high_rate_qpn_range; mlx4_dev_cap()
539 dev->caps.reserved_qps = dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW] + mlx4_dev_cap()
540 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_ETH_ADDR] + mlx4_dev_cap()
541 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FC_ADDR] + mlx4_dev_cap()
542 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FC_EXCH]; mlx4_dev_cap()
544 dev->caps.sqp_demux = (mlx4_is_master(dev)) ? MLX4_MAX_NUM_SLAVES : 0; mlx4_dev_cap()
546 if (!enable_64b_cqe_eqe && !mlx4_is_slave(dev)) { mlx4_dev_cap()
549 mlx4_warn(dev, "64B EQEs/CQEs supported by the device but not enabled\n"); mlx4_dev_cap()
550 dev->caps.flags &= ~MLX4_DEV_CAP_FLAG_64B_CQE; mlx4_dev_cap()
551 dev->caps.flags &= ~MLX4_DEV_CAP_FLAG_64B_EQE; mlx4_dev_cap()
557 mlx4_warn(dev, "Disabling EQE/CQE stride per user request\n"); mlx4_dev_cap()
563 if ((dev->caps.flags & mlx4_dev_cap()
565 mlx4_is_master(dev)) mlx4_dev_cap()
566 dev->caps.function_caps |= MLX4_FUNC_CAP_64B_EQE_CQE; mlx4_dev_cap()
568 if (!mlx4_is_slave(dev)) { mlx4_dev_cap()
569 mlx4_enable_cqe_eqe_stride(dev); mlx4_dev_cap()
570 dev->caps.alloc_res_qp_mask = mlx4_dev_cap()
571 (dev->caps.bf_reg_size ? MLX4_RESERVE_ETH_BF_QP : 0) | mlx4_dev_cap()
574 if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_ETS_CFG) && mlx4_dev_cap()
575 dev->caps.flags & MLX4_DEV_CAP_FLAG_SET_ETH_SCHED) { mlx4_dev_cap()
576 mlx4_warn(dev, "Old device ETS support detected\n"); mlx4_dev_cap()
577 mlx4_warn(dev, "Consider upgrading device FW.\n"); mlx4_dev_cap()
578 dev->caps.flags2 |= MLX4_DEV_CAP_FLAG2_ETS_CFG; mlx4_dev_cap()
582 dev->caps.alloc_res_qp_mask = 0; mlx4_dev_cap()
585 mlx4_enable_ignore_fcs(dev); mlx4_dev_cap()
590 static int mlx4_get_pcie_dev_link_caps(struct mlx4_dev *dev, mlx4_get_pcie_dev_link_caps() argument
602 err1 = pcie_capability_read_dword(dev->persist->pdev, PCI_EXP_LNKCAP, mlx4_get_pcie_dev_link_caps()
604 err2 = pcie_capability_read_dword(dev->persist->pdev, PCI_EXP_LNKCAP2, mlx4_get_pcie_dev_link_caps()
631 static void mlx4_check_pcie_caps(struct mlx4_dev *dev) mlx4_check_pcie_caps() argument
643 err = mlx4_get_pcie_dev_link_caps(dev, &speed_cap, &width_cap); mlx4_check_pcie_caps()
645 mlx4_warn(dev, mlx4_check_pcie_caps()
650 err = pcie_get_minimum_link(dev->persist->pdev, &speed, &width); mlx4_check_pcie_caps()
653 mlx4_warn(dev, mlx4_check_pcie_caps()
659 mlx4_warn(dev, mlx4_check_pcie_caps()
662 mlx4_info(dev, "PCIe link speed is %s, device supports %s\n", mlx4_check_pcie_caps()
664 mlx4_info(dev, "PCIe link width is x%d, device supports x%d\n", mlx4_check_pcie_caps()
670 static int mlx4_how_many_lives_vf(struct mlx4_dev *dev) mlx4_how_many_lives_vf() argument
672 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_how_many_lives_vf()
677 for (i = 1/*the ppf is 0*/; i < dev->num_slaves; ++i) { mlx4_how_many_lives_vf()
681 mlx4_warn(dev, "%s: slave: %d is still active\n", mlx4_how_many_lives_vf()
689 int mlx4_get_parav_qkey(struct mlx4_dev *dev, u32 qpn, u32 *qkey) mlx4_get_parav_qkey() argument
693 if (qpn >= dev->phys_caps.base_tunnel_sqpn + 8 * MLX4_MFUNC_MAX || mlx4_get_parav_qkey()
694 qpn < dev->phys_caps.base_proxy_sqpn) mlx4_get_parav_qkey()
697 if (qpn >= dev->phys_caps.base_tunnel_sqpn) mlx4_get_parav_qkey()
699 qk += qpn - dev->phys_caps.base_tunnel_sqpn; mlx4_get_parav_qkey()
701 qk += qpn - dev->phys_caps.base_proxy_sqpn; mlx4_get_parav_qkey()
707 void mlx4_sync_pkey_table(struct mlx4_dev *dev, int slave, int port, int i, int val) mlx4_sync_pkey_table() argument
709 struct mlx4_priv *priv = container_of(dev, struct mlx4_priv, dev); mlx4_sync_pkey_table()
711 if (!mlx4_is_master(dev)) mlx4_sync_pkey_table()
718 void mlx4_put_slave_node_guid(struct mlx4_dev *dev, int slave, __be64 guid) mlx4_put_slave_node_guid() argument
720 struct mlx4_priv *priv = container_of(dev, struct mlx4_priv, dev); mlx4_put_slave_node_guid()
722 if (!mlx4_is_master(dev)) mlx4_put_slave_node_guid()
729 __be64 mlx4_get_slave_node_guid(struct mlx4_dev *dev, int slave) mlx4_get_slave_node_guid() argument
731 struct mlx4_priv *priv = container_of(dev, struct mlx4_priv, dev); mlx4_get_slave_node_guid()
733 if (!mlx4_is_master(dev)) mlx4_get_slave_node_guid()
740 int mlx4_is_slave_active(struct mlx4_dev *dev, int slave) mlx4_is_slave_active() argument
742 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_is_slave_active()
745 if (!mlx4_is_master(dev)) mlx4_is_slave_active()
753 static void slave_adjust_steering_mode(struct mlx4_dev *dev, slave_adjust_steering_mode() argument
757 dev->caps.steering_mode = hca_param->steering_mode; slave_adjust_steering_mode()
758 if (dev->caps.steering_mode == MLX4_STEERING_MODE_DEVICE_MANAGED) { slave_adjust_steering_mode()
759 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; slave_adjust_steering_mode()
760 dev->caps.fs_log_max_ucast_qp_range_size = slave_adjust_steering_mode()
763 dev->caps.num_qp_per_mgm = slave_adjust_steering_mode()
766 mlx4_dbg(dev, "Steering mode is: %s\n", slave_adjust_steering_mode()
767 mlx4_steering_mode_str(dev->caps.steering_mode)); slave_adjust_steering_mode()
770 static int mlx4_slave_cap(struct mlx4_dev *dev) mlx4_slave_cap() argument
780 err = mlx4_QUERY_HCA(dev, &hca_param); mlx4_slave_cap()
782 mlx4_err(dev, "QUERY_HCA command failed, aborting\n"); mlx4_slave_cap()
790 mlx4_err(dev, "Unknown hca global capabilities\n"); mlx4_slave_cap()
796 dev->caps.hca_core_clock = hca_param.hca_core_clock; mlx4_slave_cap()
799 dev->caps.max_qp_dest_rdma = 1 << hca_param.log_rd_per_qp; mlx4_slave_cap()
800 err = mlx4_dev_cap(dev, &dev_cap); mlx4_slave_cap()
802 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting\n"); mlx4_slave_cap()
806 err = mlx4_QUERY_FW(dev); mlx4_slave_cap()
808 mlx4_err(dev, "QUERY_FW command failed: could not get FW version\n"); mlx4_slave_cap()
810 page_size = ~dev->caps.page_size_cap + 1; mlx4_slave_cap()
811 mlx4_warn(dev, "HCA minimum page size:%d\n", page_size); mlx4_slave_cap()
813 mlx4_err(dev, "HCA minimum page size of %d bigger than kernel PAGE_SIZE of %ld, aborting\n", mlx4_slave_cap()
819 dev->caps.uar_page_size = 1 << (hca_param.uar_page_sz + 12); mlx4_slave_cap()
822 if (dev->caps.uar_page_size != PAGE_SIZE) { mlx4_slave_cap()
823 mlx4_err(dev, "UAR size:%d != kernel PAGE_SIZE of %ld\n", mlx4_slave_cap()
824 dev->caps.uar_page_size, PAGE_SIZE); mlx4_slave_cap()
829 err = mlx4_QUERY_FUNC_CAP(dev, 0, &func_cap); mlx4_slave_cap()
831 mlx4_err(dev, "QUERY_FUNC_CAP general command failed, aborting (%d)\n", mlx4_slave_cap()
838 mlx4_err(dev, "Unknown pf context behaviour %x known flags %x\n", mlx4_slave_cap()
843 dev->caps.num_ports = func_cap.num_ports; mlx4_slave_cap()
844 dev->quotas.qp = func_cap.qp_quota; mlx4_slave_cap()
845 dev->quotas.srq = func_cap.srq_quota; mlx4_slave_cap()
846 dev->quotas.cq = func_cap.cq_quota; mlx4_slave_cap()
847 dev->quotas.mpt = func_cap.mpt_quota; mlx4_slave_cap()
848 dev->quotas.mtt = func_cap.mtt_quota; mlx4_slave_cap()
849 dev->caps.num_qps = 1 << hca_param.log_num_qps; mlx4_slave_cap()
850 dev->caps.num_srqs = 1 << hca_param.log_num_srqs; mlx4_slave_cap()
851 dev->caps.num_cqs = 1 << hca_param.log_num_cqs; mlx4_slave_cap()
852 dev->caps.num_mpts = 1 << hca_param.log_mpt_sz; mlx4_slave_cap()
853 dev->caps.num_eqs = func_cap.max_eq; mlx4_slave_cap()
854 dev->caps.reserved_eqs = func_cap.reserved_eq; mlx4_slave_cap()
855 dev->caps.reserved_lkey = func_cap.reserved_lkey; mlx4_slave_cap()
856 dev->caps.num_pds = MLX4_NUM_PDS; mlx4_slave_cap()
857 dev->caps.num_mgms = 0; mlx4_slave_cap()
858 dev->caps.num_amgms = 0; mlx4_slave_cap()
860 if (dev->caps.num_ports > MLX4_MAX_PORTS) { mlx4_slave_cap()
861 mlx4_err(dev, "HCA has %d ports, but we only support %d, aborting\n", mlx4_slave_cap()
862 dev->caps.num_ports, MLX4_MAX_PORTS); mlx4_slave_cap()
866 mlx4_replace_zero_macs(dev); mlx4_slave_cap()
868 dev->caps.qp0_qkey = kcalloc(dev->caps.num_ports, sizeof(u32), GFP_KERNEL); mlx4_slave_cap()
869 dev->caps.qp0_tunnel = kcalloc(dev->caps.num_ports, sizeof (u32), GFP_KERNEL); mlx4_slave_cap()
870 dev->caps.qp0_proxy = kcalloc(dev->caps.num_ports, sizeof (u32), GFP_KERNEL); mlx4_slave_cap()
871 dev->caps.qp1_tunnel = kcalloc(dev->caps.num_ports, sizeof (u32), GFP_KERNEL); mlx4_slave_cap()
872 dev->caps.qp1_proxy = kcalloc(dev->caps.num_ports, sizeof (u32), GFP_KERNEL); mlx4_slave_cap()
874 if (!dev->caps.qp0_tunnel || !dev->caps.qp0_proxy || mlx4_slave_cap()
875 !dev->caps.qp1_tunnel || !dev->caps.qp1_proxy || mlx4_slave_cap()
876 !dev->caps.qp0_qkey) { mlx4_slave_cap()
881 for (i = 1; i <= dev->caps.num_ports; ++i) { mlx4_slave_cap()
882 err = mlx4_QUERY_FUNC_CAP(dev, i, &func_cap); mlx4_slave_cap()
884 mlx4_err(dev, "QUERY_FUNC_CAP port command failed for port %d, aborting (%d)\n", mlx4_slave_cap()
888 dev->caps.qp0_qkey[i - 1] = func_cap.qp0_qkey; mlx4_slave_cap()
889 dev->caps.qp0_tunnel[i - 1] = func_cap.qp0_tunnel_qpn; mlx4_slave_cap()
890 dev->caps.qp0_proxy[i - 1] = func_cap.qp0_proxy_qpn; mlx4_slave_cap()
891 dev->caps.qp1_tunnel[i - 1] = func_cap.qp1_tunnel_qpn; mlx4_slave_cap()
892 dev->caps.qp1_proxy[i - 1] = func_cap.qp1_proxy_qpn; mlx4_slave_cap()
893 dev->caps.port_mask[i] = dev->caps.port_type[i]; mlx4_slave_cap()
894 dev->caps.phys_port_id[i] = func_cap.phys_port_id; mlx4_slave_cap()
895 err = mlx4_get_slave_pkey_gid_tbl_len(dev, i, mlx4_slave_cap()
896 &dev->caps.gid_table_len[i], mlx4_slave_cap()
897 &dev->caps.pkey_table_len[i]); mlx4_slave_cap()
902 if (dev->caps.uar_page_size * (dev->caps.num_uars - mlx4_slave_cap()
903 dev->caps.reserved_uars) > mlx4_slave_cap()
904 pci_resource_len(dev->persist->pdev, mlx4_slave_cap()
906 mlx4_err(dev, "HCA reported UAR region size of 0x%x bigger than PCI resource 2 size of 0x%llx, aborting\n", mlx4_slave_cap()
907 dev->caps.uar_page_size * dev->caps.num_uars, mlx4_slave_cap()
909 pci_resource_len(dev->persist->pdev, 2)); mlx4_slave_cap()
915 dev->caps.eqe_size = 64; mlx4_slave_cap()
916 dev->caps.eqe_factor = 1; mlx4_slave_cap()
918 dev->caps.eqe_size = 32; mlx4_slave_cap()
919 dev->caps.eqe_factor = 0; mlx4_slave_cap()
923 dev->caps.cqe_size = 64; mlx4_slave_cap()
924 dev->caps.userspace_caps |= MLX4_USER_DEV_CAP_LARGE_CQE; mlx4_slave_cap()
926 dev->caps.cqe_size = 32; mlx4_slave_cap()
930 dev->caps.eqe_size = hca_param.eqe_size; mlx4_slave_cap()
931 dev->caps.eqe_factor = 0; mlx4_slave_cap()
935 dev->caps.cqe_size = hca_param.cqe_size; mlx4_slave_cap()
937 dev->caps.userspace_caps |= MLX4_USER_DEV_CAP_LARGE_CQE; mlx4_slave_cap()
940 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_TS; mlx4_slave_cap()
941 mlx4_warn(dev, "Timestamping is not supported in slave mode\n"); mlx4_slave_cap()
943 slave_adjust_steering_mode(dev, &dev_cap, &hca_param); mlx4_slave_cap()
944 mlx4_dbg(dev, "RSS support for IP fragments is %s\n", mlx4_slave_cap()
948 dev->caps.bf_reg_size) mlx4_slave_cap()
949 dev->caps.alloc_res_qp_mask |= MLX4_RESERVE_ETH_BF_QP; mlx4_slave_cap()
952 dev->caps.alloc_res_qp_mask |= MLX4_RESERVE_A0_QP; mlx4_slave_cap()
957 kfree(dev->caps.qp0_qkey); mlx4_slave_cap()
958 kfree(dev->caps.qp0_tunnel); mlx4_slave_cap()
959 kfree(dev->caps.qp0_proxy); mlx4_slave_cap()
960 kfree(dev->caps.qp1_tunnel); mlx4_slave_cap()
961 kfree(dev->caps.qp1_proxy); mlx4_slave_cap()
962 dev->caps.qp0_qkey = NULL; mlx4_slave_cap()
963 dev->caps.qp0_tunnel = NULL; mlx4_slave_cap()
964 dev->caps.qp0_proxy = NULL; mlx4_slave_cap()
965 dev->caps.qp1_tunnel = NULL; mlx4_slave_cap()
966 dev->caps.qp1_proxy = NULL; mlx4_slave_cap()
971 static void mlx4_request_modules(struct mlx4_dev *dev) mlx4_request_modules() argument
979 for (port = 1; port <= dev->caps.num_ports; port++) { mlx4_request_modules()
980 if (dev->caps.port_type[port] == MLX4_PORT_TYPE_IB) mlx4_request_modules()
982 else if (dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH) mlx4_request_modules()
988 if (has_ib_port || (dev->caps.flags & MLX4_DEV_CAP_FLAG_IBOE)) mlx4_request_modules()
996 int mlx4_change_port_types(struct mlx4_dev *dev, mlx4_change_port_types() argument
1003 for (port = 0; port < dev->caps.num_ports; port++) { mlx4_change_port_types()
1006 if (port_types[port] != dev->caps.port_type[port + 1]) mlx4_change_port_types()
1010 mlx4_unregister_device(dev); mlx4_change_port_types()
1011 for (port = 1; port <= dev->caps.num_ports; port++) { mlx4_change_port_types()
1012 mlx4_CLOSE_PORT(dev, port); mlx4_change_port_types()
1013 dev->caps.port_type[port] = port_types[port - 1]; mlx4_change_port_types()
1014 err = mlx4_SET_PORT(dev, port, -1); mlx4_change_port_types()
1016 mlx4_err(dev, "Failed to set port %d, aborting\n", mlx4_change_port_types()
1021 mlx4_set_port_mask(dev); mlx4_change_port_types()
1022 err = mlx4_register_device(dev); mlx4_change_port_types()
1024 mlx4_err(dev, "Failed to register device\n"); mlx4_change_port_types()
1027 mlx4_request_modules(dev); mlx4_change_port_types()
1034 static ssize_t show_port_type(struct device *dev, show_port_type() argument
1040 struct mlx4_dev *mdev = info->dev; show_port_type()
1054 static ssize_t set_port_type(struct device *dev, set_port_type() argument
1060 struct mlx4_dev *mdev = info->dev; set_port_type()
1163 static ssize_t show_port_ib_mtu(struct device *dev, show_port_ib_mtu() argument
1169 struct mlx4_dev *mdev = info->dev; show_port_ib_mtu()
1179 static ssize_t set_port_ib_mtu(struct device *dev, set_port_ib_mtu() argument
1185 struct mlx4_dev *mdev = info->dev; set_port_ib_mtu()
1224 int mlx4_bond(struct mlx4_dev *dev) mlx4_bond() argument
1227 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_bond()
1231 if (!mlx4_is_bonded(dev)) mlx4_bond()
1232 ret = mlx4_do_bond(dev, true); mlx4_bond()
1238 mlx4_err(dev, "Failed to bond device: %d\n", ret); mlx4_bond()
1240 mlx4_dbg(dev, "Device is bonded\n"); mlx4_bond()
1245 int mlx4_unbond(struct mlx4_dev *dev) mlx4_unbond() argument
1248 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_unbond()
1252 if (mlx4_is_bonded(dev)) mlx4_unbond()
1253 ret = mlx4_do_bond(dev, false); mlx4_unbond()
1257 mlx4_err(dev, "Failed to unbond device: %d\n", ret); mlx4_unbond()
1259 mlx4_dbg(dev, "Device is unbonded\n"); mlx4_unbond()
1265 int mlx4_port_map_set(struct mlx4_dev *dev, struct mlx4_port_map *v2p) mlx4_port_map_set() argument
1269 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_port_map_set()
1272 if (!(dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_PORT_REMAP)) mlx4_port_map_set()
1293 err = mlx4_virt2phy_port_map(dev, port1, port2); mlx4_port_map_set()
1295 mlx4_dbg(dev, "port map changed: [%d][%d]\n", mlx4_port_map_set()
1300 mlx4_err(dev, "Failed to change port mape: %d\n", err); mlx4_port_map_set()
1309 static int mlx4_load_fw(struct mlx4_dev *dev) mlx4_load_fw() argument
1311 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_load_fw()
1314 priv->fw.fw_icm = mlx4_alloc_icm(dev, priv->fw.fw_pages, mlx4_load_fw()
1317 mlx4_err(dev, "Couldn't allocate FW area, aborting\n"); mlx4_load_fw()
1321 err = mlx4_MAP_FA(dev, priv->fw.fw_icm); mlx4_load_fw()
1323 mlx4_err(dev, "MAP_FA command failed, aborting\n"); mlx4_load_fw()
1327 err = mlx4_RUN_FW(dev); mlx4_load_fw()
1329 mlx4_err(dev, "RUN_FW command failed, aborting\n"); mlx4_load_fw()
1336 mlx4_UNMAP_FA(dev); mlx4_load_fw()
1339 mlx4_free_icm(dev, priv->fw.fw_icm, 0); mlx4_load_fw()
1343 static int mlx4_init_cmpt_table(struct mlx4_dev *dev, u64 cmpt_base, mlx4_init_cmpt_table() argument
1346 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_cmpt_table()
1350 err = mlx4_init_icm_table(dev, &priv->qp_table.cmpt_table, mlx4_init_cmpt_table()
1354 cmpt_entry_sz, dev->caps.num_qps, mlx4_init_cmpt_table()
1355 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], mlx4_init_cmpt_table()
1360 err = mlx4_init_icm_table(dev, &priv->srq_table.cmpt_table, mlx4_init_cmpt_table()
1364 cmpt_entry_sz, dev->caps.num_srqs, mlx4_init_cmpt_table()
1365 dev->caps.reserved_srqs, 0, 0); mlx4_init_cmpt_table()
1369 err = mlx4_init_icm_table(dev, &priv->cq_table.cmpt_table, mlx4_init_cmpt_table()
1373 cmpt_entry_sz, dev->caps.num_cqs, mlx4_init_cmpt_table()
1374 dev->caps.reserved_cqs, 0, 0); mlx4_init_cmpt_table()
1378 num_eqs = dev->phys_caps.num_phys_eqs; mlx4_init_cmpt_table()
1379 err = mlx4_init_icm_table(dev, &priv->eq_table.cmpt_table, mlx4_init_cmpt_table()
1390 mlx4_cleanup_icm_table(dev, &priv->cq_table.cmpt_table); mlx4_init_cmpt_table()
1393 mlx4_cleanup_icm_table(dev, &priv->srq_table.cmpt_table); mlx4_init_cmpt_table()
1396 mlx4_cleanup_icm_table(dev, &priv->qp_table.cmpt_table); mlx4_init_cmpt_table()
1402 static int mlx4_init_icm(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, mlx4_init_icm() argument
1405 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_icm()
1410 err = mlx4_SET_ICM_SIZE(dev, icm_size, &aux_pages); mlx4_init_icm()
1412 mlx4_err(dev, "SET_ICM_SIZE command failed, aborting\n"); mlx4_init_icm()
1416 mlx4_dbg(dev, "%lld KB of HCA context requires %lld KB aux memory\n", mlx4_init_icm()
1420 priv->fw.aux_icm = mlx4_alloc_icm(dev, aux_pages, mlx4_init_icm()
1423 mlx4_err(dev, "Couldn't allocate aux memory, aborting\n"); mlx4_init_icm()
1427 err = mlx4_MAP_ICM_AUX(dev, priv->fw.aux_icm); mlx4_init_icm()
1429 mlx4_err(dev, "MAP_ICM_AUX command failed, aborting\n"); mlx4_init_icm()
1433 err = mlx4_init_cmpt_table(dev, init_hca->cmpt_base, dev_cap->cmpt_entry_sz); mlx4_init_icm()
1435 mlx4_err(dev, "Failed to map cMPT context memory, aborting\n"); mlx4_init_icm()
1440 num_eqs = dev->phys_caps.num_phys_eqs; mlx4_init_icm()
1441 err = mlx4_init_icm_table(dev, &priv->eq_table.table, mlx4_init_icm()
1445 mlx4_err(dev, "Failed to map EQ context memory, aborting\n"); mlx4_init_icm()
1453 * dev->caps.mtt_entry_sz below is really the MTT segment mlx4_init_icm()
1456 dev->caps.reserved_mtts = mlx4_init_icm()
1457 ALIGN(dev->caps.reserved_mtts * dev->caps.mtt_entry_sz, mlx4_init_icm()
1458 dma_get_cache_alignment()) / dev->caps.mtt_entry_sz; mlx4_init_icm()
1460 err = mlx4_init_icm_table(dev, &priv->mr_table.mtt_table, mlx4_init_icm()
1462 dev->caps.mtt_entry_sz, mlx4_init_icm()
1463 dev->caps.num_mtts, mlx4_init_icm()
1464 dev->caps.reserved_mtts, 1, 0); mlx4_init_icm()
1466 mlx4_err(dev, "Failed to map MTT context memory, aborting\n"); mlx4_init_icm()
1470 err = mlx4_init_icm_table(dev, &priv->mr_table.dmpt_table, mlx4_init_icm()
1473 dev->caps.num_mpts, mlx4_init_icm()
1474 dev->caps.reserved_mrws, 1, 1); mlx4_init_icm()
1476 mlx4_err(dev, "Failed to map dMPT context memory, aborting\n"); mlx4_init_icm()
1480 err = mlx4_init_icm_table(dev, &priv->qp_table.qp_table, mlx4_init_icm()
1483 dev->caps.num_qps, mlx4_init_icm()
1484 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], mlx4_init_icm()
1487 mlx4_err(dev, "Failed to map QP context memory, aborting\n"); mlx4_init_icm()
1491 err = mlx4_init_icm_table(dev, &priv->qp_table.auxc_table, mlx4_init_icm()
1494 dev->caps.num_qps, mlx4_init_icm()
1495 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], mlx4_init_icm()
1498 mlx4_err(dev, "Failed to map AUXC context memory, aborting\n"); mlx4_init_icm()
1502 err = mlx4_init_icm_table(dev, &priv->qp_table.altc_table, mlx4_init_icm()
1505 dev->caps.num_qps, mlx4_init_icm()
1506 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], mlx4_init_icm()
1509 mlx4_err(dev, "Failed to map ALTC context memory, aborting\n"); mlx4_init_icm()
1513 err = mlx4_init_icm_table(dev, &priv->qp_table.rdmarc_table, mlx4_init_icm()
1516 dev->caps.num_qps, mlx4_init_icm()
1517 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW], mlx4_init_icm()
1520 mlx4_err(dev, "Failed to map RDMARC context memory, aborting\n"); mlx4_init_icm()
1524 err = mlx4_init_icm_table(dev, &priv->cq_table.table, mlx4_init_icm()
1527 dev->caps.num_cqs, mlx4_init_icm()
1528 dev->caps.reserved_cqs, 0, 0); mlx4_init_icm()
1530 mlx4_err(dev, "Failed to map CQ context memory, aborting\n"); mlx4_init_icm()
1534 err = mlx4_init_icm_table(dev, &priv->srq_table.table, mlx4_init_icm()
1537 dev->caps.num_srqs, mlx4_init_icm()
1538 dev->caps.reserved_srqs, 0, 0); mlx4_init_icm()
1540 mlx4_err(dev, "Failed to map SRQ context memory, aborting\n"); mlx4_init_icm()
1551 err = mlx4_init_icm_table(dev, &priv->mcg_table.table, mlx4_init_icm()
1553 mlx4_get_mgm_entry_size(dev), mlx4_init_icm()
1554 dev->caps.num_mgms + dev->caps.num_amgms, mlx4_init_icm()
1555 dev->caps.num_mgms + dev->caps.num_amgms, mlx4_init_icm()
1558 mlx4_err(dev, "Failed to map MCG context memory, aborting\n"); mlx4_init_icm()
1565 mlx4_cleanup_icm_table(dev, &priv->srq_table.table); mlx4_init_icm()
1568 mlx4_cleanup_icm_table(dev, &priv->cq_table.table); mlx4_init_icm()
1571 mlx4_cleanup_icm_table(dev, &priv->qp_table.rdmarc_table); mlx4_init_icm()
1574 mlx4_cleanup_icm_table(dev, &priv->qp_table.altc_table); mlx4_init_icm()
1577 mlx4_cleanup_icm_table(dev, &priv->qp_table.auxc_table); mlx4_init_icm()
1580 mlx4_cleanup_icm_table(dev, &priv->qp_table.qp_table); mlx4_init_icm()
1583 mlx4_cleanup_icm_table(dev, &priv->mr_table.dmpt_table); mlx4_init_icm()
1586 mlx4_cleanup_icm_table(dev, &priv->mr_table.mtt_table); mlx4_init_icm()
1589 mlx4_cleanup_icm_table(dev, &priv->eq_table.table); mlx4_init_icm()
1592 mlx4_cleanup_icm_table(dev, &priv->eq_table.cmpt_table); mlx4_init_icm()
1593 mlx4_cleanup_icm_table(dev, &priv->cq_table.cmpt_table); mlx4_init_icm()
1594 mlx4_cleanup_icm_table(dev, &priv->srq_table.cmpt_table); mlx4_init_icm()
1595 mlx4_cleanup_icm_table(dev, &priv->qp_table.cmpt_table); mlx4_init_icm()
1598 mlx4_UNMAP_ICM_AUX(dev); mlx4_init_icm()
1601 mlx4_free_icm(dev, priv->fw.aux_icm, 0); mlx4_init_icm()
1606 static void mlx4_free_icms(struct mlx4_dev *dev) mlx4_free_icms() argument
1608 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_free_icms()
1610 mlx4_cleanup_icm_table(dev, &priv->mcg_table.table); mlx4_free_icms()
1611 mlx4_cleanup_icm_table(dev, &priv->srq_table.table); mlx4_free_icms()
1612 mlx4_cleanup_icm_table(dev, &priv->cq_table.table); mlx4_free_icms()
1613 mlx4_cleanup_icm_table(dev, &priv->qp_table.rdmarc_table); mlx4_free_icms()
1614 mlx4_cleanup_icm_table(dev, &priv->qp_table.altc_table); mlx4_free_icms()
1615 mlx4_cleanup_icm_table(dev, &priv->qp_table.auxc_table); mlx4_free_icms()
1616 mlx4_cleanup_icm_table(dev, &priv->qp_table.qp_table); mlx4_free_icms()
1617 mlx4_cleanup_icm_table(dev, &priv->mr_table.dmpt_table); mlx4_free_icms()
1618 mlx4_cleanup_icm_table(dev, &priv->mr_table.mtt_table); mlx4_free_icms()
1619 mlx4_cleanup_icm_table(dev, &priv->eq_table.table); mlx4_free_icms()
1620 mlx4_cleanup_icm_table(dev, &priv->eq_table.cmpt_table); mlx4_free_icms()
1621 mlx4_cleanup_icm_table(dev, &priv->cq_table.cmpt_table); mlx4_free_icms()
1622 mlx4_cleanup_icm_table(dev, &priv->srq_table.cmpt_table); mlx4_free_icms()
1623 mlx4_cleanup_icm_table(dev, &priv->qp_table.cmpt_table); mlx4_free_icms()
1625 mlx4_UNMAP_ICM_AUX(dev); mlx4_free_icms()
1626 mlx4_free_icm(dev, priv->fw.aux_icm, 0); mlx4_free_icms()
1629 static void mlx4_slave_exit(struct mlx4_dev *dev) mlx4_slave_exit() argument
1631 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_slave_exit()
1634 if (mlx4_comm_cmd(dev, MLX4_COMM_CMD_RESET, 0, MLX4_COMM_CMD_NA_OP, mlx4_slave_exit()
1636 mlx4_warn(dev, "Failed to close slave function\n"); mlx4_slave_exit()
1640 static int map_bf_area(struct mlx4_dev *dev) map_bf_area() argument
1642 struct mlx4_priv *priv = mlx4_priv(dev); map_bf_area()
1647 if (!dev->caps.bf_reg_size) map_bf_area()
1650 bf_start = pci_resource_start(dev->persist->pdev, 2) + map_bf_area()
1651 (dev->caps.num_uars << PAGE_SHIFT); map_bf_area()
1652 bf_len = pci_resource_len(dev->persist->pdev, 2) - map_bf_area()
1653 (dev->caps.num_uars << PAGE_SHIFT); map_bf_area()
1661 static void unmap_bf_area(struct mlx4_dev *dev) unmap_bf_area() argument
1663 if (mlx4_priv(dev)->bf_mapping) unmap_bf_area()
1664 io_mapping_free(mlx4_priv(dev)->bf_mapping); unmap_bf_area()
1667 cycle_t mlx4_read_clock(struct mlx4_dev *dev) mlx4_read_clock() argument
1672 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_read_clock()
1689 static int map_internal_clock(struct mlx4_dev *dev) map_internal_clock() argument
1691 struct mlx4_priv *priv = mlx4_priv(dev); map_internal_clock()
1694 ioremap(pci_resource_start(dev->persist->pdev, map_internal_clock()
1704 int mlx4_get_internal_clock_params(struct mlx4_dev *dev, mlx4_get_internal_clock_params() argument
1707 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_get_internal_clock_params()
1709 if (mlx4_is_slave(dev)) mlx4_get_internal_clock_params()
1723 static void unmap_internal_clock(struct mlx4_dev *dev) unmap_internal_clock() argument
1725 struct mlx4_priv *priv = mlx4_priv(dev); unmap_internal_clock()
1731 static void mlx4_close_hca(struct mlx4_dev *dev) mlx4_close_hca() argument
1733 unmap_internal_clock(dev); mlx4_close_hca()
1734 unmap_bf_area(dev); mlx4_close_hca()
1735 if (mlx4_is_slave(dev)) mlx4_close_hca()
1736 mlx4_slave_exit(dev); mlx4_close_hca()
1738 mlx4_CLOSE_HCA(dev, 0); mlx4_close_hca()
1739 mlx4_free_icms(dev); mlx4_close_hca()
1743 static void mlx4_close_fw(struct mlx4_dev *dev) mlx4_close_fw() argument
1745 if (!mlx4_is_slave(dev)) { mlx4_close_fw()
1746 mlx4_UNMAP_FA(dev); mlx4_close_fw()
1747 mlx4_free_icm(dev, mlx4_priv(dev)->fw.fw_icm, 0); mlx4_close_fw()
1751 static int mlx4_comm_check_offline(struct mlx4_dev *dev) mlx4_comm_check_offline() argument
1758 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_comm_check_offline()
1775 mlx4_err(dev, "Communication channel is offline.\n"); mlx4_comm_check_offline()
1779 static void mlx4_reset_vf_support(struct mlx4_dev *dev) mlx4_reset_vf_support() argument
1783 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_reset_vf_support()
1792 dev->caps.vf_caps |= MLX4_VF_CAP_FLAG_RESET; mlx4_reset_vf_support()
1795 static int mlx4_init_slave(struct mlx4_dev *dev) mlx4_init_slave() argument
1797 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_slave()
1804 mlx4_warn(dev, "PF is not ready - Deferring probe\n"); mlx4_init_slave()
1810 if (mlx4_comm_check_offline(dev)) { mlx4_init_slave()
1811 mlx4_err(dev, "PF is not responsive, skipping initialization\n"); mlx4_init_slave()
1815 mlx4_reset_vf_support(dev); mlx4_init_slave()
1816 mlx4_warn(dev, "Sending reset\n"); mlx4_init_slave()
1817 ret_from_reset = mlx4_comm_cmd(dev, MLX4_COMM_CMD_RESET, 0, mlx4_init_slave()
1823 mlx4_warn(dev, "slave is currently in the middle of FLR - Deferring probe\n"); mlx4_init_slave()
1837 mlx4_err(dev, "slave driver version is not supported by the master\n"); mlx4_init_slave()
1841 mlx4_warn(dev, "Sending vhcr0\n"); mlx4_init_slave()
1842 if (mlx4_comm_cmd(dev, MLX4_COMM_CMD_VHCR0, dma >> 48, mlx4_init_slave()
1845 if (mlx4_comm_cmd(dev, MLX4_COMM_CMD_VHCR1, dma >> 32, mlx4_init_slave()
1848 if (mlx4_comm_cmd(dev, MLX4_COMM_CMD_VHCR2, dma >> 16, mlx4_init_slave()
1851 if (mlx4_comm_cmd(dev, MLX4_COMM_CMD_VHCR_EN, dma, mlx4_init_slave()
1859 mlx4_comm_cmd(dev, MLX4_COMM_CMD_RESET, 0, MLX4_COMM_CMD_NA_OP, 0); mlx4_init_slave()
1865 static void mlx4_parav_master_pf_caps(struct mlx4_dev *dev) mlx4_parav_master_pf_caps() argument
1869 for (i = 1; i <= dev->caps.num_ports; i++) { mlx4_parav_master_pf_caps()
1870 if (dev->caps.port_type[i] == MLX4_PORT_TYPE_ETH) mlx4_parav_master_pf_caps()
1871 dev->caps.gid_table_len[i] = mlx4_parav_master_pf_caps()
1872 mlx4_get_slave_num_gids(dev, 0, i); mlx4_parav_master_pf_caps()
1874 dev->caps.gid_table_len[i] = 1; mlx4_parav_master_pf_caps()
1875 dev->caps.pkey_table_len[i] = mlx4_parav_master_pf_caps()
1876 dev->phys_caps.pkey_phys_table_len[i] - 1; mlx4_parav_master_pf_caps()
1918 static void choose_steering_mode(struct mlx4_dev *dev, choose_steering_mode() argument
1923 if (dev->caps.dmfs_high_steer_mode == choose_steering_mode()
1925 mlx4_err(dev, "DMFS high rate mode not supported\n"); choose_steering_mode()
1927 dev->caps.dmfs_high_steer_mode = choose_steering_mode()
1934 (!mlx4_is_mfunc(dev) || choose_steering_mode()
1936 (dev->persist->num_vfs + 1))) && choose_steering_mode()
1939 dev->oper_log_mgm_entry_size = choose_steering_mode()
1941 dev->caps.steering_mode = MLX4_STEERING_MODE_DEVICE_MANAGED; choose_steering_mode()
1942 dev->caps.num_qp_per_mgm = dev_cap->fs_max_num_qp_per_entry; choose_steering_mode()
1943 dev->caps.fs_log_max_ucast_qp_range_size = choose_steering_mode()
1946 if (dev->caps.dmfs_high_steer_mode != choose_steering_mode()
1948 dev->caps.dmfs_high_steer_mode = MLX4_STEERING_DMFS_A0_DISABLE; choose_steering_mode()
1949 if (dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER && choose_steering_mode()
1950 dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER) choose_steering_mode()
1951 dev->caps.steering_mode = MLX4_STEERING_MODE_B0; choose_steering_mode()
1953 dev->caps.steering_mode = MLX4_STEERING_MODE_A0; choose_steering_mode()
1955 if (dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER || choose_steering_mode()
1956 dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER) choose_steering_mode()
1957 mlx4_warn(dev, "Must have both UC_STEER and MC_STEER flags set to use B0 steering - falling back to A0 steering mode\n"); choose_steering_mode()
1959 dev->oper_log_mgm_entry_size = choose_steering_mode()
1963 dev->caps.num_qp_per_mgm = mlx4_get_qp_per_mgm(dev); choose_steering_mode()
1965 mlx4_dbg(dev, "Steering mode is: %s, oper_log_mgm_entry_size = %d, modparam log_num_mgm_entry_size = %d\n", choose_steering_mode()
1966 mlx4_steering_mode_str(dev->caps.steering_mode), choose_steering_mode()
1967 dev->oper_log_mgm_entry_size, choose_steering_mode()
1971 static void choose_tunnel_offload_mode(struct mlx4_dev *dev, choose_tunnel_offload_mode() argument
1974 if (dev->caps.steering_mode == MLX4_STEERING_MODE_DEVICE_MANAGED && choose_tunnel_offload_mode()
1976 dev->caps.tunnel_offload_mode = MLX4_TUNNEL_OFFLOAD_MODE_VXLAN; choose_tunnel_offload_mode()
1978 dev->caps.tunnel_offload_mode = MLX4_TUNNEL_OFFLOAD_MODE_NONE; choose_tunnel_offload_mode()
1980 mlx4_dbg(dev, "Tunneling offload mode is: %s\n", (dev->caps.tunnel_offload_mode choose_tunnel_offload_mode()
1984 static int mlx4_validate_optimized_steering(struct mlx4_dev *dev) mlx4_validate_optimized_steering() argument
1989 if (dev->caps.dmfs_high_steer_mode == MLX4_STEERING_DMFS_A0_NOT_SUPPORTED) mlx4_validate_optimized_steering()
1992 for (i = 1; i <= dev->caps.num_ports; i++) { mlx4_validate_optimized_steering()
1993 if (mlx4_dev_port(dev, i, &port_cap)) { mlx4_validate_optimized_steering()
1994 mlx4_err(dev, mlx4_validate_optimized_steering()
1996 } else if ((dev->caps.dmfs_high_steer_mode != mlx4_validate_optimized_steering()
1999 !!(dev->caps.dmfs_high_steer_mode == mlx4_validate_optimized_steering()
2001 mlx4_err(dev, mlx4_validate_optimized_steering()
2004 dev->caps.dmfs_high_steer_mode), mlx4_validate_optimized_steering()
2013 static int mlx4_init_fw(struct mlx4_dev *dev) mlx4_init_fw() argument
2018 if (!mlx4_is_slave(dev)) { mlx4_init_fw()
2019 err = mlx4_QUERY_FW(dev); mlx4_init_fw()
2022 mlx4_info(dev, "non-primary physical function, skipping\n"); mlx4_init_fw()
2024 mlx4_err(dev, "QUERY_FW command failed, aborting\n"); mlx4_init_fw()
2028 err = mlx4_load_fw(dev); mlx4_init_fw()
2030 mlx4_err(dev, "Failed to start FW, aborting\n"); mlx4_init_fw()
2036 err = mlx4_MOD_STAT_CFG(dev, &mlx4_cfg); mlx4_init_fw()
2038 mlx4_warn(dev, "Failed to override log_pg_sz parameter\n"); mlx4_init_fw()
2044 static int mlx4_init_hca(struct mlx4_dev *dev) mlx4_init_hca() argument
2046 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_hca()
2055 if (!mlx4_is_slave(dev)) { mlx4_init_hca()
2056 err = mlx4_dev_cap(dev, &dev_cap); mlx4_init_hca()
2058 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting\n"); mlx4_init_hca()
2062 choose_steering_mode(dev, &dev_cap); mlx4_init_hca()
2063 choose_tunnel_offload_mode(dev, &dev_cap); mlx4_init_hca()
2065 if (dev->caps.dmfs_high_steer_mode == MLX4_STEERING_DMFS_A0_STATIC && mlx4_init_hca()
2066 mlx4_is_master(dev)) mlx4_init_hca()
2067 dev->caps.function_caps |= MLX4_FUNC_CAP_DMFS_A0_STATIC; mlx4_init_hca()
2069 err = mlx4_get_phys_port_id(dev); mlx4_init_hca()
2071 mlx4_err(dev, "Fail to get physical port id\n"); mlx4_init_hca()
2073 if (mlx4_is_master(dev)) mlx4_init_hca()
2074 mlx4_parav_master_pf_caps(dev); mlx4_init_hca()
2077 mlx4_info(dev, "Running from within kdump kernel. Using low memory profile\n"); mlx4_init_hca()
2082 if (dev->caps.steering_mode == mlx4_init_hca()
2086 icm_size = mlx4_make_profile(dev, &profile, &dev_cap, mlx4_init_hca()
2093 dev->caps.max_fmr_maps = (1 << (32 - ilog2(dev->caps.num_mpts))) - 1; mlx4_init_hca()
2095 init_hca.log_uar_sz = ilog2(dev->caps.num_uars); mlx4_init_hca()
2098 if (dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW || mlx4_init_hca()
2099 dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN) mlx4_init_hca()
2102 err = mlx4_init_icm(dev, &dev_cap, &init_hca, icm_size); mlx4_init_hca()
2106 err = mlx4_INIT_HCA(dev, &init_hca); mlx4_init_hca()
2108 mlx4_err(dev, "INIT_HCA command failed, aborting\n"); mlx4_init_hca()
2113 err = mlx4_query_func(dev, &dev_cap); mlx4_init_hca()
2115 mlx4_err(dev, "QUERY_FUNC command failed, aborting.\n"); mlx4_init_hca()
2118 dev->caps.num_eqs = dev_cap.max_eqs; mlx4_init_hca()
2119 dev->caps.reserved_eqs = dev_cap.reserved_eqs; mlx4_init_hca()
2120 dev->caps.reserved_uars = dev_cap.reserved_uars; mlx4_init_hca()
2128 if (dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS) { mlx4_init_hca()
2130 err = mlx4_QUERY_HCA(dev, &init_hca); mlx4_init_hca()
2132 mlx4_err(dev, "QUERY_HCA command failed, disable timestamp\n"); mlx4_init_hca()
2133 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_TS; mlx4_init_hca()
2135 dev->caps.hca_core_clock = mlx4_init_hca()
2142 if (!dev->caps.hca_core_clock) { mlx4_init_hca()
2143 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_TS; mlx4_init_hca()
2144 mlx4_err(dev, mlx4_init_hca()
2146 } else if (map_internal_clock(dev)) { mlx4_init_hca()
2151 dev->caps.flags2 &= ~MLX4_DEV_CAP_FLAG2_TS; mlx4_init_hca()
2152 mlx4_err(dev, "Failed to map internal clock. Timestamping is not supported\n"); mlx4_init_hca()
2156 if (dev->caps.dmfs_high_steer_mode != mlx4_init_hca()
2158 if (mlx4_validate_optimized_steering(dev)) mlx4_init_hca()
2159 mlx4_warn(dev, "Optimized steering validation failed\n"); mlx4_init_hca()
2161 if (dev->caps.dmfs_high_steer_mode == mlx4_init_hca()
2163 dev->caps.dmfs_high_rate_qpn_base = mlx4_init_hca()
2164 dev->caps.reserved_qps_cnt[MLX4_QP_REGION_FW]; mlx4_init_hca()
2165 dev->caps.dmfs_high_rate_qpn_range = mlx4_init_hca()
2169 mlx4_dbg(dev, "DMFS high rate steer mode is: %s\n", mlx4_init_hca()
2171 dev->caps.dmfs_high_steer_mode)); mlx4_init_hca()
2174 err = mlx4_init_slave(dev); mlx4_init_hca()
2177 mlx4_err(dev, "Failed to initialize slave\n"); mlx4_init_hca()
2181 err = mlx4_slave_cap(dev); mlx4_init_hca()
2183 mlx4_err(dev, "Failed to obtain slave caps\n"); mlx4_init_hca()
2188 if (map_bf_area(dev)) mlx4_init_hca()
2189 mlx4_dbg(dev, "Failed to map blue flame area\n"); mlx4_init_hca()
2192 if (!mlx4_is_slave(dev)) mlx4_init_hca()
2193 mlx4_set_port_mask(dev); mlx4_init_hca()
2195 err = mlx4_QUERY_ADAPTER(dev, &adapter); mlx4_init_hca()
2197 mlx4_err(dev, "QUERY_ADAPTER command failed, aborting\n"); mlx4_init_hca()
2202 err = mlx4_config_dev_retrieval(dev, &params); mlx4_init_hca()
2204 mlx4_err(dev, "Failed to query CONFIG_DEV parameters\n"); mlx4_init_hca()
2206 dev->caps.rx_checksum_flags_port[1] = params.rx_csum_flags_port_1; mlx4_init_hca()
2207 dev->caps.rx_checksum_flags_port[2] = params.rx_csum_flags_port_2; mlx4_init_hca()
2210 memcpy(dev->board_id, adapter.board_id, sizeof dev->board_id); mlx4_init_hca()
2215 unmap_internal_clock(dev); mlx4_init_hca()
2216 unmap_bf_area(dev); mlx4_init_hca()
2218 if (mlx4_is_slave(dev)) { mlx4_init_hca()
2219 kfree(dev->caps.qp0_qkey); mlx4_init_hca()
2220 kfree(dev->caps.qp0_tunnel); mlx4_init_hca()
2221 kfree(dev->caps.qp0_proxy); mlx4_init_hca()
2222 kfree(dev->caps.qp1_tunnel); mlx4_init_hca()
2223 kfree(dev->caps.qp1_proxy); mlx4_init_hca()
2227 if (mlx4_is_slave(dev)) mlx4_init_hca()
2228 mlx4_slave_exit(dev); mlx4_init_hca()
2230 mlx4_CLOSE_HCA(dev, 0); mlx4_init_hca()
2233 if (!mlx4_is_slave(dev)) mlx4_init_hca()
2234 mlx4_free_icms(dev); mlx4_init_hca()
2239 static int mlx4_init_counters_table(struct mlx4_dev *dev) mlx4_init_counters_table() argument
2241 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_counters_table()
2244 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS)) mlx4_init_counters_table()
2247 if (!dev->caps.max_counters) mlx4_init_counters_table()
2250 nent_pow2 = roundup_pow_of_two(dev->caps.max_counters); mlx4_init_counters_table()
2254 nent_pow2 - dev->caps.max_counters + 1); mlx4_init_counters_table()
2257 static void mlx4_cleanup_counters_table(struct mlx4_dev *dev) mlx4_cleanup_counters_table() argument
2259 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS)) mlx4_cleanup_counters_table()
2262 if (!dev->caps.max_counters) mlx4_cleanup_counters_table()
2265 mlx4_bitmap_cleanup(&mlx4_priv(dev)->counters_bitmap); mlx4_cleanup_counters_table()
2268 static void mlx4_cleanup_default_counters(struct mlx4_dev *dev) mlx4_cleanup_default_counters() argument
2270 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_cleanup_default_counters()
2273 for (port = 0; port < dev->caps.num_ports; port++) mlx4_cleanup_default_counters()
2275 mlx4_counter_free(dev, priv->def_counter[port]); mlx4_cleanup_default_counters()
2278 static int mlx4_allocate_default_counters(struct mlx4_dev *dev) mlx4_allocate_default_counters() argument
2280 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_allocate_default_counters()
2284 for (port = 0; port < dev->caps.num_ports; port++) mlx4_allocate_default_counters()
2287 for (port = 0; port < dev->caps.num_ports; port++) { mlx4_allocate_default_counters()
2288 err = mlx4_counter_alloc(dev, &idx); mlx4_allocate_default_counters()
2295 } else if (mlx4_is_slave(dev) && err == -EINVAL) { mlx4_allocate_default_counters()
2296 priv->def_counter[port] = MLX4_SINK_COUNTER_INDEX(dev); mlx4_allocate_default_counters()
2297 mlx4_warn(dev, "can't allocate counter from old PF driver, using index %d\n", mlx4_allocate_default_counters()
2298 MLX4_SINK_COUNTER_INDEX(dev)); mlx4_allocate_default_counters()
2301 mlx4_err(dev, "%s: failed to allocate default counter port %d err %d\n", mlx4_allocate_default_counters()
2303 mlx4_cleanup_default_counters(dev); mlx4_allocate_default_counters()
2307 mlx4_dbg(dev, "%s: default counter index %d for port %d\n", mlx4_allocate_default_counters()
2314 int __mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx) __mlx4_counter_alloc() argument
2316 struct mlx4_priv *priv = mlx4_priv(dev); __mlx4_counter_alloc()
2318 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS)) __mlx4_counter_alloc()
2323 *idx = MLX4_SINK_COUNTER_INDEX(dev); __mlx4_counter_alloc()
2330 int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx) mlx4_counter_alloc() argument
2335 if (mlx4_is_mfunc(dev)) { mlx4_counter_alloc()
2336 err = mlx4_cmd_imm(dev, 0, &out_param, RES_COUNTER, mlx4_counter_alloc()
2344 return __mlx4_counter_alloc(dev, idx); mlx4_counter_alloc()
2348 static int __mlx4_clear_if_stat(struct mlx4_dev *dev, __mlx4_clear_if_stat() argument
2355 if_stat_mailbox = mlx4_alloc_cmd_mailbox(dev); __mlx4_clear_if_stat()
2359 err = mlx4_cmd_box(dev, 0, if_stat_mailbox->dma, if_stat_in_mod, 0, __mlx4_clear_if_stat()
2363 mlx4_free_cmd_mailbox(dev, if_stat_mailbox); __mlx4_clear_if_stat()
2367 void __mlx4_counter_free(struct mlx4_dev *dev, u32 idx) __mlx4_counter_free() argument
2369 if (!(dev->caps.flags & MLX4_DEV_CAP_FLAG_COUNTERS)) __mlx4_counter_free()
2372 if (idx == MLX4_SINK_COUNTER_INDEX(dev)) __mlx4_counter_free()
2375 __mlx4_clear_if_stat(dev, idx); __mlx4_counter_free()
2377 mlx4_bitmap_free(&mlx4_priv(dev)->counters_bitmap, idx, MLX4_USE_RR); __mlx4_counter_free()
2381 void mlx4_counter_free(struct mlx4_dev *dev, u32 idx) mlx4_counter_free() argument
2385 if (mlx4_is_mfunc(dev)) { mlx4_counter_free()
2387 mlx4_cmd(dev, in_param, RES_COUNTER, RES_OP_RESERVE, mlx4_counter_free()
2392 __mlx4_counter_free(dev, idx); mlx4_counter_free()
2396 int mlx4_get_default_counter_index(struct mlx4_dev *dev, int port) mlx4_get_default_counter_index() argument
2398 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_get_default_counter_index()
2404 void mlx4_set_admin_guid(struct mlx4_dev *dev, __be64 guid, int entry, int port) mlx4_set_admin_guid() argument
2406 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_set_admin_guid()
2412 __be64 mlx4_get_admin_guid(struct mlx4_dev *dev, int entry, int port) mlx4_get_admin_guid() argument
2414 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_get_admin_guid()
2420 void mlx4_set_random_admin_guid(struct mlx4_dev *dev, int entry, int port) mlx4_set_random_admin_guid() argument
2422 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_set_random_admin_guid()
2435 static int mlx4_setup_hca(struct mlx4_dev *dev) mlx4_setup_hca() argument
2437 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_setup_hca()
2442 err = mlx4_init_uar_table(dev); mlx4_setup_hca()
2444 mlx4_err(dev, "Failed to initialize user access region table, aborting\n"); mlx4_setup_hca()
2448 err = mlx4_uar_alloc(dev, &priv->driver_uar); mlx4_setup_hca()
2450 mlx4_err(dev, "Failed to allocate driver access region, aborting\n"); mlx4_setup_hca()
2456 mlx4_err(dev, "Couldn't map kernel access region, aborting\n"); mlx4_setup_hca()
2461 err = mlx4_init_pd_table(dev); mlx4_setup_hca()
2463 mlx4_err(dev, "Failed to initialize protection domain table, aborting\n"); mlx4_setup_hca()
2467 err = mlx4_init_xrcd_table(dev); mlx4_setup_hca()
2469 mlx4_err(dev, "Failed to initialize reliable connection domain table, aborting\n"); mlx4_setup_hca()
2473 err = mlx4_init_mr_table(dev); mlx4_setup_hca()
2475 mlx4_err(dev, "Failed to initialize memory region table, aborting\n"); mlx4_setup_hca()
2479 if (!mlx4_is_slave(dev)) { mlx4_setup_hca()
2480 err = mlx4_init_mcg_table(dev); mlx4_setup_hca()
2482 mlx4_err(dev, "Failed to initialize multicast group table, aborting\n"); mlx4_setup_hca()
2485 err = mlx4_config_mad_demux(dev); mlx4_setup_hca()
2487 mlx4_err(dev, "Failed in config_mad_demux, aborting\n"); mlx4_setup_hca()
2492 err = mlx4_init_eq_table(dev); mlx4_setup_hca()
2494 mlx4_err(dev, "Failed to initialize event queue table, aborting\n"); mlx4_setup_hca()
2498 err = mlx4_cmd_use_events(dev); mlx4_setup_hca()
2500 mlx4_err(dev, "Failed to switch to event-driven firmware commands, aborting\n"); mlx4_setup_hca()
2504 err = mlx4_NOP(dev); mlx4_setup_hca()
2506 if (dev->flags & MLX4_FLAG_MSI_X) { mlx4_setup_hca()
2507 mlx4_warn(dev, "NOP command failed to generate MSI-X interrupt IRQ %d)\n", mlx4_setup_hca()
2509 mlx4_warn(dev, "Trying again without MSI-X\n"); mlx4_setup_hca()
2511 mlx4_err(dev, "NOP command failed to generate interrupt (IRQ %d), aborting\n", mlx4_setup_hca()
2513 mlx4_err(dev, "BIOS or ACPI interrupt routing problem?\n"); mlx4_setup_hca()
2519 mlx4_dbg(dev, "NOP command IRQ test passed\n"); mlx4_setup_hca()
2521 err = mlx4_init_cq_table(dev); mlx4_setup_hca()
2523 mlx4_err(dev, "Failed to initialize completion queue table, aborting\n"); mlx4_setup_hca()
2527 err = mlx4_init_srq_table(dev); mlx4_setup_hca()
2529 mlx4_err(dev, "Failed to initialize shared receive queue table, aborting\n"); mlx4_setup_hca()
2533 err = mlx4_init_qp_table(dev); mlx4_setup_hca()
2535 mlx4_err(dev, "Failed to initialize queue pair table, aborting\n"); mlx4_setup_hca()
2539 if (!mlx4_is_slave(dev)) { mlx4_setup_hca()
2540 err = mlx4_init_counters_table(dev); mlx4_setup_hca()
2542 mlx4_err(dev, "Failed to initialize counters table, aborting\n"); mlx4_setup_hca()
2547 err = mlx4_allocate_default_counters(dev); mlx4_setup_hca()
2549 mlx4_err(dev, "Failed to allocate default counters, aborting\n"); mlx4_setup_hca()
2553 if (!mlx4_is_slave(dev)) { mlx4_setup_hca()
2554 for (port = 1; port <= dev->caps.num_ports; port++) { mlx4_setup_hca()
2556 err = mlx4_get_port_ib_caps(dev, port, mlx4_setup_hca()
2559 mlx4_warn(dev, "failed to get port %d default ib capabilities (%d). Continuing with caps = 0\n", mlx4_setup_hca()
2561 dev->caps.ib_port_def_cap[port] = ib_port_default_caps; mlx4_setup_hca()
2564 if (mlx4_is_master(dev)) { mlx4_setup_hca()
2566 for (i = 0; i < dev->num_slaves; i++) { mlx4_setup_hca()
2567 if (i == mlx4_master_func_num(dev)) mlx4_setup_hca()
2574 if (mlx4_is_mfunc(dev)) mlx4_setup_hca()
2575 dev->caps.port_ib_mtu[port] = IB_MTU_2048; mlx4_setup_hca()
2577 dev->caps.port_ib_mtu[port] = IB_MTU_4096; mlx4_setup_hca()
2579 err = mlx4_SET_PORT(dev, port, mlx4_is_master(dev) ? mlx4_setup_hca()
2580 dev->caps.pkey_table_len[port] : -1); mlx4_setup_hca()
2582 mlx4_err(dev, "Failed to set port %d, aborting\n", mlx4_setup_hca()
2592 mlx4_cleanup_default_counters(dev); mlx4_setup_hca()
2595 if (!mlx4_is_slave(dev)) mlx4_setup_hca()
2596 mlx4_cleanup_counters_table(dev); mlx4_setup_hca()
2599 mlx4_cleanup_qp_table(dev); mlx4_setup_hca()
2602 mlx4_cleanup_srq_table(dev); mlx4_setup_hca()
2605 mlx4_cleanup_cq_table(dev); mlx4_setup_hca()
2608 mlx4_cmd_use_polling(dev); mlx4_setup_hca()
2611 mlx4_cleanup_eq_table(dev); mlx4_setup_hca()
2614 if (!mlx4_is_slave(dev)) mlx4_setup_hca()
2615 mlx4_cleanup_mcg_table(dev); mlx4_setup_hca()
2618 mlx4_cleanup_mr_table(dev); mlx4_setup_hca()
2621 mlx4_cleanup_xrcd_table(dev); mlx4_setup_hca()
2624 mlx4_cleanup_pd_table(dev); mlx4_setup_hca()
2630 mlx4_uar_free(dev, &priv->driver_uar); mlx4_setup_hca()
2633 mlx4_cleanup_uar_table(dev); mlx4_setup_hca()
2637 static int mlx4_init_affinity_hint(struct mlx4_dev *dev, int port, int eqn) mlx4_init_affinity_hint() argument
2640 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_affinity_hint()
2645 if (eqn > dev->caps.num_comp_vectors) mlx4_init_affinity_hint()
2649 off += mlx4_get_eqs_per_port(dev, i); mlx4_init_affinity_hint()
2667 static void mlx4_enable_msi_x(struct mlx4_dev *dev) mlx4_enable_msi_x() argument
2669 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_enable_msi_x()
2675 int nreq = dev->caps.num_ports * num_online_cpus() + 1; mlx4_enable_msi_x()
2677 nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs, mlx4_enable_msi_x()
2689 nreq = pci_enable_msix_range(dev->persist->pdev, entries, 2, mlx4_enable_msi_x()
2697 dev->caps.num_comp_vectors = nreq - 1; mlx4_enable_msi_x()
2701 dev->caps.num_ports); mlx4_enable_msi_x()
2703 for (i = 0; i < dev->caps.num_comp_vectors + 1; i++) { mlx4_enable_msi_x()
2710 if (MLX4_IS_LEGACY_EQ_MODE(dev->caps)) { mlx4_enable_msi_x()
2712 dev->caps.num_ports); mlx4_enable_msi_x()
2719 if (mlx4_init_affinity_hint(dev, port + 1, i)) mlx4_enable_msi_x()
2720 mlx4_warn(dev, "Couldn't init hint cpumask for EQ %d\n", mlx4_enable_msi_x()
2724 * (dev->caps.num_comp_vectors / dev->caps.num_ports) mlx4_enable_msi_x()
2732 if ((dev->caps.num_comp_vectors > dev->caps.num_ports) && mlx4_enable_msi_x()
2734 (dev->caps.num_comp_vectors / dev->caps.num_ports)) == mlx4_enable_msi_x()
2736 /* If dev->caps.num_comp_vectors < dev->caps.num_ports, mlx4_enable_msi_x()
2742 dev->flags |= MLX4_FLAG_MSI_X; mlx4_enable_msi_x()
2749 dev->caps.num_comp_vectors = 1; mlx4_enable_msi_x()
2753 priv->eq_table.eq[i].irq = dev->persist->pdev->irq; mlx4_enable_msi_x()
2756 dev->caps.num_ports); mlx4_enable_msi_x()
2761 static int mlx4_init_port_info(struct mlx4_dev *dev, int port) mlx4_init_port_info() argument
2763 struct mlx4_port_info *info = &mlx4_priv(dev)->port[port]; mlx4_init_port_info()
2766 info->dev = dev; mlx4_init_port_info()
2768 if (!mlx4_is_slave(dev)) { mlx4_init_port_info()
2769 mlx4_init_mac_table(dev, &info->mac_table); mlx4_init_port_info()
2770 mlx4_init_vlan_table(dev, &info->vlan_table); mlx4_init_port_info()
2771 mlx4_init_roce_gid_table(dev, &info->gid_table); mlx4_init_port_info()
2772 info->base_qpn = mlx4_get_base_qpn(dev, port); mlx4_init_port_info()
2777 if (mlx4_is_mfunc(dev)) mlx4_init_port_info()
2786 err = device_create_file(&dev->persist->pdev->dev, &info->port_attr); mlx4_init_port_info()
2788 mlx4_err(dev, "Failed to create file for port %d\n", port); mlx4_init_port_info()
2794 if (mlx4_is_mfunc(dev)) mlx4_init_port_info()
2803 err = device_create_file(&dev->persist->pdev->dev, mlx4_init_port_info()
2806 mlx4_err(dev, "Failed to create mtu file for port %d\n", port); mlx4_init_port_info()
2807 device_remove_file(&info->dev->persist->pdev->dev, mlx4_init_port_info()
2820 device_remove_file(&info->dev->persist->pdev->dev, &info->port_attr); mlx4_cleanup_port_info()
2821 device_remove_file(&info->dev->persist->pdev->dev, mlx4_cleanup_port_info()
2829 static int mlx4_init_steering(struct mlx4_dev *dev) mlx4_init_steering() argument
2831 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_init_steering()
2832 int num_entries = dev->caps.num_ports; mlx4_init_steering()
2847 static void mlx4_clear_steering(struct mlx4_dev *dev) mlx4_clear_steering() argument
2849 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_clear_steering()
2852 int num_entries = dev->caps.num_ports; mlx4_clear_steering()
2888 static int mlx4_get_ownership(struct mlx4_dev *dev) mlx4_get_ownership() argument
2893 if (pci_channel_offline(dev->persist->pdev)) mlx4_get_ownership()
2896 owner = ioremap(pci_resource_start(dev->persist->pdev, 0) + mlx4_get_ownership()
2900 mlx4_err(dev, "Failed to obtain ownership bit\n"); mlx4_get_ownership()
2909 static void mlx4_free_ownership(struct mlx4_dev *dev) mlx4_free_ownership() argument
2913 if (pci_channel_offline(dev->persist->pdev)) mlx4_free_ownership()
2916 owner = ioremap(pci_resource_start(dev->persist->pdev, 0) + mlx4_free_ownership()
2920 mlx4_err(dev, "Failed to obtain ownership bit\n"); mlx4_free_ownership()
2931 static u64 mlx4_enable_sriov(struct mlx4_dev *dev, struct pci_dev *pdev, mlx4_enable_sriov() argument
2934 u64 dev_flags = dev->flags; mlx4_enable_sriov()
2940 dev->dev_vfs = kcalloc(total_vfs, sizeof(*dev->dev_vfs), mlx4_enable_sriov()
2942 if (!dev->dev_vfs) mlx4_enable_sriov()
2948 if (dev->flags & MLX4_FLAG_SRIOV) { mlx4_enable_sriov()
2950 mlx4_err(dev, "SR-IOV was already enabled, but with num_vfs (%d) different than requested (%d)\n", mlx4_enable_sriov()
2956 dev->dev_vfs = kzalloc(total_vfs * sizeof(*dev->dev_vfs), GFP_KERNEL); mlx4_enable_sriov()
2957 if (NULL == dev->dev_vfs) { mlx4_enable_sriov()
2958 mlx4_err(dev, "Failed to allocate memory for VFs\n"); mlx4_enable_sriov()
2962 if (!(dev->flags & MLX4_FLAG_SRIOV)) { mlx4_enable_sriov()
2964 mlx4_err(dev, "requested vfs (%d) > available vfs (%d). Continuing without SR_IOV\n", mlx4_enable_sriov()
2969 mlx4_warn(dev, "Enabling SR-IOV with %d VFs\n", total_vfs); mlx4_enable_sriov()
2973 mlx4_err(dev, "Failed to enable SR-IOV, continuing without SR-IOV (err = %d)\n", mlx4_enable_sriov()
2977 mlx4_warn(dev, "Running in master mode\n"); mlx4_enable_sriov()
2981 dev->persist->num_vfs = total_vfs; mlx4_enable_sriov()
2988 dev->persist->num_vfs = 0; mlx4_enable_sriov()
2989 kfree(dev->dev_vfs); mlx4_enable_sriov()
2990 dev->dev_vfs = NULL; mlx4_enable_sriov()
2998 static int mlx4_check_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap, mlx4_check_dev_cap() argument
3005 mlx4_err(dev, "Requested %d VFs, but FW does not support more than 64\n", mlx4_check_dev_cap()
3016 struct mlx4_dev *dev; mlx4_load_one() local
3024 dev = &priv->dev; mlx4_load_one()
3038 dev->rev_id = pdev->revision; mlx4_load_one()
3039 dev->numa_node = dev_to_node(&pdev->dev); mlx4_load_one()
3043 mlx4_warn(dev, "Detected virtual function - running in slave mode\n"); mlx4_load_one()
3044 dev->flags |= MLX4_FLAG_SLAVE; mlx4_load_one()
3049 err = mlx4_get_ownership(dev); mlx4_load_one()
3054 mlx4_warn(dev, "Multiple PFs not yet supported - Skipping PF\n"); mlx4_load_one()
3067 err = mlx4_reset(dev); mlx4_load_one()
3069 mlx4_err(dev, "Failed to reset HCA, aborting\n"); mlx4_load_one()
3074 dev->flags = MLX4_FLAG_MASTER; mlx4_load_one()
3077 dev->flags |= MLX4_FLAG_SRIOV; mlx4_load_one()
3078 dev->persist->num_vfs = total_vfs; mlx4_load_one()
3085 dev->persist->state = MLX4_DEVICE_STATE_UP; mlx4_load_one()
3088 err = mlx4_cmd_init(dev); mlx4_load_one()
3090 mlx4_err(dev, "Failed to init command interface, aborting\n"); mlx4_load_one()
3097 if (mlx4_is_mfunc(dev)) { mlx4_load_one()
3098 if (mlx4_is_master(dev)) { mlx4_load_one()
3099 dev->num_slaves = MLX4_MAX_NUM_SLAVES; mlx4_load_one()
3102 dev->num_slaves = 0; mlx4_load_one()
3103 err = mlx4_multi_func_init(dev); mlx4_load_one()
3105 mlx4_err(dev, "Failed to init slave mfunc interface, aborting\n"); mlx4_load_one()
3111 err = mlx4_init_fw(dev); mlx4_load_one()
3113 mlx4_err(dev, "Failed to init fw, aborting.\n"); mlx4_load_one()
3117 if (mlx4_is_master(dev)) { mlx4_load_one()
3127 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); mlx4_load_one()
3129 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n"); mlx4_load_one()
3133 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) mlx4_load_one()
3137 u64 dev_flags = mlx4_enable_sriov(dev, pdev, mlx4_load_one()
3142 mlx4_close_fw(dev); mlx4_load_one()
3143 mlx4_cmd_cleanup(dev, MLX4_CMD_CLEANUP_ALL); mlx4_load_one()
3144 dev->flags = dev_flags; mlx4_load_one()
3145 if (!SRIOV_VALID_STATE(dev->flags)) { mlx4_load_one()
3146 mlx4_err(dev, "Invalid SRIOV state\n"); mlx4_load_one()
3149 err = mlx4_reset(dev); mlx4_load_one()
3151 mlx4_err(dev, "Failed to reset HCA, aborting.\n"); mlx4_load_one()
3162 err = mlx4_QUERY_DEV_CAP(dev, dev_cap); mlx4_load_one()
3164 mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n"); mlx4_load_one()
3168 if (mlx4_check_dev_cap(dev, dev_cap, nvfs)) mlx4_load_one()
3173 err = mlx4_init_hca(dev); mlx4_load_one()
3178 mlx4_cmd_cleanup(dev, MLX4_CMD_CLEANUP_ALL); mlx4_load_one()
3180 if (dev->flags & MLX4_FLAG_SRIOV) { mlx4_load_one()
3183 if (mlx4_is_master(dev) && !reset_flow) mlx4_load_one()
3185 dev->flags &= ~MLX4_FLAG_SRIOV; mlx4_load_one()
3187 if (!mlx4_is_slave(dev)) mlx4_load_one()
3188 mlx4_free_ownership(dev); mlx4_load_one()
3189 dev->flags |= MLX4_FLAG_SLAVE; mlx4_load_one()
3190 dev->flags &= ~MLX4_FLAG_MASTER; mlx4_load_one()
3196 if (mlx4_is_master(dev) && (dev_cap->flags2 & MLX4_DEV_CAP_FLAG2_SYS_EQS)) { mlx4_load_one()
3197 u64 dev_flags = mlx4_enable_sriov(dev, pdev, total_vfs, mlx4_load_one()
3200 if ((dev->flags ^ dev_flags) & (MLX4_FLAG_MASTER | MLX4_FLAG_SLAVE)) { mlx4_load_one()
3201 mlx4_cmd_cleanup(dev, MLX4_CMD_CLEANUP_VHCR); mlx4_load_one()
3202 dev->flags = dev_flags; mlx4_load_one()
3203 err = mlx4_cmd_init(dev); mlx4_load_one()
3208 mlx4_err(dev, "Failed to init VHCR command interface, aborting\n"); mlx4_load_one()
3212 dev->flags = dev_flags; mlx4_load_one()
3215 if (!SRIOV_VALID_STATE(dev->flags)) { mlx4_load_one()
3216 mlx4_err(dev, "Invalid SRIOV state\n"); mlx4_load_one()
3225 if (!mlx4_is_slave(dev)) mlx4_load_one()
3226 mlx4_check_pcie_caps(dev); mlx4_load_one()
3230 if (mlx4_is_master(dev)) { mlx4_load_one()
3231 if (dev->caps.num_ports < 2 && mlx4_load_one()
3234 mlx4_err(dev, mlx4_load_one()
3236 dev->caps.num_ports); mlx4_load_one()
3239 memcpy(dev->persist->nvfs, nvfs, sizeof(dev->persist->nvfs)); mlx4_load_one()
3242 i < sizeof(dev->persist->nvfs)/ mlx4_load_one()
3243 sizeof(dev->persist->nvfs[0]); i++) { mlx4_load_one()
3246 for (j = 0; j < dev->persist->nvfs[i]; ++sum, ++j) { mlx4_load_one()
3247 dev->dev_vfs[sum].min_port = i < 2 ? i + 1 : 1; mlx4_load_one()
3248 dev->dev_vfs[sum].n_ports = i < 2 ? 1 : mlx4_load_one()
3249 dev->caps.num_ports; mlx4_load_one()
3256 err = mlx4_multi_func_init(dev); mlx4_load_one()
3258 mlx4_err(dev, "Failed to init master mfunc interface, aborting.\n"); mlx4_load_one()
3263 err = mlx4_alloc_eq_table(dev); mlx4_load_one()
3270 mlx4_enable_msi_x(dev); mlx4_load_one()
3271 if ((mlx4_is_mfunc(dev)) && mlx4_load_one()
3272 !(dev->flags & MLX4_FLAG_MSI_X)) { mlx4_load_one()
3274 mlx4_err(dev, "INTx is not supported in multi-function mode, aborting\n"); mlx4_load_one()
3278 if (!mlx4_is_slave(dev)) { mlx4_load_one()
3279 err = mlx4_init_steering(dev); mlx4_load_one()
3284 err = mlx4_setup_hca(dev); mlx4_load_one()
3285 if (err == -EBUSY && (dev->flags & MLX4_FLAG_MSI_X) && mlx4_load_one()
3286 !mlx4_is_mfunc(dev)) { mlx4_load_one()
3287 dev->flags &= ~MLX4_FLAG_MSI_X; mlx4_load_one()
3288 dev->caps.num_comp_vectors = 1; mlx4_load_one()
3290 err = mlx4_setup_hca(dev); mlx4_load_one()
3296 mlx4_init_quotas(dev); mlx4_load_one()
3300 if (mlx4_is_master(dev)) { mlx4_load_one()
3301 err = mlx4_ARM_COMM_CHANNEL(dev); mlx4_load_one()
3303 mlx4_err(dev, " Failed to arm comm channel eq: %x\n", mlx4_load_one()
3309 for (port = 1; port <= dev->caps.num_ports; port++) { mlx4_load_one()
3310 err = mlx4_init_port_info(dev, port); mlx4_load_one()
3318 err = mlx4_register_device(dev); mlx4_load_one()
3322 mlx4_request_modules(dev); mlx4_load_one()
3324 mlx4_sense_init(dev); mlx4_load_one()
3325 mlx4_start_sense(dev); mlx4_load_one()
3329 if (mlx4_is_master(dev) && dev->persist->num_vfs && !reset_flow) mlx4_load_one()
3339 mlx4_cleanup_default_counters(dev); mlx4_load_one()
3340 if (!mlx4_is_slave(dev)) mlx4_load_one()
3341 mlx4_cleanup_counters_table(dev); mlx4_load_one()
3342 mlx4_cleanup_qp_table(dev); mlx4_load_one()
3343 mlx4_cleanup_srq_table(dev); mlx4_load_one()
3344 mlx4_cleanup_cq_table(dev); mlx4_load_one()
3345 mlx4_cmd_use_polling(dev); mlx4_load_one()
3346 mlx4_cleanup_eq_table(dev); mlx4_load_one()
3347 mlx4_cleanup_mcg_table(dev); mlx4_load_one()
3348 mlx4_cleanup_mr_table(dev); mlx4_load_one()
3349 mlx4_cleanup_xrcd_table(dev); mlx4_load_one()
3350 mlx4_cleanup_pd_table(dev); mlx4_load_one()
3351 mlx4_cleanup_uar_table(dev); mlx4_load_one()
3354 if (!mlx4_is_slave(dev)) mlx4_load_one()
3355 mlx4_clear_steering(dev); mlx4_load_one()
3358 if (dev->flags & MLX4_FLAG_MSI_X) mlx4_load_one()
3362 mlx4_free_eq_table(dev); mlx4_load_one()
3365 if (mlx4_is_master(dev)) { mlx4_load_one()
3366 mlx4_free_resource_tracker(dev, RES_TR_FREE_STRUCTS_ONLY); mlx4_load_one()
3367 mlx4_multi_func_cleanup(dev); mlx4_load_one()
3370 if (mlx4_is_slave(dev)) { mlx4_load_one()
3371 kfree(dev->caps.qp0_qkey); mlx4_load_one()
3372 kfree(dev->caps.qp0_tunnel); mlx4_load_one()
3373 kfree(dev->caps.qp0_proxy); mlx4_load_one()
3374 kfree(dev->caps.qp1_tunnel); mlx4_load_one()
3375 kfree(dev->caps.qp1_proxy); mlx4_load_one()
3379 mlx4_close_hca(dev); mlx4_load_one()
3382 mlx4_close_fw(dev); mlx4_load_one()
3385 if (mlx4_is_slave(dev)) mlx4_load_one()
3386 mlx4_multi_func_cleanup(dev); mlx4_load_one()
3389 mlx4_cmd_cleanup(dev, MLX4_CMD_CLEANUP_ALL); mlx4_load_one()
3392 if (dev->flags & MLX4_FLAG_SRIOV && !existing_vfs) { mlx4_load_one()
3394 dev->flags &= ~MLX4_FLAG_SRIOV; mlx4_load_one()
3397 if (mlx4_is_master(dev) && dev->persist->num_vfs && !reset_flow) mlx4_load_one()
3400 kfree(priv->dev.dev_vfs); mlx4_load_one()
3402 if (!mlx4_is_slave(dev)) mlx4_load_one()
3403 mlx4_free_ownership(dev); mlx4_load_one()
3424 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); __mlx4_init_one()
3436 dev_err(&pdev->dev, "num_vfs module parameter cannot be negative\n"); __mlx4_init_one()
3445 dev_err(&pdev->dev, "probe_vf module parameter cannot be negative or greater than num_vfs\n"); __mlx4_init_one()
3451 dev_err(&pdev->dev, __mlx4_init_one()
3460 dev_err(&pdev->dev, __mlx4_init_one()
3472 dev_err(&pdev->dev, "Missing DCS, aborting (driver_data: 0x%x, pci_resource_flags(pdev, 0):0x%lx)\n", __mlx4_init_one()
3478 dev_err(&pdev->dev, "Missing UAR, aborting\n"); __mlx4_init_one()
3485 dev_err(&pdev->dev, "Couldn't get PCI resources, aborting\n"); __mlx4_init_one()
3493 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit PCI DMA mask\n"); __mlx4_init_one()
3496 dev_err(&pdev->dev, "Can't set PCI DMA mask, aborting\n"); __mlx4_init_one()
3502 dev_warn(&pdev->dev, "Warning: couldn't set 64-bit consistent PCI DMA mask\n"); __mlx4_init_one()
3505 dev_err(&pdev->dev, "Can't set consistent PCI DMA mask, aborting\n"); __mlx4_init_one()
3511 dma_set_max_seg_size(&pdev->dev, 1024 * 1024 * 1024); __mlx4_init_one()
3530 dev_warn(&pdev->dev, "Skipping virtual function:%d\n", __mlx4_init_one()
3538 err = mlx4_catas_init(&priv->dev); __mlx4_init_one()
3549 mlx4_catas_end(&priv->dev); __mlx4_init_one()
3563 struct mlx4_dev *dev; mlx4_init_one() local
3572 dev = &priv->dev; mlx4_init_one()
3573 dev->persist = kzalloc(sizeof(*dev->persist), GFP_KERNEL); mlx4_init_one()
3574 if (!dev->persist) { mlx4_init_one()
3578 dev->persist->pdev = pdev; mlx4_init_one()
3579 dev->persist->dev = dev; mlx4_init_one()
3580 pci_set_drvdata(pdev, dev->persist); mlx4_init_one()
3582 mutex_init(&dev->persist->device_state_mutex); mlx4_init_one()
3583 mutex_init(&dev->persist->interface_state_mutex); mlx4_init_one()
3587 kfree(dev->persist); mlx4_init_one()
3596 static void mlx4_clean_dev(struct mlx4_dev *dev) mlx4_clean_dev() argument
3598 struct mlx4_dev_persistent *persist = dev->persist; mlx4_clean_dev()
3599 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_clean_dev()
3600 unsigned long flags = (dev->flags & RESET_PERSIST_MASK_FLAGS); mlx4_clean_dev()
3603 priv->dev.persist = persist; mlx4_clean_dev()
3604 priv->dev.flags = flags; mlx4_clean_dev()
3610 struct mlx4_dev *dev = persist->dev; mlx4_unload_one() local
3611 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_unload_one()
3619 for (i = 0; i < dev->caps.num_ports; i++) { mlx4_unload_one()
3620 dev->persist->curr_port_type[i] = dev->caps.port_type[i + 1]; mlx4_unload_one()
3621 dev->persist->curr_port_poss_type[i] = dev->caps. mlx4_unload_one()
3627 mlx4_stop_sense(dev); mlx4_unload_one()
3628 mlx4_unregister_device(dev); mlx4_unload_one()
3630 for (p = 1; p <= dev->caps.num_ports; p++) { mlx4_unload_one()
3632 mlx4_CLOSE_PORT(dev, p); mlx4_unload_one()
3635 if (mlx4_is_master(dev)) mlx4_unload_one()
3636 mlx4_free_resource_tracker(dev, mlx4_unload_one()
3639 mlx4_cleanup_default_counters(dev); mlx4_unload_one()
3640 if (!mlx4_is_slave(dev)) mlx4_unload_one()
3641 mlx4_cleanup_counters_table(dev); mlx4_unload_one()
3642 mlx4_cleanup_qp_table(dev); mlx4_unload_one()
3643 mlx4_cleanup_srq_table(dev); mlx4_unload_one()
3644 mlx4_cleanup_cq_table(dev); mlx4_unload_one()
3645 mlx4_cmd_use_polling(dev); mlx4_unload_one()
3646 mlx4_cleanup_eq_table(dev); mlx4_unload_one()
3647 mlx4_cleanup_mcg_table(dev); mlx4_unload_one()
3648 mlx4_cleanup_mr_table(dev); mlx4_unload_one()
3649 mlx4_cleanup_xrcd_table(dev); mlx4_unload_one()
3650 mlx4_cleanup_pd_table(dev); mlx4_unload_one()
3652 if (mlx4_is_master(dev)) mlx4_unload_one()
3653 mlx4_free_resource_tracker(dev, mlx4_unload_one()
3657 mlx4_uar_free(dev, &priv->driver_uar); mlx4_unload_one()
3658 mlx4_cleanup_uar_table(dev); mlx4_unload_one()
3659 if (!mlx4_is_slave(dev)) mlx4_unload_one()
3660 mlx4_clear_steering(dev); mlx4_unload_one()
3661 mlx4_free_eq_table(dev); mlx4_unload_one()
3662 if (mlx4_is_master(dev)) mlx4_unload_one()
3663 mlx4_multi_func_cleanup(dev); mlx4_unload_one()
3664 mlx4_close_hca(dev); mlx4_unload_one()
3665 mlx4_close_fw(dev); mlx4_unload_one()
3666 if (mlx4_is_slave(dev)) mlx4_unload_one()
3667 mlx4_multi_func_cleanup(dev); mlx4_unload_one()
3668 mlx4_cmd_cleanup(dev, MLX4_CMD_CLEANUP_ALL); mlx4_unload_one()
3670 if (dev->flags & MLX4_FLAG_MSI_X) mlx4_unload_one()
3673 if (!mlx4_is_slave(dev)) mlx4_unload_one()
3674 mlx4_free_ownership(dev); mlx4_unload_one()
3676 kfree(dev->caps.qp0_qkey); mlx4_unload_one()
3677 kfree(dev->caps.qp0_tunnel); mlx4_unload_one()
3678 kfree(dev->caps.qp0_proxy); mlx4_unload_one()
3679 kfree(dev->caps.qp1_tunnel); mlx4_unload_one()
3680 kfree(dev->caps.qp1_proxy); mlx4_unload_one()
3681 kfree(dev->dev_vfs); mlx4_unload_one()
3683 mlx4_clean_dev(dev); mlx4_unload_one()
3691 struct mlx4_dev *dev = persist->dev; mlx4_remove_one() local
3692 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_remove_one()
3700 if (mlx4_is_master(dev) && dev->flags & MLX4_FLAG_SRIOV) { mlx4_remove_one()
3701 active_vfs = mlx4_how_many_lives_vf(dev); mlx4_remove_one()
3714 mlx4_info(dev, "%s: interface is down\n", __func__); mlx4_remove_one()
3715 mlx4_catas_end(dev); mlx4_remove_one()
3716 if (dev->flags & MLX4_FLAG_SRIOV && !active_vfs) { mlx4_remove_one()
3717 mlx4_warn(dev, "Disabling SR-IOV\n"); mlx4_remove_one()
3723 kfree(dev->persist); mlx4_remove_one()
3728 static int restore_current_port_types(struct mlx4_dev *dev, restore_current_port_types() argument
3732 struct mlx4_priv *priv = mlx4_priv(dev); restore_current_port_types()
3735 mlx4_stop_sense(dev); restore_current_port_types()
3738 for (i = 0; i < dev->caps.num_ports; i++) restore_current_port_types()
3739 dev->caps.possible_type[i + 1] = poss_types[i]; restore_current_port_types()
3740 err = mlx4_change_port_types(dev, types); restore_current_port_types()
3741 mlx4_start_sense(dev); restore_current_port_types()
3750 struct mlx4_dev *dev = persist->dev; mlx4_restart_one() local
3751 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_restart_one()
3756 total_vfs = dev->persist->num_vfs; mlx4_restart_one()
3757 memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs)); mlx4_restart_one()
3762 mlx4_err(dev, "%s: ERROR: mlx4_load_one failed, pci_name=%s, err=%d\n", mlx4_restart_one()
3767 err = restore_current_port_types(dev, dev->persist->curr_port_type, mlx4_restart_one()
3768 dev->persist->curr_port_poss_type); mlx4_restart_one()
3770 mlx4_err(dev, "could not restore original port types (%d)\n", mlx4_restart_one()
3829 mlx4_err(persist->dev, "mlx4_pci_err_detected was called\n"); mlx4_pci_err_detected()
3847 struct mlx4_dev *dev = persist->dev; mlx4_pci_slot_reset() local
3848 struct mlx4_priv *priv = mlx4_priv(dev); mlx4_pci_slot_reset()
3853 mlx4_err(dev, "mlx4_pci_slot_reset was called\n"); mlx4_pci_slot_reset()
3856 mlx4_err(dev, "Can not re-enable device, ret=%d\n", ret); mlx4_pci_slot_reset()
3864 total_vfs = dev->persist->num_vfs; mlx4_pci_slot_reset()
3865 memcpy(nvfs, dev->persist->nvfs, sizeof(dev->persist->nvfs)); mlx4_pci_slot_reset()
3872 mlx4_err(dev, "%s: mlx4_load_one failed, ret=%d\n", mlx4_pci_slot_reset()
3877 ret = restore_current_port_types(dev, dev->persist-> mlx4_pci_slot_reset()
3878 curr_port_type, dev->persist-> mlx4_pci_slot_reset()
3881 mlx4_err(dev, "could not restore original port types (%d)\n", ret); mlx4_pci_slot_reset()
3893 mlx4_info(persist->dev, "mlx4_shutdown was called\n"); mlx4_shutdown()
/linux-4.4.14/sound/core/seq/
H A Dseq_midi_event.c46 static void note_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
47 static void one_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
48 static void pitchbend_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
49 static void two_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
50 static void one_param_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
51 static void songpos_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
64 void (*encode)(struct snd_midi_event *dev, struct snd_seq_event *ev);
96 static int extra_decode_ctrl14(struct snd_midi_event *dev, unsigned char *buf, int len,
98 static int extra_decode_xrpn(struct snd_midi_event *dev, unsigned char *buf, int count,
103 int (*decode)(struct snd_midi_event *dev, unsigned char *buf, int len,
117 struct snd_midi_event *dev; snd_midi_event_new() local
120 dev = kzalloc(sizeof(*dev), GFP_KERNEL); snd_midi_event_new()
121 if (dev == NULL) snd_midi_event_new()
124 dev->buf = kmalloc(bufsize, GFP_KERNEL); snd_midi_event_new()
125 if (dev->buf == NULL) { snd_midi_event_new()
126 kfree(dev); snd_midi_event_new()
130 dev->bufsize = bufsize; snd_midi_event_new()
131 dev->lastcmd = 0xff; snd_midi_event_new()
132 dev->type = ST_INVALID; snd_midi_event_new()
133 spin_lock_init(&dev->lock); snd_midi_event_new()
134 *rdev = dev; snd_midi_event_new()
138 void snd_midi_event_free(struct snd_midi_event *dev) snd_midi_event_free() argument
140 if (dev != NULL) { snd_midi_event_free()
141 kfree(dev->buf); snd_midi_event_free()
142 kfree(dev); snd_midi_event_free()
149 static inline void reset_encode(struct snd_midi_event *dev) reset_encode() argument
151 dev->read = 0; reset_encode()
152 dev->qlen = 0; reset_encode()
153 dev->type = ST_INVALID; reset_encode()
156 void snd_midi_event_reset_encode(struct snd_midi_event *dev) snd_midi_event_reset_encode() argument
160 spin_lock_irqsave(&dev->lock, flags); snd_midi_event_reset_encode()
161 reset_encode(dev); snd_midi_event_reset_encode()
162 spin_unlock_irqrestore(&dev->lock, flags); snd_midi_event_reset_encode()
165 void snd_midi_event_reset_decode(struct snd_midi_event *dev) snd_midi_event_reset_decode() argument
169 spin_lock_irqsave(&dev->lock, flags); snd_midi_event_reset_decode()
170 dev->lastcmd = 0xff; snd_midi_event_reset_decode()
171 spin_unlock_irqrestore(&dev->lock, flags); snd_midi_event_reset_decode()
175 void snd_midi_event_init(struct snd_midi_event *dev)
177 snd_midi_event_reset_encode(dev);
178 snd_midi_event_reset_decode(dev);
182 void snd_midi_event_no_status(struct snd_midi_event *dev, int on) snd_midi_event_no_status() argument
184 dev->nostat = on ? 1 : 0; snd_midi_event_no_status()
191 int snd_midi_event_resize_buffer(struct snd_midi_event *dev, int bufsize)
196 if (bufsize == dev->bufsize)
201 spin_lock_irqsave(&dev->lock, flags);
202 old_buf = dev->buf;
203 dev->buf = new_buf;
204 dev->bufsize = bufsize;
205 reset_encode(dev);
206 spin_unlock_irqrestore(&dev->lock, flags);
216 long snd_midi_event_encode(struct snd_midi_event *dev, unsigned char *buf, long count, snd_midi_event_encode() argument
225 rc = snd_midi_event_encode_byte(dev, *buf++, ev); snd_midi_event_encode()
242 int snd_midi_event_encode_byte(struct snd_midi_event *dev, int c, snd_midi_event_encode_byte() argument
258 spin_lock_irqsave(&dev->lock, flags); snd_midi_event_encode_byte()
260 (c != MIDI_CMD_COMMON_SYSEX_END || dev->type != ST_SYSEX)) { snd_midi_event_encode_byte()
262 dev->buf[0] = c; snd_midi_event_encode_byte()
264 dev->type = (c & 0x0f) + ST_SPECIAL; snd_midi_event_encode_byte()
266 dev->type = (c >> 4) & 0x07; snd_midi_event_encode_byte()
267 dev->read = 1; snd_midi_event_encode_byte()
268 dev->qlen = status_event[dev->type].qlen; snd_midi_event_encode_byte()
270 if (dev->qlen > 0) { snd_midi_event_encode_byte()
272 dev->buf[dev->read++] = c; snd_midi_event_encode_byte()
273 if (dev->type != ST_SYSEX) snd_midi_event_encode_byte()
274 dev->qlen--; snd_midi_event_encode_byte()
277 dev->buf[1] = c; snd_midi_event_encode_byte()
278 dev->qlen = status_event[dev->type].qlen - 1; snd_midi_event_encode_byte()
279 dev->read = 2; snd_midi_event_encode_byte()
282 if (dev->qlen == 0) { snd_midi_event_encode_byte()
283 ev->type = status_event[dev->type].event; snd_midi_event_encode_byte()
286 if (status_event[dev->type].encode) /* set data values */ snd_midi_event_encode_byte()
287 status_event[dev->type].encode(dev, ev); snd_midi_event_encode_byte()
288 if (dev->type >= ST_SPECIAL) snd_midi_event_encode_byte()
289 dev->type = ST_INVALID; snd_midi_event_encode_byte()
291 } else if (dev->type == ST_SYSEX) { snd_midi_event_encode_byte()
293 dev->read >= dev->bufsize) { snd_midi_event_encode_byte()
297 ev->data.ext.len = dev->read; snd_midi_event_encode_byte()
298 ev->data.ext.ptr = dev->buf; snd_midi_event_encode_byte()
300 dev->read = 0; /* continue to parse */ snd_midi_event_encode_byte()
302 reset_encode(dev); /* all parsed */ snd_midi_event_encode_byte()
307 spin_unlock_irqrestore(&dev->lock, flags); snd_midi_event_encode_byte()
312 static void note_event(struct snd_midi_event *dev, struct snd_seq_event *ev) note_event() argument
314 ev->data.note.channel = dev->buf[0] & 0x0f; note_event()
315 ev->data.note.note = dev->buf[1]; note_event()
316 ev->data.note.velocity = dev->buf[2]; note_event()
320 static void one_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) one_param_ctrl_event() argument
322 ev->data.control.channel = dev->buf[0] & 0x0f; one_param_ctrl_event()
323 ev->data.control.value = dev->buf[1]; one_param_ctrl_event()
327 static void pitchbend_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) pitchbend_ctrl_event() argument
329 ev->data.control.channel = dev->buf[0] & 0x0f; pitchbend_ctrl_event()
330 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1] - 8192; pitchbend_ctrl_event()
334 static void two_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) two_param_ctrl_event() argument
336 ev->data.control.channel = dev->buf[0] & 0x0f; two_param_ctrl_event()
337 ev->data.control.param = dev->buf[1]; two_param_ctrl_event()
338 ev->data.control.value = dev->buf[2]; two_param_ctrl_event()
342 static void one_param_event(struct snd_midi_event *dev, struct snd_seq_event *ev) one_param_event() argument
344 ev->data.control.value = dev->buf[1]; one_param_event()
348 static void songpos_event(struct snd_midi_event *dev, struct snd_seq_event *ev) songpos_event() argument
350 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1]; songpos_event()
357 long snd_midi_event_decode(struct snd_midi_event *dev, unsigned char *buf, long count, snd_midi_event_decode() argument
371 return extra_event[type].decode(dev, buf, count, ev); snd_midi_event_decode()
384 snd_midi_event_reset_decode(dev); snd_midi_event_decode()
391 spin_lock_irqsave(&dev->lock, flags); snd_midi_event_decode()
392 if ((cmd & 0xf0) == 0xf0 || dev->lastcmd != cmd || dev->nostat) { snd_midi_event_decode()
393 dev->lastcmd = cmd; snd_midi_event_decode()
394 spin_unlock_irqrestore(&dev->lock, flags); snd_midi_event_decode()
400 spin_unlock_irqrestore(&dev->lock, flags); snd_midi_event_decode()
449 static int extra_decode_ctrl14(struct snd_midi_event *dev, unsigned char *buf, extra_decode_ctrl14() argument
459 if (dev->nostat && count < 6) extra_decode_ctrl14()
461 if (cmd != dev->lastcmd || dev->nostat) { extra_decode_ctrl14()
464 buf[idx++] = dev->lastcmd = cmd; extra_decode_ctrl14()
468 if (dev->nostat) extra_decode_ctrl14()
475 if (cmd != dev->lastcmd || dev->nostat) { extra_decode_ctrl14()
478 buf[idx++] = dev->lastcmd = cmd; extra_decode_ctrl14()
487 static int extra_decode_xrpn(struct snd_midi_event *dev, unsigned char *buf, extra_decode_xrpn() argument
505 if (dev->nostat && count < 12) extra_decode_xrpn()
512 if (cmd != dev->lastcmd && !dev->nostat) { extra_decode_xrpn()
515 buf[idx++] = dev->lastcmd = cmd; extra_decode_xrpn()
519 if (dev->nostat) extra_decode_xrpn()
520 buf[idx++] = dev->lastcmd = cmd; extra_decode_xrpn()
/linux-4.4.14/drivers/usb/host/
H A Dohci-platform.c47 static int ohci_platform_power_on(struct platform_device *dev) ohci_platform_power_on() argument
49 struct usb_hcd *hcd = platform_get_drvdata(dev); ohci_platform_power_on()
84 static void ohci_platform_power_off(struct platform_device *dev) ohci_platform_power_off() argument
86 struct usb_hcd *hcd = platform_get_drvdata(dev); ohci_platform_power_off()
113 static int ohci_platform_probe(struct platform_device *dev) ohci_platform_probe() argument
117 struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev); ohci_platform_probe()
132 err = dma_coerce_mask_and_coherent(&dev->dev, DMA_BIT_MASK(32)); ohci_platform_probe()
136 irq = platform_get_irq(dev, 0); ohci_platform_probe()
138 dev_err(&dev->dev, "no irq provided"); ohci_platform_probe()
142 hcd = usb_create_hcd(&ohci_platform_hc_driver, &dev->dev, ohci_platform_probe()
143 dev_name(&dev->dev)); ohci_platform_probe()
147 platform_set_drvdata(dev, hcd); ohci_platform_probe()
148 dev->dev.platform_data = pdata; ohci_platform_probe()
152 if (pdata == &ohci_platform_defaults && dev->dev.of_node) { ohci_platform_probe()
153 if (of_property_read_bool(dev->dev.of_node, "big-endian-regs")) ohci_platform_probe()
156 if (of_property_read_bool(dev->dev.of_node, "big-endian-desc")) ohci_platform_probe()
159 if (of_property_read_bool(dev->dev.of_node, "big-endian")) ohci_platform_probe()
162 if (of_property_read_bool(dev->dev.of_node, "no-big-frame-no")) ohci_platform_probe()
165 of_property_read_u32(dev->dev.of_node, "num-ports", ohci_platform_probe()
168 priv->num_phys = of_count_phandle_with_args(dev->dev.of_node, ohci_platform_probe()
172 priv->phys = devm_kcalloc(&dev->dev, priv->num_phys, ohci_platform_probe()
181 &dev->dev, dev->dev.of_node, phy_num); ohci_platform_probe()
189 priv->clks[clk] = of_clk_get(dev->dev.of_node, clk); ohci_platform_probe()
201 priv->rst = devm_reset_control_get_optional(&dev->dev, NULL); ohci_platform_probe()
224 dev_err(&dev->dev, ohci_platform_probe()
232 dev_err(&dev->dev, ohci_platform_probe()
240 err = pdata->power_on(dev); ohci_platform_probe()
245 res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0); ohci_platform_probe()
246 hcd->regs = devm_ioremap_resource(&dev->dev, res_mem); ohci_platform_probe()
260 platform_set_drvdata(dev, hcd); ohci_platform_probe()
266 pdata->power_off(dev); ohci_platform_probe()
275 dev->dev.platform_data = NULL; ohci_platform_probe()
282 static int ohci_platform_remove(struct platform_device *dev) ohci_platform_remove() argument
284 struct usb_hcd *hcd = platform_get_drvdata(dev); ohci_platform_remove()
285 struct usb_ohci_pdata *pdata = dev_get_platdata(&dev->dev); ohci_platform_remove()
292 pdata->power_off(dev); ohci_platform_remove()
303 dev->dev.platform_data = NULL; ohci_platform_remove()
309 static int ohci_platform_suspend(struct device *dev) ohci_platform_suspend() argument
311 struct usb_hcd *hcd = dev_get_drvdata(dev); ohci_platform_suspend()
312 struct usb_ohci_pdata *pdata = dev->platform_data; ohci_platform_suspend()
314 container_of(dev, struct platform_device, dev); ohci_platform_suspend()
315 bool do_wakeup = device_may_wakeup(dev); ohci_platform_suspend()
328 static int ohci_platform_resume(struct device *dev) ohci_platform_resume() argument
330 struct usb_hcd *hcd = dev_get_drvdata(dev); ohci_platform_resume()
331 struct usb_ohci_pdata *pdata = dev_get_platdata(dev); ohci_platform_resume()
333 container_of(dev, struct platform_device, dev); ohci_platform_resume()
/linux-4.4.14/drivers/net/ethernet/mellanox/mlx5/core/
H A Dhealth.c67 static u8 get_nic_interface(struct mlx5_core_dev *dev) get_nic_interface() argument
69 return (ioread32be(&dev->iseg->cmdq_addr_l_sz) >> 8) & 3; get_nic_interface()
72 static void trigger_cmd_completions(struct mlx5_core_dev *dev) trigger_cmd_completions() argument
78 synchronize_irq(dev->priv.msix_arr[MLX5_EQ_VEC_CMD].vector); trigger_cmd_completions()
79 spin_lock_irqsave(&dev->cmd.alloc_lock, flags); trigger_cmd_completions()
80 vector = ~dev->cmd.bitmask & ((1ul << (1 << dev->cmd.log_sz)) - 1); trigger_cmd_completions()
85 spin_unlock_irqrestore(&dev->cmd.alloc_lock, flags); trigger_cmd_completions()
87 mlx5_core_dbg(dev, "vector 0x%llx\n", vector); trigger_cmd_completions()
88 mlx5_cmd_comp_handler(dev, vector); trigger_cmd_completions()
92 spin_unlock_irqrestore(&dev->cmd.alloc_lock, flags); trigger_cmd_completions()
95 static int in_fatal(struct mlx5_core_dev *dev) in_fatal() argument
97 struct mlx5_core_health *health = &dev->priv.health; in_fatal()
100 if (get_nic_interface(dev) == MLX5_NIC_IFC_DISABLED) in_fatal()
109 void mlx5_enter_error_state(struct mlx5_core_dev *dev) mlx5_enter_error_state() argument
111 if (dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) mlx5_enter_error_state()
114 mlx5_core_err(dev, "start\n"); mlx5_enter_error_state()
115 if (pci_channel_offline(dev->pdev) || in_fatal(dev)) mlx5_enter_error_state()
116 dev->state = MLX5_DEVICE_STATE_INTERNAL_ERROR; mlx5_enter_error_state()
118 mlx5_core_event(dev, MLX5_DEV_EVENT_SYS_ERROR, 0); mlx5_enter_error_state()
119 mlx5_core_err(dev, "end\n"); mlx5_enter_error_state()
122 static void mlx5_handle_bad_state(struct mlx5_core_dev *dev) mlx5_handle_bad_state() argument
124 u8 nic_interface = get_nic_interface(dev); mlx5_handle_bad_state()
128 mlx5_core_warn(dev, "Expected to see disabled NIC but it is full driver\n"); mlx5_handle_bad_state()
132 mlx5_core_warn(dev, "starting teardown\n"); mlx5_handle_bad_state()
136 mlx5_core_warn(dev, "Expected to see disabled NIC but it is no dram nic\n"); mlx5_handle_bad_state()
139 mlx5_core_warn(dev, "Expected to see disabled NIC but it is has invalid value %d\n", mlx5_handle_bad_state()
143 mlx5_disable_device(dev); mlx5_handle_bad_state()
149 struct mlx5_core_dev *dev; health_care() local
154 dev = container_of(priv, struct mlx5_core_dev, priv); health_care()
155 mlx5_core_warn(dev, "handling bad device here\n"); health_care()
156 mlx5_handle_bad_state(dev); health_care()
204 static void print_health_info(struct mlx5_core_dev *dev) print_health_info() argument
206 struct mlx5_core_health *health = &dev->priv.health; print_health_info()
217 dev_err(&dev->pdev->dev, "assert_var[%d] 0x%08x\n", i, ioread32be(h->assert_var + i)); print_health_info()
219 dev_err(&dev->pdev->dev, "assert_exit_ptr 0x%08x\n", ioread32be(&h->assert_exit_ptr)); print_health_info()
220 dev_err(&dev->pdev->dev, "assert_callra 0x%08x\n", ioread32be(&h->assert_callra)); print_health_info()
223 dev_err(&dev->pdev->dev, "fw_ver %s\n", fw_str); print_health_info()
224 dev_err(&dev->pdev->dev, "hw_id 0x%08x\n", ioread32be(&h->hw_id)); print_health_info()
225 dev_err(&dev->pdev->dev, "irisc_index %d\n", ioread8(&h->irisc_index)); print_health_info()
226 dev_err(&dev->pdev->dev, "synd 0x%x: %s\n", ioread8(&h->synd), hsynd_str(ioread8(&h->synd))); print_health_info()
227 dev_err(&dev->pdev->dev, "ext_synd 0x%04x\n", ioread16be(&h->ext_synd)); print_health_info()
243 struct mlx5_core_dev *dev = (struct mlx5_core_dev *)data; poll_health() local
244 struct mlx5_core_health *health = &dev->priv.health; poll_health()
247 if (dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) { poll_health()
248 trigger_cmd_completions(dev); poll_health()
261 dev_err(&dev->pdev->dev, "device's health compromised - reached miss count\n"); poll_health()
262 print_health_info(dev); poll_health()
267 if (in_fatal(dev) && !health->sick) { poll_health()
269 print_health_info(dev); poll_health()
274 void mlx5_start_health_poll(struct mlx5_core_dev *dev) mlx5_start_health_poll() argument
276 struct mlx5_core_health *health = &dev->priv.health; mlx5_start_health_poll()
279 health->health = &dev->iseg->health; mlx5_start_health_poll()
280 health->health_counter = &dev->iseg->health_counter; mlx5_start_health_poll()
282 health->timer.data = (unsigned long)dev; mlx5_start_health_poll()
288 void mlx5_stop_health_poll(struct mlx5_core_dev *dev) mlx5_stop_health_poll() argument
290 struct mlx5_core_health *health = &dev->priv.health; mlx5_stop_health_poll()
295 void mlx5_health_cleanup(struct mlx5_core_dev *dev) mlx5_health_cleanup() argument
297 struct mlx5_core_health *health = &dev->priv.health; mlx5_health_cleanup()
302 int mlx5_health_init(struct mlx5_core_dev *dev) mlx5_health_init() argument
307 health = &dev->priv.health; mlx5_health_init()
313 strcat(name, dev_name(&dev->pdev->dev)); mlx5_health_init()
/linux-4.4.14/drivers/media/pci/saa7164/
H A Dsaa7164-core.c263 struct saa7164_dev *dev = port->dev; saa7164_work_enchandler_helper() local
369 struct saa7164_dev *dev = port->dev; saa7164_work_enchandler() local
446 struct saa7164_dev *dev = port->dev; saa7164_work_vbihandler() local
520 struct saa7164_dev *dev = container_of(w, struct saa7164_dev, workcmd); saa7164_work_cmdhandler() local
523 saa7164_irq_dequeue(dev); saa7164_work_cmdhandler()
538 struct saa7164_dev *dev = port->dev; saa7164_irq_vbi() local
563 struct saa7164_dev *dev = port->dev; saa7164_irq_encoder() local
587 struct saa7164_dev *dev = port->dev; saa7164_irq_ts() local
625 struct saa7164_dev *dev = dev_id; saa7164_irq() local
631 if (dev == NULL) { saa7164_irq()
637 porta = &dev->ports[SAA7164_PORT_TS1]; saa7164_irq()
638 portb = &dev->ports[SAA7164_PORT_TS2]; saa7164_irq()
639 portc = &dev->ports[SAA7164_PORT_ENC1]; saa7164_irq()
640 portd = &dev->ports[SAA7164_PORT_ENC2]; saa7164_irq()
641 porte = &dev->ports[SAA7164_PORT_VBI1]; saa7164_irq()
642 portf = &dev->ports[SAA7164_PORT_VBI2]; saa7164_irq()
653 intstat[i] = saa7164_readl(dev->int_status + (i * 4)); saa7164_irq()
677 if (intid == dev->intfdesc.bInterruptId) { saa7164_irq()
679 schedule_work(&dev->workcmd); saa7164_irq()
721 saa7164_writel(dev->int_ack + (i * 4), intstat[i]); saa7164_irq()
729 void saa7164_getfirmwarestatus(struct saa7164_dev *dev) saa7164_getfirmwarestatus() argument
731 struct saa7164_fw_status *s = &dev->fw_status; saa7164_getfirmwarestatus()
733 dev->fw_status.status = saa7164_readl(SAA_DEVICE_SYSINIT_STATUS); saa7164_getfirmwarestatus()
734 dev->fw_status.mode = saa7164_readl(SAA_DEVICE_SYSINIT_MODE); saa7164_getfirmwarestatus()
735 dev->fw_status.spec = saa7164_readl(SAA_DEVICE_SYSINIT_SPEC); saa7164_getfirmwarestatus()
736 dev->fw_status.inst = saa7164_readl(SAA_DEVICE_SYSINIT_INST); saa7164_getfirmwarestatus()
737 dev->fw_status.cpuload = saa7164_readl(SAA_DEVICE_SYSINIT_CPULOAD); saa7164_getfirmwarestatus()
738 dev->fw_status.remainheap = saa7164_getfirmwarestatus()
750 u32 saa7164_getcurrentfirmwareversion(struct saa7164_dev *dev) saa7164_getcurrentfirmwareversion() argument
766 void saa7164_dumpregs(struct saa7164_dev *dev, u32 addr) saa7164_dumpregs() argument
796 static void saa7164_dump_hwdesc(struct saa7164_dev *dev) saa7164_dump_hwdesc() argument
799 &dev->hwdesc, (u32)sizeof(struct tmComResHWDescr)); saa7164_dump_hwdesc()
801 dprintk(1, " .bLength = 0x%x\n", dev->hwdesc.bLength); saa7164_dump_hwdesc()
802 dprintk(1, " .bDescriptorType = 0x%x\n", dev->hwdesc.bDescriptorType); saa7164_dump_hwdesc()
804 dev->hwdesc.bDescriptorSubtype); saa7164_dump_hwdesc()
806 dprintk(1, " .bcdSpecVersion = 0x%x\n", dev->hwdesc.bcdSpecVersion); saa7164_dump_hwdesc()
807 dprintk(1, " .dwClockFrequency = 0x%x\n", dev->hwdesc.dwClockFrequency); saa7164_dump_hwdesc()
808 dprintk(1, " .dwClockUpdateRes = 0x%x\n", dev->hwdesc.dwClockUpdateRes); saa7164_dump_hwdesc()
809 dprintk(1, " .bCapabilities = 0x%x\n", dev->hwdesc.bCapabilities); saa7164_dump_hwdesc()
811 dev->hwdesc.dwDeviceRegistersLocation); saa7164_dump_hwdesc()
814 dev->hwdesc.dwHostMemoryRegion); saa7164_dump_hwdesc()
817 dev->hwdesc.dwHostMemoryRegionSize); saa7164_dump_hwdesc()
820 dev->hwdesc.dwHostHibernatMemRegion); saa7164_dump_hwdesc()
823 dev->hwdesc.dwHostHibernatMemRegionSize); saa7164_dump_hwdesc()
826 static void saa7164_dump_intfdesc(struct saa7164_dev *dev) saa7164_dump_intfdesc() argument
830 &dev->intfdesc, (u32)sizeof(struct tmComResInterfaceDescr)); saa7164_dump_intfdesc()
832 dprintk(1, " .bLength = 0x%x\n", dev->intfdesc.bLength); saa7164_dump_intfdesc()
833 dprintk(1, " .bDescriptorType = 0x%x\n", dev->intfdesc.bDescriptorType); saa7164_dump_intfdesc()
835 dev->intfdesc.bDescriptorSubtype); saa7164_dump_intfdesc()
837 dprintk(1, " .bFlags = 0x%x\n", dev->intfdesc.bFlags); saa7164_dump_intfdesc()
838 dprintk(1, " .bInterfaceType = 0x%x\n", dev->intfdesc.bInterfaceType); saa7164_dump_intfdesc()
839 dprintk(1, " .bInterfaceId = 0x%x\n", dev->intfdesc.bInterfaceId); saa7164_dump_intfdesc()
840 dprintk(1, " .bBaseInterface = 0x%x\n", dev->intfdesc.bBaseInterface); saa7164_dump_intfdesc()
841 dprintk(1, " .bInterruptId = 0x%x\n", dev->intfdesc.bInterruptId); saa7164_dump_intfdesc()
843 dev->intfdesc.bDebugInterruptId); saa7164_dump_intfdesc()
845 dprintk(1, " .BARLocation = 0x%x\n", dev->intfdesc.BARLocation); saa7164_dump_intfdesc()
848 static void saa7164_dump_busdesc(struct saa7164_dev *dev) saa7164_dump_busdesc() argument
851 &dev->busdesc, (u32)sizeof(struct tmComResBusDescr)); saa7164_dump_busdesc()
853 dprintk(1, " .CommandRing = 0x%016Lx\n", dev->busdesc.CommandRing); saa7164_dump_busdesc()
854 dprintk(1, " .ResponseRing = 0x%016Lx\n", dev->busdesc.ResponseRing); saa7164_dump_busdesc()
855 dprintk(1, " .CommandWrite = 0x%x\n", dev->busdesc.CommandWrite); saa7164_dump_busdesc()
856 dprintk(1, " .CommandRead = 0x%x\n", dev->busdesc.CommandRead); saa7164_dump_busdesc()
857 dprintk(1, " .ResponseWrite = 0x%x\n", dev->busdesc.ResponseWrite); saa7164_dump_busdesc()
858 dprintk(1, " .ResponseRead = 0x%x\n", dev->busdesc.ResponseRead); saa7164_dump_busdesc()
866 static void saa7164_get_descriptors(struct saa7164_dev *dev) saa7164_get_descriptors() argument
868 memcpy_fromio(&dev->hwdesc, dev->bmmio, sizeof(struct tmComResHWDescr)); saa7164_get_descriptors()
869 memcpy_fromio(&dev->intfdesc, dev->bmmio + sizeof(struct tmComResHWDescr), saa7164_get_descriptors()
871 memcpy_fromio(&dev->busdesc, dev->bmmio + dev->intfdesc.BARLocation, saa7164_get_descriptors()
874 if (dev->hwdesc.bLength != sizeof(struct tmComResHWDescr)) { saa7164_get_descriptors()
876 printk(KERN_ERR "Need %x got %d\n", dev->hwdesc.bLength, saa7164_get_descriptors()
879 saa7164_dump_hwdesc(dev); saa7164_get_descriptors()
881 if (dev->intfdesc.bLength != sizeof(struct tmComResInterfaceDescr)) { saa7164_get_descriptors()
883 printk(KERN_ERR "Need %x got %d\n", dev->intfdesc.bLength, saa7164_get_descriptors()
886 saa7164_dump_intfdesc(dev); saa7164_get_descriptors()
888 saa7164_dump_busdesc(dev); saa7164_get_descriptors()
891 static int saa7164_pci_quirks(struct saa7164_dev *dev) saa7164_pci_quirks() argument
896 static int get_resources(struct saa7164_dev *dev) get_resources() argument
898 if (request_mem_region(pci_resource_start(dev->pci, 0), get_resources()
899 pci_resource_len(dev->pci, 0), dev->name)) { get_resources()
901 if (request_mem_region(pci_resource_start(dev->pci, 2), get_resources()
902 pci_resource_len(dev->pci, 2), dev->name)) get_resources()
907 dev->name, get_resources()
908 (u64)pci_resource_start(dev->pci, 0), get_resources()
909 (u64)pci_resource_start(dev->pci, 2)); get_resources()
914 static int saa7164_port_init(struct saa7164_dev *dev, int portnr) saa7164_port_init() argument
921 port = &dev->ports[portnr]; saa7164_port_init()
923 port->dev = dev; saa7164_port_init()
964 static int saa7164_dev_setup(struct saa7164_dev *dev) saa7164_dev_setup() argument
968 mutex_init(&dev->lock); saa7164_dev_setup()
969 atomic_inc(&dev->refcount); saa7164_dev_setup()
970 dev->nr = saa7164_devcount++; saa7164_dev_setup()
972 snprintf(dev->name, sizeof(dev->name), "saa7164[%d]", dev->nr); saa7164_dev_setup()
975 list_add_tail(&dev->devlist, &saa7164_devlist); saa7164_dev_setup()
979 dev->board = UNSET; saa7164_dev_setup()
980 if (card[dev->nr] < saa7164_bcount) saa7164_dev_setup()
981 dev->board = card[dev->nr]; saa7164_dev_setup()
983 for (i = 0; UNSET == dev->board && i < saa7164_idcount; i++) saa7164_dev_setup()
984 if (dev->pci->subsystem_vendor == saa7164_subids[i].subvendor && saa7164_dev_setup()
985 dev->pci->subsystem_device == saa7164_dev_setup()
987 dev->board = saa7164_subids[i].card; saa7164_dev_setup()
989 if (UNSET == dev->board) { saa7164_dev_setup()
990 dev->board = SAA7164_BOARD_UNKNOWN; saa7164_dev_setup()
991 saa7164_card_list(dev); saa7164_dev_setup()
994 dev->pci_bus = dev->pci->bus->number; saa7164_dev_setup()
995 dev->pci_slot = PCI_SLOT(dev->pci->devfn); saa7164_dev_setup()
998 dev->i2c_bus[0].dev = dev; saa7164_dev_setup()
999 dev->i2c_bus[0].nr = 0; saa7164_dev_setup()
1000 dev->i2c_bus[1].dev = dev; saa7164_dev_setup()
1001 dev->i2c_bus[1].nr = 1; saa7164_dev_setup()
1002 dev->i2c_bus[2].dev = dev; saa7164_dev_setup()
1003 dev->i2c_bus[2].nr = 2; saa7164_dev_setup()
1006 saa7164_port_init(dev, SAA7164_PORT_TS1); saa7164_dev_setup()
1007 saa7164_port_init(dev, SAA7164_PORT_TS2); saa7164_dev_setup()
1008 saa7164_port_init(dev, SAA7164_PORT_ENC1); saa7164_dev_setup()
1009 saa7164_port_init(dev, SAA7164_PORT_ENC2); saa7164_dev_setup()
1010 saa7164_port_init(dev, SAA7164_PORT_VBI1); saa7164_dev_setup()
1011 saa7164_port_init(dev, SAA7164_PORT_VBI2); saa7164_dev_setup()
1013 if (get_resources(dev) < 0) { saa7164_dev_setup()
1016 dev->name, dev->pci->subsystem_vendor, saa7164_dev_setup()
1017 dev->pci->subsystem_device); saa7164_dev_setup()
1024 dev->lmmio = ioremap(pci_resource_start(dev->pci, 0), saa7164_dev_setup()
1025 pci_resource_len(dev->pci, 0)); saa7164_dev_setup()
1027 dev->lmmio2 = ioremap(pci_resource_start(dev->pci, 2), saa7164_dev_setup()
1028 pci_resource_len(dev->pci, 2)); saa7164_dev_setup()
1030 dev->bmmio = (u8 __iomem *)dev->lmmio; saa7164_dev_setup()
1031 dev->bmmio2 = (u8 __iomem *)dev->lmmio2; saa7164_dev_setup()
1034 dev->int_status = 0x183000 + 0xf80; saa7164_dev_setup()
1035 dev->int_ack = 0x183000 + 0xf90; saa7164_dev_setup()
1039 dev->name, dev->pci->subsystem_vendor, saa7164_dev_setup()
1040 dev->pci->subsystem_device, saa7164_boards[dev->board].name, saa7164_dev_setup()
1041 dev->board, card[dev->nr] == dev->board ? saa7164_dev_setup()
1044 saa7164_pci_quirks(dev); saa7164_dev_setup()
1049 static void saa7164_dev_unregister(struct saa7164_dev *dev) saa7164_dev_unregister() argument
1053 release_mem_region(pci_resource_start(dev->pci, 0), saa7164_dev_unregister()
1054 pci_resource_len(dev->pci, 0)); saa7164_dev_unregister()
1056 release_mem_region(pci_resource_start(dev->pci, 2), saa7164_dev_unregister()
1057 pci_resource_len(dev->pci, 2)); saa7164_dev_unregister()
1059 if (!atomic_dec_and_test(&dev->refcount)) saa7164_dev_unregister()
1062 iounmap(dev->lmmio); saa7164_dev_unregister()
1063 iounmap(dev->lmmio2); saa7164_dev_unregister()
1071 struct saa7164_dev *dev; saa7164_proc_show() local
1080 dev = list_entry(list, struct saa7164_dev, devlist); saa7164_proc_show()
1081 seq_printf(m, "%s = %p\n", dev->name, dev); saa7164_proc_show()
1084 b = &dev->bus; saa7164_proc_show()
1161 struct saa7164_dev *dev = data; saa7164_thread_function() local
1180 saa7164_api_collect_debug(dev); saa7164_thread_function()
1184 saa7164_api_get_load_info(dev, &fwinfo); saa7164_thread_function()
1194 static bool saa7164_enable_msi(struct pci_dev *pci_dev, struct saa7164_dev *dev) saa7164_enable_msi() argument
1214 dev->name, dev); saa7164_enable_msi()
1230 struct saa7164_dev *dev; saa7164_initdev() local
1234 dev = kzalloc(sizeof(*dev), GFP_KERNEL); saa7164_initdev()
1235 if (NULL == dev) saa7164_initdev()
1238 err = v4l2_device_register(&pci_dev->dev, &dev->v4l2_dev); saa7164_initdev()
1240 dev_err(&pci_dev->dev, "v4l2_device_register failed\n"); saa7164_initdev()
1245 dev->pci = pci_dev; saa7164_initdev()
1251 if (saa7164_dev_setup(dev) < 0) { saa7164_initdev()
1257 dev->pci_rev = pci_dev->revision; saa7164_initdev()
1258 pci_read_config_byte(pci_dev, PCI_LATENCY_TIMER, &dev->pci_lat); saa7164_initdev()
1260 "latency: %d, mmio: 0x%llx\n", dev->name, saa7164_initdev()
1261 pci_name(pci_dev), dev->pci_rev, pci_dev->irq, saa7164_initdev()
1262 dev->pci_lat, saa7164_initdev()
1269 printk("%s/0: Oops: no 32bit PCI DMA ???\n", dev->name); saa7164_initdev()
1274 if (saa7164_enable_msi(pci_dev, dev)) { saa7164_initdev()
1275 dev->msi = true; saa7164_initdev()
1281 IRQF_SHARED, dev->name, dev); saa7164_initdev()
1284 printk(KERN_ERR "%s: can't get IRQ %d\n", dev->name, saa7164_initdev()
1291 pci_set_drvdata(pci_dev, dev); saa7164_initdev()
1295 dev->cmds[i].seqno = i; saa7164_initdev()
1296 dev->cmds[i].inuse = 0; saa7164_initdev()
1297 mutex_init(&dev->cmds[i].lock); saa7164_initdev()
1298 init_waitqueue_head(&dev->cmds[i].wait); saa7164_initdev()
1302 INIT_WORK(&dev->workcmd, saa7164_work_cmdhandler); saa7164_initdev()
1305 if (dev->board != SAA7164_BOARD_UNKNOWN) { saa7164_initdev()
1307 err = saa7164_downloadfirmware(dev); saa7164_initdev()
1315 saa7164_get_descriptors(dev); saa7164_initdev()
1316 saa7164_dumpregs(dev, 0); saa7164_initdev()
1317 saa7164_getcurrentfirmwareversion(dev); saa7164_initdev()
1318 saa7164_getfirmwarestatus(dev); saa7164_initdev()
1319 err = saa7164_bus_setup(dev); saa7164_initdev()
1323 saa7164_bus_dump(dev); saa7164_initdev()
1329 if (saa7164_api_get_fw_version(dev, &version) == SAA_OK) saa7164_initdev()
1342 saa7164_i2c_register(&dev->i2c_bus[0]); saa7164_initdev()
1343 saa7164_i2c_register(&dev->i2c_bus[1]); saa7164_initdev()
1344 saa7164_i2c_register(&dev->i2c_bus[2]); saa7164_initdev()
1345 saa7164_gpio_setup(dev); saa7164_initdev()
1346 saa7164_card_setup(dev); saa7164_initdev()
1354 saa7164_api_enum_subdevs(dev); saa7164_initdev()
1357 if (saa7164_boards[dev->board].porta == SAA7164_MPEG_DVB) { saa7164_initdev()
1358 if (saa7164_dvb_register(&dev->ports[SAA7164_PORT_TS1]) < 0) { saa7164_initdev()
1365 if (saa7164_boards[dev->board].portb == SAA7164_MPEG_DVB) { saa7164_initdev()
1366 if (saa7164_dvb_register(&dev->ports[SAA7164_PORT_TS2]) < 0) { saa7164_initdev()
1373 if (saa7164_boards[dev->board].portc == SAA7164_MPEG_ENCODER) { saa7164_initdev()
1374 if (saa7164_encoder_register(&dev->ports[SAA7164_PORT_ENC1]) < 0) { saa7164_initdev()
1380 if (saa7164_boards[dev->board].portd == SAA7164_MPEG_ENCODER) { saa7164_initdev()
1381 if (saa7164_encoder_register(&dev->ports[SAA7164_PORT_ENC2]) < 0) { saa7164_initdev()
1387 if (saa7164_boards[dev->board].porte == SAA7164_MPEG_VBI) { saa7164_initdev()
1388 if (saa7164_vbi_register(&dev->ports[SAA7164_PORT_VBI1]) < 0) { saa7164_initdev()
1394 if (saa7164_boards[dev->board].portf == SAA7164_MPEG_VBI) { saa7164_initdev()
1395 if (saa7164_vbi_register(&dev->ports[SAA7164_PORT_VBI2]) < 0) { saa7164_initdev()
1400 saa7164_api_set_debug(dev, fw_debug); saa7164_initdev()
1403 dev->kthread = kthread_run(saa7164_thread_function, dev, saa7164_initdev()
1405 if (IS_ERR(dev->kthread)) { saa7164_initdev()
1406 dev->kthread = NULL; saa7164_initdev()
1424 saa7164_dev_unregister(dev); saa7164_initdev()
1426 v4l2_device_unregister(&dev->v4l2_dev); saa7164_initdev()
1427 kfree(dev); saa7164_initdev()
1431 static void saa7164_shutdown(struct saa7164_dev *dev) saa7164_shutdown() argument
1438 struct saa7164_dev *dev = pci_get_drvdata(pci_dev); saa7164_finidev() local
1440 if (dev->board != SAA7164_BOARD_UNKNOWN) { saa7164_finidev()
1441 if (fw_debug && dev->kthread) { saa7164_finidev()
1442 kthread_stop(dev->kthread); saa7164_finidev()
1443 dev->kthread = NULL; saa7164_finidev()
1445 if (dev->firmwareloaded) saa7164_finidev()
1446 saa7164_api_set_debug(dev, 0x00); saa7164_finidev()
1449 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], saa7164_finidev()
1450 &dev->ports[SAA7164_PORT_ENC1].irq_interval); saa7164_finidev()
1451 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], saa7164_finidev()
1452 &dev->ports[SAA7164_PORT_ENC1].svc_interval); saa7164_finidev()
1453 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], saa7164_finidev()
1454 &dev->ports[SAA7164_PORT_ENC1].irq_svc_interval); saa7164_finidev()
1455 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], saa7164_finidev()
1456 &dev->ports[SAA7164_PORT_ENC1].read_interval); saa7164_finidev()
1457 saa7164_histogram_print(&dev->ports[SAA7164_PORT_ENC1], saa7164_finidev()
1458 &dev->ports[SAA7164_PORT_ENC1].poll_interval); saa7164_finidev()
1459 saa7164_histogram_print(&dev->ports[SAA7164_PORT_VBI1], saa7164_finidev()
1460 &dev->ports[SAA7164_PORT_VBI1].read_interval); saa7164_finidev()
1461 saa7164_histogram_print(&dev->ports[SAA7164_PORT_VBI2], saa7164_finidev()
1462 &dev->ports[SAA7164_PORT_VBI2].poll_interval); saa7164_finidev()
1464 saa7164_shutdown(dev); saa7164_finidev()
1466 if (saa7164_boards[dev->board].porta == SAA7164_MPEG_DVB) saa7164_finidev()
1467 saa7164_dvb_unregister(&dev->ports[SAA7164_PORT_TS1]); saa7164_finidev()
1469 if (saa7164_boards[dev->board].portb == SAA7164_MPEG_DVB) saa7164_finidev()
1470 saa7164_dvb_unregister(&dev->ports[SAA7164_PORT_TS2]); saa7164_finidev()
1472 if (saa7164_boards[dev->board].portc == SAA7164_MPEG_ENCODER) saa7164_finidev()
1473 saa7164_encoder_unregister(&dev->ports[SAA7164_PORT_ENC1]); saa7164_finidev()
1475 if (saa7164_boards[dev->board].portd == SAA7164_MPEG_ENCODER) saa7164_finidev()
1476 saa7164_encoder_unregister(&dev->ports[SAA7164_PORT_ENC2]); saa7164_finidev()
1478 if (saa7164_boards[dev->board].porte == SAA7164_MPEG_VBI) saa7164_finidev()
1479 saa7164_vbi_unregister(&dev->ports[SAA7164_PORT_VBI1]); saa7164_finidev()
1481 if (saa7164_boards[dev->board].portf == SAA7164_MPEG_VBI) saa7164_finidev()
1482 saa7164_vbi_unregister(&dev->ports[SAA7164_PORT_VBI2]); saa7164_finidev()
1484 saa7164_i2c_unregister(&dev->i2c_bus[0]); saa7164_finidev()
1485 saa7164_i2c_unregister(&dev->i2c_bus[1]); saa7164_finidev()
1486 saa7164_i2c_unregister(&dev->i2c_bus[2]); saa7164_finidev()
1489 free_irq(pci_dev->irq, dev); saa7164_finidev()
1491 if (dev->msi) { saa7164_finidev()
1493 dev->msi = false; saa7164_finidev()
1499 list_del(&dev->devlist); saa7164_finidev()
1502 saa7164_dev_unregister(dev); saa7164_finidev()
1503 v4l2_device_unregister(&dev->v4l2_dev); saa7164_finidev()
1504 kfree(dev); saa7164_finidev()
/linux-4.4.14/drivers/gpu/drm/vc4/
H A Dvc4_kms.c24 static void vc4_output_poll_changed(struct drm_device *dev) vc4_output_poll_changed() argument
26 struct vc4_dev *vc4 = to_vc4_dev(dev); vc4_output_poll_changed()
39 int vc4_kms_load(struct drm_device *dev) vc4_kms_load() argument
41 struct vc4_dev *vc4 = to_vc4_dev(dev); vc4_kms_load()
44 ret = drm_vblank_init(dev, dev->mode_config.num_crtc); vc4_kms_load()
46 dev_err(dev->dev, "failed to initialize vblank\n"); vc4_kms_load()
50 dev->mode_config.max_width = 2048; vc4_kms_load()
51 dev->mode_config.max_height = 2048; vc4_kms_load()
52 dev->mode_config.funcs = &vc4_mode_funcs; vc4_kms_load()
53 dev->mode_config.preferred_depth = 24; vc4_kms_load()
54 dev->vblank_disable_allowed = true; vc4_kms_load()
56 drm_mode_config_reset(dev); vc4_kms_load()
58 vc4->fbdev = drm_fbdev_cma_init(dev, 32, vc4_kms_load()
59 dev->mode_config.num_crtc, vc4_kms_load()
60 dev->mode_config.num_connector); vc4_kms_load()
64 drm_kms_helper_poll_init(dev); vc4_kms_load()
/linux-4.4.14/drivers/media/pci/cx23885/
H A Dcx23885-f300.c35 static void f300_set_line(struct cx23885_dev *dev, u32 line, u8 lvl) f300_set_line() argument
37 cx23885_gpio_enable(dev, line, 1); f300_set_line()
39 cx23885_gpio_set(dev, line); f300_set_line()
41 cx23885_gpio_clear(dev, line); f300_set_line()
44 static u8 f300_get_line(struct cx23885_dev *dev, u32 line) f300_get_line() argument
46 cx23885_gpio_enable(dev, line, 0); f300_get_line()
48 return cx23885_gpio_get(dev, line); f300_get_line()
51 static void f300_send_byte(struct cx23885_dev *dev, u8 dta) f300_send_byte() argument
56 f300_set_line(dev, F300_CLK, 0); f300_send_byte()
58 f300_set_line(dev, F300_DATA, (dta & 0x80) >> 7);/* msb first */ f300_send_byte()
61 f300_set_line(dev, F300_CLK, 1); f300_send_byte()
66 static u8 f300_get_byte(struct cx23885_dev *dev) f300_get_byte() argument
71 f300_set_line(dev, F300_CLK, 0); f300_get_byte()
74 f300_set_line(dev, F300_CLK, 1); f300_get_byte()
76 dta |= f300_get_line(dev, F300_DATA);/* msb first */ f300_get_byte()
86 struct cx23885_dev *dev = port->dev; f300_xfer() local
95 f300_set_line(dev, F300_RESET, 1); f300_xfer()
96 f300_set_line(dev, F300_CLK, 1); f300_xfer()
98 f300_set_line(dev, F300_DATA, 1); f300_xfer()
102 f300_set_line(dev, F300_RESET, 0);/* begin to send data */ f300_xfer()
105 f300_send_byte(dev, 0xe0);/* the slave address is 0xe0, write */ f300_xfer()
111 f300_send_byte(dev, buf[i]); f300_xfer()
113 f300_set_line(dev, F300_RESET, 1);/* sent data over */ f300_xfer()
114 f300_set_line(dev, F300_DATA, 1); f300_xfer()
120 if (f300_get_line(dev, F300_BUSY) == 0) f300_xfer()
129 f300_set_line(dev, F300_RESET, 0);/*ready...*/ f300_xfer()
131 f300_send_byte(dev, 0xe1);/* 0xe1 is Read */ f300_xfer()
133 temp = f300_get_byte(dev);/*get the data length */ f300_xfer()
138 f300_get_byte(dev);/* get data to empty buffer */ f300_xfer()
140 f300_set_line(dev, F300_RESET, 1);/* received data over */ f300_xfer()
141 f300_set_line(dev, F300_DATA, 1); f300_xfer()
/linux-4.4.14/drivers/net/ethernet/natsemi/
H A Dns83820.c464 static inline struct ns83820 *PRIV(struct net_device *dev) PRIV() argument
466 return netdev_priv(dev); PRIV()
469 #define __kick_rx(dev) writel(CR_RXE, dev->base + CR)
473 struct ns83820 *dev = PRIV(ndev); kick_rx() local
475 if (test_and_clear_bit(0, &dev->rx_info.idle)) { kick_rx()
477 writel(dev->rx_info.phy_descs + kick_rx()
478 (4 * DESC_SIZE * dev->rx_info.next_rx), kick_rx()
479 dev->base + RXDP); kick_rx()
480 if (dev->rx_info.next_rx == dev->rx_info.next_empty) kick_rx()
483 __kick_rx(dev); kick_rx()
488 #define start_tx_okay(dev) \
489 (((NR_TX_DESC-2 + dev->tx_done_idx - dev->tx_free_idx) % NR_TX_DESC) > MIN_TX_DESC_FREE)
504 static inline void build_rx_desc(struct ns83820 *dev, __le32 *desc, dma_addr_t link, dma_addr_t buf, u32 cmdsts, u32 extsts) build_rx_desc() argument
513 #define nr_rx_empty(dev) ((NR_RX_DESC-2 + dev->rx_info.next_rx - dev->rx_info.next_empty) % NR_RX_DESC) ns83820_add_rx_skb()
514 static inline int ns83820_add_rx_skb(struct ns83820 *dev, struct sk_buff *skb) ns83820_add_rx_skb() argument
521 next_empty = dev->rx_info.next_empty; ns83820_add_rx_skb()
524 if (unlikely(nr_rx_empty(dev) <= 2)) { ns83820_add_rx_skb()
531 dev->rx_info.next_empty, ns83820_add_rx_skb()
532 dev->rx_info.nr_used, ns83820_add_rx_skb()
533 dev->rx_info.next_rx ns83820_add_rx_skb()
537 sg = dev->rx_info.descs + (next_empty * DESC_SIZE); ns83820_add_rx_skb()
538 BUG_ON(NULL != dev->rx_info.skbs[next_empty]); ns83820_add_rx_skb()
539 dev->rx_info.skbs[next_empty] = skb; ns83820_add_rx_skb()
541 dev->rx_info.next_empty = (next_empty + 1) % NR_RX_DESC; ns83820_add_rx_skb()
543 buf = pci_map_single(dev->pci_dev, skb->data, ns83820_add_rx_skb()
545 build_rx_desc(dev, sg, 0, buf, cmdsts, 0); ns83820_add_rx_skb()
547 if (likely(next_empty != dev->rx_info.next_rx)) ns83820_add_rx_skb()
548 dev->rx_info.descs[((NR_RX_DESC + next_empty - 1) % NR_RX_DESC) * DESC_SIZE] = cpu_to_le32(dev->rx_info.phy_descs + (next_empty * DESC_SIZE * 4)); ns83820_add_rx_skb()
555 struct ns83820 *dev = PRIV(ndev); rx_refill() local
559 if (unlikely(nr_rx_empty(dev) <= 2)) rx_refill()
564 spin_lock_irqsave(&dev->rx_info.lock, flags); rx_refill()
576 spin_lock_irqsave(&dev->rx_info.lock, flags); rx_refill()
577 res = ns83820_add_rx_skb(dev, skb); rx_refill()
579 spin_unlock_irqrestore(&dev->rx_info.lock, flags); rx_refill()
586 spin_unlock_irqrestore(&dev->rx_info.lock, flags); rx_refill()
599 struct ns83820 *dev = container_of(work, struct ns83820, tq_refill); queue_refill() local
600 struct net_device *ndev = dev->ndev; queue_refill()
603 if (dev->rx_info.up) queue_refill()
607 static inline void clear_rx_desc(struct ns83820 *dev, unsigned i) clear_rx_desc() argument
609 build_rx_desc(dev, dev->rx_info.descs + (DESC_SIZE * i), 0, 0, CMDSTS_OWN, 0); clear_rx_desc()
614 struct ns83820 *dev = PRIV(ndev); phy_intr() local
620 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY; phy_intr()
622 if (dev->CFG_cache & CFG_TBI_EN) { phy_intr()
624 tbisr = readl(dev->base + TBISR); phy_intr()
625 tanar = readl(dev->base + TANAR); phy_intr()
626 tanlpar = readl(dev->base + TANLPAR); phy_intr()
634 writel(readl(dev->base + TXCFG) phy_intr()
636 dev->base + TXCFG); phy_intr()
637 writel(readl(dev->base + RXCFG) | RXCFG_RX_FD, phy_intr()
638 dev->base + RXCFG); phy_intr()
640 writel(readl(dev->base + GPIOR) | GPIOR_GP1_OUT, phy_intr()
641 dev->base + GPIOR); phy_intr()
651 writel((readl(dev->base + TXCFG) phy_intr()
653 dev->base + TXCFG); phy_intr()
654 writel(readl(dev->base + RXCFG) & ~RXCFG_RX_FD, phy_intr()
655 dev->base + RXCFG); phy_intr()
657 writel(readl(dev->base + GPIOR) & ~GPIOR_GP1_OUT, phy_intr()
658 dev->base + GPIOR); phy_intr()
665 new_cfg = dev->CFG_cache & ~(CFG_SB | CFG_MODE_1000 | CFG_SPDSTS); phy_intr()
677 writel(readl(dev->base + TXCFG) phy_intr()
679 dev->base + TXCFG); phy_intr()
680 writel(readl(dev->base + RXCFG) | RXCFG_RX_FD, phy_intr()
681 dev->base + RXCFG); phy_intr()
683 writel(readl(dev->base + TXCFG) phy_intr()
685 dev->base + TXCFG); phy_intr()
686 writel(readl(dev->base + RXCFG) & ~(RXCFG_RX_FD), phy_intr()
687 dev->base + RXCFG); phy_intr()
691 ((new_cfg ^ dev->CFG_cache) != 0)) { phy_intr()
692 writel(new_cfg, dev->base + CFG); phy_intr()
693 dev->CFG_cache = new_cfg; phy_intr()
696 dev->CFG_cache &= ~CFG_SPDSTS; phy_intr()
697 dev->CFG_cache |= cfg & CFG_SPDSTS; phy_intr()
703 dev->linkstate != newlinkstate) { phy_intr()
711 dev->linkstate != newlinkstate) { phy_intr()
716 dev->linkstate = newlinkstate; phy_intr()
721 struct ns83820 *dev = PRIV(ndev); ns83820_setup_rx() local
727 dev->rx_info.idle = 1; ns83820_setup_rx()
728 dev->rx_info.next_rx = 0; ns83820_setup_rx()
729 dev->rx_info.next_rx_desc = dev->rx_info.descs; ns83820_setup_rx()
730 dev->rx_info.next_empty = 0; ns83820_setup_rx()
733 clear_rx_desc(dev, i); ns83820_setup_rx()
735 writel(0, dev->base + RXDP_HI); ns83820_setup_rx()
736 writel(dev->rx_info.phy_descs, dev->base + RXDP); ns83820_setup_rx()
742 spin_lock_irq(&dev->rx_info.lock); ns83820_setup_rx()
744 writel(0x0001, dev->base + CCSR); ns83820_setup_rx()
745 writel(0, dev->base + RFCR); ns83820_setup_rx()
746 writel(0x7fc00000, dev->base + RFCR); ns83820_setup_rx()
747 writel(0xffc00000, dev->base + RFCR); ns83820_setup_rx()
749 dev->rx_info.up = 1; ns83820_setup_rx()
754 spin_lock(&dev->misc_lock); ns83820_setup_rx()
755 dev->IMR_cache |= ISR_PHY; ns83820_setup_rx()
756 dev->IMR_cache |= ISR_RXRCMP; ns83820_setup_rx()
757 //dev->IMR_cache |= ISR_RXERR; ns83820_setup_rx()
758 //dev->IMR_cache |= ISR_RXOK; ns83820_setup_rx()
759 dev->IMR_cache |= ISR_RXORN; ns83820_setup_rx()
760 dev->IMR_cache |= ISR_RXSOVR; ns83820_setup_rx()
761 dev->IMR_cache |= ISR_RXDESC; ns83820_setup_rx()
762 dev->IMR_cache |= ISR_RXIDLE; ns83820_setup_rx()
763 dev->IMR_cache |= ISR_TXDESC; ns83820_setup_rx()
764 dev->IMR_cache |= ISR_TXIDLE; ns83820_setup_rx()
766 writel(dev->IMR_cache, dev->base + IMR); ns83820_setup_rx()
767 writel(1, dev->base + IER); ns83820_setup_rx()
768 spin_unlock(&dev->misc_lock); ns83820_setup_rx()
772 spin_unlock_irq(&dev->rx_info.lock); ns83820_setup_rx()
777 static void ns83820_cleanup_rx(struct ns83820 *dev) ns83820_cleanup_rx() argument
782 dprintk("ns83820_cleanup_rx(%p)\n", dev); ns83820_cleanup_rx()
785 spin_lock_irqsave(&dev->misc_lock, flags); ns83820_cleanup_rx()
786 dev->IMR_cache &= ~(ISR_RXOK | ISR_RXDESC | ISR_RXERR | ISR_RXEARLY | ISR_RXIDLE); ns83820_cleanup_rx()
787 writel(dev->IMR_cache, dev->base + IMR); ns83820_cleanup_rx()
788 spin_unlock_irqrestore(&dev->misc_lock, flags); ns83820_cleanup_rx()
791 dev->rx_info.up = 0; ns83820_cleanup_rx()
792 synchronize_irq(dev->pci_dev->irq); ns83820_cleanup_rx()
795 readl(dev->base + IMR); ns83820_cleanup_rx()
798 writel(0, dev->base + RXDP_HI); ns83820_cleanup_rx()
799 writel(0, dev->base + RXDP); ns83820_cleanup_rx()
802 struct sk_buff *skb = dev->rx_info.skbs[i]; ns83820_cleanup_rx()
803 dev->rx_info.skbs[i] = NULL; ns83820_cleanup_rx()
804 clear_rx_desc(dev, i); ns83820_cleanup_rx()
811 struct ns83820 *dev = PRIV(ndev); ns83820_rx_kick() local
812 /*if (nr_rx_empty(dev) >= NR_RX_DESC/4)*/ { ns83820_rx_kick()
813 if (dev->rx_info.up) { ns83820_rx_kick()
819 if (dev->rx_info.up && nr_rx_empty(dev) > NR_RX_DESC*3/4) ns83820_rx_kick()
820 schedule_work(&dev->tq_refill); ns83820_rx_kick()
823 if (dev->rx_info.idle) ns83820_rx_kick()
832 struct ns83820 *dev = PRIV(ndev); local
833 struct rx_info *info = &dev->rx_info;
843 readl(dev->base + RXDP),
844 (long)(dev->rx_info.phy_descs),
845 (int)dev->rx_info.next_rx,
846 (dev->rx_info.descs + (DESC_SIZE * dev->rx_info.next_rx)),
847 (int)dev->rx_info.next_empty,
848 (dev->rx_info.descs + (DESC_SIZE * dev->rx_info.next_empty))
873 clear_rx_desc(dev, next_rx);
875 pci_unmap_single(dev->pci_dev, bufptr,
943 struct ns83820 *dev = PRIV(ndev); rx_action() local
945 writel(ihr, dev->base + IHR); rx_action()
947 spin_lock_irq(&dev->misc_lock); rx_action()
948 dev->IMR_cache |= ISR_RXDESC; rx_action()
949 writel(dev->IMR_cache, dev->base + IMR); rx_action()
950 spin_unlock_irq(&dev->misc_lock); rx_action()
958 static inline void kick_tx(struct ns83820 *dev) kick_tx() argument
961 dev, dev->tx_idx, dev->tx_free_idx); kick_tx()
962 writel(CR_TXE, dev->base + CR); kick_tx()
970 struct ns83820 *dev = PRIV(ndev); do_tx_done() local
975 tx_done_idx = dev->tx_done_idx; do_tx_done()
976 desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); do_tx_done()
979 tx_done_idx, dev->tx_free_idx, le32_to_cpu(desc[DESC_CMDSTS])); do_tx_done()
980 while ((tx_done_idx != dev->tx_free_idx) && do_tx_done()
994 tx_done_idx, dev->tx_free_idx, cmdsts); do_tx_done()
995 skb = dev->tx_skbs[tx_done_idx]; do_tx_done()
996 dev->tx_skbs[tx_done_idx] = NULL; do_tx_done()
1002 pci_unmap_single(dev->pci_dev, do_tx_done()
1007 atomic_dec(&dev->nr_tx_skbs); do_tx_done()
1009 pci_unmap_page(dev->pci_dev, do_tx_done()
1015 dev->tx_done_idx = tx_done_idx; do_tx_done()
1018 desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); do_tx_done()
1024 if (netif_queue_stopped(ndev) && start_tx_okay(dev)) { do_tx_done()
1031 static void ns83820_cleanup_tx(struct ns83820 *dev) ns83820_cleanup_tx() argument
1036 struct sk_buff *skb = dev->tx_skbs[i]; ns83820_cleanup_tx()
1037 dev->tx_skbs[i] = NULL; ns83820_cleanup_tx()
1039 __le32 *desc = dev->tx_descs + (i * DESC_SIZE); ns83820_cleanup_tx()
1040 pci_unmap_single(dev->pci_dev, ns83820_cleanup_tx()
1045 atomic_dec(&dev->nr_tx_skbs); ns83820_cleanup_tx()
1049 memset(dev->tx_descs, 0, NR_TX_DESC * DESC_SIZE * 4); ns83820_cleanup_tx()
1061 struct ns83820 *dev = PRIV(ndev); ns83820_hard_start_xmit() local
1076 if (unlikely(dev->CFG_cache & CFG_LNKSTS)) { ns83820_hard_start_xmit()
1078 if (unlikely(dev->CFG_cache & CFG_LNKSTS)) ns83820_hard_start_xmit()
1083 last_idx = free_idx = dev->tx_free_idx; ns83820_hard_start_xmit()
1084 tx_done_idx = dev->tx_done_idx; ns83820_hard_start_xmit()
1092 if (dev->tx_done_idx != tx_done_idx) { ns83820_hard_start_xmit()
1100 if (free_idx == dev->tx_intr_idx) { ns83820_hard_start_xmit()
1102 dev->tx_intr_idx = (dev->tx_intr_idx + NR_TX_DESC/4) % NR_TX_DESC; ns83820_hard_start_xmit()
1138 buf = pci_map_single(dev->pci_dev, skb->data, len, PCI_DMA_TODEVICE); ns83820_hard_start_xmit()
1140 first_desc = dev->tx_descs + (free_idx * DESC_SIZE); ns83820_hard_start_xmit()
1143 volatile __le32 *desc = dev->tx_descs + (free_idx * DESC_SIZE); ns83820_hard_start_xmit()
1149 desc[DESC_LINK] = cpu_to_le32(dev->tx_phy_descs + (free_idx * DESC_SIZE * 4)); ns83820_hard_start_xmit()
1161 buf = skb_frag_dma_map(&dev->pci_dev->dev, frag, 0, ns83820_hard_start_xmit()
1172 spin_lock_irq(&dev->tx_lock); ns83820_hard_start_xmit()
1173 dev->tx_skbs[last_idx] = skb; ns83820_hard_start_xmit()
1175 dev->tx_free_idx = free_idx; ns83820_hard_start_xmit()
1176 atomic_inc(&dev->nr_tx_skbs); ns83820_hard_start_xmit()
1177 spin_unlock_irq(&dev->tx_lock); ns83820_hard_start_xmit()
1179 kick_tx(dev); ns83820_hard_start_xmit()
1182 if (stopped && (dev->tx_done_idx != tx_done_idx) && start_tx_okay(dev)) ns83820_hard_start_xmit()
1188 static void ns83820_update_stats(struct ns83820 *dev) ns83820_update_stats() argument
1190 struct net_device *ndev = dev->ndev; ns83820_update_stats()
1191 u8 __iomem *base = dev->base; ns83820_update_stats()
1209 struct ns83820 *dev = PRIV(ndev); ns83820_get_stats() local
1212 spin_lock_irq(&dev->misc_lock); ns83820_get_stats()
1213 ns83820_update_stats(dev); ns83820_get_stats()
1214 spin_unlock_irq(&dev->misc_lock); ns83820_get_stats()
1223 struct ns83820 *dev = PRIV(ndev); ns83820_get_settings() local
1241 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY; ns83820_get_settings()
1242 tanar = readl(dev->base + TANAR); ns83820_get_settings()
1243 tbicr = readl(dev->base + TBICR); ns83820_get_settings()
1249 if (dev->CFG_cache & CFG_TBI_EN) { ns83820_get_settings()
1286 struct ns83820 *dev = PRIV(ndev); ns83820_set_settings() local
1292 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY; ns83820_set_settings()
1293 tanar = readl(dev->base + TANAR); ns83820_set_settings()
1295 if (dev->CFG_cache & CFG_TBI_EN) { ns83820_set_settings()
1305 spin_lock_irq(&dev->misc_lock); ns83820_set_settings()
1306 spin_lock(&dev->tx_lock); ns83820_set_settings()
1314 writel(readl(dev->base + TXCFG) ns83820_set_settings()
1316 dev->base + TXCFG); ns83820_set_settings()
1317 writel(readl(dev->base + RXCFG) | RXCFG_RX_FD, ns83820_set_settings()
1318 dev->base + RXCFG); ns83820_set_settings()
1320 writel(readl(dev->base + GPIOR) | GPIOR_GP1_OUT, ns83820_set_settings()
1321 dev->base + GPIOR); ns83820_set_settings()
1339 dev->base + TBICR); ns83820_set_settings()
1340 writel(TBICR_MR_AN_ENABLE, dev->base + TBICR); ns83820_set_settings()
1341 dev->linkstate = LINK_AUTONEGOTIATE; ns83820_set_settings()
1347 writel(0x00000000, dev->base + TBICR); ns83820_set_settings()
1355 spin_unlock(&dev->tx_lock); ns83820_set_settings()
1356 spin_unlock_irq(&dev->misc_lock); ns83820_set_settings()
1364 struct ns83820 *dev = PRIV(ndev); ns83820_get_drvinfo() local
1367 strlcpy(info->bus_info, pci_name(dev->pci_dev), sizeof(info->bus_info)); ns83820_get_drvinfo()
1372 struct ns83820 *dev = PRIV(ndev); ns83820_get_link() local
1373 u32 cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY; ns83820_get_link()
1384 static inline void ns83820_disable_interrupts(struct ns83820 *dev) ns83820_disable_interrupts() argument
1386 writel(0, dev->base + IMR); ns83820_disable_interrupts()
1387 writel(0, dev->base + IER); ns83820_disable_interrupts()
1388 readl(dev->base + IER); ns83820_disable_interrupts()
1392 static void ns83820_mib_isr(struct ns83820 *dev) ns83820_mib_isr() argument
1395 spin_lock_irqsave(&dev->misc_lock, flags); ns83820_mib_isr()
1396 ns83820_update_stats(dev); ns83820_mib_isr()
1397 spin_unlock_irqrestore(&dev->misc_lock, flags); ns83820_mib_isr()
1404 struct ns83820 *dev = PRIV(ndev); ns83820_irq() local
1408 dev->ihr = 0; ns83820_irq()
1410 isr = readl(dev->base + ISR); ns83820_irq()
1418 struct ns83820 *dev = PRIV(ndev); ns83820_do_isr() local
1427 dev->rx_info.idle = 1; ns83820_do_isr()
1433 prefetch(dev->rx_info.next_rx_desc); ns83820_do_isr()
1435 spin_lock_irqsave(&dev->misc_lock, flags); ns83820_do_isr()
1436 dev->IMR_cache &= ~(ISR_RXDESC | ISR_RXOK); ns83820_do_isr()
1437 writel(dev->IMR_cache, dev->base + IMR); ns83820_do_isr()
1438 spin_unlock_irqrestore(&dev->misc_lock, flags); ns83820_do_isr()
1440 tasklet_schedule(&dev->rx_tasklet); ns83820_do_isr()
1442 //writel(4, dev->base + IHR); ns83820_do_isr()
1458 if ((ISR_RXRCMP & isr) && dev->rx_info.up) ns83820_do_isr()
1459 writel(CR_RXE, dev->base + CR); ns83820_do_isr()
1463 txdp = readl(dev->base + TXDP); ns83820_do_isr()
1465 txdp -= dev->tx_phy_descs; ns83820_do_isr()
1466 dev->tx_idx = txdp / (DESC_SIZE * 4); ns83820_do_isr()
1467 if (dev->tx_idx >= NR_TX_DESC) { ns83820_do_isr()
1469 dev->tx_idx = 0; ns83820_do_isr()
1476 if (dev->tx_idx != dev->tx_free_idx) ns83820_do_isr()
1477 kick_tx(dev); ns83820_do_isr()
1484 spin_lock_irqsave(&dev->tx_lock, flags); ns83820_do_isr()
1486 spin_unlock_irqrestore(&dev->tx_lock, flags); ns83820_do_isr()
1490 if ((dev->tx_done_idx == dev->tx_free_idx) && ns83820_do_isr()
1491 (dev->IMR_cache & ISR_TXOK)) { ns83820_do_isr()
1492 spin_lock_irqsave(&dev->misc_lock, flags); ns83820_do_isr()
1493 dev->IMR_cache &= ~ISR_TXOK; ns83820_do_isr()
1494 writel(dev->IMR_cache, dev->base + IMR); ns83820_do_isr()
1495 spin_unlock_irqrestore(&dev->misc_lock, flags); ns83820_do_isr()
1505 if ((ISR_TXIDLE & isr) && (dev->tx_done_idx != dev->tx_free_idx)) { ns83820_do_isr()
1506 spin_lock_irqsave(&dev->misc_lock, flags); ns83820_do_isr()
1507 dev->IMR_cache |= ISR_TXOK; ns83820_do_isr()
1508 writel(dev->IMR_cache, dev->base + IMR); ns83820_do_isr()
1509 spin_unlock_irqrestore(&dev->misc_lock, flags); ns83820_do_isr()
1514 ns83820_mib_isr(dev); ns83820_do_isr()
1521 if (dev->ihr) ns83820_do_isr()
1522 writel(dev->ihr, dev->base + IHR); ns83820_do_isr()
1526 static void ns83820_do_reset(struct ns83820 *dev, u32 which) ns83820_do_reset() argument
1529 writel(which, dev->base + CR); ns83820_do_reset()
1532 } while (readl(dev->base + CR) & which); ns83820_do_reset()
1538 struct ns83820 *dev = PRIV(ndev); ns83820_stop() local
1541 del_timer_sync(&dev->tx_watchdog); ns83820_stop()
1543 ns83820_disable_interrupts(dev); ns83820_stop()
1545 dev->rx_info.up = 0; ns83820_stop()
1546 synchronize_irq(dev->pci_dev->irq); ns83820_stop()
1548 ns83820_do_reset(dev, CR_RST); ns83820_stop()
1550 synchronize_irq(dev->pci_dev->irq); ns83820_stop()
1552 spin_lock_irq(&dev->misc_lock); ns83820_stop()
1553 dev->IMR_cache &= ~(ISR_TXURN | ISR_TXIDLE | ISR_TXERR | ISR_TXDESC | ISR_TXOK); ns83820_stop()
1554 spin_unlock_irq(&dev->misc_lock); ns83820_stop()
1556 ns83820_cleanup_rx(dev); ns83820_stop()
1557 ns83820_cleanup_tx(dev); ns83820_stop()
1564 struct ns83820 *dev = PRIV(ndev); ns83820_tx_timeout() local
1569 spin_lock_irqsave(&dev->tx_lock, flags); ns83820_tx_timeout()
1571 tx_done_idx = dev->tx_done_idx; ns83820_tx_timeout()
1572 desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); ns83820_tx_timeout()
1576 tx_done_idx, dev->tx_free_idx, le32_to_cpu(desc[DESC_CMDSTS])); ns83820_tx_timeout()
1581 isr = readl(dev->base + ISR); ns83820_tx_timeout()
1582 printk("irq: %08x imr: %08x\n", isr, dev->IMR_cache); ns83820_tx_timeout()
1589 tx_done_idx = dev->tx_done_idx; ns83820_tx_timeout()
1590 desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); ns83820_tx_timeout()
1594 tx_done_idx, dev->tx_free_idx, le32_to_cpu(desc[DESC_CMDSTS])); ns83820_tx_timeout()
1596 spin_unlock_irqrestore(&dev->tx_lock, flags); ns83820_tx_timeout()
1602 struct ns83820 *dev = PRIV(ndev); ns83820_tx_watch() local
1606 dev->tx_done_idx, dev->tx_free_idx, atomic_read(&dev->nr_tx_skbs) ns83820_tx_watch()
1611 dev->tx_done_idx != dev->tx_free_idx) { ns83820_tx_watch()
1614 dev->tx_done_idx, dev->tx_free_idx, ns83820_tx_watch()
1615 atomic_read(&dev->nr_tx_skbs)); ns83820_tx_watch()
1619 mod_timer(&dev->tx_watchdog, jiffies + 2*HZ); ns83820_tx_watch()
1624 struct ns83820 *dev = PRIV(ndev); ns83820_open() local
1631 writel(0, dev->base + PQCR); ns83820_open()
1637 memset(dev->tx_descs, 0, 4 * NR_TX_DESC * DESC_SIZE); ns83820_open()
1639 dev->tx_descs[(i * DESC_SIZE) + DESC_LINK] ns83820_open()
1641 dev->tx_phy_descs ns83820_open()
1645 dev->tx_idx = 0; ns83820_open()
1646 dev->tx_done_idx = 0; ns83820_open()
1647 desc = dev->tx_phy_descs; ns83820_open()
1648 writel(0, dev->base + TXDP_HI); ns83820_open()
1649 writel(desc, dev->base + TXDP); ns83820_open()
1651 init_timer(&dev->tx_watchdog); ns83820_open()
1652 dev->tx_watchdog.data = (unsigned long)ndev; ns83820_open()
1653 dev->tx_watchdog.function = ns83820_tx_watch; ns83820_open()
1654 mod_timer(&dev->tx_watchdog, jiffies + 2*HZ); ns83820_open()
1665 static void ns83820_getmac(struct ns83820 *dev, u8 *mac) ns83820_getmac() argument
1674 writel(i*2, dev->base + RFCR); ns83820_getmac()
1675 data = readl(dev->base + RFDR); ns83820_getmac()
1692 struct ns83820 *dev = PRIV(ndev); ns83820_set_multicast() local
1693 u8 __iomem *rfcr = dev->base + RFCR; ns83820_set_multicast()
1708 spin_lock_irq(&dev->misc_lock); ns83820_set_multicast()
1713 spin_unlock_irq(&dev->misc_lock); ns83820_set_multicast()
1718 struct ns83820 *dev = PRIV(ndev); ns83820_run_bist() local
1728 writel(enable, dev->base + PTSCR); ns83820_run_bist()
1731 status = readl(dev->base + PTSCR); ns83820_run_bist()
1756 static void ns83820_mii_write_bit(struct ns83820 *dev, int bit) ns83820_mii_write_bit() argument
1759 dev->MEAR_cache &= ~MEAR_MDC; ns83820_mii_write_bit()
1760 writel(dev->MEAR_cache, dev->base + MEAR); ns83820_mii_write_bit()
1761 readl(dev->base + MEAR); ns83820_mii_write_bit()
1764 dev->MEAR_cache |= MEAR_MDDIR; ns83820_mii_write_bit()
1766 dev->MEAR_cache |= MEAR_MDIO; ns83820_mii_write_bit()
1768 dev->MEAR_cache &= ~MEAR_MDIO; ns83820_mii_write_bit()
1771 writel(dev->MEAR_cache, dev->base + MEAR); ns83820_mii_write_bit()
1772 readl(dev->base + MEAR); ns83820_mii_write_bit()
1778 dev->MEAR_cache |= MEAR_MDC; ns83820_mii_write_bit()
1779 writel(dev->MEAR_cache, dev->base + MEAR); ns83820_mii_write_bit()
1780 readl(dev->base + MEAR); ns83820_mii_write_bit()
1786 static int ns83820_mii_read_bit(struct ns83820 *dev) ns83820_mii_read_bit() argument
1791 dev->MEAR_cache &= ~MEAR_MDC; ns83820_mii_read_bit()
1792 dev->MEAR_cache &= ~MEAR_MDDIR; ns83820_mii_read_bit()
1793 writel(dev->MEAR_cache, dev->base + MEAR); ns83820_mii_read_bit()
1794 readl(dev->base + MEAR); ns83820_mii_read_bit()
1800 bit = (readl(dev->base + MEAR) & MEAR_MDIO) ? 1 : 0; ns83820_mii_read_bit()
1801 dev->MEAR_cache |= MEAR_MDC; ns83820_mii_read_bit()
1802 writel(dev->MEAR_cache, dev->base + MEAR); ns83820_mii_read_bit()
1810 static unsigned ns83820_mii_read_reg(struct ns83820 *dev, unsigned phy, unsigned reg) ns83820_mii_read_reg() argument
1817 ns83820_mii_read_bit(dev); ns83820_mii_read_reg()
1819 ns83820_mii_write_bit(dev, 0); /* start */ ns83820_mii_read_reg()
1820 ns83820_mii_write_bit(dev, 1); ns83820_mii_read_reg()
1821 ns83820_mii_write_bit(dev, 1); /* opcode read */ ns83820_mii_read_reg()
1822 ns83820_mii_write_bit(dev, 0); ns83820_mii_read_reg()
1826 ns83820_mii_write_bit(dev, phy & (0x10 >> i)); ns83820_mii_read_reg()
1830 ns83820_mii_write_bit(dev, reg & (0x10 >> i)); ns83820_mii_read_reg()
1832 ns83820_mii_read_bit(dev); /* turn around cycles */ ns83820_mii_read_reg()
1833 ns83820_mii_read_bit(dev); ns83820_mii_read_reg()
1838 data |= ns83820_mii_read_bit(dev); ns83820_mii_read_reg()
1844 static unsigned ns83820_mii_write_reg(struct ns83820 *dev, unsigned phy, unsigned reg, unsigned data) ns83820_mii_write_reg() argument
1850 ns83820_mii_read_bit(dev); ns83820_mii_write_reg()
1852 ns83820_mii_write_bit(dev, 0); /* start */ ns83820_mii_write_reg()
1853 ns83820_mii_write_bit(dev, 1); ns83820_mii_write_reg()
1854 ns83820_mii_write_bit(dev, 0); /* opcode read */ ns83820_mii_write_reg()
1855 ns83820_mii_write_bit(dev, 1); ns83820_mii_write_reg()
1859 ns83820_mii_write_bit(dev, phy & (0x10 >> i)); ns83820_mii_write_reg()
1863 ns83820_mii_write_bit(dev, reg & (0x10 >> i)); ns83820_mii_write_reg()
1865 ns83820_mii_read_bit(dev); /* turn around cycles */ ns83820_mii_write_reg()
1866 ns83820_mii_read_bit(dev); ns83820_mii_write_reg()
1870 ns83820_mii_write_bit(dev, (data >> (15 - i)) & 1); ns83820_mii_write_reg()
1877 struct ns83820 *dev = PRIV(ndev); ns83820_probe_phy() local
1886 ns83820_mii_read_reg(dev, 1, 0x09); ns83820_probe_phy()
1887 ns83820_mii_write_reg(dev, 1, 0x10, 0x0d3e); ns83820_probe_phy()
1889 tmp = ns83820_mii_read_reg(dev, 1, 0x00); ns83820_probe_phy()
1890 ns83820_mii_write_reg(dev, 1, 0x00, tmp | 0x8000); ns83820_probe_phy()
1892 ns83820_mii_read_reg(dev, 1, 0x09); ns83820_probe_phy()
1900 a = ns83820_mii_read_reg(dev, i, MII_PHYIDR1); ns83820_probe_phy()
1901 b = ns83820_mii_read_reg(dev, i, MII_PHYIDR2); ns83820_probe_phy()
1909 ns83820_mii_read_reg(dev, i, 0 + j), ns83820_probe_phy()
1910 ns83820_mii_read_reg(dev, i, 1 + j), ns83820_probe_phy()
1911 ns83820_mii_read_reg(dev, i, 2 + j), ns83820_probe_phy()
1912 ns83820_mii_read_reg(dev, i, 3 + j) ns83820_probe_phy()
1919 ns83820_mii_write_reg(dev, 1, 0x16, 0x000d); ns83820_probe_phy()
1920 ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e); ns83820_probe_phy()
1921 a = ns83820_mii_read_reg(dev, 1, 0x1d); ns83820_probe_phy()
1923 ns83820_mii_write_reg(dev, 1, 0x16, 0x000d); ns83820_probe_phy()
1924 ns83820_mii_write_reg(dev, 1, 0x1e, 0x810e); ns83820_probe_phy()
1925 b = ns83820_mii_read_reg(dev, 1, 0x1d); ns83820_probe_phy()
1947 struct ns83820 *dev; ns83820_init_one() local
1959 dev_warn(&pci_dev->dev, "pci_set_dma_mask failed!\n"); ns83820_init_one()
1968 dev = PRIV(ndev); ns83820_init_one()
1969 dev->ndev = ndev; ns83820_init_one()
1971 spin_lock_init(&dev->rx_info.lock); ns83820_init_one()
1972 spin_lock_init(&dev->tx_lock); ns83820_init_one()
1973 spin_lock_init(&dev->misc_lock); ns83820_init_one()
1974 dev->pci_dev = pci_dev; ns83820_init_one()
1976 SET_NETDEV_DEV(ndev, &pci_dev->dev); ns83820_init_one()
1978 INIT_WORK(&dev->tq_refill, queue_refill); ns83820_init_one()
1979 tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)ndev); ns83820_init_one()
1983 dev_info(&pci_dev->dev, "pci_enable_dev failed: %d\n", err); ns83820_init_one()
1989 dev->base = ioremap_nocache(addr, PAGE_SIZE); ns83820_init_one()
1990 dev->tx_descs = pci_alloc_consistent(pci_dev, ns83820_init_one()
1991 4 * DESC_SIZE * NR_TX_DESC, &dev->tx_phy_descs); ns83820_init_one()
1992 dev->rx_info.descs = pci_alloc_consistent(pci_dev, ns83820_init_one()
1993 4 * DESC_SIZE * NR_RX_DESC, &dev->rx_info.phy_descs); ns83820_init_one()
1995 if (!dev->base || !dev->tx_descs || !dev->rx_info.descs) ns83820_init_one()
1999 dev->tx_descs, (long)dev->tx_phy_descs, ns83820_init_one()
2000 dev->rx_info.descs, (long)dev->rx_info.phy_descs); ns83820_init_one()
2002 ns83820_disable_interrupts(dev); ns83820_init_one()
2004 dev->IMR_cache = 0; ns83820_init_one()
2009 dev_info(&pci_dev->dev, "unable to register irq %d, err %d\n", ns83820_init_one()
2016 * because some of the setup code uses dev->name. It's Wrong(tm) - ns83820_init_one()
2024 dev_info(&pci_dev->dev, "unable to get netdev name: %d\n", err); ns83820_init_one()
2029 ndev->name, le32_to_cpu(readl(dev->base + 0x22c)), ns83820_init_one()
2037 ns83820_do_reset(dev, CR_RST); ns83820_init_one()
2040 writel(PTSCR_RBIST_RST, dev->base + PTSCR); ns83820_init_one()
2048 dev->CFG_cache = readl(dev->base + CFG); ns83820_init_one()
2050 if ((dev->CFG_cache & CFG_PCI64_DET)) { ns83820_init_one()
2053 /*dev->CFG_cache |= CFG_DATA64_EN;*/ ns83820_init_one()
2054 if (!(dev->CFG_cache & CFG_DATA64_EN)) ns83820_init_one()
2058 dev->CFG_cache &= ~(CFG_DATA64_EN); ns83820_init_one()
2060 dev->CFG_cache &= (CFG_TBI_EN | CFG_MRM_DIS | CFG_MWI_DIS | ns83820_init_one()
2063 dev->CFG_cache |= CFG_PINT_DUPSTS | CFG_PINT_LNKSTS | CFG_PINT_SPDSTS | ns83820_init_one()
2065 dev->CFG_cache |= CFG_REQALG; ns83820_init_one()
2066 dev->CFG_cache |= CFG_POW; ns83820_init_one()
2067 dev->CFG_cache |= CFG_TMRTEST; ns83820_init_one()
2073 dev->CFG_cache |= CFG_M64ADDR; ns83820_init_one()
2075 dev->CFG_cache |= CFG_T64ADDR; ns83820_init_one()
2078 dev->CFG_cache &= ~CFG_BEM; ns83820_init_one()
2081 if (dev->CFG_cache & CFG_TBI_EN) { ns83820_init_one()
2084 writel(readl(dev->base + GPIOR) | 0x3e8, dev->base + GPIOR); ns83820_init_one()
2087 writel(readl(dev->base + TANAR) ns83820_init_one()
2089 dev->base + TANAR); ns83820_init_one()
2093 dev->base + TBICR); ns83820_init_one()
2094 writel(TBICR_MR_AN_ENABLE, dev->base + TBICR); ns83820_init_one()
2095 dev->linkstate = LINK_AUTONEGOTIATE; ns83820_init_one()
2097 dev->CFG_cache |= CFG_MODE_1000; ns83820_init_one()
2100 writel(dev->CFG_cache, dev->base + CFG); ns83820_init_one()
2101 dprintk("CFG: %08x\n", dev->CFG_cache); ns83820_init_one()
2105 writel(dev->CFG_cache | CFG_PHY_RST, dev->base + CFG); ns83820_init_one()
2107 writel(dev->CFG_cache, dev->base + CFG); ns83820_init_one()
2113 if (readl(dev->base + SRR)) ns83820_init_one()
2114 writel(readl(dev->base+0x20c) | 0xfe00, dev->base + 0x20c); ns83820_init_one()
2126 dev->base + TXCFG); ns83820_init_one()
2129 writel(0x000, dev->base + IHR); ns83820_init_one()
2130 writel(0x100, dev->base + IHR); ns83820_init_one()
2131 writel(0x000, dev->base + IHR); ns83820_init_one()
2142 | (RXCFG_MXDMA512) | 0, dev->base + RXCFG); ns83820_init_one()
2145 writel(0, dev->base + PQCR); ns83820_init_one()
2165 writel(VRCR_INIT_VALUE, dev->base + VRCR); ns83820_init_one()
2176 writel(VTCR_INIT_VALUE, dev->base + VTCR); ns83820_init_one()
2179 /* writel(0, dev->base + PCR); */ ns83820_init_one()
2182 dev->base + PCR); ns83820_init_one()
2185 writel(0, dev->base + WCSR); ns83820_init_one()
2187 ns83820_getmac(dev, ndev->dev_addr); ns83820_init_one()
2206 (unsigned)readl(dev->base + SRR) >> 8, ns83820_init_one()
2207 (unsigned)readl(dev->base + SRR) & 0xff, ns83820_init_one()
2226 ns83820_disable_interrupts(dev); /* paranoia */ ns83820_init_one()
2231 if (dev->base) ns83820_init_one()
2232 iounmap(dev->base); ns83820_init_one()
2233 pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_TX_DESC, dev->tx_descs, dev->tx_phy_descs); ns83820_init_one()
2234 pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_info.descs, dev->rx_info.phy_descs); ns83820_init_one()
2245 struct ns83820 *dev = PRIV(ndev); /* ok even if NULL */ ns83820_remove_one() local
2250 ns83820_disable_interrupts(dev); /* paranoia */ ns83820_remove_one()
2253 free_irq(dev->pci_dev->irq, ndev); ns83820_remove_one()
2254 iounmap(dev->base); ns83820_remove_one()
2255 pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_TX_DESC, ns83820_remove_one()
2256 dev->tx_descs, dev->tx_phy_descs); ns83820_remove_one()
2257 pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_RX_DESC, ns83820_remove_one()
2258 dev->rx_info.descs, dev->rx_info.phy_descs); ns83820_remove_one()
2259 pci_disable_device(dev->pci_dev); ns83820_remove_one()

Completed in 7275 milliseconds

1234567891011>>