drivers/mtd/nand/raw/ams-delta.c
Source file repositories/reference/linux-study-clean/drivers/mtd/nand/raw/ams-delta.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/mtd/nand/raw/ams-delta.c- Extension
.c- Size
- 11460 bytes
- Lines
- 448
- Domain
- Driver Families
- Bucket
- drivers/mtd
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/slab.hlinux/module.hlinux/delay.hlinux/gpio/consumer.hlinux/mtd/mtd.hlinux/mtd/nand-gpio.hlinux/mtd/rawnand.hlinux/mtd/partitions.hlinux/of.hlinux/platform_device.hlinux/sizes.h
Detected Declarations
struct gpio_nandfunction gpio_nand_write_commitfunction gpio_nand_io_writefunction gpio_nand_dir_outputfunction gpio_nand_io_readfunction gpio_nand_dir_inputfunction gpio_nand_write_buffunction gpio_nand_read_buffunction gpio_nand_ctrl_csfunction gpio_nand_exec_opfunction gpio_nand_setup_interfacefunction gpio_nand_attach_chipfunction gpio_nand_probefunction gpio_nand_remove
Annotated Snippet
struct gpio_nand {
struct nand_controller base;
struct nand_chip nand_chip;
struct gpio_desc *gpiod_rdy;
struct gpio_desc *gpiod_nce;
struct gpio_desc *gpiod_nre;
struct gpio_desc *gpiod_nwp;
struct gpio_desc *gpiod_nwe;
struct gpio_desc *gpiod_ale;
struct gpio_desc *gpiod_cle;
struct gpio_descs *data_gpiods;
bool data_in;
unsigned int tRP;
unsigned int tWP;
u8 (*io_read)(struct gpio_nand *this);
void (*io_write)(struct gpio_nand *this, u8 byte);
};
static void gpio_nand_write_commit(struct gpio_nand *priv)
{
gpiod_set_value(priv->gpiod_nwe, 1);
ndelay(priv->tWP);
gpiod_set_value(priv->gpiod_nwe, 0);
}
static void gpio_nand_io_write(struct gpio_nand *priv, u8 byte)
{
struct gpio_descs *data_gpiods = priv->data_gpiods;
DECLARE_BITMAP(values, BITS_PER_TYPE(byte)) = { byte, };
gpiod_set_raw_array_value(data_gpiods->ndescs, data_gpiods->desc,
data_gpiods->info, values);
gpio_nand_write_commit(priv);
}
static void gpio_nand_dir_output(struct gpio_nand *priv, u8 byte)
{
struct gpio_descs *data_gpiods = priv->data_gpiods;
DECLARE_BITMAP(values, BITS_PER_TYPE(byte)) = { byte, };
int i;
for (i = 0; i < data_gpiods->ndescs; i++)
gpiod_direction_output_raw(data_gpiods->desc[i],
test_bit(i, values));
gpio_nand_write_commit(priv);
priv->data_in = false;
}
static u8 gpio_nand_io_read(struct gpio_nand *priv)
{
u8 res;
struct gpio_descs *data_gpiods = priv->data_gpiods;
DECLARE_BITMAP(values, BITS_PER_TYPE(res)) = { 0, };
gpiod_set_value(priv->gpiod_nre, 1);
ndelay(priv->tRP);
gpiod_get_raw_array_value(data_gpiods->ndescs, data_gpiods->desc,
data_gpiods->info, values);
gpiod_set_value(priv->gpiod_nre, 0);
res = values[0];
return res;
}
static void gpio_nand_dir_input(struct gpio_nand *priv)
{
struct gpio_descs *data_gpiods = priv->data_gpiods;
int i;
for (i = 0; i < data_gpiods->ndescs; i++)
gpiod_direction_input(data_gpiods->desc[i]);
priv->data_in = true;
}
static void gpio_nand_write_buf(struct gpio_nand *priv, const u8 *buf, int len)
{
int i = 0;
if (len > 0 && priv->data_in)
gpio_nand_dir_output(priv, buf[i++]);
while (i < len)
priv->io_write(priv, buf[i++]);
}
Annotation
- Immediate include surface: `linux/slab.h`, `linux/module.h`, `linux/delay.h`, `linux/gpio/consumer.h`, `linux/mtd/mtd.h`, `linux/mtd/nand-gpio.h`, `linux/mtd/rawnand.h`, `linux/mtd/partitions.h`.
- Detected declarations: `struct gpio_nand`, `function gpio_nand_write_commit`, `function gpio_nand_io_write`, `function gpio_nand_dir_output`, `function gpio_nand_io_read`, `function gpio_nand_dir_input`, `function gpio_nand_write_buf`, `function gpio_nand_read_buf`, `function gpio_nand_ctrl_cs`, `function gpio_nand_exec_op`.
- Atlas domain: Driver Families / drivers/mtd.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.