tracks->xa = 0;
        tracks->error = 0;
        cd_dbg(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n");
+
+       if (!CDROM_CAN(CDC_PLAY_AUDIO)) {
+               tracks->error = CDS_NO_INFO;
+               return;
+       }
+
        /* Grab the TOC header so we can see how many tracks there are */
        ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header);
        if (ret) {
                ret = open_for_data(cdi);
                if (ret)
                        goto err;
-               cdrom_mmc3_profile(cdi);
+               if (CDROM_CAN(CDC_GENERIC_PACKET))
+                       cdrom_mmc3_profile(cdi);
                if (mode & FMODE_WRITE) {
                        ret = -EROFS;
                        if (cdrom_open_write(cdi))
           it doesn't give enough information or fails. then we return
           the toc contents. */
 use_toc:
+       if (!CDROM_CAN(CDC_PLAY_AUDIO))
+               return -ENOSYS;
+
        toc.cdte_format = CDROM_MSF;
        toc.cdte_track = CDROM_LEADOUT;
        if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc)))