static int __init spi_probe(struct platform_device *pdev) { struct ssc_pio_t *pio_info = (struct ssc_pio_t *)pdev->dev.platform_data; struct spi_master *master; struct spi_stm_gpio *st_bitbang; dgb_print("\n"); master = spi_alloc_master(&pdev->dev, sizeof(struct spi_stm_gpio)); if (!master) return -1; st_bitbang = spi_master_get_devdata(master); if (!st_bitbang) return -1; platform_set_drvdata(pdev, st_bitbang); st_bitbang->bitbang.master = master; st_bitbang->bitbang.master->setup = spi_stmpio_setup; st_bitbang->bitbang.setup_transfer = spi_stmpio_setup_transfer; st_bitbang->bitbang.chipselect = spi_stpio_chipselect; st_bitbang->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_mode0; st_bitbang->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_mode1; st_bitbang->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_mode2; st_bitbang->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_mode3; if (pio_info->chipselect) st_bitbang->bitbang.chipselect = (void (*) (struct spi_device *, int)) (pio_info->chipselect); else st_bitbang->bitbang.chipselect = spi_stpio_chipselect; master->num_chipselect = SPI_NO_CHIPSELECT + 1; master->bus_num = pdev->id; st_bitbang->max_speed_hz = SPI_STMPIO_MAX_SPEED_HZ; pio_info->clk = stpio_request_pin(pio_info->pio[0].pio_port, pio_info->pio[0].pio_pin, "SPI Clock", STPIO_OUT); if (!pio_info->clk) { printk(KERN_ERR NAME " Faild to clk pin allocation PIO%d[%d]\n", pio_info->pio[0].pio_port, pio_info->pio[0].pio_pin); return -1; } pio_info->sdout = stpio_request_pin(pio_info->pio[1].pio_port, pio_info->pio[1].pio_pin, "SPI Data Out", STPIO_OUT); if (!pio_info->sdout) { printk(KERN_ERR NAME " Faild to sda pin allocation PIO%d[%d]\n", pio_info->pio[1].pio_port, pio_info->pio[1].pio_pin); return -1; } pio_info->sdin = stpio_request_pin(pio_info->pio[2].pio_port, pio_info->pio[2].pio_pin, "SPI Data In", STPIO_IN); if (!pio_info->sdin) { printk(KERN_ERR NAME " Faild to sdo pin allocation PIO%d[%d]\n", pio_info->pio[1].pio_port, pio_info->pio[1].pio_pin); return -1; } stpio_set_pin(pio_info->clk, 0); stpio_set_pin(pio_info->sdout, 0); stpio_set_pin(pio_info->sdin, 0); if (spi_bitbang_start(&st_bitbang->bitbang)) { printk(KERN_ERR NAME "The SPI Core refuses the spi_stm_gpio adapter\n"); return -1; } printk(KERN_INFO NAME ": Registered SPI Bus %d: " "SCL [%d,%d], SDO [%d,%d], SDI [%d, %d]\n", master->bus_num, pio_info->pio[0].pio_port, pio_info->pio[0].pio_pin, pio_info->pio[1].pio_port, pio_info->pio[1].pio_pin, pio_info->pio[2].pio_port, pio_info->pio[2].pio_pin); return 0; }
int proc_video_switch_write(struct file *file, const char __user *buf, unsigned long count, void *data) { char *page; char *myString; ssize_t ret = -ENOMEM; unsigned long mlen; printk("%s %ld - ", __FUNCTION__, count); mutex_lock (&(ProcDeviceContext->DvbContext->Lock)); page = (char *)__get_free_page(GFP_KERNEL); if (page) { ret = -EFAULT; if (copy_from_user(page, buf, count)) goto out; myString = (char *) kmalloc(count + 1, GFP_KERNEL); strncpy(myString, page, count); myString[count] = '\0'; mlen=count; if ((count>0)&&(myString[count-1]=='\n')) { myString[count-1] = '\0'; count--; } printk("proc_video_switch_write >> %s\n", myString); if (video_switch_type == 0) { if (fms6403_in2_sel_pin == NULL) fms6403_in2_sel_pin = stpio_request_pin (5, 3, "fms6403_in2_sel_pin", STPIO_OUT); if (fms6403_fsel0_pin == NULL) fms6403_fsel0_pin = stpio_request_pin (4, 6, "fms6403_fsel0_pin", STPIO_OUT); if (fms6403_fsel1_pin == NULL) fms6403_fsel1_pin = stpio_request_pin (3, 5, "fms6403_fsel1_pin", STPIO_OUT); if (strncmp("scart", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,0);//0=rgb 1=yvu printk("!!!!!!!!!!!!! SET PAL !!!!!!!!!!!!!!\n"); video_switch=0; } else if (strncmp("component1080p", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,1);//0=rgb 1=yvu stpio_set_pin(fms6403_fsel0_pin,1);//1080p50 stpio_set_pin(fms6403_fsel1_pin,1); printk("!!!!!!!!!!!!! SET Filter Bypass !!!!!!!!!!!!!!\n"); video_switch=1; } else if (strncmp("component1080i", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,1);//0=rgb 1=yvu stpio_set_pin(fms6403_fsel0_pin,0);//720p/1080i stpio_set_pin(fms6403_fsel1_pin,1); printk("!!!!!!!!!!!!! SET Filter FMS6403 32Mhz !!!!!!!!!!!!!!\n"); video_switch=2; } else if (strncmp("component720p", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,1);//0=rgb 1=yvu stpio_set_pin(fms6403_fsel0_pin,0);//720p/1080i stpio_set_pin(fms6403_fsel1_pin,1); printk("!!!!!!!!!!!!! SET Filter FMS6403 32Mhz !!!!!!!!!!!!!!\n"); video_switch=3; } else if (strncmp("component576p", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,1);//0=rgb 1=yvu stpio_set_pin(fms6403_fsel0_pin,1);//576p stpio_set_pin(fms6403_fsel1_pin,0); printk("!!!!!!!!!!!!! SET Filter FMS6403 15Mhz !!!!!!!!!!!!!!\n"); video_switch=4; } else if (strncmp("component576i", myString, count) == 0) { stpio_set_pin(fms6403_in2_sel_pin,1);//0=rgb 1=yvu stpio_set_pin(fms6403_fsel0_pin,1);//576p stpio_set_pin(fms6403_fsel1_pin,0); printk("!!!!!!!!!!!!! SET Filter FMS6403 15Mhz !!!!!!!!!!!!!!\n"); video_switch=5; } } //switch type if(video_switch_type==1) //bxzb { if (pin02 == NULL) pin02 = stpio_request_pin (0, 2, "pin02", STPIO_OUT); if (pin06 == NULL) pin06 = stpio_request_pin (0, 6, "pin06", STPIO_OUT); if (pin24 == NULL) pin24 = stpio_request_pin (2, 4, "pin23", STPIO_OUT); //0 0 1 - jest rgb //0 0 0 - jest rgb stpio_set_pin (pin02, 0);//pin6 - E stpio_set_pin (pin06, 0); stpio_set_pin (pin24, 1);//1-rgb } /* always return count to avoid endless loop */ //ret = count; ret = mlen; kfree(myString); } out: free_page((unsigned long)page); mutex_unlock (&(ProcDeviceContext->DvbContext->Lock)); return ret; }
static void set_vpp(struct map_info * info, int enable) { stpio_set_pin(vpp_pio, enable); }