240 | | // Writes data to the TCO. No check is made as to whether a TCO |
---|
241 | | // is present in the current device. Return value is 0 on success |
---|
242 | | // or -1 on error. The first 4 quadlets of tco_data are significant; |
---|
243 | | // all others are ignored. If fewer than 4 quadlets are supplied (as |
---|
| 240 | // Writes data to the TCO. No check is made as to whether a TCO is |
---|
| 241 | // present in the current device. Return value is 0 on success or -1 on |
---|
| 242 | // error. "size" is the size (in quadlets) of the data pointed to by |
---|
| 243 | // "tco_data". The first 4 quadlets of tco_data are significant; all |
---|
| 244 | // others are ignored. If fewer than 4 quadlets are supplied (as |
---|
| 272 | if (tco_settings.MTC) |
---|
| 273 | tc[0] |= FF_TCO0_MTC; |
---|
| 274 | |
---|
| 275 | switch (tco_settings.input) { |
---|
| 276 | case FF_TCOPARAM_INPUT_LTC: |
---|
| 277 | tc[2] |= FF_TCO2_INPUT_LTC; break; |
---|
| 278 | case FF_TCOPARAM_INPUT_VIDEO: |
---|
| 279 | tc[2] |= FF_TCO2_INPUT_VIDEO; break; |
---|
| 280 | case FF_TCOPARAM_INPUT_WCK: |
---|
| 281 | tc[2] |= FF_TCO2_INPUT_WORD_CLOCK; break; |
---|
| 282 | } |
---|
| 283 | |
---|
| 284 | switch (tco_settings.frame_rate) { |
---|
| 285 | case FF_TCOPARAM_FRAMERATE_24fps: |
---|
| 286 | tc[1] |= FF_TC01_LTC_FORMAT_24fps; break; |
---|
| 287 | case FF_TCOPARAM_FRAMERATE_25fps: |
---|
| 288 | tc[1] |= FF_TCO1_LTC_FORMAT_25fps; break; |
---|
| 289 | case FF_TCOPARAM_FRAMERATE_29_97fps: |
---|
| 290 | tc[1] |= FF_TC01_LTC_FORMAT_29_97fps; break; |
---|
| 291 | case FF_TCOPARAM_FRAMERATE_29_97dfps: |
---|
| 292 | tc[1] |= FF_TCO1_LTC_FORMAT_29_97dpfs; break; |
---|
| 293 | case FF_TCOPARAM_FRAMERATE_30fps: |
---|
| 294 | tc[1] |= FF_TCO1_LTC_FORMAT_30fps; break; |
---|
| 295 | case FF_TCOPARAM_FRAMERATE_30dfps: |
---|
| 296 | tc[1] |= FF_TCO1_LTC_FORMAT_30dfps; break; |
---|
| 297 | } |
---|
| 298 | |
---|
| 299 | switch (tco_settings.word_clock) { |
---|
| 300 | case FF_TCOPARAM_WORD_CLOCK_CONV_1_1: |
---|
| 301 | tc[2] |= FF_TCO2_WORD_CLOCK_CONV_1_1; break; |
---|
| 302 | case FF_TCOPARAM_WORD_CLOCK_CONV_44_48: |
---|
| 303 | tc[2] |= FF_TCO2_WORD_CLOCK_CONV_44_48; break; |
---|
| 304 | case FF_TCOPARAM_WORD_CLOCK_CONV_48_44: |
---|
| 305 | tc[2] |= FF_TCO2_WORD_CLOCK_CONV_48_44; break; |
---|
| 306 | } |
---|
| 307 | |
---|
| 308 | switch (tco_settings.sample_rate) { |
---|
| 309 | case FF_TCOPARAM_SRATE_44_1: |
---|
| 310 | tc[2] |= FF_TCO2_SRATE_44_1; break; |
---|
| 311 | case FF_TCOPARAM_SRATE_48: |
---|
| 312 | tc[2] |= FF_TCO2_SRATE_48; break; |
---|
| 313 | case FF_TCOPARAM_SRATE_FROM_APP: |
---|
| 314 | tc[2] |= FF_TCO2_SRATE_FROM_APP; break; |
---|
| 315 | } |
---|
| 316 | |
---|
| 317 | switch (tco_settings.pull) { |
---|
| 318 | case FF_TCPPARAM_PULL_NONE: |
---|
| 319 | tc[2] |= FF_TCO2_PULL_0; break; |
---|
| 320 | case FF_TCOPARAM_PULL_UP_01: |
---|
| 321 | tc[2] |= FF_TCO2_PULL_UP_01; break; |
---|
| 322 | case FF_TCOPARAM_PULL_DOWN_01: |
---|
| 323 | tc[2] |= FF_TCO2_PULL_DOWN_01; break; |
---|
| 324 | case FF_TCOPARAM_PULL_UP_40: |
---|
| 325 | tc[2] |= FF_TCO2_PULL_UP_40; break; |
---|
| 326 | case FF_TCOPARAM_PULL_DOWN_40: |
---|
| 327 | tc[2] |= FF_TCO2_PULL_DOWN_40; break; |
---|
| 328 | } |
---|
| 329 | |
---|
| 330 | if (tco_settings.termination == FF_TCOPARAM_TERMINATION_ON) |
---|
| 331 | tc[2] |= FF_TCO2_SET_TERMINATION; |
---|
| 332 | |
---|
| 333 | return write_tco(tc, 4); |
---|
| 334 | |
---|