|
@@ -1451,10 +1451,26 @@ int pccard_validate_cis(struct pcmcia_socket *s, unsigned int *info)
|
|
done:
|
|
done:
|
|
/* invalidate CIS cache on failure */
|
|
/* invalidate CIS cache on failure */
|
|
if (!dev_ok || !ident_ok || !count) {
|
|
if (!dev_ok || !ident_ok || !count) {
|
|
- mutex_lock(&s->ops_mutex);
|
|
|
|
- destroy_cis_cache(s);
|
|
|
|
- mutex_unlock(&s->ops_mutex);
|
|
|
|
- ret = -EIO;
|
|
|
|
|
|
+#if defined(CONFIG_MTD_PCMCIA_ANONYMOUS)
|
|
|
|
+ /* Set up as an anonymous card. If we don't have anonymous
|
|
|
|
+ memory support then just error the card as there is no
|
|
|
|
+ point trying to second guess.
|
|
|
|
+
|
|
|
|
+ Note: some cards have just a device entry, it may be
|
|
|
|
+ worth extending support to cover these in future */
|
|
|
|
+ if (!dev_ok || !ident_ok) {
|
|
|
|
+ dev_info(&s->dev, "no CIS, assuming an anonymous memory card.\n");
|
|
|
|
+ pcmcia_replace_cis(s, "\xFF", 1);
|
|
|
|
+ count = 1;
|
|
|
|
+ ret = 0;
|
|
|
|
+ } else
|
|
|
|
+#endif
|
|
|
|
+ {
|
|
|
|
+ mutex_lock(&s->ops_mutex);
|
|
|
|
+ destroy_cis_cache(s);
|
|
|
|
+ mutex_unlock(&s->ops_mutex);
|
|
|
|
+ ret = -EIO;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (info)
|
|
if (info)
|