On Tue, Dec 17, 2013 at 10:36:58AM +0800, micky_ching@xxxxxxxxxxxxxx wrote: > void rtl8411b_init_params(struct rtsx_pcr *pcr) > { > - pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104; > - pcr->num_slots = 2; > - pcr->ops = &rtl8411b_pcr_ops; > - > - pcr->flags = 0; > - pcr->card_drive_sel = RTL8411_CARD_DRIVE_DEFAULT; > - pcr->sd30_drive_sel_1v8 = DRIVER_TYPE_B; > - pcr->sd30_drive_sel_3v3 = DRIVER_TYPE_D; > - pcr->aspm_en = ASPM_L1_EN; > - pcr->tx_initial_phase = SET_CLOCK_PHASE(23, 7, 14); > - pcr->rx_initial_phase = SET_CLOCK_PHASE(4, 3, 10); > + rtl8411_init_params(pcr); > > - pcr->ic_version = rtl8411_get_ic_version(pcr); > + rtl8411_pcr_ops.fetch_vendor_settings = > + rtl8411b_fetch_vendor_settings; > + rtl8411_pcr_ops.extra_init_hw = rtl8411b_extra_init_hw; > This is a bug here. If we have both kinds of devices connected at the same time then the kernel crashes. Really structures which hold function pointers should be const. This code is not as good as the original. regards, dan carpenter _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel