Lines Matching refs:sd

187 	struct v4l2_subdev sd;  member
192 static inline struct ks0127 *to_ks0127(struct v4l2_subdev *sd) in to_ks0127() argument
194 return container_of(sd, struct ks0127, sd); in to_ks0127()
302 static u8 ks0127_read(struct v4l2_subdev *sd, u8 reg) in ks0127_read() argument
304 struct i2c_client *client = v4l2_get_subdevdata(sd); in ks0127_read()
323 v4l2_dbg(1, debug, sd, "read error\n"); in ks0127_read()
329 static void ks0127_write(struct v4l2_subdev *sd, u8 reg, u8 val) in ks0127_write() argument
331 struct i2c_client *client = v4l2_get_subdevdata(sd); in ks0127_write()
332 struct ks0127 *ks = to_ks0127(sd); in ks0127_write()
336 v4l2_dbg(1, debug, sd, "write error\n"); in ks0127_write()
343 static void ks0127_and_or(struct v4l2_subdev *sd, u8 reg, u8 and_v, u8 or_v) in ks0127_and_or() argument
345 struct ks0127 *ks = to_ks0127(sd); in ks0127_and_or()
349 ks0127_write(sd, reg, val); in ks0127_and_or()
357 static void ks0127_init(struct v4l2_subdev *sd) in ks0127_init() argument
362 v4l2_dbg(1, debug, sd, "reset\n"); in ks0127_init()
369 ks0127_write(sd, i, table[i]); in ks0127_init()
372 ks0127_write(sd, i, table[i]); in ks0127_init()
375 ks0127_write(sd, i, table[i]); in ks0127_init()
378 ks0127_write(sd, i, table[i]); in ks0127_init()
381 if ((ks0127_read(sd, KS_STAT) & 0x80) == 0) { in ks0127_init()
382 v4l2_dbg(1, debug, sd, "ks0122s found\n"); in ks0127_init()
386 switch (ks0127_read(sd, KS_CMDE) & 0x0f) { in ks0127_init()
388 v4l2_dbg(1, debug, sd, "ks0127 found\n"); in ks0127_init()
392 v4l2_dbg(1, debug, sd, "ks0127B Revision A found\n"); in ks0127_init()
396 v4l2_dbg(1, debug, sd, "unknown revision\n"); in ks0127_init()
401 static int ks0127_s_routing(struct v4l2_subdev *sd, in ks0127_s_routing() argument
404 struct ks0127 *ks = to_ks0127(sd); in ks0127_s_routing()
413 v4l2_dbg(1, debug, sd, in ks0127_s_routing()
416 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00); in ks0127_s_routing()
418 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00); in ks0127_s_routing()
420 ks0127_and_or(sd, KS_CMDB, 0xb0, input); in ks0127_s_routing()
422 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a); in ks0127_s_routing()
424 ks0127_and_or(sd, KS_CMDD, 0x03, 0x00); in ks0127_s_routing()
426 ks0127_and_or(sd, KS_CTRACK, 0xcf, 0x00); in ks0127_s_routing()
428 ks0127_and_or(sd, KS_LUMA, 0x00, in ks0127_s_routing()
431 ks0127_and_or(sd, KS_VERTIA, 0x08, 0x81); in ks0127_s_routing()
433 ks0127_and_or(sd, KS_VERTIC, 0x0f, 0x90); in ks0127_s_routing()
436 ks0127_and_or(sd, KS_CHROMB, 0x0f, 0x90); in ks0127_s_routing()
438 ks0127_write(sd, KS_UGAIN, reg_defaults[KS_UGAIN]); in ks0127_s_routing()
439 ks0127_write(sd, KS_VGAIN, reg_defaults[KS_VGAIN]); in ks0127_s_routing()
440 ks0127_write(sd, KS_UVOFFH, reg_defaults[KS_UVOFFH]); in ks0127_s_routing()
441 ks0127_write(sd, KS_UVOFFL, reg_defaults[KS_UVOFFL]); in ks0127_s_routing()
447 v4l2_dbg(1, debug, sd, in ks0127_s_routing()
450 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x00); in ks0127_s_routing()
452 ks0127_and_or(sd, KS_CMDA, ~0x40, 0x00); in ks0127_s_routing()
454 ks0127_and_or(sd, KS_CMDB, 0xb0, input); in ks0127_s_routing()
456 ks0127_and_or(sd, KS_CMDC, 0x70, 0x0a); in ks0127_s_routing()
458 ks0127_and_or(sd, KS_CMDD, 0x03, 0x00); in ks0127_s_routing()
460 ks0127_and_or(sd, KS_CTRACK, 0xcf, 0x00); in ks0127_s_routing()
461 ks0127_and_or(sd, KS_LUMA, 0x00, in ks0127_s_routing()
464 ks0127_and_or(sd, KS_VERTIA, 0x08, in ks0127_s_routing()
466 ks0127_and_or(sd, KS_VERTIC, 0x0f, in ks0127_s_routing()
469 ks0127_and_or(sd, KS_CHROMB, 0x0f, in ks0127_s_routing()
472 ks0127_write(sd, KS_UGAIN, reg_defaults[KS_UGAIN]); in ks0127_s_routing()
473 ks0127_write(sd, KS_VGAIN, reg_defaults[KS_VGAIN]); in ks0127_s_routing()
474 ks0127_write(sd, KS_UVOFFH, reg_defaults[KS_UVOFFH]); in ks0127_s_routing()
475 ks0127_write(sd, KS_UVOFFL, reg_defaults[KS_UVOFFL]); in ks0127_s_routing()
479 v4l2_dbg(1, debug, sd, "s_routing 15: YUV656\n"); in ks0127_s_routing()
482 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x03); in ks0127_s_routing()
485 ks0127_and_or(sd, KS_CMDA, 0xfc, 0x02); in ks0127_s_routing()
487 ks0127_and_or(sd, KS_CMDA, 0xff, 0x40); /* VSE=1 */ in ks0127_s_routing()
489 ks0127_and_or(sd, KS_CMDB, 0xb0, (input | 0x40)); in ks0127_s_routing()
492 ks0127_and_or(sd, KS_CMDC, 0x70, 0x87); in ks0127_s_routing()
494 ks0127_and_or(sd, KS_CMDD, 0x03, 0x08); in ks0127_s_routing()
496 ks0127_and_or(sd, KS_CTRACK, 0xcf, 0x30); in ks0127_s_routing()
498 ks0127_and_or(sd, KS_LUMA, 0x00, 0x71); in ks0127_s_routing()
499 ks0127_and_or(sd, KS_VERTIC, 0x0f, in ks0127_s_routing()
503 ks0127_and_or(sd, KS_VERTIA, 0x08, 0x81); in ks0127_s_routing()
505 ks0127_and_or(sd, KS_CHROMB, 0x0f, in ks0127_s_routing()
508 ks0127_and_or(sd, KS_CON, 0x00, 0x00); in ks0127_s_routing()
509 ks0127_and_or(sd, KS_BRT, 0x00, 32); /* spec: 34 */ in ks0127_s_routing()
511 ks0127_and_or(sd, KS_SAT, 0x00, 0xe8); in ks0127_s_routing()
512 ks0127_and_or(sd, KS_HUE, 0x00, 0); in ks0127_s_routing()
514 ks0127_and_or(sd, KS_UGAIN, 0x00, 238); in ks0127_s_routing()
515 ks0127_and_or(sd, KS_VGAIN, 0x00, 0x00); in ks0127_s_routing()
518 ks0127_and_or(sd, KS_UVOFFH, 0x00, 0x4f); in ks0127_s_routing()
519 ks0127_and_or(sd, KS_UVOFFL, 0x00, 0x00); in ks0127_s_routing()
523 v4l2_dbg(1, debug, sd, in ks0127_s_routing()
530 ks0127_write(sd, KS_DEMOD, reg_defaults[KS_DEMOD]); in ks0127_s_routing()
534 static int ks0127_s_std(struct v4l2_subdev *sd, v4l2_std_id std) in ks0127_s_std() argument
536 struct ks0127 *ks = to_ks0127(sd); in ks0127_s_std()
539 ks0127_and_or(sd, KS_DEMOD, 0xf0, 0x00); in ks0127_s_std()
543 v4l2_dbg(1, debug, sd, in ks0127_s_std()
545 ks0127_and_or(sd, KS_CHROMA, 0x9f, 0x20); in ks0127_s_std()
547 v4l2_dbg(1, debug, sd, in ks0127_s_std()
549 ks0127_and_or(sd, KS_CHROMA, 0x9f, 0x40); in ks0127_s_std()
551 v4l2_dbg(1, debug, sd, in ks0127_s_std()
553 ks0127_and_or(sd, KS_CHROMA, 0x9f, 0x20); in ks0127_s_std()
555 v4l2_dbg(1, debug, sd, in ks0127_s_std()
557 ks0127_and_or(sd, KS_CHROMA, 0x9f, 0x40); in ks0127_s_std()
559 v4l2_dbg(1, debug, sd, in ks0127_s_std()
563 ks0127_and_or(sd, KS_CHROMA, 0xdf, 0x20); in ks0127_s_std()
564 ks0127_and_or(sd, KS_DEMOD, 0xf0, 0x00); in ks0127_s_std()
568 if (!(ks0127_read(sd, KS_DEMOD) & 0x40)) in ks0127_s_std()
570 ks0127_and_or(sd, KS_DEMOD, 0xf0, 0x0f); in ks0127_s_std()
572 v4l2_dbg(1, debug, sd, "s_std: Unknown norm %llx\n", in ks0127_s_std()
578 static int ks0127_s_stream(struct v4l2_subdev *sd, int enable) in ks0127_s_stream() argument
580 v4l2_dbg(1, debug, sd, "s_stream(%d)\n", enable); in ks0127_s_stream()
583 ks0127_and_or(sd, KS_OFMTA, 0xcf, 0x30); in ks0127_s_stream()
585 ks0127_and_or(sd, KS_CDEM, 0x7f, 0x00); in ks0127_s_stream()
588 ks0127_and_or(sd, KS_OFMTA, 0xcf, 0x00); in ks0127_s_stream()
590 ks0127_and_or(sd, KS_CDEM, 0x7f, 0x80); in ks0127_s_stream()
595 static int ks0127_status(struct v4l2_subdev *sd, u32 *pstatus, v4l2_std_id *pstd) in ks0127_status() argument
601 status = ks0127_read(sd, KS_STAT); in ks0127_status()
624 static int ks0127_querystd(struct v4l2_subdev *sd, v4l2_std_id *std) in ks0127_querystd() argument
626 v4l2_dbg(1, debug, sd, "querystd\n"); in ks0127_querystd()
627 return ks0127_status(sd, NULL, std); in ks0127_querystd()
630 static int ks0127_g_input_status(struct v4l2_subdev *sd, u32 *status) in ks0127_g_input_status() argument
632 v4l2_dbg(1, debug, sd, "g_input_status\n"); in ks0127_g_input_status()
633 return ks0127_status(sd, status, NULL); in ks0127_g_input_status()
656 struct v4l2_subdev *sd; in ks0127_probe() local
665 sd = &ks->sd; in ks0127_probe()
666 v4l2_i2c_subdev_init(sd, client, &ks0127_ops); in ks0127_probe()
670 ks0127_write(sd, KS_CMDA, 0x2c); in ks0127_probe()
674 ks0127_init(sd); in ks0127_probe()
680 struct v4l2_subdev *sd = i2c_get_clientdata(client); in ks0127_remove() local
682 v4l2_device_unregister_subdev(sd); in ks0127_remove()
683 ks0127_write(sd, KS_OFMTA, 0x20); /* tristate */ in ks0127_remove()
684 ks0127_write(sd, KS_CMDA, 0x2c | 0x80); /* power down */ in ks0127_remove()