• Home
  • Raw
  • Download

Lines Matching +full:1 +full:d

45 static int anysee_ctrl_msg(struct dvb_usb_device *d,  in anysee_ctrl_msg()  argument
48 struct anysee_state *state = d_to_priv(d); in anysee_ctrl_msg()
51 mutex_lock(&d->usb_mutex); in anysee_ctrl_msg()
56 dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, slen, state->buf); in anysee_ctrl_msg()
59 to weird transaction flow, which is 1 x send + 2 x receive. */ in anysee_ctrl_msg()
60 ret = dvb_usbv2_generic_rw_locked(d, state->buf, sizeof(state->buf), in anysee_ctrl_msg()
72 * 1) use repeat if possible in anysee_ctrl_msg()
79 ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, in anysee_ctrl_msg()
80 d->props->generic_bulk_ctrl_endpoint), in anysee_ctrl_msg()
83 dev_dbg(&d->udev->dev, in anysee_ctrl_msg()
84 "%s: recv bulk message failed=%d\n", in anysee_ctrl_msg()
87 dev_dbg(&d->udev->dev, "%s: <<< %*ph\n", __func__, in anysee_ctrl_msg()
91 dev_dbg(&d->udev->dev, in anysee_ctrl_msg()
99 dev_err(&d->udev->dev, "%s: recv bulk message failed=%d\n", in anysee_ctrl_msg()
109 mutex_unlock(&d->usb_mutex); in anysee_ctrl_msg()
113 static int anysee_read_reg(struct dvb_usb_device *d, u16 reg, u8 *val) in anysee_read_reg() argument
117 ret = anysee_ctrl_msg(d, buf, sizeof(buf), val, 1); in anysee_read_reg()
118 dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, *val); in anysee_read_reg()
122 static int anysee_write_reg(struct dvb_usb_device *d, u16 reg, u8 val) in anysee_write_reg() argument
125 dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, val); in anysee_write_reg()
126 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); in anysee_write_reg()
130 static int anysee_wr_reg_mask(struct dvb_usb_device *d, u16 reg, u8 val, in anysee_wr_reg_mask() argument
138 ret = anysee_read_reg(d, reg, &tmp); in anysee_wr_reg_mask()
147 return anysee_write_reg(d, reg, val); in anysee_wr_reg_mask()
151 static int anysee_rd_reg_mask(struct dvb_usb_device *d, u16 reg, u8 *val, in anysee_rd_reg_mask() argument
157 ret = anysee_read_reg(d, reg, &tmp); in anysee_rd_reg_mask()
173 static int anysee_get_hw_info(struct dvb_usb_device *d, u8 *id) in anysee_get_hw_info() argument
176 return anysee_ctrl_msg(d, buf, sizeof(buf), id, 3); in anysee_get_hw_info()
182 dev_dbg(&fe_to_d(fe)->udev->dev, "%s: onoff=%d\n", __func__, onoff); in anysee_streaming_ctrl()
186 static int anysee_led_ctrl(struct dvb_usb_device *d, u8 mode, u8 interval) in anysee_led_ctrl() argument
189 dev_dbg(&d->udev->dev, "%s: state=%d interval=%d\n", __func__, in anysee_led_ctrl()
191 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); in anysee_led_ctrl()
194 static int anysee_ir_ctrl(struct dvb_usb_device *d, u8 onoff) in anysee_ir_ctrl() argument
197 dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff); in anysee_ir_ctrl()
198 return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); in anysee_ir_ctrl()
205 struct dvb_usb_device *d = i2c_get_adapdata(adap); in anysee_master_xfer() local
209 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in anysee_master_xfer()
213 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) { in anysee_master_xfer()
214 if (msg[i].len > 2 || msg[i+1].len > 60) { in anysee_master_xfer()
219 buf[1] = (msg[i].addr << 1) | 0x01; in anysee_master_xfer()
221 buf[3] = msg[i].buf[1]; in anysee_master_xfer()
222 buf[4] = msg[i].len-1; in anysee_master_xfer()
223 buf[5] = msg[i+1].len; in anysee_master_xfer()
224 ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf, in anysee_master_xfer()
225 msg[i+1].len); in anysee_master_xfer()
233 buf[1] = (msg[i].addr << 1); in anysee_master_xfer()
237 ret = anysee_ctrl_msg(d, buf, 4 + msg[i].len, NULL, 0); in anysee_master_xfer()
238 inc = 1; in anysee_master_xfer()
246 mutex_unlock(&d->i2c_mutex); in anysee_master_xfer()
284 .demod_address = (0x1a >> 1),
289 .pll_n = 1,
295 .demod_address = (0x1e >> 1),
300 .demod_address = (0x1e >> 1),
301 .parallel_ts = 1,
305 .demod_address = (0x1e >> 1),
306 .parallel_ts = 1,
307 .disable_i2c_gate_ctrl = 1,
308 .no_tuner = 1,
313 .demod_address = (0x18 >> 1),
314 .parallel_ts = 1,
315 .disable_i2c_gate_ctrl = 1,
316 .no_tuner = 1,
321 .demod_address = (0x1a >> 1),
325 .pll_n = 1,
348 .demod_address = (0xaa >> 1),
354 .demod_address = (0xd0 >> 1),
360 .tun1_adc = 1, /* 1 Vpp */
365 .i2c_address = (0xc0 >> 1),
367 .clk_div = 1,
373 .mod_extern = 1,
374 .addr = (0x10 >> 1),
378 .i2c_address = 0x6d, /* (0xda >> 1) */
383 * New USB device strings: Mfr=1, Product=2, SerialNumber=0
397 * PCB: 507CD (rev1.1)
401 * IOD[0] ZL10353 1=enabled
410 * IOD[0] TDA10023 1=enabled
413 * PCB: 507SI (rev2.1)
416 * IOA=4d IOB=ff IOC=00 IOD=26 IOE=01
417 * IOD[0] CX24116 1=enabled
419 * E30 C Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
423 * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0
424 * IOD[5] TDA10023 1=enabled
425 * IOE[0] tuner 1=enabled
427 * E30 Combo Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
428 * PCB: 507FA (rev1.1)
431 * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0
433 * IOD[5] TDA10023 1=enabled
434 * IOE[0] tuner 1=enabled
436 * IOD[0] ZL10353 1=enabled
441 * E7 TC VID=1c73 PID=861f HW=18 FW=0.7 AMTCI=0.5 "anysee-E7TC(LP)"
445 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
446 * IOA[7] TS 1=enabled
447 * IOE[4] TDA18212 1=enabled
450 * IOD[5] TDA10023 1=enabled
451 * IOE[0] IF 1=enabled
454 * IOD[6] ZL10353 1=enabled
457 * E7 S2 VID=1c73 PID=861f HW=19 FW=0.4 AMTCI=0.5 "anysee-E7S2(LP)"
461 * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4
462 * IOA[7] TS 1=enabled
463 * IOE[5] STV0903 1=enabled
465 * E7 T2C VID=1c73 PID=861f HW=20 FW=0.1 AMTCI=0.5 "anysee-E7T2C(LP)"
469 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
470 * IOA[7] TS 1=enabled
471 * IOE[5] CXD2820R 1=enabled
473 * E7 PTC VID=1c73 PID=861f HW=21 FW=0.1 AMTCI=?? "anysee-E7PTC(LP)"
477 * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
478 * IOA[7] TS 1=enabled
479 * IOE[4] TDA18212 1=enabled
482 * IOD[5] TDA10023 1=enabled
483 * IOE[0] IF 1=enabled
486 * IOD[6] ZL10353 1=enabled
489 * E7 PS2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
493 * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4
494 * IOA[7] TS 1=enabled
495 * IOE[5] STV0903 1=enabled
498 static int anysee_read_config(struct dvb_usb_device *d) in anysee_read_config() argument
500 struct anysee_state *state = d_to_priv(d); in anysee_read_config()
508 ret = anysee_get_hw_info(d, hw_info); in anysee_read_config()
512 ret = anysee_get_hw_info(d, hw_info); in anysee_read_config()
519 dev_info(&d->udev->dev, "%s: firmware version %d.%d hardware id %d\n", in anysee_read_config()
520 KBUILD_MODNAME, hw_info[1], hw_info[2], hw_info[0]); in anysee_read_config()
537 struct dvb_usb_device *d = fe_to_d(fe); in anysee_frontend_ctrl() local
539 dev_dbg(&d->udev->dev, "%s: fe=%d onoff=%d\n", __func__, fe->id, onoff); in anysee_frontend_ctrl()
552 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01); in anysee_frontend_ctrl()
557 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); in anysee_frontend_ctrl()
562 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01); in anysee_frontend_ctrl()
567 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); in anysee_frontend_ctrl()
572 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); in anysee_frontend_ctrl()
577 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01); in anysee_frontend_ctrl()
590 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40); in anysee_frontend_ctrl()
595 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); in anysee_frontend_ctrl()
600 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01); in anysee_frontend_ctrl()
605 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); in anysee_frontend_ctrl()
610 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40); in anysee_frontend_ctrl()
615 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01); in anysee_frontend_ctrl()
629 static int anysee_add_i2c_dev(struct dvb_usb_device *d, const char *type, in anysee_add_i2c_dev() argument
633 struct anysee_state *state = d_to_priv(d); in anysee_add_i2c_dev()
635 struct i2c_adapter *adapter = &d->i2c_adap; in anysee_add_i2c_dev()
649 dev_dbg(&d->udev->dev, "%s: num=%d\n", __func__, num); in anysee_add_i2c_dev()
652 dev_err(&d->udev->dev, "%s: I2C client out of index\n", in anysee_add_i2c_dev()
677 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret); in anysee_add_i2c_dev()
681 static void anysee_del_i2c_dev(struct dvb_usb_device *d) in anysee_del_i2c_dev() argument
684 struct anysee_state *state = d_to_priv(d); in anysee_del_i2c_dev()
694 dev_dbg(&d->udev->dev, "%s: num=%d\n", __func__, num); in anysee_del_i2c_dev()
696 if (num == -1) { in anysee_del_i2c_dev()
697 dev_err(&d->udev->dev, "%s: I2C client out of index\n", in anysee_del_i2c_dev()
712 dev_dbg(&d->udev->dev, "%s: failed\n", __func__); in anysee_del_i2c_dev()
718 struct dvb_usb_device *d = adap_to_d(adap); in anysee_frontend_attach() local
725 .len = 1, in anysee_frontend_attach()
730 .len = 1, in anysee_frontend_attach()
741 &d->i2c_adap); in anysee_frontend_attach()
747 &d->i2c_adap); in anysee_frontend_attach()
754 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); in anysee_frontend_attach()
759 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); in anysee_frontend_attach()
765 &d->i2c_adap); in anysee_frontend_attach()
772 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); in anysee_frontend_attach()
778 &anysee_tda10023_config, &d->i2c_adap, 0x48); in anysee_frontend_attach()
785 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); in anysee_frontend_attach()
791 &d->i2c_adap); in anysee_frontend_attach()
799 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 4), 0x10); in anysee_frontend_attach()
805 ret = i2c_transfer(&d->i2c_adap, msg, 2); in anysee_frontend_attach()
807 dev_dbg(&d->udev->dev, "%s: TDA18212 found\n", in anysee_frontend_attach()
815 ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 4), 0x10); in anysee_frontend_attach()
820 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01); in anysee_frontend_attach()
825 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); in anysee_frontend_attach()
834 &d->i2c_adap, 0x48); in anysee_frontend_attach()
844 &d->i2c_adap, 0x48); in anysee_frontend_attach()
852 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); in anysee_frontend_attach()
857 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01); in anysee_frontend_attach()
864 adap->fe[1] = dvb_attach(zl10353_attach, in anysee_frontend_attach()
866 &d->i2c_adap); in anysee_frontend_attach()
869 if (adap->fe[1]) in anysee_frontend_attach()
870 adap->fe[1]->ops.i2c_gate_ctrl = in anysee_frontend_attach()
874 adap->fe[1] = dvb_attach(zl10353_attach, in anysee_frontend_attach()
876 &d->i2c_adap); in anysee_frontend_attach()
886 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40); in anysee_frontend_attach()
891 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20); in anysee_frontend_attach()
898 &d->i2c_adap, 0x48); in anysee_frontend_attach()
909 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20); in anysee_frontend_attach()
914 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40); in anysee_frontend_attach()
919 adap->fe[1] = dvb_attach(zl10353_attach, in anysee_frontend_attach()
921 &d->i2c_adap); in anysee_frontend_attach()
924 if (adap->fe[1]) in anysee_frontend_attach()
925 adap->fe[1]->ops.i2c_gate_ctrl = anysee_i2c_gate_ctrl; in anysee_frontend_attach()
936 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20); in anysee_frontend_attach()
942 &anysee_stv0900_config, &d->i2c_adap, 0); in anysee_frontend_attach()
951 ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20); in anysee_frontend_attach()
957 &anysee_cxd2820r_config, &d->i2c_adap, NULL); in anysee_frontend_attach()
967 dev_err(&d->udev->dev, in anysee_frontend_attach()
978 struct dvb_usb_device *d = adap_to_d(adap); in anysee_tuner_attach() local
981 dev_dbg(&d->udev->dev, "%s:\n", __func__); in anysee_tuner_attach()
988 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1), NULL, in anysee_tuner_attach()
996 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1), in anysee_tuner_attach()
997 &d->i2c_adap, DVB_PLL_THOMSON_DTT7579); in anysee_tuner_attach()
1004 fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1), in anysee_tuner_attach()
1005 &d->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A); in anysee_tuner_attach()
1012 fe = dvb_attach(isl6423_attach, adap->fe[0], &d->i2c_adap, in anysee_tuner_attach()
1029 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, in anysee_tuner_attach()
1035 if (adap->fe[1]) { in anysee_tuner_attach()
1036 adap->fe[1]->tuner_priv = in anysee_tuner_attach()
1038 memcpy(&adap->fe[1]->ops.tuner_ops, in anysee_tuner_attach()
1047 (0xc0 >> 1), &d->i2c_adap, in anysee_tuner_attach()
1050 if (fe && adap->fe[1]) { in anysee_tuner_attach()
1052 fe = dvb_attach(dvb_pll_attach, adap->fe[1], in anysee_tuner_attach()
1053 (0xc0 >> 1), &d->i2c_adap, in anysee_tuner_attach()
1067 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, &tda18212_config); in anysee_tuner_attach()
1072 if (adap->fe[1]) { in anysee_tuner_attach()
1073 adap->fe[1]->tuner_priv = adap->fe[0]->tuner_priv; in anysee_tuner_attach()
1074 memcpy(&adap->fe[1]->ops.tuner_ops, in anysee_tuner_attach()
1088 &anysee_stv6110_config, &d->i2c_adap); in anysee_tuner_attach()
1093 &d->i2c_adap, &anysee_isl6423_config); in anysee_tuner_attach()
1105 ret = anysee_add_i2c_dev(d, "tda18212", 0x60, &tda18212_config); in anysee_tuner_attach()
1124 static int anysee_rc_query(struct dvb_usb_device *d) in anysee_rc_query() argument
1138 ret = anysee_ctrl_msg(d, buf, sizeof(buf), ircode, sizeof(ircode)); in anysee_rc_query()
1143 dev_dbg(&d->udev->dev, "%s: key pressed %02x\n", __func__, in anysee_rc_query()
1144 ircode[1]); in anysee_rc_query()
1145 rc_keydown(d->rc_dev, RC_PROTO_NEC, in anysee_rc_query()
1146 RC_SCANCODE_NEC(0x08, ircode[1]), 0); in anysee_rc_query()
1152 static int anysee_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc) in anysee_get_rc_config() argument
1167 struct dvb_usb_device *d = ci->data; in anysee_ci_read_attribute_mem() local
1169 u8 buf[] = {CMD_CI, 0x02, 0x40 | addr >> 8, addr & 0xff, 0x00, 1}; in anysee_ci_read_attribute_mem()
1172 ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1); in anysee_ci_read_attribute_mem()
1182 struct dvb_usb_device *d = ci->data; in anysee_ci_write_attribute_mem() local
1184 u8 buf[] = {CMD_CI, 0x03, 0x40 | addr >> 8, addr & 0xff, 0x00, 1, val}; in anysee_ci_write_attribute_mem()
1186 ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); in anysee_ci_write_attribute_mem()
1196 struct dvb_usb_device *d = ci->data; in anysee_ci_read_cam_control() local
1198 u8 buf[] = {CMD_CI, 0x04, 0x40, addr, 0x00, 1}; in anysee_ci_read_cam_control()
1201 ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1); in anysee_ci_read_cam_control()
1211 struct dvb_usb_device *d = ci->data; in anysee_ci_write_cam_control() local
1213 u8 buf[] = {CMD_CI, 0x05, 0x40, addr, 0x00, 1, val}; in anysee_ci_write_cam_control()
1215 ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0); in anysee_ci_write_cam_control()
1224 struct dvb_usb_device *d = ci->data; in anysee_ci_slot_reset() local
1226 struct anysee_state *state = d_to_priv(d); in anysee_ci_slot_reset()
1230 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); in anysee_ci_slot_reset()
1236 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); in anysee_ci_slot_reset()
1245 struct dvb_usb_device *d = ci->data; in anysee_ci_slot_shutdown() local
1248 ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80); in anysee_ci_slot_shutdown()
1254 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); in anysee_ci_slot_shutdown()
1263 struct dvb_usb_device *d = ci->data; in anysee_ci_slot_ts_enable() local
1266 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 1), 0x02); in anysee_ci_slot_ts_enable()
1276 struct dvb_usb_device *d = ci->data; in anysee_ci_poll_slot_status() local
1277 struct anysee_state *state = d_to_priv(d); in anysee_ci_poll_slot_status()
1281 ret = anysee_rd_reg_mask(d, REG_IOC, &tmp, 0x40); in anysee_ci_poll_slot_status()
1294 static int anysee_ci_init(struct dvb_usb_device *d) in anysee_ci_init() argument
1296 struct anysee_state *state = d_to_priv(d); in anysee_ci_init()
1308 state->ci.data = d; in anysee_ci_init()
1310 ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80); in anysee_ci_init()
1314 ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 2)|(0 << 1)|(0 << 0), 0x07); in anysee_ci_init()
1318 ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 2)|(1 << 1)|(1 << 0), 0x07); in anysee_ci_init()
1322 ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1); in anysee_ci_init()
1331 static void anysee_ci_release(struct dvb_usb_device *d) in anysee_ci_release() argument
1333 struct anysee_state *state = d_to_priv(d); in anysee_ci_release()
1342 static int anysee_init(struct dvb_usb_device *d) in anysee_init() argument
1344 struct anysee_state *state = d_to_priv(d); in anysee_init()
1349 Alternate setting 1 is for isochronous transfer. in anysee_init()
1351 ret = usb_set_interface(d->udev, 0, 0); in anysee_init()
1356 ret = anysee_led_ctrl(d, 0x01, 0x03); in anysee_init()
1361 ret = anysee_ir_ctrl(d, 1); in anysee_init()
1367 ret = anysee_ci_init(d); in anysee_init()
1375 static void anysee_exit(struct dvb_usb_device *d) in anysee_exit() argument
1377 struct anysee_state *state = d_to_priv(d); in anysee_exit()
1380 anysee_del_i2c_dev(d); in anysee_exit()
1382 return anysee_ci_release(d); in anysee_exit()
1405 .num_adapters = 1,
1430 .no_dynamic_id = 1,
1431 .soft_unbind = 1,