Cameron,
Andrea Arcangeli suggested the original patch, which Dag's then cleaned up with his patch that was submitted and accepted by Linus. Since the patch went in, I've used IrDA successfully with my Ericsson R520m. However, I've just tried using an Ericsson T39 with a 2.4.12 based kernel and found that it doesn't work -- the very similar R520 works fine. The T39 is correctly discovered: > cat /proc/net/irda/discovery IrLMP: Discovery log: nickname: T39, hint: 0x9124, saddr: 0xa9cc55f3, daddr: 0x34e89d79 However, if "dip" is used to set up an ircomm connection, there's no character echo from the phone, and the phone doesn't respond to commands. The phone also disappears from /proc/net/irda/discovery Furthermore, "dip" can't be exited cleanly -- a kill -9 is required. The symptoms are identical to the flow control problems that were the original problem with the R520. I've appended the output of dmesg with irda debug enabled. I'd appreciate any suggestions as to where to look to track this down. Andrea developed and tested his patch on a T39, so I wander whether Dag's patch was not quite correct, and works with the R520 but not the T39. I wander if Andrea has had any luck with Dag's patch on his T39? It might be that our T39's have newer firmware versions and hence behave differently to Anrea's T39 and my R520. Thanks, Ian ---- nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=2, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_recv_discovery_xid_rsp() irlap_recv_discovery_xid_rsp(), daddr=34e89d79 EXTENSION irlap_do_event(), event = RECV_DISCOVERY_XID_RSP, state = LAP_QUERY irlap_state_query(), daddr=34e89d79 hashbin_insert_R0bbf1ddb() enqueue_first() irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=3, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=4, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=5, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=255, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size -1 ; 32 sent of 40 next LAP state = LAP_NDM irda_device_set_media_busy_R7238750c(FALSE) irlmp_link_discovery_confirm() irlmp_add_discovery_log() hashbin_remove_R1938d18d() dequeue_general() hashbin_remove_this_R557000a7() dequeue_general() hashbin_insert_R0bbf1ddb() enqueue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() irlmp_discovery_confirm() irlmp_notify_client() nsc_ircc_pio_write() nsc_ircc_pio_write(), warning, FIFO not empty yet! nsc_ircc_pio_write(), fifo_size 6 ; 8 sent of 8 irlmp_discovery_timer_expired() irlmp_expire_discoveries() irlmp_do_lap_event(), EVENT = LM_LAP_DISCOVERY_REQUEST, STATE = LAP_STANDBY irlmp_state_standby() irlap_discovery_request(), nslots = 6 irlap_do_event(), event = DISCOVERY_REQUEST, state = LAP_NDM irlap_send_discovery_xid_frame(), s=0, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=1, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=2, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=3, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=4, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_recv_discovery_xid_rsp() irlap_recv_discovery_xid_rsp(), daddr=34e89d79 EXTENSION irlap_do_event(), event = RECV_DISCOVERY_XID_RSP, state = LAP_QUERY irlap_state_query(), daddr=34e89d79 hashbin_insert_R0bbf1ddb() enqueue_first() irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=5, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size 1 ; 30 sent of 30 next LAP state = LAP_QUERY irlap_do_event(), event = SLOT_TIMER_EXPIRED, state = LAP_QUERY irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) irlap_send_discovery_xid_frame(), s=255, S=6, command=1 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size -1 ; 32 sent of 40 next LAP state = LAP_NDM irda_device_set_media_busy_R7238750c(FALSE) irlmp_link_discovery_confirm() irlmp_add_discovery_log() hashbin_remove_R1938d18d() dequeue_general() hashbin_remove_this_R557000a7() dequeue_general() hashbin_insert_R0bbf1ddb() enqueue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() dequeue_first() irlmp_discovery_confirm() irlmp_notify_client() nsc_ircc_pio_write() nsc_ircc_pio_write(), warning, FIFO not empty yet! nsc_ircc_pio_write(), fifo_size 6 ; 8 sent of 8 ircomm_tty_open() hashbin_find() ircomm_tty_open(), ircomm%d0, count = 1 ircomm_tty_open(), IrCOMM device ircomm_tty_startup() ircomm_open(), service_type=0x06 ircomm_open_tsap() irlmp_slsap_inuse() irlmp_find_free_slsap(), next free lsap_sel=1b irlmp_next_lsap_state(), LMP LSAP = LSAP_DISCONNECTED hashbin_insert_R0bbf1ddb() enqueue_first() irttp_open_tsap_Ra3e747d1(), stsap_sel=1b hashbin_insert_R0bbf1ddb() enqueue_first() hashbin_insert_R0bbf1ddb() enqueue_first() ircomm_next_state: next state=IRCOMM_IDLE, service type=6 ircomm_tty_attach_cable() ircomm_tty_ias_register() irias_new_object_R5e5f0101() hashbin_insert_R0bbf1ddb() enqueue_first() hashbin_insert_R0bbf1ddb() enqueue_first() hashbin_insert_R0bbf1ddb() enqueue_first() irlmp_register_service_Re6fe6c31(), hints = 0480 hashbin_find() hashbin_insert_R0bbf1ddb() enqueue_first() irlmp_register_client_R17f18bfb() hashbin_find() hashbin_insert_R0bbf1ddb() enqueue_first() ircomm_tty_do_event: state=IRCOMM_TTY_IDLE, event=IRCOMM_TTY_ATTACH_CABLE ircomm_tty_state_idle: state=IRCOMM_TTY_IDLE, event=IRCOMM_TTY_ATTACH_CABLE ircomm_tty_next_state: next state=IRCOMM_TTY_SEARCH, service type=6 irlmp_discovery_confirm() irlmp_notify_client() irlmp_notify_client() discovery->daddr = 0x34e89d79 ircomm_tty_discovery_indication() ircomm_tty_do_event: state=IRCOMM_TTY_SEARCH, event=IRCOMM_TTY_DISCOVERY_INDICATION ircomm_tty_state_search: state=IRCOMM_TTY_SEARCH, event=IRCOMM_TTY_DISCOVERY_INDICATION iriap_open_R23819d7f() iriap_register_lsap() irlmp_slsap_inuse() irlmp_find_free_slsap(), next free lsap_sel=1c irlmp_next_lsap_state(), LMP LSAP = LSAP_DISCONNECTED hashbin_insert_R0bbf1ddb() enqueue_first() hashbin_insert_R0bbf1ddb() enqueue_first() irlmp_connect_request_R506d665b(), slsap_sel=1c, dlsap_sel=00, saddr=a9cc55f3, daddr=34e89d79 hashbin_find() hashbin_remove_R1938d18d() dequeue_general() hashbin_insert_R0bbf1ddb() enqueue_first() irlmp_do_lsap_event(), EVENT = LM_CONNECT_REQUEST, STATE = LSAP_DISCONNECTED irlmp_state_disconnected() irlmp_state_disconnected(), LM_CONNECT_REQUEST irlmp_next_lsap_state(), LMP LSAP = LSAP_SETUP_PEND irlmp_do_lap_event(), EVENT = LM_LAP_CONNECT_REQUEST, STATE = LAP_STANDBY irlmp_state_standby() irlmp_state_standby() LS_CONNECT_REQUEST irlmp_next_lap_state(), LMP LAP = LAP_U_CONNECT irlap_connect_request(), daddr=0x34e89d79 irlap_do_event(), event = CONNECT_REQUEST, state = LAP_NDM irlap_param_baud_rate(), baud rate = 0x1fe irda_insert_integer(), using 2 bytes irda_insert_integer(), pi=0x1, pl=2, pi=510 irda_insert_integer(), pi=0x82, pl=1, pi=1 irda_insert_integer(), pi=0x83, pl=1, pi=63 irda_insert_integer(), pi=0x84, pl=1, pi=127 irda_insert_integer(), pi=0x85, pl=1, pi=255 irda_insert_integer(), pi=0x86, pl=1, pi=7 irda_insert_integer(), pi=0x8, pl=1, pi=7 async_wrap_skb_R6cd9cf2b(), xbofs=12 nsc_ircc_pio_write() nsc_ircc_pio_write(), fifo_size -1 ; 32 sent of 49 next LAP state = LAP_SETUP ircomm_tty_next_state: next state=IRCOMM_TTY_QUERY_PARAMETERS, service type=6 ircomm_tty_block_til_ready() ircomm_tty_block_til_ready(), O_NONBLOCK requested! ircomm_tty_ioctl() ircomm_tty_ioctl() ircomm_tty_set_termios() nsc_ircc_pio_write() nsc_ircc_pio_write(), warning, FIFO not empty yet! nsc_ircc_pio_write(), fifo_size -1 ; 15 sent of 17 nsc_ircc_pio_write() nsc_ircc_pio_write(), warning, FIFO not empty yet! nsc_ircc_pio_write(), fifo_size 12 ; 2 sent of 2 irlap_do_event(), event = RECV_UA_RSP, state = LAP_SETUP irlap_state_setup() irlap_initiate_connection_state() irda_param_extract_Rde51e33e(), pi=[0,1], type=0 Requested BAUD_RATE: 0x00fe Final BAUD_RATE: 0x00fe irda_param_extract_Rde51e33e(), pi=[1,2], type=1 irda_param_extract_Rde51e33e(), pi=[1,3], type=1 irda_param_extract_Rde51e33e(), pi=[1,4], type=1 irda_param_extract_Rde51e33e(), pi=[1,5], type=1 irda_param_extract_Rde51e33e(), pi=[1,6], type=1 irda_param_extract_Rde51e33e(), pi=[0,8], type=1 LINK_DISC: 07 Final LINK_DISC: 07 irlap_adjust_qos_settings() irlap_max_line_capacity(), speed=1152000, max_turn_time=500 irlap_max_line_capacity(), line capacity=57600 bytes Setting BAUD_RATE to 1152000 bps. Setting DATA_SIZE to 256 bytes Setting WINDOW_SIZE to 3 Setting XBOFS to 0 Setting MAX_TURN_TIME to 500 ms. Setting MIN_TURN_TIME to 0 usecs. Setting LINK_DISC to 12 secs. irlap_apply_connection_parameters() irlap_change_speed(), setting speed to 1152000 nsc_ircc_change_speed(), speed=1152000 nsc_ircc_change_speed(), handling baud of 1152000 irlap_max_line_capacity(), speed=1152000, max_turn_time=500 irlap_max_line_capacity(), line capacity=57600 bytes Setting N1 = 6 Setting N2 = 24 nsc_ircc_dma_xmit_complete() next LAP state = LAP_NRM_P irlap_connect_confirm() irlmp_link_connect_confirm() irlmp_do_lap_event(), EVENT = LM_LAP_CONNECT_CONFIRM, STATE = LAP_U_CONNECT irlmp_state_u_connect(), event=LM_LAP_CONNECT_CONFIRM irlmp_next_lap_state(), LMP LAP = LAP_ACTIVE irlmp_do_lsap_event(), EVENT = LM_LAP_CONNECT_CONFIRM, STATE = LSAP_SETUP_PEND irlmp_state_setup_pend() irlmp_send_lcf_pdu() irlap_data_request() irlmp_next_lsap_state(), LMP LSAP = LSAP_SETUP irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=1 irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=2 irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=3 irlmp_discovery_timer_expired() irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=4 irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=5 ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=6 ircomm_tty_watchdog_timer_expired() ircomm_tty_do_event: state=IRCOMM_TTY_QUERY_PARAMETERS, event=IRCOMM_TTY_WD_TIMER_EXPIRED ircomm_tty_state_query_parameters: state=IRCOMM_TTY_QUERY_PARAMETERS, event=IRCOMM_TTY_WD_TIMER_EXPIRED ircomm_tty_next_state: next state=IRCOMM_TTY_SEARCH, service type=6 ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) IrLAP, no activity on link! irlmp_status_indication(), no handler nsc_ircc_dma_xmit_complete() retry count = N1; retry_count=7 ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() ircomm_tty_write(), count=1, hw_stopped=1 ircomm_tty_do_softint() irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=8 irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=9 irlmp_discovery_timer_expired() irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=10 irlmp_watchdog_timer_expired() irlmp_do_lsap_event(), EVENT = LM_WATCHDOG_TIMEOUT, STATE = LSAP_SETUP irlmp_state_setup() irlmp_state_setup() WATCHDOG_TIMEOUT! irlmp_do_lap_event(), EVENT = LM_LAP_DISCONNECT_REQUEST, STATE = LAP_ACTIVE irlmp_state_active() irlmp_next_lsap_state(), LMP LSAP = LSAP_DISCONNECTED irlmp_disconnect_indication(), reason=LM_CONNECT_FAILURE irlmp_disconnect_indication(), slsap_sel=1c, dlsap_sel=00 hashbin_remove_R1938d18d() dequeue_general() hashbin_insert_R0bbf1ddb() enqueue_first() iriap_disconnect_indication(), reason=LM_CONNECT_FAILURE iriap_disconnect_indication(), disconnect as client ircomm_tty_getvalue_confirm() iriap_close_R377c1a93() hashbin_remove_R1938d18d() dequeue_general() __irlmp_close_lsap() hashbin_remove_R1938d18d() dequeue_general() __iriap_close() ircomm_tty_getvalue_confirm(), got NULL value! irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=11 irlap_do_event(), event = FINAL_TIMER_EXPIRED, state = LAP_NRM_P irda_device_is_receiving() nsc_ircc_net_ioctl(), irda0, (cmd=0x89F5) nsc_ircc_dma_xmit_complete() irlap_state_nrm_p: FINAL_TIMER_EXPIRED: retry_count=12 _______________________________________________ Linux-IrDA mailing list - [EMAIL PROTECTED] http://www.pasta.cs.UiT.No/mailman/listinfo/linux-irda
